Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы_Информатика.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

Дополнительные операторы управления циклами

В теле всех трех циклов можно применять два специальных оператора: BREAK и CONTINUE. Оператор BREAK вызывает досрочный выход из цикла. Например, вернемся к задаче суммирования ряда натуральных чисел 1+2+3+… Мы хотим узнать, на каком числе этого ряда его сумма превысит 100. Программа с BREAK выглядит так:

VAR s:WORD; { сумма }

i: WORD; { текущее число ряда }

BEGIN

s:=0; { сумму обязательно обнуляем!!! }

i:=1; { начинаем суммировать с единицы }

WHILE TRUE DO { вечный цикл?! Не совсем…}

BEGIN

s:=s+i;

i:=i+1;

IF s>100 THEN

BREAK

END;

Label1.Caption:='Сумма превысит 100 при i='+IntToStr(i)

end;

Наличие оператора BREAK позволило смело совершить программистское преступление – написать вечный цикл WHILE TRUE DO. Прерывание цикла при s>100 обеспечивает оператор BREAK.

Оператор CONTINUE, наоборот, переходит в начало цикла и начинает следующую итерацию. Это позволяет пропустить часть итераций. Например, мы хотим вывести на экран все целые числа от 1 до 100, которые не делятся на 3. Делается это так:

VAR i:BYTE

BEGIN

FOR i:=1 TO 100 DO

BEGIN

IF (i MOD 3=0) THEN

CONTINUE;

Memo1.Lines.Add(IntToStr(i))

END;

Обратите внимание на способ проверки делимости. Операция MOD вычисляет остаток от деления нацело. Скажем, 10 MOD 3=1. Если одно число нацело делится на другие, то остаток будет равен нулю. В этом случае условие в операторе IF оказывается истинным и выполняется оператор CONTINUE. Он пропускает остаток тела цикла и снова возвращается к оператору FOR. Если же значение переменной i не делится на три, тело цикла выполняется дальше.

Операторы BREAK и CONTINUE являются вспомогательными – любой алгоритм можно запрограммировать и без них, но во многих случаях они оказываются удобными.

Вложенные циклы

Внутри одного цикла может находиться другой, внутри его – еще один и т.д. Такая "матрешка" нужна для решения многих задач. Рассмотрим пример вложенных циклов. Пусть задана прямоугольная решетка на плоскости размером 1020. Нужно вывести на экран координаты всех узлов такой решетки. Делается это так:

VAR i, j: WORD;

BEGIN

FOR i:=1 TO 10 DO

FOR j:=1 TO 20 DO

Memo1.Lines.Add('X='+IntToStr(i)+' , Y='+IntToStr(j))

В данном случае BEGIN…END не нужны: внутри внешнего цикла находится только один оператор FOR j:=1 TO 20. Кстати, вложенными могут быть циклы всех трех типов.

На блок-схеме приведенная программа будет выглядеть следующим образом (рис. 4):

Рис. 4. Обозначение вложенного цикла на блок-схемах.

Инструкция goto

Инструкции if и case используются для выбора последовательности инструкций программы в зависимости от некоторого условия, поэтому их иногда называют инструкциями условного перехода. Помимо этих инструкций управления ходом выполнения программы существует еще одна — инструкция безусловного перехода goto.

В общем виде инструкция goto записывается следующим образом:

goto Метка

где метка — это идентификатор, находящийся перед инструкцией, которая должна быть выполнена после инструкции goto.

Метка, используемая в инструкции goto, должна быть описана в разделе меток программы, который начинается словом label и располагается перед разделом описания переменных.

Метка помечает какое-либо место в тексте программы. Метками могут быть числа от 0 до 9999 или идентификаторы, которые в этом случае уже нельзя использовать для каких-либо иных нужд. Все метки должны быть описаны в специальном разделе label:

label <список_всех_меток_через_запятую>;

Меткой может быть помечен любой оператор программы

<метка>: <оператор>;

В тексте программы метка ставится перед инструкцией, которая должна быть выполнена после инструкции goto. Сразу после метки ставится двоеточие.

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

procedure TForml.ButtonlClick(Sender: TObject);

label { раздел объявления меток } bye;

var

n: integer; { проверяемое число }

d: integer; { делитель }

r: integer; { остаток от деления n на d}

begin

n;=StrToInt(Editl.text) ;

if n <= 0 then begin

MessageDlg('Число должно быть больше нуля.', mtError,[mbOk],0) ;

Editl.text:= ' ';

goto bye;

end;

{ введено положительное число } d:= 2; { сначала будем делить на два }

repeat

r:= n mod d;

if r <> 0 { n не разделилось нацело на d } then d:= d + 1;

until r = 0;

label2.caption:=Editl.text ;

if d = n

then label2.caption:=label2.caption

+ ' простое число.' else label2.caption:=label2.caption

+ ' обычное число.' ;

bye:

end;

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

3. ОБЪЕКТЫ ИССЛЕДОВАНИЯ, ОБОРУДОВАНИЕ, МАТЕРИАЛЫ И НАГЛЯДНЫЕ ПОСОБИЯ

3.1. IBM – совместимый компьютер.

3.2. Установленная операционная система Windows.

3.3. Установленное приложение Borland Delphi.

3.4. Справочная система приложения Borland Delphi.

4. ЗАДАНИЕ НА РАБОТУ

4.1. Изучение теоретические положения работы по программированию в среде Borland Delphi.

4.2. Выполнение индивидуального задания преподавателя по программированию в пределах вопросов, рассмотренных в данной лабораторной работе.

5. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

5.1. Ознакомиться с теоретическими положениями данной лабораторной работы.

5.2. Выполнить индивидуальное задание преподавателя по программированию (по заданиям приложения).

5.3. Оформить отчет по работе.

5.4. Защитить лабораторную работу путем ответа на вопросы преподавателя.

6. СОДЕРЖАНИЕ ОТЧЕТА

6.1. Описание цели работы.

6.2. Основные теоретические положения работы

6.3. Содержание индивидуального задания преподавателя по программированию.

6.4. Описание методики выполнения индивидуального задания.

7. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

7.1. Delphi 7 : [наиболее полное руководство] / А. Д. Хомоненко [и др.];под общ.ред.А.Д.Хомоненко .— СПб. : БХВ - Петербург, 2007 .— 1216с. : ил. (7 экз.)

7.2. Программирование в Delphi 7 / П. Г. Дарахвелидзе, Е. П.Марков .— СПб.: БХВ -Петербург, 2004 .— 784c. : ил. (1 экз.)

7.3 Осипов Д. Delphi. Профессиональное программирование. - СПб.: Символ-Плюс, 2006. -1056 с., ил.

ПРИЛОЖЕНИЕ

Индивидуальные задания