1. Новый раздел и сервер Discord!
    Смотри новость ТЫК

Урок 4 - Циклы

Тема в разделе "Delphi", создана пользователем TiportOne, 23 июн 2016.

  1. Оффлайн

    TiportOne

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

    Синтаксис:

    1.While условие Do
    2.begin
    3.//тело цикла
    4.end;
    Сейчас нам нужно открыть Delphi и создать новый проект. Кидаем на форму компоненты Button и Label:

    [​IMG]

    Создаем на кнопке процедуру OnClick и первое, что нам надо сделать - это ввести переменную A типа Integer:
    1.procedure TForm1.Button1Click(Sender: TObject);
    2.var A:integer;
    3.begin
    4....
    Теперь между ключевыми словами begin и end установим значение переменной A равное 1:
    1.A:=1;
    И сейчас мы напишем сам цикл, с условием A<>100, то есть пока A не равно 100 будет выполняться цикл.
    Если же А = 100 - цикл остановится:
    1.While A<>100 do
    2.begin
    3.//Тело цикла
    4.end;
    Далее, нам нужно что-то сделать в теле цикла. Давайте будем увеличивать значение переменной A на единицу и выводить значение переменной в Label. Вместо комментария (//Тело цикла) мы напишем:
    1.A:=A+1;
    2.Label1.Caption:=IntToStr(A);
    Общий вид кода:
    01.procedure TForm1.Button1Click(Sender: TObject);
    02.var A:integer;
    03.begin
    04.A:=1; //Присваеваем единицу
    05.While A <> 100 do //Пока А не равно 100 - делаем
    06.begin
    07.A:=a+1; //прибавляяем единицу
    08.Label1.Caption:=IntToStr(a); //Выводим значение А
    09.end;
    10.end;
    Компилируем программу, нажимаем на кнопку и видим, что лабел показывает нам сотню. Но почему сразу сотню? Почему не 1,2,3,4 и так до ста. Дело в том, что цикл выполняется на столько быстро, что мы не замечаем как лабел выводит нам сначала 1 потом 2 и потом 3. По этому мы видим только сотню - конечный результат. Кто-то может подумать, что так не интересно :). Хорошо, сейчас сделаем так, чтобы видеть как Delphi выполняет цикл.

    Дописываем после строки
    1.Label1.Caption:=IntToStr(a);
    Вот эти две строчки
    1.Application.ProcessMessages;
    2.sleep(100);
    Они делают следующие:
    • Application.HandleMessage - это метод, позволяющий выводить значения переменных во время работы цикла. Не смотря на то, что мы и так выводим переменную в лабел, этот метод необходим.
    • sleep(100); - функция Sleep() говорит программе, что нужно поспать, как бы заморозиться на какое-то количество миллисекунд. Миллисекунды указываются в скобках. В секунде 1000 миллисекунд.
    Общий вид кода:
    01.procedure TForm1.Button1Click(Sender: TObject);
    02.var A:integer;
    03.begin
    04.A:=1; //Присваеваем единицу
    05.While A <> 100 do //Пока А не равно 100 - делаем
    06.begin
    07.A:=a+1; //прибавляяем единицу
    08.Label1.Caption:=IntToStr(a); //Выводим значение А
    09.Application.ProcessMessages;
    10.sleep(100);
    11.end;
    12.end;
    Компилируйте и проверяйте.

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

    Синтаксис:
    1.For переменная счетчик:=Выражение №1 To выражение №2 Do
    2.begin
    3.//тело цикла
    4.end;
    Этот цикл называется со счетчиком, потому что он сам увеличивает переменную счетчик на единицу.

    Первым делом нам нужно добавить переменную S типа Integer.
    1.procedure TForm1.Button1Click(Sender: TObject);
    2.var A, S:integer;
    3.begin
    4....
    Далее, пишем программу, которая будет считать сумму чисел от 1 до 100.
    То есть имеется ряд чисел 1 2 3 4 5 6 7 ... 100.
    Программа будет складывать эти числа между собой, то есть 1+2+3+4+5+6+7+...+100.

    Стираем цикл While и пишем цикл For, но перед ним присвойте переменной S ноль:
    1.For A:=1 to 100 do
    2.begin
    3.//Тело цикла
    4.end;
    Этот цикл повторит действия в теле 100 раз.

    В тело цикла мы запишем:
    1.S:=s+a;
    Программа будет считать сумму чисел от 1 до 100, прибавляя к переменной S переменную счетчик A.

    И после цикла выводим результат в лабел.
    1.Label1.Caption:=IntToStr(S);


    Общий вид:
    01.procedure TForm1.Button1Click(Sender: TObject);
    02.var A, S:integer;
    03.begin
    04.S:=0; //Присваеваем ноль
    05.For A:=1 to 100 do
    06.begin
    07.S:=s+a; //Вычисления
    08.end;
    09.Label1.Caption:=IntToStr(S);
    10.end;
    У цикла For есть цикл двойник, он может считать в обратном порядке. Для этого нужно изменить ключевое слово To наDownTo

    Пример той же самой программы, но с обратным счетчиком:
    01.procedure TForm1.Button1Click(Sender: TObject);
    02.var A, S:integer;
    03.begin
    04.S:=0; //Присваеваем ноль
    05.For A:=100 downto 1 do
    06.begin
    07.S:=s+a; //Вычисления
    08.end;
    09.Label1.Caption:=IntToStr(S);
    10.end;
    Далее. Знакомимся с циклом Repeat.

    Синтаксис:
    1.Repeat
    2.//Тело цикла
    3.Until условие;
    Этот цикл сначала выполняет действие, а потом проверяет условие. Цикл выполниться в любом случае хотя бы один раз.

    Стираем цикл For в нашей программе и пишем цикл Repeat:
    01.procedure TForm1.Button1Click(Sender: TObject);
    02.var A, S:integer;
    03.begin
    04.S:=0; //Присваеваем ноль
    05.a:=0;
    06.
    07.Repeat
    08.a:=a+1;
    09.S:=s+a; //Вычисления
    10.Until a=100; //цикл будет выполняться пока a не достигнет 100
    11.
    12.Label1.Caption:=IntToStr(S);
    13.end;
    Эта программа выполнит тоже самое что и предыдущая.

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

    Сразу приведу пример программы, а потом прокомментирую что и как в ней работает:
    01.procedure TForm1.Button1Click(Sender: TObject);
    02.var A, S:integer;
    03.begin
    04.S:=0; //Присваеваем ноль
    05.For A:=1 to 1000 do
    06.begin
    07.S:=s+a; //Вычисления
    08.if S>100 then break else continue;
    09.end;
    10.Label1.Caption:=IntToStr(S);
    11.end;
    В теле цикла присутствует условие, которое проверяет переменную S. Если S больше 100, то мы экстренно выходим из цикла при помощи команды break, иначе продолжаем цикл командой continue. Пример программы не очень удачный, так как цикл будет работать даже если мы стерем команду continue, но я надеюсь, что суть вы уловили.
    Экспериментируйте и всё получится. Жду комментов ;)

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

    Ну вот и всё! Удачи!
    Встретимся в следующем уроке!
    --- Добавлено, 23 июн 2016, Дата первого сообщения: 22 июн 2016 ---
    Жду комментов и сябок :3Lovesmile-z
     
    xXxSKIFFFxXx нравится это.
  2.  
  3. Оффлайн

    xXxSKIFFFxXx

    39
    6
    3
    Классные уроки, жаль ты забросил=(
     

Поделиться этой страницей

Уважаемый пользователь!

Мы обнаружили, что вы блокируете показ рекламы на нашем сайте.

Просим внести его в список исключения или отключить AdBlock.

Наши материалы предоставляются БЕСПЛАТНО и единственным доходом является реклама.

Спасибо за понимание!