Вычислить произведение отрицательных элементов массива - Pascal ABC (13032)
Формулировка задачи:
Помогите, пожалуйста!!!
В одномерном массиве, который состоит из n действительных элементов, вычислить:
а) произведение отрицательных элементов массива;
б) сумму положительных элементов массива, расположенных до максимального элемента;
в) изменить порядок следования элементов в массиве на обратный.
Нужно написать программу с использованием подпрограмм (функций и процедур).
Очень прошу, помогите!!
Решение задачи: «Вычислить произведение отрицательных элементов массива»
textual
Листинг программы
type
TLine = Array[Byte] Of Real;
procedure PrintArray(const ar: TLine; const n: Byte);
var
i: Byte;
begin
WriteLn;
for i := 0 to n - 1 do
Write(ar[i]:7:2);
WriteLn;
end;
procedure InitArray(var ar: TLine; var n: Byte);
var
i: Byte;
begin
repeat
Write('Input n: '); ReadLn(n);
until (n > 0);
Randomize();
for i := 0 to n - 1 do
ar[i] := Random * 198 - 99;
PrintArray(ar, n);
end;
function ZadA(const ar: TLine; const n: Byte): Double;
var
Result: Double; //удалить строку при ошибке повторного объявления идентификатора
i: Byte;
begin
Result := 1;
for i := 0 to n - 1 do
if (ar[i] < 0)
then
Result := Result * ar[i];
ZadA := Result;
end;
function ZadB(const ar: TLine; const n: Byte): Double;
var
Result: Double; //удалить строку при ошибке повторного объявления идентификатора
i, iMax: Byte;
begin
iMax := 0;
for i := 1 to n - 1 do
if (ar[i] > ar[iMax])
then
iMax := i;
Result := 0; i := 0;
while (i < iMax) do
begin
Result := Result + ar[i];
Inc(i);
end;
ZadB := Result;
end;
procedure ZadC(var ar: TLine; const n: Byte);
procedure Swap(var x, y: Real);
var
z: Real;
begin
z := x;
x := y;
y := z;
end;
var
i: Byte;
begin
for i := 0 to (n - 1) div 2 do
Swap(ar[i], ar[n - i - 1]);
end;
var
ar: TLine;
n: Byte;
begin
InitArray(ar, n);
WriteLn('A=', ZadA(ar, n):0:2);
WriteLn('B=', ZadB(ar, n):0:2);
ZadC(ar, n); PrintArray(ar, n);
end.
Объяснение кода листинга программы
- В функции
ZadAиспользуется циклfor, который выполняетсяn-1раз, гдеn- введенное с клавиатуры число. Внутри цикла проверяется условиеif (ar[i] < 0), если оно истинно, то значение переменнойResultумножается на значение элемента массиваar[i]. Это происходит для каждого элемента массива от 0 доn-1. - Функция
ZadBтакже использует циклfor, который выполняетсяn-1раз. Внутри цикла проверяется условиеif (ar[i] > ar[iMax]), если оно истинно, то значение переменнойiMaxустанавливается равным значению переменнойi. Затем значение переменнойResultинициализируется как 0, а переменнаяiустанавливается равной 0. Затем начинается вложенный циклwhile (i < iMax), в котором значение переменнойResultувеличивается на текущее значение элемента массиваar[i], а затем переменнаяiинкрементируется. После окончания вложенного цикла значение переменнойResultприсваивается переменнойz, значение переменнойxустанавливается равным значению переменнойy, а значение переменнойyустанавливается равным значению переменнойz. - В функции
ZadCсначала вызывается функцияSwap, которая меняет местами два элемента массива. Затем вызывается функцияZadCс аргументамиarиn. После этого выводится сообщение с результатами вычислений функцийZadAиZadB. - В функции
PrintArrayиспользуется циклfor, который выполняетсяnраз. Внутри цикла выводится значение каждого элемента массиваar[i]с помощью функцииWrite. - В функции
InitArrayсчитывается числоnс клавиатуры, пока не будет введено положительное число. Затем вызывается функцияRandomize, чтобы инициализировать генератор случайных чисел. Затем в циклеforвычисляется произведение всех элементов массиваarс помощью функцииZadA. Наконец, выводится результат вычислений с помощью функцииWriteLn.