Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Самоучитель.doc
Скачиваний:
59
Добавлен:
11.02.2015
Размер:
3.67 Mб
Скачать
      1. Выход из цикла с помощьюif

Интересно рассмотреть применение оператора goto внутри операторов if или case.

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

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

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

1 ВАРИАНТ

2 ВАРИАНТ

LABEL m; VAR f : Integer; BEGIN Write('Начало счета '); f:=3; m: Write(f,' '); f:=f+2; if f<=9 then goto m; Write(' Конец счета') END.

LABEL m1,m2; VAR f : Integer; BEGIN Write('Начало счета '); f:=3; m1: Write(f,' '); f:=f+2; if f>9 then goto m2 else goto m1; m2: Write(' Конец счета') 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 выполняется три раза. На четвертый раз условие 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:

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

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

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

Совет: Теперь, когда вы владеете отладочным режимом, смело применяйте его всякий раз, когда ваша программа не хочет делать то, что нужно. Зачем ломать голову над непослушной программой? – Берегите серое вещество, жмите F7!

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

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

В Паскале - три оператора цикла: repeat, while и for. Первым изучим оператор repeat.

Конструкция repeat . . . . . until a+2>3*bчитается "ри'пит.....ан'тил...", а переводится "повторяй......до тех пор, пока a+2 не станет больше 3*b".

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

2 ВАРИАНТ

ВАРИАНТ С REPEAT

LABEL m1,m2; VAR f : Integer; BEGIN Write('Начало счета '); f:=3;

m1: Write(f,' '); f:=f+2; if f>9 then goto m2 else goto m1; m2: Write(' Конец счета') END.

VAR f : Integer; BEGIN Write('Начало счета '); f:=3; repeat

Write(f,' '); f:=f+2; until f>9;

Write(' Конец счета')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, '!') untilSlovo='Хватит'; WriteLn('Хватит так хватит')END.

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

Задание 38-39:Выполнить с применением оператора repeat последние два задания из предыдущего параграфа.

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