1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

[Delphi Урок №3] Циклы

Тема в разделе 'Уроки', создана пользователем JoLan, 21 фев 2011.

  1. TopicStarter Overlay

    JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    945
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    Для чего вообще нужны циклы? Они нужны для того, чтобы вводить/выводить повторяющуюся информацию не 100 строками кода, 2-мя. Циклы бывают 3-х видов:
    1) Параметрический цикл - цикл с заданным кол-вом итераций (Итерация - один проход всех команд в цикле)
    2) Цикл с предусловием - будет выполняться, пока будет или не будет выполняться некое условие
    3) Цикл с постусловием - то же самое, что и с предусловием, только условие будет проверяться после итерации, а не перед ней.

    Допустим, нам нужна сумма чисел от 1-го до 30, мы же не будем писать так:
    Код:
    sum := 1+2;
    sum := sum+3;
    sum := sum+4;
    и т.д.

    Намного проще задействовать для этого цикл:
    - Параметрический
    Код:
    program Project1;
    {$APPTYPE CONSOLE}
    uses SysUtils;
    var i,sum:integer;
    begin
    sum := 0;
    for i := 1 to 30 do sum := sum + i;
    writeln(sum);
    readln;
    end.
    - Цикл с предусловием
    Код:
    program Project1;
    {$APPTYPE CONSOLE}
    uses SysUtils;
    var i,sum:integer;
    begin
    sum := 0;
    i := 1;
    while i <= 30 do begin
    sum := sum + i;
    i := i+1;
    end;
    writeln(sum);
    readln;
    end.
    Заметьте, что здесь мы выделили каждую итерацию конструкцией begin-end, показывая компилятору тем самым, что с каждой итерацией нужно выполнять более, чем 1-у команду.

    - Цикл с постусловием:
    Код:
    program Project1;
    {$APPTYPE CONSOLE}
    uses SysUtils;
    var i,sum:integer;
    begin
    sum := 0;
    i := 1;
    repeat
    sum := sum + i;
    i := i+1;
    until (i > 30);
    writeln(sum);
    readln;
    end.
    В цикле с постусловием не нужно выделять несколько команд конструкцией begin-end, т.к. конструкция вида repeat-until уже предусматривает выполнение нескольких команд (ну это можно понять, взглянув на код).

    Если Вам нужно прервать цикл в определенной итерации, то Вы должны воспользоваться командой Break:
    Код:
    program Project1;
    {$APPTYPE CONSOLE}
    uses SysUtils;
    var i,sum:integer;
    begin
    sum := 0;
    i := 1;
    repeat
    sum := sum + i;
    i := i+1;
    if i = 15 then Break;
    until (i > 30);
    writeln(sum);
    readln;
    end.
    В этом случае выполнение цикла на 15-й итерации прервется.

    Иногда бывает нужно пропустить некую итерацию, в этом случае мы воспользуемся командой Continue:
    Код:
    program Project1;
    {$APPTYPE CONSOLE}
    uses SysUtils;
    var i,sum:integer;
    begin
    sum := 0;
    for i := 1 to 30 do begin
    if i = 15 then Continue;
    sum := sum + i;
    end;
    writeln(sum);
    readln;
    end.
    Тогда программа пропустит 15-ю итерацию и, соответственно, не прибавит число 15 (т.к. условие стоит до выполнения суммы). Кстати, поскольку теперь в цикле нужно выполнять более одной операции мы выделили их конструкцией begin-end.

    Но тут все задано программно и неинтересно. Сделаем ввод с клавиатуры (сделаю только с параметрическим циклом, с другими сами разберетесь):
    Код:
    program Project1;
    {$APPTYPE CONSOLE}
    uses SysUtils;
    var i,limit,sum:integer;
    begin
    Write('Input sum limit: ');
    Readln(limit);
    sum := 0;
    for i := 1 to limit do sum := sum + i;
    writeln('Sum: ',sum);
    readln;
    end.
    [​IMG]

    Вот мы и научились пользоваться циклами. Поздравляю!

    P.S. Вместо такой конструкции i := i+1 или i := i-1 лучше пользоваться фукциями inc(i) и dec(i) соответственно.
    10 пользователям это нравится.
  2. NEO I Old school Пользователи

    Сообщения:
    117
    Лайки:
    43
    Пол:
    Мужской
    Репутация:
    0
    Джооо ещё уроков!)
    2 пользователям это нравится.
  3. CoolMan Old school Пользователи

    Сообщения:
    436
    Лайки:
    88
    Пол:
    Мужской
    Репутация:
    0
    Помню в школе, когда паскаль учил почти также обьясняли)
    1 человеку нравится это.
Черновик сохранён Черновик удалён

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