Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Turbo Pascal] Задача на массив


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

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

Заранее спасибо!

Автор: mr.Anderson 9.9.2008, 20:47
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.

Автор: METTER 9.9.2008, 20:54
mr.Anderson,  в А1 перейдёт Аn... т.е. последний элемент

Автор: mr.Anderson 9.9.2008, 21:05
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.

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

Автор: METTER 9.9.2008, 21:49
нашёл вот такой пример решения

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.

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

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

Код

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.

Автор: mr.Anderson 10.9.2008, 13:45
Не въехал, чем мое решение не устроило... Добавить только заполнение рандомное перед циклом обхода и все...

Автор: THandle 10.9.2008, 14:12
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.


работает?

Автор: mr.Anderson 10.9.2008, 14:24
Усе, молчу, действительно не работает. Ну что вы хотите, я уже спал, когда это писал... 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.

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

Но вообще, mr.Anderson и THandle, большое спасибо за оказанную помощь!  smile  smile 

Автор: THandle 11.9.2008, 13:21
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

Автор: METTER 11.9.2008, 17:54
THandle,  огромное спасибо!  smile  smile 

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


Не за что smile Заходите еще smile Только пожалуйста, ставьте темы галочки smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)