Цикл do until выполняется до тех пор пока

Цикл do until выполняется до тех пор пока thumbnail

Цикл Do Until… Loop в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла Do Until… Loop.

Цикл Do Until… Loop в VBA Excel предназначен для повторения блока операторов пока не выполняется заданное условие (возвращается значение False). Синтаксис этого цикла аналогичен синтаксису цикла Do While… Loop, который повторяется до тех пор, пока условие выполняется (возвращается значение True).

Синтаксис цикла Do Until… Loop

Синтаксис цикла Do Until… Loop существует в двух вариантах, определяющих, когда проверяется условие.

Условие проверяется до выполнения операторов:

Do Until condition

[ ements ]

[ Exit Do ]

[ ements ]

Loop

Условие проверяется после выполнения операторов:

Do

[ ements ]

[ Exit Do ]

[ ements ]

Loop Until condition

В квадратных скобках указаны необязательные атрибуты цикла Do Until… Loop.

Компоненты цикла Do Until… Loop

КомпонентОписание
conditionОбязательный атрибут. Условие выполнения цикла. Выражение, возвращающее значение типа Boolean.
ementsНеобязательный* атрибут. Операторы вашего кода.
Exit DoНеобязательный атрибут. Оператор выхода** из цикла до его окончания.

*Если не использовать в цикле свой код VBA, смысл применения цикла теряется.

**Очень полезный оператор для цикла Do Until… Loop, так как при некоторых обстоятельствах он может стать бесконечным. Если такой риск существует, следует предусмотреть возможность выхода из бесконечного цикла с помощью оператора Exit Do.

Примеры циклов Do Until… Loop

Простейшие циклы

Цикл Do Until… Loop с условием до исполняемых операторов:

Sub test1()

Dim a As Byte

Do Until a > 9

a = a + 1

Loop

MsgBox a

End Sub

Цикл Do Until… Loop с условием после исполняемых операторов:

Sub test2()

Dim a As Byte

Do

a = a + 1

Loop Until a > 9

MsgBox a

End Sub

В обоих случаях окно MsgBox выведет число 10. Когда значение переменной a будет равно 10, проверяемое условие выдаст значение True, и цикл будет остановлен.

Проход по строкам листа

У двух белок дупла расположены напротив друг друга. В каждом дупле по 100 шишек. В свободное время они бросают шишки в дупло напротив, попадают не всегда. Ниже, в таблице, указано количество шишек, брошенных каждой белкой, и сколько их попало в цель.

ДниИгрокБрошеноПопало в цель
1 деньБелка 1156
1 деньБелка 2127
2 деньБелка 1148
2 деньБелка 2167
3 деньБелка 1209
3 деньБелка 2146
4 деньБелка 12610
4 деньБелка 2135
5 деньБелка 1174
5 деньБелка 2217

Исходя из этих данных необходимо узнать, сколько шишек осталось у Белки 1 в дупле. Для этого необходимо вычесть из 100 шишек количество выброшенных Белкой 1 и прибавить шишки, заброшенные в ее дупло Белкой 2. Вычисления начинаем со второй строки (в первой заголовки) и в условии для цикла Do Until… Loop указываем «первая ячейка текущей строки является пустой». Таблица должна начинаться с первой ячейки рабочего листа «A1», и под ней, как минимум, одна строка должна быть пустой, точнее, первая ячейка этой строки.

Sub test3()

Dim i As Long, n As Long

i = 2

n = 100

Do Until Cells(i, 1) = “”

If Cells(i, 2) = “Белка 1” Then

n = n – Cells(i, 3)

Else

n = n + Cells(i, 4)

End If

i = i + 1

Loop

MsgBox n

End Sub

Результат, выведенный в информационном сообщении, будет равен 40. Вы можете скопировать таблицу на свой лист книги Excel и поэкспериментировать с кодом VBA.

Бесконечный цикл и Exit Do

Пример бесконечного цикла:

Sub test4()

Dim a As Byte

Do Until a > 10

a = a + 1

If a = 10 Then

a = 0

End If

Loop

End Sub

При запуске этой процедуры цикл Do Until… Loop начинает выполняться бесконечно. Мне приходилось останавливать бесконечные циклы VBA в Excel 2000 и Excel 2016. В Excel 2000 помогло сочетание клавиш Ctrl+Break, а в Excel 2016 при закрытии редактора VBA крестиком появляется окно:

Информационное окно «Microsoft Excel не отвечает»

Информационное окно «Microsoft Excel не отвечает»

Ожидать отклика программы нет смысла, поэтому нажимаем «Перезапустить программу» или «Закрыть программу».

Совет: перед запуском процедуры с циклом Do Until… Loop, который может стать бесконечным, обязательно сохраните книгу, иначе, при принудительном закрытии редактора VBA ваши изменения будут утеряны. Кроме того, при принудительном закрытии редактора VBA, Excel может отключить макросы. Включите их в окне «Центр управления безопасностью», открыть которое можно по ссылке «Безопасность макросов» на ленте в разделе «Разработчик». Подробнее о включении макросов в разных версиях Excel читайте в статье: Как разрешить выполнение макросов в Excel?.

Пример использования оператора Exit Do:

Sub test5()

Dim a As Byte, n As Long

Do Until a > 10

a = a + 1

n = n + 1

If a = 10 Then

a = 0

End If

If n = 1000 Then

Exit Do

End If

Loop

MsgBox n

End Sub

Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное сообщение MsgBox выведет на экран число повторений цикла Do Until… Loop из этого примера.

Источник

Операторы DO…LOOP организуют циклическое выполнение группы операторов ограниченных телом цикла DO…LOOP пока (WHILE) или до тех пор, пока (UNTIL) условие продолжение цикла истинно.

Рассмотрим полный синтаксис оператора DO…LOOP.

С постусловием:

DO

<операторы>

LOOP [{WHILE | UNTIL} <условие_продолжения_цикла>]

С предусловием:

DO [{WHILE | UNTIL} <условие продолжения цикла>]

<операторы>

LOOP

где:

  • <условие_продолжения_цикла> – логическое выражение;
  • <операторы> – список выполняемых операторов программы;
  • WHILE – если условие выполняется, то выполнить <операторы>, если нет – завершить работу;
  • UNTIL – если условие не выполняется, то выполнить <оператор>, иначе завершить работу.

Если рассмотреть этот синтаксис, становится понятно, что если перенести условие продолжения цикла, то в принципе ничего в работе программы не изменится, единственное необходимо подумать что ставить: WHILE или UNTIL. Не верите? Проверьте.

Для примера сложим числа от 1 до 100.

Пример с DO…LOOP…WHILE:

  1. “SLOZHENIE DO 100”
  2. SUM = 0
  3. DO
  4. INPUT “VVEDITE CHISLO: “, A
  5. SUM = SUM + A
  6. LOOP WHILE (SUM < 100)
  7. SUM

Рисунок 1 – Пример использования DO…LOOP…WHILE

Рисунок 2 – Результат выполнения DO…LOOP…WHILE

Пример той же задачи с DO…LOOP…UNTIL:

  1. “SLOZHENIE DO 100”
  2. SUM = 0
  3. DO
  4. INPUT “VVEDITE CHISLO: “, A
  5. SUM = SUM + A
  6. LOOP UNTIL (SUM >= 100)
  7. SUM
Читайте также:  Кровотечение во время менструального цикла

Рисунок 3 – Пример использования DO…LOOP…UNTIL

Рисунок 4 – Результат выполнения DO…LOOP…UNTIL

Мы рассмотрели самые базовые примеры на оператор DO…LOOP. Попробуйте разобрать задачи ниже самостоятельно. Некоторые операторы в этих задачах мы не рассматривали ранее, если задачи покажутся вам пока сложными, вернитесь к ним попозже.

Рассмотрим сложный пример.

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

  1. INPUT “DELIMOE: “, A ‘CHTO DELIM
  2. INPUT “DELITEL: “, B ‘NA CHTO DELIM
  3. N = 5 ‘NOMER STROKI DLYA VYVODA NA PECHAT
  4. M = 4 ‘NOMER STOLBTSA DLYA VYVODA NA PECHAT
  5. LOCATE N, M
  6. A; “:”; B
  7. A1 = A ‘ KOPIYA CHISL (BUDEM YEYE LOMAT)
  8. DO
  9. F = F + 1 ‘ FLAZHOK DLYA REZULTATA
  10. C = A1 B ‘REZULTAT
  11. K = 1 ‘KOEFFITSIYENT DLYA UMNOZHENIYA
  12. DO WHILE C > 9
  13. ‘OCHEREDNAYA TSIFRA REZULTATA (UMENSHAYEM REZULTAT POKA NE POLUCHIM TSIFRU)
  14. C = C 10
  15. K = K * 10 ‘UVELICHIVAYEM KOEFFITSIYENT
  16. LOOP
  17. N = N + 1 ‘MENYAYEM STROKU I STOLBETS PECHATI
  18. LOCATE N, M
  19. “-“; B * C;
  20. IF F = 1 THEN ” “; A B ELSE
  21. A1 = A1 – B * C * K ‘PROMEZHUTOCHNYY OOK
  22. A2 = A1
  23. DO WHILE A2 B > 10
  24. ‘UMENSHAYEM PROMEZHUTOCHNYY OOK – SNESENNYYE TSIFRY DELIMOGO
  25. A2 = A2 10
  26. LOOP
  27. N = N + 1
  28. M = M + 1
  29. LOCATE N, M
  30. A2
  31. LOOP UNTIL A1 < B
  32. “RESULT=”; A B

Рисунок 5 – Решение задачи на деление с остатком двух заданных натуральных чисел

Рисунок 6 – Результат выполнения задачи на деление с остатком двух заданных натуральных чисел

Задача. Вывести таблицу служебных кодов ASCII по нажатию клавиши.

  1. DO
  2. KB$ = INKEY$
  3. IF (KB$ <> “”) THEN
  4. IF LEFT$(KB$, 1) = CHR$(0) THEN
  5. LOCATE , 20
  6. “INKEY$ = CHR$(0) + CHR$(“;
  7. LTRIM$(STR$(ASC(RIGHT$(KB$, 1)))); “)”
  8. ELSE
  9. LOCATE , 20
  10. “INKEY$ = CHR$(“; LTRIM$(STR$(ASC(KB$))); “)”
  11. END IF
  12. END IF
  13. LOOP UNTIL (KB$ = CHR$(27))

Рисунок 7 – Решение задачи на поиск кода ASCII

Рисунок 8 – Результат выполнения задачи на поиск кода ASCII

Задача. Дана последовательность N-целых чисел, заканчивающихся 0. Определить является ли она возрастающей.

  1. DO
  2. N = N + 1
  3. “VVEDITE CHISLO N” + CHR$(248); N;
  4. INPUT “: “, C
  5. IF C = 0 THEN EXIT DO
  6. IF N > 1 AND C <= OC THEN NEVOZ = 1
  7. OC = C
  8. LOOP
  9. IF NEVOZ THEN “NE “;
  10. “VOZRASTAUSHAJA POSLEDOVATELNOST”

Рисунок 9 – Решение задачи задачи на определения возрастающей последовательности

Рисунок 10 – Результат выполнения задачи на определения возрастающей последовательности

Спасибо за прочтение этой статьи.

Прикрепленные файлы:

Источник

Автор admin Опубликовано 10 декабря 2011

Урок из серии: «Программирование на Visual Basic.NET для школьников»

Существует несколько разновидностей циклов с неизвестным числом повторений.

На прошлом уроке мы рассмотрели цикл с предусловием Do While.

На этом уроке познакомимся с ещё одной разновидностью цикла с условием – циклом с постусловием, научимся его использовать.

Цикл называется циклом с постусловием, если условие выхода из цикла стоит в конце, после тела цикла.

Алгоритм выполнения оператора:

  1. Выполняется тело цикла.
  2. Изменяется значение переменной цикла.
  3. Проверяется условие окончания цикла.
  4. Если условие истинно (True), поисходит выход из цикла.
  5. Если условие ложно(False), то действия повторяются с пункта 1.

Особенностью этого цикла является то, что тело цикла в любом случае выполняется хотя бы один раз (независимо от того, выполняется условие или нет).

Цикл с постусловием реализуется с помощью конструкции Do . . . Loop Until.

Общий вид оператора:

Do <тело цикла> Loop Until <условие выхода>

Преждевременный выход из цикла программист может организовать при помощи конструкции Exit Do.

Проект «Проверка номера»

Смоделируйте ситуацию проверки правильности набора номера телефона в городе N. Будем считать, что телефон набран верно, если количество набранных цифр соответствует длине телефонного номера для данного города.

Технология выполнения

  1. Создайте интерфейс по образцу.
  2. Установите для текстового поля значение свойства MaxLength равным 9 (максимальное количество цифр, которое позволяется ввести в поле), выберите для надписи label2 значение свойства BorderStyle равным Fixed3D.
  3. В окне редактора кода после строки

    «Код, автоматически созданный конструктором форм Windows»

    введите строку кода: Const nmax = 6 ‘Константа, определяющая длину набора в данном городе

  4. Наберите программный код процедуры Button1_Click:

    Dim n As Integer ‘Введенный номер Dim k As Byte ‘Счетчик цифр n = Val(TextBox1.Text) k = 0 Do k = k + 1 n = n 10 Loop Until n = 0 If k = nmax Then Label2.Text = “Соединение возможно” : Beep() ElseIf k < nmax Then Label2.Text = “Неправильно набран номер: не хватает цифр” Else Label2.Text = “Неправильно набран номер: слишком много цифр” End If

  5. Запустите программу несколько раз для проверки всех возможных ситуаций.
  6. сохраните программу.

Проект «Простые множители»

Требуется создать программу разложения произвольного целого числа на простые множители. Предлагается следующий алгоритм: сначала число делится на 2 до тех пор, пока не станет нечетным. Затем оно делится последовательно на 3, 5, 7, пока результат леления не станет равным 1.

Технология выполнения

  1. Создайте интерфейс по образцу.
  2. С помощью окна Свойства задайте следующие значения свойств:
    ОбъектСвойствоЗначение
    Form1Text«Простые множители»
    Label1TextTextAlign«Введите число:»

    MiddleCenter

    TextBox1TextMax

    Length

    TextAlign

    пусто

    10

    Center

    ButtonText

    TextAlign

    «Разложить»

    MiddleCenter

    Label2Text

    TextAlign

    BorderStyle

    пусто

    MiddleCenter

    Fixed3D

    Для текстового поля TextBox1 свойство MaxLength задает максимальную длину числа при вводе данных с клавиатуры.

  3. Наберите текст программы

    ‘ Разложение на простые множители Dim n, n1 As Integer ‘Исходное число и его дубликат Dim del As Byte ‘Простой делитель Dim str As String ‘Строка для вывода n = Val(TextBox1.Text) del = 2 n1 = n Str = “” Do If n Mod del = 0 Then n = n del ‘В строку добавляется новый множитель str = str & CStr(del) ‘Выводится “*” после всех множителей, кроме последнего If n <> 1 Then str = str & “*” Else ‘После “2” все простые множители нечетны If del = 2 Then del = 3 Else del = del + 2 End If Loop Until n = 1 Label2.Text = n1 & “=” & str

  4. Сохраните программу.
  5. Доработайте программу таким образом, чтобы она подсчитывала количество множителей.
  6. Введите проверку на равенство подсчитанного количества множителей единице. Если равенство выполняется, выведите сообщение, что введенное число является простым
  7. Сохраните доработанную программу.

До встречи на следующем уроке.

Источник

Паскаль - Урок 6: Циклы while, for, repeat

Вчера мы узнали о понятии циклы в паскале в общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл while с предусловием, цикл for с параметром и цикл repeat – until с постусловием.

1. Цикл с параметром в Паскале – FOR

Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта – счетчик который обычно обозначается буквой i или j.

Внешний вид цикла с параметром в паскале:

for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, …, n

После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to – это до .. в порядке возрастания, также есть downto – до .. в порядке убывания.

Блок – схема цикла с параметром:

2. Цикл с предусловием в Паскале – WHILE

Оператор цикла с предусловием выполняет действия заранее неизвестное число раз. Выход из цикла осуществляется, если некоторое логическое выражение или его результат окажется ложным. Так как верность логического выражения проверяется в начале, тело цикла может не выполнится ни одного разу.

Структура цикла с предусловием: WHILE DO begin end;

– логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;

– любые выполняемые операторы языка.

Порядок выполнения цикла:

Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

Блок – схема цикла с предусловием:

Паскаль - Урок 6: Циклы while, for, repeat

Примечание: в прямоугольных блоках показано любое действие, которое выполняется в цикле или после него (шаг цикла), в овалах – начало или конец всей программы или её части. Главную роль в данной блок – схеме играет её центральная часть.

Пример:

Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30

program example-while;

var sum:real; n:real; BEGIN sum:=0; n:=1; while n

3. Цикл с постусловием – Repeat – until.

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

Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.

Последовательность операторов, входящих в тело цикла выполняется один раз, после чего проверяется соблюдение условия, записанного следом за служебным словом Until. Если условие не соблюдается, цикл завершается. В противном случае – тело цикла повторяется ещё раз, после чего снова проверяется соблюдение условия.

Блок – схема цикла с постусловием:

Формат записи, структура цикла: REPEAT UNTIL ; Program test2; Var b:Real; Begin b:=100; Repeat b:=b/2; Until b

Выводы:

1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).

2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.

3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.

Предыдущий урок

Дата: 2012-01-06 19:31:43 Просмотров: 294505

Теги: Паскаль Pascal циклы уроки

Источник

Условный цикл while…do

Слово while переводится как пока, а do – как делать. Другими словами, цикл while…do выполняется до тех пор, пока какое-то условие верно. Синтаксис:

while <условие> do <оператор>;

Здесь, условие – какое то условное выражение или логическая переменная. Если переменная или выражение имеют значение true, то цикл будет выполняться до тех пор, пока это значение не станет false. И только тогда цикл прекратит свою работу.

Если же значение условия изначально будет false, то цикл не будет выполнен ни разу.

Оператор также может быть составным, если находится в скобках begin…end.

В цикле while…do также можно использовать операторы break и continue.

В этом цикле очень легко совершить ошибку, не предусмотрев внутри цикла изменения условия. Вот простейший пример:

var b: boolean; begin b:= true; while b = true do ShowMessage(‘Истина’);

Здесь цикл while будет выполняться до тех пор, пока b будет оставаться true. А поскольку внутри цикла не предусмотрено изменение значения b, цикл получился “зацикленным”. Он будет выводить сообщение “Истина” до тех пор, пока у вас не сгорит компьютер, либо пока вы сами его со злости не разобьёте (шучу, у вас всегда есть возможность прервать зависшую программу).

Обратите внимание на строку

Я так написал, чтобы сразу было понятно, что тут к чему. Для цикла важно, чтобы условие было истинным. Поскольку b действительно равно true, то условие истинно. Но в этом случае можно было написать проще:

Ведь b итак содержит true! А зацикленный цикл можно написать еще понятней, вообще обойдясь без переменной:

Делать, пока истина, то есть, всегда. Все эти три примера будут равноценны. Однако вернемся к нашему проекту, и опробуем цикл на практике. Мы будем 100 делить на любое введенное пользователем число, и выводить результат. Причем будем делать это, пока пользователю не надоест, то есть, заранее неизвестно, сколько раз. Когда же ему надоест вводить числа, он введет ноль. Мы со своей стороны выведем сообщение, что на нуль делить нельзя, и на этом завершим работу цикла. Проверку на корректность введенного числа производить не будем. Пользователь сам будет контролировать введенное значение.

Чтобы не заниматься переделкой кода, добавим на форму еще одну кнопку, в Caption которой напишем

чтобы было понятно, какая кнопка с каким циклом работает. Для кнопки сгенерируем такое событие OnClick:

procedure TfMain.Button2Click(Sender: TObject); var s: string; //для получения числа от пользователя r: real; //результат деления begin //начинаем цикл while true do begin //очистим строку: s:= ”; //получим число от пользователя: InputQuery(‘100 / на…’, ‘Введите число’, s); //если ноль, выводим сообщение и выходим из цикла: if s = ‘0’ then begin ShowMessage(‘На нуль делить нельзя!’); break; end; //если еще не вышли, значит не нуль. делим: r:= 100 / StrToFloat(s); //выводим результат: ShowMessage(‘100 / ‘ + s + ‘ = ‘ + FloatToStr(r)); end; //конец цикла end;

Комментарии достаточно подробны, но все же проясним некоторые детали. Прежде всего, мы сделали “зацикленный” цикл:

Ведь заранее мы не знаем, когда пользователю надоест вводить разные числа, и он введет ноль, чтобы завершить цикл. Но внутри цикла у нас предусмотрен досрочный выход из цикла:

if s = ‘0’ then begin ShowMessage(‘На нуль делить нельзя!’); break; end;

Поэтому компьютер не зависнет – стоит пользователю ввести ноль, как цикл прекратится. Как пользоваться функцией InputQuery() вы, надеюсь, не забыли? Если забыли, вернитесь к “Стандартные строковые функции и сообщения” . Всё остальное должно быть понятно по предыдущим примерам.

Когда цикл начнется, пользователю выйдет запрос:

Запрос пользователю

Рис. 10.3. Запрос пользователю

При вводе числа не забывайте о десятичном разделителе, который зависит от языка операционной системы. В русских Windows это запятая, в английских – точка. Если введете неправильное (некорректное) число, программа зависнет. Сбросить отладку просто: <Запуск -> Сбросить отладчик>.

Условный цикл repeat…until

Цикл repeat…until – еще один условный цикл. Однако есть и отличия. Если while…do – цикл с предусловием, то repeat…until имеет постусловие. То есть, если в цикле while…do вначале проверяется условие, и в зависимости от этого условия принимается решение – выполнять ли цикл, то в repeat…until вначале выполняется цикл, а затем только проверяется условие. Другими словами, цикл repeat…until обязательно будет выполнен хотя бы однажды. Причем, опять таки, в отличие от while…do, цикл repeat…until будет выполняться до тех пор, пока условие ложно, и прекратит свою работу, когда условие станет истинным.

Англ. repeat переводится, как повторять, until – до тех пор, пока… Другими словами – выполнять какие то действия до тех пор, пока не выполнится условие. Синтаксис простой:

repeat <оператор(ы)> until <условие>;

Обратите внимание: ключевые служебные слова repeat…until работают, как операторские скобки begin…end, поэтому в тело цикла можно включить сколько угодно операторов. Проверим работу цикла на примере. Добавьте в проект третью кнопку, в Caption которой напишите

Код нажатия на кнопку будет следующий:

procedure TfMain.Button3Click(Sender: TObject); var i: byte; s: string; begin //зададим начальное значение счетчика: i:= 1; //теперь сам цикл: repeat s:= s + ‘Квадрат от ‘ + IntToStr(i) + ‘ равен ‘ + IntToStr(i * i) + #13; i:= i + 1; until i > 10; //отчет: ShowMessage(s); end;

Как видите, внутри цикла выполняется два оператора, при этом никаких скобок begin…end не используется. Внутри цикла мы обеспечиваем наращивание счетчика – если этого не сделать, программа зациклится, так как i никогда не станет больше 10. В нашем примере i увеличивается, и как только она станет больше 10, цикл прекращает работу, управление передается дальше, на ShowMessage(). В результате мы получим следующий отчет:

Работа цикла repeat…until

Рис. 10.4. Работа цикла repeat…until

Операторы break и continue также можно использовать в этом цикле.

Переключатель case

Переключатель case не относится к циклам, это оператор множественного выбора. Синтаксис:

case <Селектор> of <Значение 1>: <Оператор 1>; <Значение 2>: <Оператор 2>; … <Значение n>: <Оператор n> else <Оператор Иначе>; end;

Здесь, Селектор – это переменная или выражение исчисляемого типа. То есть, как правило, это целое число или символ (для ПК символ – число, номер в таблице ANSI, то есть, исчисляемый тип), или выражение, которое возвращает в результате целое число или символ.

Далее, в зависимости от значения селектора, выполняется соответствующий оператор. Если нужно выполнить блок операторов, их заключают в операторские скобки begin…end.

Блок else не является обязательным, но если он есть, то этот блок выполняется в том случае, если значение селектора не соответствует ни одному проверяемому значению. Как обычно, перед else точка с запятой не ставится, а после else не нужно ставить двоеточие.

Для примера установим на форму последнюю, четвертую кнопку, в Caption которой напишем:

Код события нажатия на кнопку будет таким:

procedure TfMain.Button4Click(Sender: TObject); var i: integer; s: string; begin //очистим строку: s:= ”; //получим число от пользователя: InputQuery(‘Квадрат целого числа’, ‘Введите целое число от 1 до 3:’, s); //преобразуем строковое представление числа в число: i:= StrToInt(s); //теперь выбор case case i of 1: ShowMessage(‘Квадрат от 1 равен 1’); 2: ShowMessage(‘Квадрат от 2 равен 4’); 3: ShowMessage(‘Квадрат от 3 равен 9’) else ShowMessage(‘Неизвестное число, нет решения’); end; end;

Код достаточно понятен, чтобы его дополнительно комментировать. Когда пользователь нажмет на кнопку “case”, выйдет запрос на ввод целого числа. Если ввести число от 1 до 3, то будет выполнен соответствующий оператор. Если целое число будет другим, выполнится оператор else. Если ввести не целое число, а что-то другое, то произойдет ошибка, которую можно будет снять, сбросив отладчик.

Если вам потребуется выполнить более одного оператора в каждом случае, то это можно оформить, например, так (код для примера, выполнять его вам не нужно):

case i of 1 : begin ShowMessage(‘i = 1’); f:= 10; end; 2 : begin ShowMessage(‘i = 2’); f:= 20; end; 3 : begin ShowMessage(‘i = 3’); f:= 30; end; else ShowMessage (‘i не равно 1, 2, или 3’); end; //конец case

Собственно, этот же код можно было бы реализовать и посредством условного оператора if:

if i = 1 then … else i = 2 then …

и так далее. Однако данный пример больше подходит для инструкции case – код получается более компактным, лучше читаемым. На сегодня это всё, данных инструментов будет достаточно, чтобы организовать сколь угодно сложную логику программы.

Источник

Читайте также:  Неприятный запах в середине цикла