дан одномерный массив целых чисел размерностью до 20 элементов. Необходимо упорядочить элементы исходного массива по возрастанию, определить сумму элементов с четными индексами и сумму элементов с нечетными индексами. Вывести на экран исходный массив и результат работы программы.
‼️ПАСКАЛЬ‼️
я вас умоляю, помогите
Ответы
Ответ:
var
a:array [1..20] of integer;
i,sort,t, sumChet, sumNechet:integer;
begin
for i:=1 to 20 do
begin
writeln('Введите число. (осталось ввести ',21-i, ')');
readln(a[i]);
end;
writeln('Исходный массив:', a);
sort:=1;
sumChet:=0;
sumNechet:=0;
while sort<>0 do
begin
sort:=0;
for i:=1 to 19 do
begin
if a[i]>a[i+1] then
begin
t:=a[i];
a[i]:=a[i+1];
a[i+1]:=t;
sort+=1;
end;
end;
end;
for i:=1 to 20 do
begin
if i mod 2=0 then
sumchet+=a[i]
else sumNechet+=a[i];
end;
writeln('Отсортированный массив: ', a);
writeln('Сумма нечётных элементов изменённого массива равна ', sumNechet,', а сумма чётных ',sumChet);
end.
Объяснение:
Сначала пользователь вводит 20 значений, после чего достаточно хитрым способом мы сортируем полученные данные:
Переменная sort отслеживает, были ли у нас хоть какие то изменения при проходе цикла и если да, то она увеличивается. В начале цикла while мы проверяем, менялась ли переменная sort и если да, то запускаем цикл по новой. В цикле мы проверяем на то, стоит ли справа от нашего элемента элемент меньше и если да, то меняем их местами. Как только мы проверили все элементы и наша переменная sort не изменилась, то цикл заканчивается и мы начинаем подсчёт суммы.
Чётность проверяется за счёт операции mod: она высчитывает остаток от деления, т.е. строка if i mod 2=0 проверяет, будет ли остаток от деления значения переменной i на 2 равен 0 и если да, то значит перед нами чётный элемент, который мы прибавляем к переменной суммы sumChet. Если нет, то перед нами нечётный элемент и отправляется он к сумме sumNechet. В конце оформляем вывод