Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Builder 2курс.doc
Скачиваний:
4
Добавлен:
16.11.2019
Размер:
1.26 Mб
Скачать

4. 2. Цикл while

Синтаксис оператора while выглядит так: while (условие продолжения) оператор

Сначала оценивается условие_продолжения. Если оно истинно, выполняется оператор, после чего управление возвращается заголовку цикла, и все повторяется снова. Когда условие оказывается ложным, управление передается следующему после цикла оператору. Как обычно, одиночный оператор тела цикла можно заменить блоком, заключенным в фигурные скобки:

whi1е (условие_продолжения)

{

операторы_тела цикла

}

4. 3. Цикл do while

Этот цикл имеет такой вид:

do оператор while (условие продолжения);

Здесь сначала выполняется оператор, а затем производится проверка условия_продолжения. Если условие истинно, управление возвращается в начало цикла; если ложно, цикл завершается и управление переходит к оператору, следующему за циклом.

Отличие от предыдущей конструкции очевидно — тело цикла do... while исполняется хотя бы один раз вне зависимости от каких-либо условий, в то время как в цикле while при ложном условии тело не исполняется вообще. Хотя конкретную программную задачу можно решить, применив любую из этих конструкций, чаще всего одно из двух решений оказывается более экономным.

4. 4. Цикл for

Цикл for, наиболее универсальный из всех циклов языка С, выглядит так:

for ([инициализация]; [условие]; [модификация]) оператор

Прежде всего выполняется инициализация цикла; секция инициализации может содержать любое выражение. Инициализация производится только один раз перед началом работы цикла. Оценивается выражение условия. Если оно истинно, выполняется оператор тела цикла; если условие ложно, происходит выход из цикла и управление передается следующему оператору.

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

Как видно из синтаксического описания, любую секцию заголовка цикла for можно опустить, но разделители — точки с запятой — все равно должны присутствовать.

Если опущено условие, цикл будет выполняться бесконечно. Простейшей и самой популярной конструкцией на основе цикла for является цикл с управляющей переменной-счетчиком:

int i;

for (i =0; i < REPEAT; i++)

DoSomething (i);

Счетчик инициализируется значением 0. В начале каждого прохода цикла проверяется, не достиг ли он значения REPEAT. Как только i станет равным REPEAT, тело цикла пропускается и управление передается следующему оператору. В конце каждого прохода i увеличивается на единицу [1].

  Любую конкретную структуру повторения, требуемую для решения некоторой задачи, можно реализовать на основе любого из циклов С, однако всегда какой-то из них подходит к данному случаю наилучшим образом, позволяя написать более ясный и компактный код. Так, если необходимое число итераций цикла известно заранее (как при обработке массива), проще всего применить цикл for. Если же число итераций заранее определить нельзя, как в нашем примере обработки команд (момент завершения цикла определяется пользователем) или при операциях поиска в списке, применяют цикл while или do. . .while.

У структур повторения в ряде ситуаций есть альтернатива. Это рекурсия, заключающаяся в том, что функция вызывает саму себя. Естественно, такой вызов должен быть условным, т. е. обязательно должен наступить такой момент, когда на очередном шаге рекурсивного вызова не происходит. Есть классический пример рекурсии — вычисление факториала:

unsigned Fac(unsigned n)

{

if (n)

return n * Fac(n - 1);

else

return 1;

}

 

Пример 1. Протабулировать функцию в заданном интервале [2,3] с шагом 0,1 [3].       

1. Поместите на форму объекты: Edit1, Edit2, Edit3, Label1, Label2, Label3, Memo1, Button1, Button2.

2. Присвойте объектам свойства согласно таблице:

Объект

Свойства

Значение

Edit1

Text

‘’

Edit2

Text

‘’

Edit3

Text

‘’

Label1

Caption

A=

Label2

Caption

B=

Label3

Caption

H=

Memo1

Lines

‘’

Button1

Caption

Выполнить

Button2

Caption

Выход

 

3. Дважды щёлкнув по кнопке “Выход”, впишите в месте, где мигает курсор

   Close();

4. Дважды щёлкнув по кнопке “Выполнить”, впишите следующий код:

 

                  

5. Сохраните проект в папке и выполните его.

 

Пример 2. Найти минимальное и максимально значение данной функции в заданном интервале:  [2; 3].

1. Поместите на форму объекты: Edit1, Edit2, Edit3, Label1, Label2, Label3, Memo1, Button1, Button2.

2. Присвойте объектам свойства согласно таблице:

Объект

Свойства

Значение

Edit1

Text

 

Edit2

Text

 

Edit3

Text

 

Edit4

Text

 

Edit5

Text

 

Label1

Caption

A=

Label2

Caption

B=

Label3

Caption

H=

Label4

Caption

Max

Label5

Caption

Min

Button1

Caption

Выполнить

Button2

Caption

Выход



3. Дважды щёлкнув по кнопке “Выход”, впишите в месте, где мигает курсор

Close();

4. Дважды щёлкнув по кнопке “Выполнить”, впишите следующий код:


 

5. Сохраните проект в папке и выполните его.

Результат выполнения программы: