- •Глава 4. Компоненты 30
- •Глава 5. Основы программирования 37
- •Часть I. Delphi и работа в Интегрированной Среде
- •Глава 1. Объектно-ориентированное программирование
- •1.1. Основные понятия и определения
- •1.2. Визуальное программирование интерфейса
- •1.3. Общие вопросы построения программ
- •Глава 2. Проекты Delphi
- •2.1.Файлы проекта
- •2.2.Структура файла головной программы
- •2.3. Окно Интегрированной Среды Разработки Delphi
- •2.4. Панель главного меню и всплывающие меню
- •2.5. Форма и компоненты
- •2.5.1.Окно формы
- •2.5.2. Окно Редактора Кода
- •2.5.3. Инспектор Объектов
- •2.6. Структура модуля приложения
- •Глава 3. Элементы языка Delphi
- •3.1.Типы данных
- •3.1.1. Целый тип
- •3.1.2.Вещественный тип
- •3.1.3. Символьный тип
- •3.1.4. Строковый тип
- •3.1.5. Логический тип
- •3.2. Переменная
- •3.3. Константы
- •3.3.1.Числовые константы
- •3.3.2. Строковые и символьные константы
- •3.3.3. Логические и именованные константы
- •3.4. Инструкция присваивания
- •3.5. Стандартные функции
- •3.5.1.Математические функции
- •Глава 4. Компоненты
- •4.1. Форма и компоненты на форме
- •4.2. Событие и процедура обработки событий
- •Глава 5. Основы программирования
- •5.1. Сохранение проекта, его повторное открывание
- •5.2. Стиль программирования
- •5.3. Порядок разработки проекта
- •5.4. Управляющие структуры языка Delphi
- •5.4.1. Инструкция if
- •5.4.2. Инструкция case
- •5.5. Циклы
- •5.5.1. Инструкция for
- •5.5.2. Инструкция while
- •5.5.3. Инструкция repeat
- •5.5.4. Инструкция goto
- •5.6. Процедуры и функции
- •5.6.1. Структура функции
- •5.6.2. Структура процедуры
- •5.6.3. Ввод и вывод данных в диалоговых окнах
- •5.6.4. Запись инструкций программы
- •5.6.5. Отладка программы
- •5.7. Операции со строками
- •5.7.1. Стандартные функции и процедуры работы со строками
- •5.7.2. Использование операций со строками
- •5.8. Массивы
- •5.8.1. Объявление массива
- •5.8.2. Операции с массивами
- •5.8.3. Стандартные функции обработки массивов
- •5.8.4. Многомерные массивы
5.5.3. Инструкция repeat
Инструкция repeat, как и инструкция while, используется в программе в том случае, если необходимо выполнить повторные вычисления (организовать цикл), но число повторений во время разработки программы неизвестно и может быть определено только во время работы программы, т. е. определяется ходом вычислений.
В общем виде инструкция repeat записывается:
repeat
// инструкции
until условие
где условие – выражение логического типа, определяющее условие завершения цикла.
Инструкция repeat выполняется следующим образом:
1. Сначала выполняются находящиеся между repeat и until инструкции тела цикла.
2. Затем вычисляется значение выражения условие. Если условие ложно (значение выражения условие равно False), то инструкции тела цикла выполняются еще раз.
3. Если условие истинно (значение выражения условие равно True), то выполнение цикла прекращается.
Алгоритм, соответствующий инструкции repeat, представлен на рис. 5.14.
Рис. 5.14. Алгоритм инструкции repeat
Таким образом, инструкции цикла, находящиеся между repeat и until, выполняются до тех пор, пока условие ложно, т.е. значение выражения условие равно False (см. рис.5.14).
Для завершения цикла, необходимо, чтобы инструкции цикла, располагающиеся между repeat и until, изменяли значения переменных, входящих в выражение
условие. Инструкции цикла, находящиеся между repeat и until, выполняются как минимум один раз.
Следующий пример проверяет, является ли введенное пользователем число простым, Проверить, является ли число n простым, можно делением числа n на два, на три и т. д. до n и проверкой остатка после каждого деления. Если после очередного деления остаток равен нулю, то это означает, что найдено число, на которое n делится без остатка. Сравнив n и число, на которое n разделилось без остатка, можно определить, является ли n простым числом [3].
Форма приложения Простое число изображена на рис. 5.15.
Рис.5.15. Форма приложения Простое число
Обработчик событий:
procedure TForm1.Button1Click(Sender: TObject);
var
n: integer; // проверяемое число
d: integer; // делитель
r: integer; // остаток от деления n на d
begin
n:=StrToInt(Edit1.text);
d := 2; // сначала будем делить на два
repeat
r := n mod d;
if r <> 0 // n не разделилось нацело на d
then d := d + 1;
until r = 0; // повторять пока не найдено число
//на n делящееся без остатка
label2.caption:=Edit1.text;
if d = n
then label2.caption:=label2.caption + ' - простое число.'
else label2.caption:=label2.caption + ' - обычное число.';
end;
5.5.4. Инструкция goto
Инструкции if и case используются для перехода к последовательности инструкций программы в зависимости от некоторого условия. Поэтому их иногда называют инструкциями условного перехода. Помимо этих инструкций управления ходом выполнения программы существует еще одна – инструкция безусловного перехода goto. В общем виде инструкция goto записывается следующим образом:
goto Метка
где метка – это идентификатор, находящийся перед инструкцией, которая должна быть выполнена после инструкции goto.
Метка, используемая в инструкции goto, должна быть объявлена в разделе меток, который начинается словом label и располагается перед разделом объявления переменных. В программе метка ставится перед инструкцией, к которой должен быть выполнен переход в результате выполнения инструкции goto. Сразу после метки ставится двоеточие.
Например, в процедуре проверки положительности вводимого числа инструкция goto используется для завершения процедуры в том случае, если пользователь введет неверные данные. Текст процедуры:
procedure TForm1.Button1Click(Sender: TObject);
label //раздел объявления меток
bye;
var
n: integer; // проверяемое число
d: integer; // делитель
r: integer; // остаток от деления n на d
begin
n:=StrToInt(Edit1.text);
if n<=0 then
begin
MessageDlg('Число должно быть больше нуля.',
mtError,[mbOK],0);
Edit1.Text:=' ';
goto bye;
end;
//введено положительное число
d := 2; // сначала будем делить на два
repeat
r := n mod d;
if r <> 0 // n не разделилось нацело на d
then d := d + 1;
until r = 0; // повторять пока не найдено число на n //делится без остатка
label2.caption:=Edit1.text;
if d = n
then label2.caption:=label2.caption + ' - простое число.'
else label2.caption:=label2.caption + ' - обычное число.';
bye:
end;
Если введено отрицательное число, то по инструкции
MessageDlg('Число должно быть больше нуля.',
mtError,[mbOK],0);
Появляется сообщение (рис. 5.16).
Рис. 5.16. Сообщение об ошибке ввода
Бытует мнение о недопустимости применения инструкции goto, поскольку она приводит к запутанности программ. В некоторых случаях применение инструкции goto вполне оправдано. Приведенный пример, где инструкция goto используется для аварийного завершения процедуры, относится именно к таким случаям.