Вычислить среднегеометрическое значение нечетных по номеру элементов первой половины массива - Pascal
Формулировка задачи:
Дан одномерный массив из 39 элементов.
1.. Вычислить среднегеометрическое значение нечетных по номеру элементов первой половины массива.
2.. Упорядочить положительные элементы массива по возрастанию.
Решение задачи: «Вычислить среднегеометрическое значение нечетных по номеру элементов первой половины массива»
textual
Листинг программы
{$MODE TP}
const
nMax = 39;
type
TSize = 0..nMax - 1;
var
ar: Array[TSize] Of ShortInt;
i, j: TSize;
mult: Integer;
temp: ShortInt;
begin
Randomize(); mult := 1;
Write('Original array:');
for i := Low(TSize) to High(TSize) do
begin
ar[i] := Random(199) - 99;
if (Not Odd(i))
then
mult := mult * ar[i];
Write(ar[i]:4);
end;
WriteLn; Write('Geometric mean: ');
if (mult > 0)
then
WriteLn(Exp(Ln(mult) / ((nMax + 1) div 2)):0:4)
else
if (mult < 0)
then
WriteLn(-Exp(Ln(Abs(mult)) / ((nMax + 1) div 2)):0:4) //хотя математически неверно сие
else
WriteLn(0);
for i := Low(TSize) to High(TSize) - 1 do
for j := i + 1 to High(TSize) do
if ((ar[i] > 0) And (ar[j] > 0) And (ar[i] > ar[j]))
then
begin
temp := ar[i];
ar[i] := ar[j];
ar[j] := temp;
end;
Write('Sorted array:');
for i := Low(TSize) to High(TSize) do
Write(ar[i]:4);
end.
Объяснение кода листинга программы
- Объявляется константа
nMaxсо значением 39. - Объявляется тип
TSizeкак диапазон от 0 доnMax - 1. - Объявляются переменные:
arкак массив типаTSizeэлементов типаShortInt,iиjкак переменные типаTSize,multкак переменная типаInteger,tempкак переменная типаShortInt.
- Инициализируется генератор случайных чисел.
- Выводится сообщение
Original array:. - В цикле от 0 до
nMax - 1инициализируются элементы массива случайными значениями от -99 до 99. Если индекс элемента четный, то переменнаяmultумножается на значение этого элемента, иначе элемент выводится на экран. - Выводится сообщение
Geometric mean:. - Если переменная
multбольше 0, то вычисляется и выводится среднегеометрическое значение нечетных элементов первой половины массива через функцииExpиLn. - Если переменная
multменьше 0, то сначала берется модуль отmult, вычисляется и выводится среднегеометрическое значение нечетных элементов первой половины массива, причем с отрицательным знаком. - В случае, если
multравно 0, просто выводится 0. - Сортируется массив методом выбора по возрастанию для положительных чисел.
- Выводится сообщение
Sorted array:. - В цикле выводятся отсортированные элементы массива.