Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

Глава 6. Циклические программы

6.1. Оператор перехода goto. Цикл. Метки

Цикл - главное средство заставить компьютер много раз сделать одно и то же или похожее. Первое представление о цикле было в разделе 2.8. Без цикла невозможны ни повторяющиеся узоры, ни движение, ни расчеты по таблицам, ни многое другое. Посмотрим, как осуществить цикл на Паскале. Предположим, мы хотим, чтобы компьютер бесконечно повторял выполнение следующего фрагмента:

Write ('Это');

Write ('тело');

Write ('цикла');

Write (' ')

в результате чего на мониторе мы бы увидели:

Это тело цикла Это тело цикла Это тело цикла Это тело цикла...

Большинство языков программирования (в том числе и Паскаль) устроены так, что операторы выполняются в том порядке, в котором они записаны. Это значит, что после оператора Write ('Это') обязательно выполнится оператор Write ('тело'), а после него - Write ('цикла') а после него - Write (' '). Нам нужно, чтобы после выполнения оператора Write (' ') Паскаль нарушал этот свой принцип последовательного выполнения операторов и выполнял бы оператор Write ('Это'). Если мы этого добьемся, то дальше все пойдет само собой, так как после Write ('Это') Паскаль автоматически выполнит Write ('тело') и так далее до бесконечности.

Если бы операторы Паскаля можно было писать по-русски, то для достижения нашей цели было бы естественно воспользоваться такой конструкцией:

метка m1: Write ('Это');

Write ('тело');

Write ('цикла');

Write (' ');'

иди к оператору, помеченному меткой ml

Здесь мы видим новый для нас "оператор" ИДИ, который выполняется после Write (' ') и единственная работа которого заключается в том, чтобы заставить компьютер перескочить к выполнению оператора Write ('Это').

А вот как этот фрагмент выглядит реально на Паскале:

m1: Write ('Это');

Write ('тело ');

Write ('цикла');

Write (' ');

GOTO ml

Здесь GOTO - оператор перехода (читается - "гоуту", переводится как "иди к"); m1 – метка.

Метка - это произвольное имя или произвольное не слишком большое целое положительное число. Оператор goto можно писать if любых местах программы, и метку можно ставить перед любым оператором, заставляя компьютер таким образом перескакивать в программе куда угодно. Метка должна отделяться от оператора двоеточием.

Подобно тому, как переменные, встречающиеся в программе, должны быть описаны выше BEGIN после слова VAR, метки, встречающиеся в программе, тоже должны быть описаны выше BEGIN после слова LABEL (читается - "лэйбл", переводится как "метка").

Вот наша программа полностью:

LABEL m1;

BEGIN

m1: Write ('Это');

Write ('тело');

Write ('цикла');

Write (' ');

goto m1

END.

Для прерывания работы программы (в том числе и зациклившейся), существует комбинация клавиш Ctrl-Break ( удерживая нажатой клавишу Ctrl, вы должны щелкнуть по клавише Break). На экран возвращается окно редактора. Строка программы, на которой она была прервана, выделяется полосой белого цвета. Если вы снова запустите программу, она продолжит работу с прерванного места. Чтобы начать сначала, уберите полосу с экрана клавишами Ctrl-F2.

Группа операторов, выполняющихся многократно, называется телом цикла. У нас это все операторы начиная с Write ('Это') кончая GOTO m1.

Чтобы привыкнуть к goto, рассмотрим еще один пример программы:

LABEL 8;

VAR a,k: Integer;

BEGIN

k:=6;

a:=100;

goto 8;

a:=a+k;

k:=2*k;

WriteLn(a);

8: a:=a+1;

k:=k+10;

WriteLn(k,' ',a);

END.

Эта программа напечатает 16 101. Операторы выполняются в такой последовательности:

k:=6

а:=100

goto 8

а:=а+1

k:=k+10

WriteLn(k,' ',а)

Как видите, здесь никакого цикла нет, а операторы а:=а+k; k:=2*k; WriteLn(a) выполнены не будут вообще, несмотря на то что написаны.

Задание 30

Определить без компьютера, что будет печатать программа

LABEL m1, met5;

VAR n,k: Integer;

BEGIN

n:=10;

k:=0;

WriteLn('Считаем зайцев');

met5: Write(n);

n:=n+k;

goto m1;

n:=n+1;

ml: Write('зайцев ');

ReadLn;

k:=k+1;

goto met5;

WriteLn('Посчитали зайцев')

END.

А теперь пришла пора снова отвлечься от программирования и расширить свои знания о работе на компьютере. Сейчас вам необходимо проделать то, что сказано в час­ти 4, в подразделе "Работа с окнами пользователя и отладчика"

Задания 31-33

Написать программы для выполнения следующих заданий:

31. Бесконечно печатать букву А: ААААААААААА.....

32. Бесконечно печатать 1000 999 998 997 996 .......

33. Бесконечно печатать 100 50 25 12.5... с восьмью десятичными знаками.

Примечание. Во всех программах используйте ReadLn без скобок для создания паузы в каждом цикле. Чтобы программа шла все-таки довольно быстро, нажмите клавишу ввода и не отпускайте ее. Для выхода из зациклившейся программы нажмите Ctrl-Break, а затем Enter.