Получить сумму всех элементов, следующих за первым заданным - Pascal
Формулировка задачи:
Даны натуральное число n и целые числа q a1...an где n<=1000.Если в последовательности а1...аn есть хотя бы один элемент, равный q то получить сумму всех элементов, следующих за первым таким элементом, в противном случае ответом должно служить количество отрицательных элементов.Кроме того, сформировать последовательность b1...bn из отсортированных в порядке убывания элементов исходной последовательности а1...аn.
Решение задачи: «Получить сумму всех элементов, следующих за первым заданным»
textual
Листинг программы
var
n, q, i, j, sum, cnt, flg, tmp: integer;
a, b: array[1..1000] of integer;
begin
flg := 0;
cnt := 0;
write('Введите n: '); read(n);
write('Введите q: '); read(q);
write('Введите массив a: ');
for i := 1 to n do begin
read(a[i]);
b[i] := a[i];
sum := sum + a[i] * flg;
if a[i] = q then flg := 1;
if a[i] < 0 then inc(cnt);
end;
writeln('Ответ: ', cnt * (1 - flg) + sum * flg);
for i := 1 to n - 1 do
for j := i + 1 to n do
if b[i] < b[j] then begin
tmp := b[i];
b[i] := b[j];
b[j] := tmp;
end;
write('Массив b: ');
for i := 1 to n do write(b[i], ' ');
end.
Объяснение кода листинга программы
- Объявление переменных:
n, q, i, j, sum, cnt, flg, tmp- целочисленные переменные для хранения значений.a, b- массивы целых чисел с размерностью 1000.
- Инициализация переменных:
flg := 0- инициализация переменнойflgзначением 0.cnt := 0- инициализация переменнойcntзначением 0.
- Ввод значений:
write('Введите n: '); read(n);- пользователь вводит значение переменнойn.write('Введите q: '); read(q);- пользователь вводит значение переменнойq.write('Введите массив a: ');- выводится приглашение для ввода массиваa.- Цикл ввода массива
a:read(a[i]);- вводится элемент массиваaс индексомi.b[i] := a[i];- элементb[i]принимает значение элементаa[i].sum := sum + a[i] * flg;- вычисление суммы элементов массиваa.if a[i] = q then flg := 1;- если текущий элемент равенq, устанавливается флагflgв 1.if a[i] < 0 then inc(cnt);- если текущий элемент отрицателен, увеличивается счетчикcnt.
- Вывод результатов:
writeln('Ответ: ', cnt * (1 - flg) + sum * flg);- выводится результат вычислений.
- Сортировка массива:
- Цикл для сортировки массива
bв порядке убывания:for i := 1 to n - 1 do- цикл по элементам массиваb.for j := i + 1 to n do- вложенный цикл.if b[i] < b[j] then begin- если текущий элементb[i]меньше элементаb[j], то начинается блок сортировки.- Обмен значений элементов
b[i]иb[j]:tmp := b[i]; b[i] := b[j]; b[j] := tmp;.
- Цикл для сортировки массива
- Вывод отсортированного массива
b:write('Массив b: ');- выводится приглашение для вывода массиваb.- Цикл вывода массива
b:for i := 1 to n do write(b[i], ' ');- каждый элемент массиваbвыводится на экран.
- Конец программы.
Программа сначала запрашивает у пользователя значения
nиq, затем заполняет массивa. Далее производятся вычисления на основе введенного массива, выводится результат, затем осуществляется сортировка массиваbи вывод отсортированного массива.