Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
19
Добавлен:
12.03.2016
Размер:
3.29 Mб
Скачать
    1. Циклические программы

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

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

Write ('Это '); Write ('тело '); Write ('цикла'); Write (' ')

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

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

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

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

метка m1: Write ('Это '); Write ('тело '); Write ('цикла'); Write (' '); иди к оператору, помеченному меткой m1

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

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

m1: Write ('Это '); Write ('тело '); Write ('цикла'); Write ('       '); GOTO m1

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

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

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

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

LABELm1;BEGINm1: Write ('Это '); Write ('тело '); Write ('цикла'); Write ('       ');gotom1END.

Если вы уже запустили эту программу, то через некоторое время перед вами должен встать жизненно важный вопрос – как же ее остановить? Для этого достаточно прочесть параграф «Выполнение программы» из части IV. Вот вкратце, что вам нужно оттуда знать:

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

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

Пример программы:

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;

a:=100;

goto 8;

a:=a+1;

k:=k+10;

WriteLn(k,' ' ,a);

А операторы a:=a+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;

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

ReadLn;

k:=k+1;

goto met5;

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

END.

А теперь, уважаемый читатель, нам с вами пришла пора снова отвлечься от программирования и расширить свои знания о работе на компьютере. Сейчас вам необходимо проделать то, что сказано в части IV в параграфе «Работа с несколькими окнами» и пункте «Работа с окнами пользователя и отладчика» параграфа «Исправление ошибок. Отладка программы».

Задания 31-33:

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

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

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

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

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

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]