Ребята, шарящие в паскале, пожалуйста, помогите решить задачу. Задан одномерный массив,...

0 голосов
51 просмотров

Ребята, шарящие в паскале, пожалуйста, помогите решить задачу. Задан одномерный массив, заполненный случайными числами: 1)Определить среднее геометрическое модулей минимального и максимального значений. 2)Написать подпрограмму, которая определяет индекс минимального или максимального значения. 3) Решить подзадачу 1 на основе подзадачи 2.


Информатика (317 баллов) | 51 просмотров
Дан 1 ответ
0 голосов

1)

var

 ar: array of integer;

 n, min, max: integer;

begin

 write('Введите размер массива:');

 read(n);

 setlength(ar, n);

 if (n > 0) then  

 begin

   ar[0] := random(-10, 10);

   min := ar[0];

   max := ar[0];

   write(ar[0]:4);

 end;

 for var i := 1 to n - 1 do

 begin

   ar[i] := random(-10, 10);

   if (ar[i] < min) then min := ar[i]

   else if (ar[i] > max) then max := ar[i];

   write(ar[i]:4);

 end;

 writeln(#13#10 + 'Среднее геометрическое модулей минимального и максимального значений = ',  

         sqrt(abs(max) * abs(min)):5:5);

end.

2)

function minOrMax(ar: array of integer; size: integer; findMin: boolean): integer;

var

 index: integer;

begin

 index := 0;

 for var i := 1 to size - 1 do

   if (findMin) and (ar[i] < ar[index]) then index := i

   else if (not findMin) and (ar[i] > ar[index]) then index := i;

 result := index;

end;

3)

function minOrMax(ar: array of integer; size: integer; findMin: boolean): integer;

var

 index: integer;

begin

 index := 0;

 for var i := 1 to size - 1 do

   if (findMin) and (ar[i] < ar[index]) then index := i

   else if (not findMin) and (ar[i] > ar[index]) then index := i;

 result := index;

end;

var

 ar: array of integer;

 n: integer;

begin

 write('Введите размер массива:');

 read(n);

 setlength(ar, n);

 if (n > 0) then  

 begin

   ar[0] := random(-10, 10);

   write(ar[0]:4);

 end;

 for var i := 1 to n - 1 do

 begin

   ar[i] := random(-10, 10);

   write(ar[i]:4);

 end;

 writeln(#13#10 + 'Среднее геометрическое модулей минимального и максимального значений = ',  

         sqrt(abs(ar[minOrMax(ar, n, true)]) * abs(ar[minOrMax(ar, n, false)])):5:5);

end.

(3.7k баллов)
0

Мне вот, что еще непонятно: sqrt(abs(ar[minOrMax(ar, n, true)]) * abs(ar[minOrMax(ar, n, false)])) Что тут вообще происходит и как идет обращение к функции, я про true и false. Можешь, пожалуйста, еще раз объяснить. И точно также с процедурой:minOrMax(ar, n, true);minOrMax(ar, n, false);#ятупой

0

Заранее спасибо, что бы я делал без твоей помощи

0

1)Result хранит результат вычисления функции, после выполнения функции эта переменная недоступна.

0

2) not - логическое отрицание если findMin = true => not findMin = false (условие с поиском максимума не сработает)

0

3)sqrt - корень; abs - модуль числа; sqrt(abs(ar[minOrMax(ar, n, true)]) - корень из модуля минимального числа (происходит вызов функции minOrMax с параметрами ar - массив в котором идет поиск минимума n - размер массива(кол-во элементов), в переменную findMin передается истинна => minOrMax(ar, n, true) вернет индекс минимального элемента массива ar, ar[minOrMax(ar, n, true)] - минимальны элемент массива.

0

4)Процедура не возвращает значений, а вместо этого использует глобальные переменные imin и imax при вызове процедуры индекс текущего минимума(максимума) записывается в переменную imin (imax) (в функции используется временная локальная переменная index, которая вне функции недоступна). Поэтому определение переменных находится над функцией (если var ar: array of integer;

0

n, imin, imax: integer; перенести под функцию возникнет ошибка. В итоге при вызове процедуры minOrMax(ar, n, true); переменной imin будет присвоен минимальный элемент массива, а при minOrMax(ar, n, false); - максимальный.

0

Я так ничего и не понял. Получается то, что я описал выше, неверно, да?

0

Верно

0

А все абсолютно верно? Или нужно внести какие-то корректировки?)