Читаю данный труд, по нему вникаю в программирование. Но вот встретил задачку, к которой буквально отсутствует описание используемых переменных, не могу понять уже вторую неделю что и зачем делает в ней цикл. Собственно вот она, растолкуйте пожалуйста:
Цитата:
Задача 12. Дан массив. Найти наибольшее значение.
Решение:
Идея такова, предположим, что максимальный элемент, это первый:
max:=mas[1]
Затем организуем цикл перебора от 2 до последнего элемента
и на каждом шагу цикла, если очередной элемент массива больше уже найденного максимального,
то пусть максимальному присваивается значение очередного элемента. Запишем программу полностью:
MODULE Example;
IMPORT In, StdLog;
PROCEDURE Calc*;
VAR
mas:ARRAY 100 OF INTEGER;
k, N, max:INTEGER;
BEGIN
In.Open;
N:=-1; Не понимаю, что в этой задаче есть N, тем более зачем N присваивать -1?
WHILE in.Done DO
N:=N+1; Тут зачем то прибавляем единицу
In.Int(mas[N]);
END;
N:=N-1; А тут мы ее снова убираем, написано зачем, но, в свете предыдущих манипуляций не могу понять и это.
k:=k+1;
max:=mas[0];
WHILE k<=N DO
IF mas[k]>max THEN
max:=mas[k];
END;
END;
k:=k+1;
END;
StdLog.Int(max);
END Calc;
END Example.
Примечания. Оператор N:=N-1 необходим для учета последней неудачной операции ввода. перед тем, как цикл
ввода WHILE завершит свою работу, выполнится попытка чтения из уже пустого потока, что создаст состояние
ошибки. переменная Done получит значение FALSE и цикл завершит свою работу, но тело цикла уже будет выполнено
и N вырастет на 1, эту 1 и надо вернуть назад.