Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Turbo Pascal] Задача на массив 
V
    Опции темы
METTER
Дата 9.9.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

Репутация: нет
Всего: нет



Ребят, выручите плиз.. нужно срочно для получения зачёта ))

Дан массив размера N. осуществить циклический сдвиг массива вправо на одну позицию (при этом А1 перейдёт в А2, А2 в А3, а Аn в А1).

Заранее спасибо!
PM MAIL   Вверх
mr.Anderson
Дата 9.9.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



METTER, вопрос на засыпку: а что окажется тогда в A[1] ? smile Этого не сказано в задаче, так что ж там должно оказаться? 0? -1? Последний элемент массива? Так что же? Это я не для спортинтереса спрашиваю, это ж как-то реализовывать надо. А вообще, делаем, например, так:
Код

program ArrayShr;
var
 i : Integer;
begin
 //допустим, что A - твой массив, и он чем-то заполнен. Тогда:
 for i:=1 to Length(A)-1 do
  A[i+1] := A[i];

 A[i] := ; //чему-то там равно, подставишь нужное
end.



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
METTER
Дата 9.9.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

Репутация: нет
Всего: нет



mr.Anderson,  в А1 перейдёт Аn... т.е. последний элемент
PM MAIL   Вверх
mr.Anderson
Дата 9.9.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



METTER, ну, тогда вот так:
Код

program ArrayShr;
var
 i : Integer;
 m : Integer;
begin
 m := A[Length(A)];
 
 //допустим, что A - твой массив, и он чем-то заполнен. Тогда:
 for i:=1 to Length(A)-1 do
  A[i+1] := A[i];

 A[1] := m;
end.



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
METTER
Дата 9.9.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

Репутация: нет
Всего: нет



mr.Anderson,  прошу прощения, что сразу не указал - здесь А1 - это образно... т.е. должно быть так - массив создаётся рандомом, выводится, а потом происходит сдвиг.. и вновь выводится...

Это сообщение отредактировал(а) METTER - 9.9.2008, 21:14
PM MAIL   Вверх
METTER
Дата 9.9.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

Репутация: нет
Всего: нет



нашёл вот такой пример решения

var a:array[1..10] of integer;
    x:integer;
    i:integer;
begin
     writeln('введите 5 элементов массива');
     for i:=1 to 5 do readln( a[i] );
     x:=a[5];
     for i:=5 to 2 do begin
       a[i]:=a[i-1];
     end;
     a[1]:=x;
     writeln('после сдвига:');
     for i:=1 to 5 do writeln( a[i] );
end.

но в нём происходит замена только первого элемента.. помогите пожалуйста подправить, чтобы заменялись все элементы
PM MAIL   Вверх
THandle
Дата 10.9.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Может я не правильно понял, но попробуй вот так:

Код

program Project2;

const
  N = 10;

var
  A: Array [0..N] Of Integer;
  i: Integer;
  Last: Integer;

begin
  WriteLn('Enter array: ');
  for i := 0 to N do
    ReadLn(A[I]);
  for i := 0 to N do
    WriteLn('A[', i, '] = ', A[i]);
  Last := A[N];
  for i := N downto 1 do
    A[i] := A[i - 1];
  A[0] := Last;
  for i := 0 to N do
    WriteLn('A[', i, '] = ', A[i]);
  ReadLn;
end.

PM   Вверх
mr.Anderson
Дата 10.9.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Не въехал, чем мое решение не устроило... Добавить только заполнение рандомное перед циклом обхода и все...


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
THandle
Дата 10.9.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



mr.Anderson, чисто для тебя. Попробуй этот вот вариант, твой.
Код


program Project1;

{$APPTYPE CONSOLE}

const
  N = 10;
var
  A: Array [0..N] Of Integer;
  i: Integer;
  Last: Integer;
begin
  WriteLn('Enter array: ');
  for i := 0 to N do
    ReadLn(A[I]);
  for i := 0 to N do
    WriteLn('A[', i, '] = ', A[i]);
  Last := A[N];;
  for i := 0 to Length(A) - 1 do
    A[i+1] := A[i];
  A[0] := Last;
  for i := 0 to N do
    WriteLn('A[', i, '] = ', A[i]);
  ReadLn;
end.


работает?
PM   Вверх
mr.Anderson
Дата 10.9.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Усе, молчу, действительно не работает. Ну что вы хотите, я уже спал, когда это писал... smile

Подправил.
Код

var
  a : Array [1..10] of Integer;
  i : Integer;
  m : Integer;
  
begin
  for i:=1 to 10 do
  begin
    a[i] := Random(20);
    write(a[i], ' ');
  end;

  m := a[Length(a)];
  
  writeln;

  for i:=Length(a) downto 1 do
    a[i] := a[i-1];

  a[1] := m;
    
  for i:=1 to Length(a) do
    write(a[i], ' ');

  readln;
end.



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
METTER
Дата 10.9.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

Репутация: нет
Всего: нет



THandle,  огромное спасибо! Именно то что нужно! ))) Только вот если N=5 поставить, то приходится вводить 6 раз, а не 5.. можно ли это подправить? Ну, если не особо трудно... smile 

Но вообще, mr.Anderson и THandle, большое спасибо за оказанную помощь!  smile  smile 
PM MAIL   Вверх
THandle
Дата 11.9.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



METTER, у меня просто массив начинается с 0 до N, то есть количество элементов = N + 1.

Если надо чтобы было N, то можно либо сделать массив [0..N-1] либо [1..N]. Оба варианта даю smile

1 вариант:

Код

program Project2;
const
  N = 10;
var
  A: Array [0..N - 1] Of Integer;
  i: Integer;
  Last: Integer;
begin
  WriteLn('Enter array: ');
  for i := 0 to N - 1 do
    ReadLn(A[I]);
  for i := 0 to N - 1 do
    WriteLn('A[', i, '] = ', A[i]);
  Last := A[N - 1];
  for i := N - 1 downto 1 do
    A[i] := A[i - 1];
  A[0] := Last;
  for i := 0 to N - 1 do
    WriteLn('A[', i, '] = ', A[i]);
  ReadLn;
end.



2 вариант:


Код

program Project2;

const
  N = 10;
var
  A: Array [1..N] Of Integer;
  i: Integer;
  Last: Integer;
begin
  WriteLn('Enter array: ');
  for i := 1 to N do
    ReadLn(A[I]);
  for i := 1 to N do
    WriteLn('A[', i, '] = ', A[i]);
  Last := A[N];
  for i := N downto 2 do
    A[i] := A[i - 1];
  A[1] := Last;
  for i := 1 to N do
    WriteLn('A[', i, '] = ', A[i]);
  ReadLn;
end.



Удачи!!! Если вопрос решен, то поставь теме галочку "Пометить как решенный" smile
PM   Вверх
METTER
Дата 11.9.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

Репутация: нет
Всего: нет



THandle,  огромное спасибо!  smile  smile 
PM MAIL   Вверх
THandle
Дата 11.9.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Цитата(METTER @  11.9.2008,  18:54 Найти цитируемый пост)
THandle,  огромное спасибо! 


Не за что smile Заходите еще smile Только пожалуйста, ставьте темы галочки smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.