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

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

Дан исходный массив , состоящий из 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.

Как вы заметили, код представлен как для целых чисел, так и для дробных. На этом все, теперь вы знаете как можно легко перевернуть массив в паскале.
Понравилась новость? Добавь в закладки!
Хочешь получать свежие новости? Подпишись на обновления с сайта!
Рекомендуем посмотреть:
#1 | написал: Захар | 11 декабря 2011 06:33 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0

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

 

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.


#2 | написал: Mr.Cheater | 11 декабря 2011 16:07 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68

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


#3 | написал: ][omak | 20 декабря 2011 18:10 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
TempB := b[n];
for k:=n-1 downto 1 do
b[k+1] := b[k];
b[1] := TempB;
{--- сдвиг выполнен ----}

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

#4 | написал: Mr.Cheater | 26 декабря 2011 21:24 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68

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


#5 | написал: nsmotion | 1 октября 2013 21:12 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
а можно перевести этот код на С++ пожалусто!

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

#include <iostream.h>
#include <iomanip.h>
#include <math.h>

это сойдет?

Добавление комментария

Ваше Имя:
Ваш E-Mail:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Вставка исходного кода Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера

Введите два слова, показанных на изображении: