Дан исходный массив, состоящий из 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.
Как вы заметили, код представлен как для целых чисел, так и для дробных. На этом все, теперь вы знаете как можно легко перевернуть массив в паскале.
а я бы от так сделал)
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.
Захар,
Признаюсь вначале я думал сделать так же))
Просто потом в голову пришла мысль проверить другие варианты.
Так то мой код ничем не отличается ,кроме того,что делается меньше шагов цикла )
TempB := b[n];
for k:=n-1 downto 1 do
b[k+1] := b[k];
b[1] := TempB;
{— сдвиг выполнен —-}
а если так??? winked
][omak,
Можно и так
Просто, как я уже сказал, мой вариант ориаентирован на меньшее колличество шагов цикла
а можно перевести этот код на С++ пожалусто!
и какую библиотеку при этом использовать
#include
#include
#include
это сойдет?