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

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

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

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

 

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

 

1 ВАРИАНТ 2 ВАРИАНТ
LABELm; VAR f : Integer; BEGIN Write('Начало счета '); f:=3; m: Write(f,' '); f:=f+2; if f<=9 then goto m; Write(' Конец счета') END. LABELm1,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 ВАРИАНТ
LABELm1,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 2 3 4 . . . 99 100 99 . . . 3 2 1.

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

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

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