Перевернуть массив

Перевернуть массив

Дан исходный массив, состоящий из n элементов. Необходимо сначала ввести элементы массива , а затем перевернуть массив и вывести результат на экран.

Разбираемся. Что вообще значит перевернуть массив? Это значит, что первый элемент массива надо поменять местами с последним, второй с предпоследним и т.д. Рассмотрим 2 случая: массив имеет четное количество элементов и массив имеет нечетное количество элементов. В первом случае все просто: имея массив от 1 до n последовательно меняем 1 с n , 2 с n-1, 3 с -3 и т.д. элементы массива. В результате будет выполнено n/2 шагов цикла. Во втором случае все также, но появляется ситуация, когда элемент нечетного массива, находящийся посередине меняется сам с собой (всего происходит n/2+1 шагов цикла). Однако нам нужна ситуация, когда в обоих случаях будет сделано n/2 шагов. Можно сделать это, использовав условный оператор, но можно поступить проще и воспользоватся оператором div.

p := n div 2;

Обратите внимание на эту строчку (p — шаги цикла ). Если n равен 4, то будет сделано 2 шага цикла, если же n равен 5, то шагов будет опять 2. То, что и требовалось. А теперь весь код программы

const
n = 5;

var
m, p: integer;
s: array [1..n] of real;
k: real;

begin
writeln(‘Введите последовательно через пробел ‘, n, ‘ элементов массива’);
for m := 1 to n do
read(s[m]);

p := n div 2;
writeln(p);
for m := 1 to p do
begin
k := s[m];
s[m] := s[n + 1 — m];
s[n + 1 — m] := k;
end;
writeln(‘Перевернутый массив’);
for m := 1 to n do
write(s[m]);

end.

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

5 комментариев

  • Захар

    Ответить 11.12.2011 02:00

    а я бы от так сделал)

    uses crt;
    const n = 5;
    var
    m, p: integer;
    s,s2: array [1..n] of real;
    k: real;

    begin
    clrscr;
    writeln(‘Vvedite posledovatelno cherez probel ‘, n, ‘ elementov massiva’);
    for m := 1 to n do
    read(s[m]);
    writeln(‘Perevernutyi massiv’);
    for m := n downto 1 do
    begin
    s2[abs(m-n-1)]:=s[m];
    write(s2[abs(m-n-1)]:2:0);
    end;
    readkey;
    end.

    • Mr.Cheater

      Ответить 11.12.2011 20:01

      Захар,
      Признаюсь вначале я думал сделать так же))
      Просто потом в голову пришла мысль проверить другие варианты.
      Так то мой код ничем не отличается ,кроме того,что делается меньше шагов цикла )

  • ][omak

    Ответить 20.12.2011 02:03

    TempB := b[n];
    for k:=n-1 downto 1 do
    b[k+1] := b[k];
    b[1] := TempB;
    {— сдвиг выполнен —-}

    а если так??? winked

    • Mr.Cheater

      Ответить 26.12.2011 12:03

      ][omak,
      Можно и так
      Просто, как я уже сказал, мой вариант ориаентирован на меньшее колличество шагов цикла

  • nsmotion

    Ответить 01.10.2013 14:04

    а можно перевести этот код на С++ пожалусто!

    и какую библиотеку при этом использовать

    #include
    #include
    #include

    это сойдет?

Оставить комментарий