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

6.2. Выход из цикла с помощью if

В первой программе из 6.1 и в заданиях 30-33 компьютер выполняет цикл бесконечное число раз. В реальных задачах всегда требуется, чтобы компьютер когда-нибудь перестал работать по циклу, то есть вышел из цикла. Для решения этой задачи рассмотрим применение оператора goto внутри операторов if или case.

Задача. При помощи цикла напечатать на экране:

Начало счета 3 5 7 9 Конец счета

Вот 3 варианта программы. Первый - самый простой, а второй и третий нам понадобятся в дальнейшем.

Вариант 1 Вариант 2

LABEL m; LABEL m1,m2;

VAR f: Integer; VAR f: Integer;

BEGIN BEGIN

Write('Начало счета '); Write('Начало счета ').

f:=3; f:=3;

m: Write(f,' '); m1: Write(f,' ');

f:=f+2; f:=f+2;

if f<=9 then goto m; if f>9 then goto m2

else goto m1;

Write(Конец счета’) m2: Write(‘Конец счета’)

END. END.

Вот в каком порядке выполняются операторы программы первого варианта:

Write('Начало счета ') f:=3 Write(f;' ') {печатается 3} f:=f+2 {f становится равным 5} if f<=9 goto m Write(f,' ') {печ. 5} f:=f+2 {f=7} if f<=9 goto m Write(f,' ') {печ. 7} f:=f+2 {f=9} if f<=9 goto m Write(f,' ') {печ. 9} f:=f+2 {f = 11} if f<=9 Write('Конец счета')

Здесь оператор goto выполняется 3 раза. На четвертый раз условие f<=9 оказывается ложным и поэтому выполняется не goto, а следующий за if оператор Write('Конец счета'), то есть программа выходит из цикла и завершает свою работу.

Вариант 3

LABEL m1,m2,m3;

VAR f: Integer;

BEGIN

Write('Начало счета ');

f:=3;

m1: if f<=9 then goto m3

else goto m2;

m3: Write(f,' ');

f:=f+2;

goto m1;

m2: Write(' Конец счета')

END.

Задания 34-36

34.

  1. напечатать 1 2 3 4 ... 99 100;

  2. напечатать 100 99 ... 3 2 1;

  3. напечатать 1 2 3 4 ... 99 100 99 ... 3 2 1.

35. "Таблицы Брадиса". Вычислить и напечатать с шестью десятичными знаками квадраты чисел 0.000 0.001 0.002 0.003 ... 0.999 1.000.

36. Для х = 2700, 900, 300, 100... и т.д. вычислять и печатать у = х/4 + 20 и z = 2у + 0.23 до тех пор, пока yz не станет меньше 1/х.

Совет. Теперь, когда вы владеете отладочным режимом, смело применяйте его всякий раз, когда ваша программа не хочет делать то, что нужно. Для этого существует клавиша F7.

6.3. Оператор цикла repeat

Циклы настолько широко применяются в программах, что у программистов давным-давно появилась потребность написать специальный оператор цикла, не использующий оператор goto, так как последний неудобен хотя бы тем, что у программистов, пишущих большие программы, много времени и внимания уходит на поиск глазами меток в тексте программы.

В Паскале 3 оператора цикла: repeat, while и for. Первым изучим оператор repeat. Конструкция repeat... until a + 2>3*b (читается - "ри'пит...ан'тил..") переводится как "повторяй... до тех пор, пока а + 2 не станет больше 3 * b".

Составим с использованием оператора repeat программу решения задачи о печати чисел 3 5 7 9 из предыдущего раздела. Для того, чтобы точно определить работу оператора repeat, приведем ee параллельно со вторым вариантом программы решения этой задачи из того же раздела:

Вариант 2 Вариант с repeat

LABEL m1,m2;

VAR f: Integer; VAR f: Integer;

BEGIN BEGIN

Write('Начало счета '); Write('Начало счета ');

f:=3; f:=3;

ml: repeat

Write(f,' '); Write(f,' ');

f:=f+2; f:=f+2;

if f>9 then goto m2 until f>9;

else goto m1;

m2: Write(' Конец счета') Write(' Конец счета')

END. END.

Порядок работы обеих программ совершенно одинаков, так что можно считать слово repeat заменой метки m1, а конструкцию until f>9 считать заменой оператора

if f>9 then goto m2 else goto m1.

Синтаксис оператора repeat:

REPEAT оператор ; оператор ;. . . ; оператор UNTIL условие

Работу оператора repeat можно описать так: повторяй выполнение операторов, стоящих между словами repeat и until, до тех пор, пока не станет истинным условие.

Более подробно работа оператора repeat описывается так:

Сначала компьютер по очереди выполняет операторы, стоящие после слова repeat, пока не дойдет до слова until, после чего проверяет истинность условия, стоящего после until. Если условие ложно, то компьютер снова по очереди выполняет эти операторы и снова проверяет истинность условия и т.д. Если условие оказывается истинным, то работа оператора repeat прекращается и компьютер переходит к выполнению следующего по порядку оператора.

Задача. Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его восклицательным знаком. Затем снова предлагает ввести слово, и так до тех пор, пока человек не введет слово "Все". Распечатав и его с восклицательным знаком, компьютер отвечает: "Все так Все" - и заканчивает работу.

Придумаем строковую переменную, в которую человек будет с клавиатуры вводить слово. Назовем ее Slovo.

VAR Slovo :String;

BEGIN

repeat

WriteLn('Введите слово');

ReadLn(Slovo);

WriteLn(Slovo,'!')

until Slovo='Все';

WriteLn('Все так Все')

END.

Задание 37

Усложним предыдущую задачу. Пусть компьютер перед распечаткой каждого слова ставит его порядковый номер.

Задания 38-39

Выполнить с применением оператора repeat последние два задания из предыдущего раздела.

Задание 40

Если камень бросить горизонтально со 100-метровой башни со cкоростью v = 20 м/с, то по законам физики расстояние, которое он пролетит от башни по горизонтали (s), будет выражаться формулой s = vt, где t - время полета камня в секундах. Высота над землей h пудет выражаться формулой h = 100 - 9.81t2/2. Вычислять и печатать t, s и h для t = 0, 0.2, 0.4, 0.6 и т. д. до тех пор, пока камень не упадет на землю.