Пусть одномерный массив A[i] содержит числа - рост 10 учеников в сантиметрах. Требуется найти рост самого высокого из учеников.
По обыкновению, рассмотрим задачу построчно.
s:=a[1];
Вначале в переменной S запоминаем рост первого ученика
for i:=2 to 10 do
Для всех остальных учеников от 2-го до 10-го делать
if a[i]>s then s:=a[i];
Если рост текущего (I-того) ученика больше чем тот, что мы помним в переменной S, то в S занести это большее значение.
Таким образом, когда эта процедура будет проделана для всех учеников, в переменной S окажется значение, соответствующее максимальному из всех, которые были введены в массив A.
А если требуется найти не максимальный, а минимальный элемент (т.е. рост самого маленького ученика), что тогда нужно изменить в данном алгоритме?
Верно - вместо знака ">" (больше) поставить знак "<" в операторе IF, получим:
s:=a[1]; {Поиск минимального элемента }
for i:=2 to 10 do
if a[i]<s then s:=a[i];
А если, например, в задаче 4 требуется найти разность наибольшего и наименьшего элементов, что тогда делать?
Завести разные переменные для максимального и минимального элементов:
max:=a[1]; {Поиск минимального элемента }
for i:=2 to 10 do
if a[i]>max then max:=a[i];
min:=a[1]; {Поиск минимального элемента }
for i:=2 to 10 do
if a[i]<min then min:=a[i];
s:=max-min;
Конечно, надо не забыть добавить объявление этих переменных
Var
i,s,MAX,MIN :integer;
...
Замечание: одновременный поиск максимального и минимального элементов в одномерном массиве можно было записать немного короче так:
max:=a[1]; min:=a[1];
for i:=2 to 10 do
begin
if a[i]>max then max:=a[i];
if a[i]<min then min:=a[i];
end;
s:=max-min;
В данном случае, когда внутри оператора FOR мы хотим выполнить 2 (или более) оператора IF, необходимо использовать так называемые операторные скобки BEGIN END. Такую последовательность операторов
BEGIN оператор1; оператор 2; ... ; END; принято называть составным оператором.
Обратите внимание на сдвиги вправо, отражающие вложенность выполнения операторов.