Учебная программа INTSLJMM
В качестве иллюстрации применения оператора for рассмотрим программу, осуществляющую ввод произвольного целого числа n и вычисление суммы всех целых чисел от 1 до N. Для нового приложения (опция File | New | Application) соз дайте такой обработчик bbRunСlick: procedure TfmExample.bbRunClick(Sender: TObject); Var i,N,Sum: Integer; Begin try // Преобразуем ввод с контролем правильности: N:= StrToInt(edInput.Text); except // Следующие операторы выполняются, если есть ошибка ShowMessage('Ошибка ввода целого числа'); dinput.SelectAll; // Выделяем неверный ввод Exit // Завершаем работу обработчика End; edInput.Text :=' '; edinput.SetFocus; Sum:= 0; // Начальное значение Sum for i:= 1 to N do // Цикл формирования суммы Sum:= Sum+i; mmOutput.Lines.Add('Сумма всех целых чисел '+'в диапазоне 1...'+IntToStr(N)+' равна '+IntToStr(Sum)); end; Комментарий к программе Прежде всего обратите внимание на операторы try // Преобразуем ввод с контролем правильности: N:= StrToInt(edinput.Text); except // Следующие операторы выполняются, если есть ошибка ShowMessage("Ошибка ввода целого числа'); edinput.SelectAll; // Выделяем неверный ввод Exit // Завершаем работу обработчика End; С помощью зарезервированных слов try (попробовать), except (исключение) и end реализуется так называемый защищенный блок. Такими блоками программист может защитить программу от краха при выполнении потенциально опасного участка (подробнее см. п. 14.1). В отличие от предыдущих программ мы не изменили компонент edinput, поэтому пользователь может ввести в нем произвольный текст. Если этот текст не содержит правильное представление целого числа, попытка выполнить оператор N:= StrToInt(edInput.Text); в обычной программе привела бы к аварийному завершению программы. Чтобы этого не произошло, мы защитили этот оператор, расположив его за try и перед except. Если ошибки нет, все операторы, стоящие за except и до end, пропускаются и обработчик нормально срабатывает. Если обнаружена ошибка, возникает так называемая исключительная ситуация (исключение) и управление автоматически передается оператору, стоящему за except, - начинается обработка исключения. Вначале с помощью стандартной процедуры ShowMessage мы сообщаем пользователю об ошибке[ Если вы запустите программу из среды Delphi, исключение будет сначала перехвачено средой и на экране появится сообщение на английском языке о характере и месте возникновения ошибки. В этом случае закройте окошко с сообщением и нажмите F9 - программа продолжит свою работу, и вы увидите окно процедуры ShowMessage. ], затем с помощью edInput. SeiectAll выделяем ошибочный текст в компоненте edinput и, наконец, с помощью вызова стандартной процедуры Exit аварийно завершаем работу обработчика (но не программы!). Отметим также два обстоятельства. Во-первых, условие, управляющее работой оператора for, проверяется перед выполнением оператора <оператор>: если условие не выполняется в самом начале работы оператора for, исполняемый оператор не будет выполнен ни разу. Другое обстоятельство - шаг наращивания параметра цикла строго постоянен и равен (+1). Существует другая форма оператора: for <пар_цик>: = <нач_знач> downto <кон_знач> do <оператор>; Замена зарезервированного слова to на downto означает, что шаг наращивания параметра цикла равен (-1), а управляющее условие Приобретает вид <параметр__цикла> = <кон_знач>. Предыдущий пример можно модифицировать так, чтобы сделать его пригодным для подсчета любых сумм - положительных и отрицательных: Sum:= 0; if N >= 0 then for i:= 1 to N do Sum:= Sum + i Else for i:= -1 downto N do Sum:= Sum + i; Два других оператора повторений лишь проверяют условие выполнения или повторения цикла, но не связаны с изменением счетчика цикла. Оператор цикла WHILE с предпроверкой условия: while <условие> do <оператор>; Здесь while, do - зарезервированные слова {пока [выполняется условие], делать), <условие> - выражение логического типа; <оператор> - произвольный оператор Object Pascal. Если выражение <условие> имеет значение True, то выполняется <оператор>, после чего вычисление выражения <условие> и его проверка повторяются. Если <условие> имеет значение False, оператор while прекращает свою работу.
|