Урок 4

Операторы управления. Операторы цикла «for» и «repeat».

На этом уроке мы познакомимся с другими видами операторов управления. Это операторы цикла «for» и «repeat».

Задача: посчитать сумму целых чисел от 1 до 5 и сумму квадратов этих чисел. Вот скрипт, позволяющий решить эту задачу

s1=0
s2=0
for i = 1, 5
  s1 = s1 + i
  s2 = s2 + i*i
stop

Оператор «for». заставляет многократно выполняться строки тела цикла. Тело цикла – это строки скрипта, расположенные ниже оператора «for» и имеющие отступ на две позиции превышающий отступ оператора «for». В нашем примере тело цикла состоит из 2-х строк

  s1 = s1 + i
  s2 = s2 + i*i

Разберем синтаксис оперепора «for». Переменная «i» называется переменной цикла. Цифры 1 и 5 – начальное и конечное значение переменной цикла. В нашем случае цикл будет выполняться 5 раз, а переменная «i» при этом будет последлвательно принимать значения 1, 2, 3, 4, 5.

Запустите программу «Василиса», выполните команду «Новый» и наберите предложенный скрипт. Перейдите в режим работы, кликните мышкой по нулевой строке. Нажимайте клавишу F8 (шаговый режим) до тех пор, пока не доберётесь до строки «stop». Следите за тем, как меняются значения переменных.

Это операторы цикла «for»

В более общем виде оператор «for» имеет вид

for i = n1,n2,n3

n1 – начальное значение переменной цикла n2 – конечное значение переменной цикла n3 – шаг переменной цикла

Переменные n1, n2, n3 должны иметь целочисленные значения. Вместо переменных можно использовать целые числа или целочисленные выражения. Шаг цикла можно не указывать, тогда он будет считаться равным единице.

В качестве самостоятельной работы посчитайте сумму чётных чисел от 2 до 100 и сумму квадратов этих же чисел. (ответ s1=2550, s2= 171700). А теперь познакомимся с двумя дополнительными операторами управления цикла: breakif и continueif. Эти операторы можно использовать только в теле цикла.

Оператор breakif (от английских слов break и if) позволяет досрочно прервать выполнение цикла. За ключевым словом breakif должно следовать логическое выражение. Если это выражение будет иметь значение ИСТИНА, то выполнение цикла прервётся, если ЛОЖЬ, то продолжится.

Напишем скрипт для решения задачи: «В какую наименьшую степень нужно возвести число 2, чтобы результат превысил 1000, и каков будет это результат?».

s=1
for i = 1, 100
  s = s * 2
  breakif s > 1000
stop

Пояснение. При первом проходе цикла переменная i принимает значение 1, а переменная s принимает значение 2, т.е. 21. При втором проходе цикла переменная i принимает значение 2, а переменная s принимает значение 4, т.е. 22. Выполнение цикла принудительно обрывается, когда переменная s превысит 1000. Переменная i будет равна степени, в которую возвели число 2.

Выполните команду «Новый» и наберите предложенный скрипт. Перейдите в режим работы, кликните мышкой по нулевой строке. Выполняйте скрипт в шаговом режиме до тех пор, пока не доберётесь до строки «stop». Следите за тем, как меняются значения переменных.

Это операторы цикла «for»

Ответ: число 2 нужно возвести в 10-ю степень, результат будет 1024. Оператор continueif позволяет досрочно прервать выполнение строк тела цикла и продолжить выполнение цикла с очередным значением переменной цикла. За ключевым словом continueif должно следовать логическое выражение. Если это выражение будет иметь значение ИСТИНА, то выполнение тела цикла прервётся. Если выражение будет иметь значение ЛОЖЬ, то выполнение тела цикла продолжится.

Для закрепления на практике напишем скрипт для решения задачи: посчитать сумму чисел от 1 до 10 и одновременно сумму чётных чисел из этого же интервала.

s1=0
s2=0
for i = 1, 10
  s1 = s1 + i
  continueif (i % 2) = 1
  s2 = s2 + i
stop

Пояснение:

*Цикл будет выполняться 10 раз. Строка «s1 = s1 + i» будет выполняться все 10 раз и в переменной s1 накапливается сумма всех чисел от 1 до 10.* *Выражение «(i % 2)» - это остаток деления значения переменной i на 2. Значит, если i нечётное, то логическое выражение «(i % 2) = 1» принимает значение ИСТИНА и оператор «continueif» прерывает выполнение тела цикла, строка* «s2 = s2 + i» – не срабатывает, а выполнение цикла продолжится уже со следующим значением переменной цикла i. *Если i чётное, то логическое выражение «(i % 2) = 1» принимает значение ЛОЖЬ, оператор «continueif» не прерывает выполнение тела цикла, строка «s2 = s2 + i**» – выполняется и в переменной s2 накапливается сумма чётных чисел.* Протестируйте этот скрипт в шаговом режиме. Сверьте результаты.

Оператор continue

А теперь познакомимся с другим оператором цикла «repeat». Этот оператор предпочтителен для случаев, когда заранее неизвестно количество циклов повторения. Рассмотрим пример

s=0
i=0
repeat
  i=i+1
  s=s+i

Операторы:

  i=i+1
  s=s+i

составляют тело цикла. Тело цикла образуют строки расположенные под оператором «repeat» и имеющие отступ, на две позиции превышающие отступ оператора «repeat». В данном примере строки тела цикла будут выполняться бесконечное количество раз, что приведёт к «зависанию» программы. Чтобы прервать выполнение цикла при выполнении определённого условия, в теле цикла должен присутствовать оператор «breakif».

Вот так выглядит скрипт для вычисления суммы чисел от 1 до 5.

s=0
i=0
repeat
  i=i+1
  s=s+i
  breakif i = 5

или так

s=0
i=0
repeat
  i=i+1
  breakif i > 5
  s=s+i

В теле цикла можно использовать так же оператор «continueif», который будет срабатывать так же, как в теле цикла «for».

В качестве самостоятельной работы используя оператор «repeat» решите задачу : «В какую наименьшую степень нужно возвести число 2, чтобы результат превысил 1000, и каков будет это результат?». У вас уже есть решение этой задачи с помощью оператора «for».