- •Глава 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.4.1. Инструкция if
Инструкция if позволяет выбрать один из двух возможных вариантов развития программы. Выбор осуществляется в зависимости от выполнения условия. В общем виде инструкция if записывается так:
if условие
then
begin
// здесь инструкции, которые надо выполнить,
// если условие истинно.
end
else
begin
// здесь инструкции, которые надо выполнить,
// если условие ложно.
end;
Обратите внимание, что перед else (после end) точка с запятой не ставится.
Выполняется инструкция if следующим образом:
1. Вычисляется значение условия (условие – выражение логического типа, значение которого может быть равно True или False).
2. Если условие истинно (значение выражения условие равно True), то выполняются инструкции, следующие за словом then (между begin и end). На этом выполнение операции if заканчивается и инструкции, следующие за else, не будут выполнены.
3. Если условие ложно (значение выражения условие равно False), то выполняются инструкции, следующие за словом else (между begin и end).
На рис. 5.2 представлен алгоритм, соответствующий инструкции if-then-else.
Например, если переменная t обозначает тип соединения сопротивлений в электрической цепи (t=1 это последовательное соединение, t=2 – параллельное), a rl и r2 – величины сопротивлений, то инструкция if осуществляет выбор формулы, по которой будет выполнен расчет, имеет вид:
if t=l
then
begin
z:=rl+r2;
end
else
begin
z:= (r1*r2)/(r1+r2);
end;
Рис. 5.2. Алгоритм, реализуемый инструкцией if-then-else
Если в инструкции if между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Например, инструкцию
if otv=3
then
begin
prav:=prav+l;
end
else
begin
ShowMessage('Ошибка!');
end;
можно переписать так:
if otv=3
then
prav:=prav+l
else
ShowMessage('Ошибка!');
Если какое-либо действие должно быть выполнено только при выполнении определенного условия и пропущено, если это условие не выполняется, инструкция if может быть записана так:
if условие
then
begin
{ инструкции, которые надо выполнить,
если условие выполняется, истинно }
end
На рис. 5.3 представлен алгоритм, соответствующий инструкции if-then.
Рис. 5.3. Алгоритм, реализуемый инструкцией if-then
Например, инструкция
if n = m
then c: =c+l;
увеличивает значение переменной c только в том случае, если значения переменных n и m равны.
При вложенных конструкциях if могут возникнуть неоднозначности в понимании того, к какой из вложенных конструкций if относится элемент else.
Компилятор всегда считает, что else относится к последней из конструкций if, в которой не было раздела else.
Например, в конструкции
if <условие1>
then if <условие2> then <оператор1>
else <оператор2>;
else будет отнесено компилятором ко второй конструкции if, т.е. <оператор2> будет выполняться в случае, если первое условие истинно, а второе ложно. Иначе говоря, вся конструкция будет прочитана как
if <условие1>
then begin
if <условие2> then <оператор1> else <оператор2>
end;
Если же вы хотите отнести else к первому if, это надо записать в явном виде с помощью операторных скобок begin...end:
if <условие1>
then begin
if <условие2> then <оператор1>
end
else <оператор2>;
В качестве примера использования инструкции if рассмотрим программу вычисления стоимости междугородного телефонного разговора.
Как известно, стоимость междугородного разговора по телефону в выходные дни ниже, чем в обычные. Программа должна запрашивать длительность разговора и день недели, а затем вычислять стоимость разговора. Если день недели – суббота или воскресенье, то стоимость уменьшается на величину скидки. Цена минуты разговора и величина скидки задаются в тексте программы как константы [3].
Для ввода исходных данных (длительность разговора, номер дня недели) используются поля редактирования, для вывода результата и пояснительного текста – поля меток. В табл. 5.4 перечислены компоненты и указано их назначение.
Таблица 5.4
Компоненты формы приложения Стоимость разговора
Компонент |
Назначение |
Edit1 |
Окно ввода – для ввода длительности разговора в минутах |
Edit2 |
Окно ввода – для ввода номера дня недели |
Label1, Label2 |
Метки – для вывода пояснительного текста о назначении полей ввода |
Label3
|
Метка – для вывода результата вычисления — стоимости разговора |
Button1 |
Кнопка – для активизации процедуры вычисления стоимости разговора |
Диалоговое окно программы показано на рис. 5.4.
Рис. 5.4. Вид диалогового окна программы.
В табл. 5.5 приведены значения свойств компонентов.
Таблица 5.5
Значения свойств компонентов
Свойство |
Значение |
Forml.Caption (заголовок формы) |
Стоимость разговора |
Editl.Text |
|
Edit2.Text |
|
Labell.Caption |
Длительность (мин.) |
Label2.Caption |
Номер дня недели |
Label3.Caption |
|
Buttonl.Caption |
Вычислить |
Программа производит вычисления в результате щелчка на командной кнопке Вычислить. При этом возникает событие Onclick, которое обрабатывается Процедурой Tforml.Button1Click. Текст программы показан в листинге.
Листинг. Вычисление стоимости телефонного разговора
unit Phone_u;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit; // поле ввода длительности разговора
Edit2: TEdit; // поле ввода номера дня недели
Button1: TButton; // кнопка Вычислить
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
const
PAY = 0.15; // цена одной минуты разговора0.15 рубля
DISCOUNT = 0.2; // скидка 20 процентов
var
Time:Real; // длительность разговора
Day:integer; // день недели
Summa:real; // стоимость разговора
begin
//получить исходные данные
Time:=StrToFloat(Edit1.Text);
Day:=StrToInt(Edit2.Text);
// Вычислить стоимость разговора
Summa:= PAY*Time;
// Если день суббота или воскресенье, то уменьшить
// стоимость на величину скидки
if (Day = 6) OR (Day = 7)
then Summa:=Summa*(1 -DISCOUNT);
// вывод результата вычисления
label3.caption:='К оплате '+FloatToStr(Summa)+'руб.';
end;
end.
Часто в программе необходимо реализовать выбор более чем из двух вариантов. Например, известно, что для каждого человека существует оптимальное значение веса, которое может быть вычислено по формуле:
Рост (см)- 100.
Реальный вес может отличаться от оптимального: вес может быть меньше оптимального, равняться ему или превышать оптимальное значение.
Следующая программа, диалоговое окно которой приведено на рис. 5.5, запрашивает вес и рост, вычисляет оптимальное значение, сравнивает его с реальным весом и выводит соответствующее сообщение.
Рис.5.5. Форма с компонентами для приложения Контроль веса
Как и в предыдущей программе, вычисления выполняются при щелчке на кнопке Вычислить. Текст процедуры обработки события имеет вид:
procedure TForm1.Button1Click(Sender: TObject);
var
w:real; { вес }
h:real; { рост }
opt:real; { оптимальный вес }
d:real; { отклонение от оптимального веса }
begin
w:=StrToFloat(Edit1.text);
h:=StrToInt(Edit2.Text);
opt:=h-100;
if w=opt
then
Label3.caption:='Ваш вес оптимален !'
else
if w<opt
then
begin
d:=opt-w;
Label3.caption:='Вам надо поправиться, на '
+ FloatTostr(d)+ 'кг.';
end
else
begin
d:=w-opt;
Label3.caption:='Надо немного похудеть, на '
+ FloatTostr(d)+ ' кг.';
end;
end;
В приведенном примере множественный выбор реализован при помощи двух инструкций if, одна из которых "вложена" в другую [3].