237.44K
Category: programmingprogramming

Максимумы в массивах. Урок 2

1.

МАКСИМУМЫ В МАССИВАХ
Урок 2
Учитель: Н.В. Фоменко

2.

ЗАДАЧИ ПОИСКА ЭКСТРЕМУМА С
УСЛОВИЕМ
Заранее известно, что числа, удовлетворяющие
заданному условию, в массиве точно есть и
значения элементов массива лежат в
некотором диапазоне
Числа лежат в заданном диапазоне, но заранее
неизвестно, есть ли такие числа в массиве
Диапазон чисел, в котором надо найти
экстремум, неизвестен

3.

СЛУЧАЙ 1
Решается так:
Если надо найти максимальное значение, то за
максимум первоначально берут число, о котором
заранее известно, что оно равно минимальному
из чисел, для которого надо определить максимум
Если надо найти минимальное значение, то за
минимум первоначально берут число, которое =
максимальному из чисел, для которого надо
определить минимум

4.

СЛУЧАЙ 1
Например, в массиве – сведения о температуре
за каждый день ноября. a[i]∈ [-20;+10]
Вывести максимальную температуру среди тех
дней, когда были заморозки
Что возьмем за максимум?
max:=-20
max:=-20;
for i:=1 to n do
if (a[i]= условие) and (a[i]>max) then max:=a[i];
writeln (max);
Что в нашем случае является условием?
a[i]<0

5.

СЛУЧАЙ 2
Решается так:
Если надо найти максимальное значение, то за
максимум первоначально берут число, о котором
заранее известно, что оно строго < минимального
из чисел, для которого надо определить максимум
Если надо найти минимальное значение, то за
минимум первоначально берут число, которое
строго > максимального из чисел, для которого
надо определить минимум
После цикла проверяется, изменилось ли значение
максимума (минимума). Если первоначальное
значение не изменилось, значит нужного значения
в массиве нет

6.

СЛУЧАЙ 2
Найти в массиве минимальное число из чисел,
кратных 5. Числа лежат в диапазоне [1;100]
Что берем за минимум?
min:=101;
Какое условие надо написать?
for i:=1 to n do
if (a[i] mod 5=0) and(a[i]<min) then min:=a[i];
if min=101 then writeln (‘ нет таких чисел’)
else writeln (min);

7.

СЛУЧАЙ 3
В этом случае надо за максимум (минимум)
взять число, удовлетворяющее условию,
которое встретилось в массиве впервые
В этом случае используют переменную f
логического типа, определяющую, впервые ли
встретилось в массиве число, удовлетворяющее
условию

8.

СЛУЧАЙ 3
Найти в массиве максимальное число из чисел,
кратных 5
Не можем взять за max первый элемент массива,
так как если он не кратен 5, то условие if (a[i]
mod 5=0) and (a[i]> max) не выполнится никогда!
Например, в массиве
17
12
43
10
34
3
если мы выполним max:=a[1] (17), то условие не
выполнится никогда и мы получим ответ, что
max=17

9.

РЕШЕНИЕ СЛУЧАЯ 3
f:=true;
for i:=1 to n do
if (a[i]= условие) then
Встретился элемент,
удовлетворяющий условию
Встретился впервые
if f then
Берем его за максимум,
begin
max:=a[i];
следующие числа будут уже не
f:=false
впервые
end
else
if a[i]>max then max:=a[i]; Находим максимум обычным образом
writeln (max);
Если допускается, что чисел, удовлетворяющих условию, в массиве
может не быть, необходимо дописать после цикла оператор
if f then writeln(‘ таких чисел нет’)
else writeln (‘искомое число=‘, max)
English     Русский Rules