/Текст пишем здесь-->
Продолжим тему создания простых приложений на Delphi 7 в рамках написания программы "Записная книга". Только
в отличии от предыдущего урока,
постараемся использовать уже более серьёзный подход в написании программ, будем использовать базы данных для хранения информации.
По простому, база данных - это файл или несколько файлов, объединённых по какому-либо признаку, в котором (в которых) хранится некоторая информация в структурированном виде.
Более подробно этот вопрос будем рассматривать далее, а пока что рассмотрим понятие цикла. Цикл в программировании - это набор операций, которые повторяются
некоторое количество раз. Начнём с цикла for.
Открываем среду разработки Delphi 7 и устанавливаем кнопку на форму. Но перед этим сделаем всё по правилам!
Проект сохраним в новой рабочей папке, свойство Caption формы изменим в инспекторе объектов на "Примеры циклов".
Название формы - значение свойства Name изменим с Form1 на FCicle.
Сохраним файлы проекта.
Первая кнопка понадобится нам для демонстрации работы цикла for.
Кликаем один раз по кнопке в редакторе форм, тогда в "Инспекторе объектов" отобразятся свойства кнопки. Вообще, когда кликаем по
компоненту на форме, в окне "Object Inspector" отображаются свойства выбранного компонента. Я, в качестве примера, изменяю свойство Font у кнопки,
выделяя шрифт жирным и увеличивая его размер. Потом справа от кнопки поставим компонент TEdit и, примыкающий к строке редактирования,
компонент TUpDown, находящийся на вкладке Win32 палитры компонентов.
Для экземпляра UpDown1 в свойстве
Associate выбираем Edit1. Теперь, регулируя стрелками, мы можем изменять значение в строке редактирования. Укажем, что это значение параметра цикла,
поставив метку с соответствующей надписью над Edit1.
Делаем двойной щелчок мыши по кнопке Button1, и перед нами в окне кода появляется шаблон процедуры обработчика события
нажатия на кнопку Button1Click. Начнём писать наш цикл. Пусть перед нами стоит задача посчитать сумму натурального ряда чисел от 1
до значения которое мы укажем в строке Edit1. Ниже представлен код.
procedure TFCicle.Button1Click(Sender: TObject);
Var
i, S: Integer;
begin
S := 0;
for i := 1 to StrToInt(Edit1.Text)
do
S := S + i;
ShowMessage(IntToStr(S));
end;
Сперва определяем две локальные переменные (эти переменные используются только внутри события нажатия на кнопку). Переменная i - это
счётчик цикла. Переменная S - результирующая сумма, изначально, после объявления, имеет значение равное нулю. Всё-таки лучше иметь привычку сумму всегда обнулять.
Затем в цикле, счётчик принимает последовательно значения 1, 2, 3 и т. д. до StrToInt(Edit1.Text). Здесь мы преобразовываем строковое значение, которое ввели в строке редактирования, в
целочисленное значение, посредством функции StrToInt. Если целочисленному (integer) значению попытаться присвоить
строковое значение, то возникнет ошибка компиляции, программа не запустится! Так вот, каждый раз в цикле присваивая последовательно значения
счётчика i значению суммы S, мы получаем в итоге требуемый результат. Если в строку Edit1 поставить 1, то цикл выполнится 1 раз. А если поставить значение
меньшее начальному значению счётчика, в данном случае это 1, то цикл вообще не выполнится. Ошибки не возникнет.
Окончательно выводим результат с помощью процедуры ShowMessage. В качестве параметра в неё нужно передать строку, поэтому целочисленное значение
переменной S преобразовываем в строку функцией IntToStr.
У компонента TUpDown есть свойства Min и Max, определяющие минимальное и максимальное значение.
По умолчанию это 0 и 100, можно изменить на своё усмотрение.
Если мы введём в строку редактирования не число, а какой-либо символ, то будет выдана ошибка после нажатия на кнопку. Потому что в качестве параметра
для функции StrToInt необходимо передавать целое значение. Чтобы оградить пользователя от этой ошибки, нужно просто не дать ему возможности вводить
символы в эту строку с клавиатуры. Кликаем по строке Edit1, жмём F11, выбираем вкладку Events "Инспектора объектов", два раза кликаем на событии
OnKeyPress. Это событие, когда нажата клавиша на клавиатуре. В этом событии у нас есть возможность обработать
вводимый символ, изменить его значение. Пишем следующий код.
procedure TFCicle.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8]) then
Key := #0;
end;
Переменная Key - это вводимый символ, его мы можем менять в зависимости от ситуации в нашем рассматриваемом событии. Нам нужно не пропускать все символы
кроме цифр и клавишу стирания символа, которая имеет код #8. Здесь стоит поговорить о символьном типе данных Char. Именно такой тип имеет
переменная Key. Символ в Delphi пишется в апострофах, например, 'z'. Так же символ можно указать в виде его кода после значка решётки #. Символ
'z' можно указать так же в виде кода #122. Так вот, если Key не попадает в множество символов, состоящих из цифр и клавиши стирания, то мы
присваиваем ей значение символа #0, это будет означать, что ничего не введено, ввод символа блокируется. Множества в Object Pascal указываются
в квадратных скобках, например, множество латинских символов в нижнем регистре: ['a'..'z'], или через запятую несколько символов ['a', 'b', 'f', 'z'].
Условие вхождения в множество обеспечивается такой конструкцией: if переменная in [множество] then. В нашем случае мы указали not - отрицание условия.
Стоит понимать, что существуют ещё и вложенные циклы, которыми часто приходится пользоваться. И ещё,
в рамках одного цикла может быть не одно действие, а несколько. В этом случае эти действия необходимо заключить между ключевыми словами begin и end.
К примеру вот так:
for i := 1 to n do
begin
Процедура1(i, набор параметров);
for j := 1 to m do
begin
Процедура2(i, j, набор параметров);
Процедура3(i, j, набор параметров);
end;
end;
Перейдём к изучению других циклов. Цикл с пост-условием: repeat ... until (условие). И цикл
с пред-условием: while (условие) do ...
Цикл с пост-условием
Добавляем на форму ещё одну кнопку или копируем предыдущую при помощи сочетания клавиш Ctrl + C и Ctrl + V.
В случае копирования все свойства для новой кнопки сохраняются, в частности останется тот же шрифт (свойство Font).
Два раза кликаем на эту кнопку Button2 и вставляем в шаблон для события нажатия на кнопку наш код с циклом Repeat.
procedure TFCicle.Button2Click(Sender: TObject);
Var
i, S: Integer;
begin
S := 0;
i := 0;
Repeat
Inc(i); //i := i + 1;
S := S + i;
Until i = StrToInt(Edit1.Text);
ShowMessage(IntToStr(S));
end;
Как работает этот цикл. Счётчик цикла мы вводим самостоятельно. Сумму и счётчик предварительно обнуляем.
Далее увеличиваем счётчик i на 1 процедурой Inc(i), которая работает так же как и в случае такого присвоения: i := i + 1,
но делается это немного быстрее. При малых значениях витков цикла это быстродействие "незаметно для глаза". Потом прибавляем
к нашей сумме S новое значение счётчика i на каждом витке цикла, пока не будет выполнено условие, стоящее после ключевого слова
Until, то есть пока значение i не станет равным значению, введённому в строку редактирования.
Для этого случая стоит отметить, что если оставить нулевое значение в строке параметра цикла, то
на первом шаге цикла наш счётчик уже станет равным 1 и условие i = StrToInt(Edit1.Text); не будет выполнено никогда, программа зависнет!
Поэтому поставим перед циклом условие. Пусть наш цикл будет выполняться только если значение параметра цикла больше нуля.
procedure TFCicle.Button2Click(Sender: TObject);
Var
i, S: Integer;
begin
S := 0;
i := 0;
if StrToInt(Edit1.Text) > i
then
Repeat
Inc(i); //i := i + 1;
S := S + i;
Until i = StrToInt(Edit1.Text);
ShowMessage(IntToStr(S));
end;
Цикл с пред-условием
Разместим ещё кнопку на форме.
Два раза кликаем на кнопку Button3 и вставляем код с циклом while в обработчик события.
procedure TFCicle.Button3Click(Sender: TObject);
Var
i, S: Integer;
begin
S := 0;
i := 0;
while i < StrToInt(Edit1.Text)
do
 
begin
Inc(i); //i := i + 1;
S := S + i;
 
end;
ShowMessage(IntToStr(S));
end;
Цикл выполняется, пока выполняется условие i < StrToInt(Edit1.Text), и это условие проверяется в самом начале цикла!
Тело цикла (набор действий внутри цикла) располагается между ключевыми словами begin и end.
Архив с файлами проекта можно скачать здесь f_d7_4.rar
Вернуться к списку статей, посвящённых программированию в Delphi 7
Вы так же можете подписаться на бесплатную рассылку о новых статьях на сайте.
Если Вам понравилась статья, или вы хотели бы освещения другой, интересующей Вас темы, то напишите нам. Это очень важно!
Наверх
Перейти к списку статей по программированию в среде Delphi 7
Свяжитесь с нами!
| Тел: .         |
/Текст пишем здесь-->
/Полезная информация-->