Задание: изучите представленный материал и составьте в тетради конспект

Циклы

Цикл - это многократно повторяющаяся последовательность действий. Первый цикл, с которым мы познакомимся в этом уроке называется While...Do (делай пока верно условие).

Синтаксис:

While условие Do
begin
//тело цикла
end;

Сейчас нам нужно открыть Delphi и создать новый проект. Кидаем на форму компоненты Button и Label:

Задание: изучите представленный материал и составьте в тетради конспект - student2.ru

Создаем на кнопке процедуру OnClick и первое, что нам надо сделать - это ввести переменную A типа Integer:

procedure TForm1.Button1Click(Sender: TObject);
var A:integer;
begin
...

Теперь между ключевыми словами begin и end установим значение переменной A равное 1:

A:=1;

И сейчас мы напишем сам цикл, с условием A<>100, то есть пока A не равно 100 будет выполняться цикл.
Если же А = 100 - цикл остановится:

While A<>100 do
begin
//Тело цикла
end;

Далее, нам нужно что-то сделать в теле цикла. Давайте будем увеличивать значение переменной A на единицу и выводить значение переменной в Label. Вместо комментария (//Тело цикла) мы напишем:

A:=A+1;
Label1.Caption:=IntToStr(A);

Общий вид кода:

procedure TForm1.Button1Click(Sender: TObject);
var A:integer;
begin
A:=1; //Присваеваем единицу
While A <> 100 do //Пока А не равно 100 - делаем
begin
A:=a+1; //прибавляяем единицу
Label1.Caption:=IntToStr(a); //Выводим значение А
end;
end;

Компилируем программу, нажимаем на кнопку и видим, что лабел показывает нам сотню. Но почему сразу сотню? Почему не 1,2,3,4 и так до ста. Дело в том, что цикл выполняется на столько быстро, что мы не замечаем как лабел выводит нам сначала 1 потом 2 и потом 3. По этому мы видим только сотню - конечный результат. Кто-то может подумать, что так не интересно :). Хорошо, сейчас сделаем так, чтобы видеть как Delphi выполняет цикл.

Дописываем после строки

Label1.Caption:=IntToStr(a);

Вот эти две строчки

Application.ProcessMessages;
sleep(100);

Они делают следующие:



  • Application.HandleMessage - это метод, позволяющий выводить значения переменных во время работы цикла. Не смотря на то, что мы и так выводим переменную в лабел, этот метод необходим.
  • sleep(100); - функция Sleep() говорит программе, что нужно поспать, как бы заморозиться на какое-то количество миллисекунд. Миллисекунды указываются в скобках. В секунде 1000 миллисекунд.

Общий вид кода:

procedure TForm1.Button1Click(Sender: TObject);
var A:integer;
begin
A:=1; //Присваеваем единицу
While A <> 100 do //Пока А не равно 100 - делаем
begin
A:=a+1; //прибавляяем единицу
Label1.Caption:=IntToStr(a); //Выводим значение А
Application.ProcessMessages;
sleep(100);
end;
end;

Компилируйте и проверяйте.

С циклом While мы закончили, теперь разберем цикл со счетчиком или другое его название For...To...Do. Данный цикл удобно применять, когда нам точно известно кол-во повторений.

Синтаксис:

For переменная счетчик:=Выражение №1 To выражение №2 Do
begin
//тело цикла
end;

Этот цикл называется со счетчиком, потому что он сам увеличивает переменную счетчик на единицу.

Первым делом нам нужно добавить переменную S типа Integer.

procedure TForm1.Button1Click(Sender: TObject);
var A, S:integer;
begin
...

Далее, пишем программу, которая будет считать сумму чисел от 1 до 100.
То есть имеется ряд чисел 1 2 3 4 5 6 7 ... 100.
Программа будет складывать эти числа между собой, то есть 1+2+3+4+5+6+7+...+100.

Стираем цикл While и пишем цикл For, но перед ним присвойте переменной S ноль:

For A:=1 to 100 do
begin
//Тело цикла
end;

Этот цикл повторит действия в теле 100 раз.

В тело цикла мы запишем:

S:=s+a;

Программа будет считать сумму чисел от 1 до 100, прибавляя к переменной S переменную счетчик A.

И после цикла выводим результат в лабел.

Label1.Caption:=IntToStr(S);

Общий вид:

procedure TForm1.Button1Click(Sender: TObject);
var A, S:integer;
begin
S:=0; //Присваеваем ноль
For A:=1 to 100 do
begin
S:=s+a; //Вычисления
end;
Label1.Caption:=IntToStr(S);
end;

У цикла For есть цикл двойник, он может считать в обратном порядке. Для этого нужно изменить ключевое слово To на DownTo

Пример той же самой программы, но с обратным счетчиком:

procedure TForm1.Button1Click(Sender: TObject);
var A, S:integer;
begin
S:=0; //Присваеваем ноль
For A:=100 downto 1 do
begin
S:=s+a; //Вычисления
end;
Label1.Caption:=IntToStr(S);
end;

Далее. Знакомимся с циклом Repeat.

Синтаксис:

Repeat
//Тело цикла
Until условие;

Этот цикл сначала выполняет действие, а потом проверяет условие. Цикл выполниться в любом случае хотя бы один раз.

Стираем цикл For в нашей программе и пишем цикл Repeat:

procedure TForm1.Button1Click(Sender: TObject);
var A, S:integer;
begin
S:=0; //Присваеваем ноль
a:=0;
 
Repeat
a:=a+1;
S:=s+a; //Вычисления
Until a=100; //цикл будет выполняться пока a не достигнет 100
 
Label1.Caption:=IntToStr(S);
end;

Эта программа выполнит тоже самое что и предыдущая.

Ну вот мы и закончили обучение циклам! Сейчас выучим 2 команды для управления ими.

Сразу приведу пример программы, а потом прокомментирую что и как в ней работает:

procedure TForm1.Button1Click(Sender: TObject);
var A, S:integer;
begin
S:=0; //Присваеваем ноль
For A:=1 to 1000 do
begin
S:=s+a; //Вычисления
if S>100 then break else continue;
end;
Label1.Caption:=IntToStr(S);
end;

В теле цикла присутствует условие, которое проверяет переменную S. Если S больше 100, то мы экстренно выходим из цикла при помощи команды break, иначе продолжаем цикл командой continue.


Задание на закрепление: напишите программу, которая вычислит сумму двухзначных чисел и выведет ее в Label.

Наши рекомендации