Урок 7. Если ... , то..., или иначе?

Тема: Язык программирования Logo

Если..., то...

Наш исполнитель-черепаха выполняет код, который мы пишем, последовательно сверху вниз, команда за командой. Ни одна команда не пропускается. На самом деле можно написать код так, что часть команд может не выполняться вообще. Вы спросите, зачем это нужно? Бывает, что выполнение определенной части кода зависит от того, что случилось до этого в программе. Например, если до этого в программе использовалось число больше пяти, то некая часть кода будет выполнена. Но если в программе "обитает" некое число меньше пяти, то часть кода будет пропущена. Посмотрите на следующий код:

сброс
$число = 10
напиши "Сейчас, сейчас ..."
иди 150,250
если $число > 5 {
	напиши "Ура"
}

Переменная $число была связана с ячейкой памяти, куда мы поместили чиcло 10. При инструкции "если" мы утверждаем, что значение переменной $число больше 5. Если это так (если это правда), то черепаха выполнит то, что находится внутри фигурных скобок. В данном случае она напишет на холсте слово "Ура". Но если утверждение "$число больше 5" будет ложью, то черепаха не обратит никакого внимания на код внутри скобок, для нее этого кода как бы не будет существовать.

Поскольку у нас в переменной $число содержится 10, а 10 явно больше 5, то утверждение $число > 5 является правдой, и код внутри фигурных скобок будет выполнен.

Сравнивать можно не только по принципу "что больше чего", но и по принципу «что меньше чего", "что не равно чему" и т.п. Для каждой операции сравнения есть свой знак или группа знаков. Вот таблица операций сравнения для языка Лого (Logo), который используется в среде KTurtle:

Операция Обозначение
Равно ==
Меньше <
Больше >
Не равно !=
Меньше или равно <=
Больше или равно >=

Только не путайте операцию сравнения "равно", которая обозначается двумя знаками ==, с операцией присвоение значения переменной, которая обозначается одним знаком =. При "==" мы сравниваем два значения между собой, а при "=" записываем в именованную ячейку памяти (переменную) какое-нибудь значение.

Задание

Спишите код, представленный выше. Посмотрите, как он работает. Затем измените значение переменной $число таким образом, чтобы код внутри инструкции "если" не выполнялся (т.е. слово "Ура" не должно выводиться на холст, но вся конструкция "если" должна остаться в исходном коде).

Если..., то..., или иначе

Из примера, приведенного выше, вы должны были заключить, что выполнение программы может быть различным в зависимости оттого, что произошло до этого. В примере выше мы просто пропускали часть кода, если определенное условие не было соблюдено. Однако часто используется более сложная конструкция. В ней в зависимости от ложности или истинности утверждения сравнения двух величин выполняется либо один код, либо другой. Т.е. эта конструкция организует две ветки кода, из которых на самом деле выполняется только одна. Какая именно зависит от того, было ли утверждение сравнения правдивым или оно было ложным. Если утверждение истинно, то выполняется первая часть кода (при инструкции "если"), если ложным – то вторая (при инструкции "иначе"). Вот код, содержащий эту сложную "двойную" конструкцию:

сброс
$линия = "зел"
 
если $линия == "зел" {
	толщина_пера 20
	цвет_пера 0, 136, 50 
}
иначе {
	толщина_пера 10
	цвет_пера 200, 136, 50 
}
 
вперёд 100
иди 10,10

Здесь, если переменная $линия равна строке "зел", то сработает код внутри фигурных скобок при инструкции "если". Во всех остальных случаях, т.е. когда переменная $линия будет равна чему угодно, но не "зел", будет срабатывать код внутри скобок при инструкции "иначе". Но чему бы ни была равна переменная $линия, какая-нибудь из двух инструкций обязательно сработает.

Две последние строчки кода находятся уже за пределами всей конструкции "если – иначе" и выполняются в обязательном порядке, чтобы до этого не происходило. Эти две строчки находятся за пределами скобок и относятся к так называемой "основной ветке программы", т.е. не являются вложенными (не находятся в фигурных скобках) в другие инструкции.

Задание

  1. Спишите код, представленный выше (с конструкцией "если – иначе"). Выполните его. Что вы увидели на холсте и почему? Какая часть кода не выполнялась?
  2. Измените значение переменной $линия таким образом, чтобы выполнялся код при инструкции "иначе", а при инструкции "если" соответственно не выполнялся.
  3. Напишите программу, которая заставляет черепашку выводить на холсте приветствие большими буквами, если только в какой-нибудь переменной содержится ваше имя. Во всех остальных случаях должен выводиться вопрос "А вы кто?".
  4. Напишите программу, которая выводит на экран квадрат, если значение какой-нибудь переменной равно 4, а во всех остальных случаях меняет размер холста и заливает его красным цветом.

Примерный ответ к заданию 3

сброс
$имя = "Саша"
размер_шрифта 24
иди 100, 200
 
если $имя == "Саша" {
	напиши "Приииивееет!!!"
}
иначе {
	напиши "А вы кто?"
}

Примерный ответ к заданию 4

сброс 
$число = 14
если $число == 4 {
	иди 150, 150
	назад 100
	налево 90
	назад 100
	налево 90
	назад 100
	налево 90
	назад 100
	налево 90
}
иначе {
	размер_холста 400, 100
	цвет_холста 255, 0, 0
}