Пример задания.
Дан вещественный массив из 40 элементов. Элементы массива могут принимать произвольные значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный положительный элемент массива или сообщение, что такого элемента нет.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
const
N = 40;
var
a: array [1..N] of real;
i, j: integer; min:real;
begin
for i:=l to N do
readln(a[i]);
end.
В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Алгоритм достаточно прост.
Нам необходимо найти минимальный положительный элемент, поэтому необходимо выполнение такого условия:
if a[i]>0 then {проверка положительности элемента}
if a[i]<min then {проверка меньше ли данный элемент имеющегося минимального}
min:=a[i]; {если оба условия выполняется, значит мы нашли искомый элемент и закладываем это значение в переменную min}
Можно объединить дав условия в одно через логическую связку and:
if (a[i]>0) and (a[i]<min) then min:=a[i];
Теперь поговорим о переменной min. По умолчанию любая переменная равна 0, поэтому сейчас мы сравниваем все элементы с нулем, что ясно говорит нам о том, что в минимуме будет в любом случае ноль. Чтобы этого избежать необходимо поместить туда положительный элемент массива. Получаем:
while (a[i]>0) and (i<n) do
begin
min:=a[i];
i:=i+1;
end;
Осталось понять как можно вывести сообщение от том, что таких элементов нет. Можно сделать это так:
if min>0 then write (min) else write ("таких элементов нет");
То есть если min больше нуля, то это и есть минимальный элемент, иначе, если min так и остался нулем, значит таких элементов в массиве не было.
Итог:
while (a[i]>0) and (i<n) do
begin
min:=a[i];
i:=i+1;
end;
for i:=1 to n do
if (a[i]>0) and (a[i]<min) then min:=a[i];
if min>0 then write (min) else write ("таких элементов нет");