Операторы выбора — if , if-else и switch
if-else switch Операторы if выбора и инструкции для выполнения из множества возможных путей на основе значения выражения. Оператор if выполняет инструкцию только в том случае, если заданное логическое выражение вычисляется true . Оператор if-else позволяет выбрать, какие из двух путей кода следует выполнять на основе логического выражения. Оператор switch выбирает список инструкций для выполнения на основе сопоставления шаблона с выражением.
Инструкция if
Оператор if может быть в любой из следующих двух форм:
-
Оператор if с частью else выбирает для выполнения один из двух операторов на основе значения логического выражения, как показано в следующем примере:
DisplayWeatherReport(15.0); // Output: Cold. DisplayWeatherReport(24.0); // Output: Perfect! void DisplayWeatherReport(double tempInCelsius) < if (tempInCelsius < 20.0) < Console.WriteLine("Cold."); >else < Console.WriteLine("Perfect!"); >>
DisplayMeasurement(45); // Output: The measurement value is 45 DisplayMeasurement(-3); // Output: Warning: not acceptable value! The measurement value is -3 void DisplayMeasurement(double value) < if (value < 0 || value >100) < Console.Write("Warning: not acceptable value! "); >Console.WriteLine($"The measurement value is "); >
Операторы if можно вкладывать для проверки нескольких условий, как показано в следующем примере:
DisplayCharacter('f'); // Output: A lowercase letter: f DisplayCharacter('R'); // Output: An uppercase letter: R DisplayCharacter('8'); // Output: A digit: 8 DisplayCharacter(','); // Output: Not alphanumeric character: , void DisplayCharacter(char ch) < if (char.IsUpper(ch)) < Console.WriteLine($"An uppercase letter: "); > else if (char.IsLower(ch)) < Console.WriteLine($"A lowercase letter: "); > else if (char.IsDigit(ch)) < Console.WriteLine($"A digit: "); > else < Console.WriteLine($"Not alphanumeric character: "); > >
В контексте выражения можно использовать условный оператор ?: для вычисления одного из двух выражений на основе значения логического выражения.
Инструкция switch
Оператор switch выбирает список операторов, который нужно выполнить, на основе соответствия шаблона выражению соответствия, как показано в следующем примере:
DisplayMeasurement(-4); // Output: Measured value is -4; too low. DisplayMeasurement(5); // Output: Measured value is 5. DisplayMeasurement(30); // Output: Measured value is 30; too high. DisplayMeasurement(double.NaN); // Output: Failed measurement. void DisplayMeasurement(double measurement) < switch (measurement) < case < 0.0: Console.WriteLine($"Measured value is ; too low."); break; case > 15.0: Console.WriteLine($"Measured value is ; too high."); break; case double.NaN: Console.WriteLine("Failed measurement."); break; default: Console.WriteLine($"Measured value is ."); break; > >
В предыдущем примере оператор switch использует следующие шаблоны:
- Реляционные шаблоны — для сравнения результата выражения с константой.
- Шаблон константы: проверьте, равен ли результат выражения константе.
Сведения о шаблонах, поддерживаемых оператором switch , см. в статье Шаблоны.
В предыдущем примере также показана ветвь default . Ветвь default указывает операторы, которые нужно выполнить, если выражение не соответствует ни одному другому шаблону. Если выражение совпадения не соответствует ни одному шаблону регистра, и нет default регистра, элемент управления попадает через инструкцию switch .
Оператор switch выполняет список операторов в первом разделе switch, шаблон ветви которого соответствует выражению соответствия, а условие ветви, если оно есть, равно true . Оператор switch оценивает шаблоны ветвей в порядке, в котором они указаны в коде, сверху вниз. Компилятор создает ошибку, если оператор switch содержит недостижимую ветвь. Это ветвь, которая уже была обработана в верхнем регистре или шаблон которой невозможно сопоставить.
Ветвь default может находиться в любом месте в операторе switch . Независимо от его положения, регистр вычисляется только в том случае, default если все остальные шаблоны регистра не совпадают или goto default; оператор выполняется в одном из разделов коммутатора.
Можно указать несколько шаблонов ветвей для одного раздела оператора switch , как показано в следующем примере:
DisplayMeasurement(-4); // Output: Measured value is -4; out of an acceptable range. DisplayMeasurement(50); // Output: Measured value is 50. DisplayMeasurement(132); // Output: Measured value is 132; out of an acceptable range. void DisplayMeasurement(int measurement) < switch (measurement) < case < 0: case >100: Console.WriteLine($"Measured value is ; out of an acceptable range."); break; default: Console.WriteLine($"Measured value is ."); break; > >
В операторе switch элемент управления не может переходить от одного раздела коммутатора к следующему. Как показано в примерах этого раздела, обычно в конце каждого раздела switch используется оператор break для передачи управления из оператора switch . Вы также можете использовать операторы return и throw, чтобы передать управление из оператора switch . Чтобы имитировать такое поведение ветви и передать управление другому разделу switch, можно использовать оператор goto .
В контексте оператора можно использовать оператор switch , чтобы вычислить одно выражение из списка кандидатов на основе сопоставления шаблона с выражением.
Охранные условия
Шаблон ветви может недостаточно полно выражать условие выполнения раздела switch. В этом случае можно использовать условие ветви. Это дополнительное условие, которое должно выполняться помимо соответствия шаблону. Условие случая должно быть логическим выражением. Охранное условие указывается после ключевого слова when , идущего за шаблоном, как показано в следующем примере.
DisplayMeasurements(3, 4); // Output: First measurement is 3, second measurement is 4. DisplayMeasurements(5, 5); // Output: Both measurements are valid and equal to 5. void DisplayMeasurements(int a, int b) < switch ((a, b)) < case (>0, > 0) when a == b: Console.WriteLine($"Both measurements are valid and equal to ."); break; case (> 0, > 0): Console.WriteLine($"First measurement is , second measurement is ."); break; default: Console.WriteLine("One or both measurements are not valid."); break; > >
В предыдущем примере используются шаблоны положений со вложенными шаблонами отношений.
Спецификация языка C#
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:
См. также
- справочник по C#
- Условный оператор ?:
- Логические операторы
- Шаблоны
- Выражение switch
- Добавление отсутствующих случаев для переключения инструкции (правило стиля IDE0010)
Ветвление. Условный оператор if-else в Python
Ход выполнения программы может быть линейным, то есть таким, когда выражения выполняются друг за другом, начиная с первого и заканчивая последним. Ни одна строка кода программы не пропускается.
Однако чаще в программах бывает не так. При выполнении кода, в зависимости от тех или иных условий, некоторые его участки могут быть опущены, в то время как другие – выполнены. Иными словами, в программе может присутствовать ветвление, которое реализуется условным оператором – особой конструкцией языка программирования.
Проведем аналогию с реальностью. Человек живет по расписанию. Можно сказать, расписание – это алгоритм для человека, его программный код, подлежащий выполнению. В расписании на 18.00 стоит поход в бассейн. Однако экземпляр биоробота класса Homo sapiens через свои рецепторы-сенсоры получает информацию, что воду из бассейна слили. Разумно было бы отменить занятие по плаванию, то есть изменить ход выполнения программы-расписания. Одним из условий посещения бассейна должно быть его функционирование, иначе должны выполняться другие действия.
Подобная нелинейность действий может быть реализована в компьютерной программе. Например, часть кода будет выполняться лишь при определенном значении конкретной переменной. В языках программирования используется приблизительно такая конструкция условного оператора:
if логическое_выражение
Перевести на человеческий язык можно так: если логическое выражение возвращает истину, то выполняются выражения внутри фигурных скобок; если логическое выражение возвращает ложь, то код внутри фигурных скобок не выполняется. С английского «if» переводится как «если».
Конструкция if логическое_выражение называется заголовком условного оператора. Выражения внутри фигурных скобок – телом условного оператора. Тело может содержать как множество выражений, так и всего одно.
Пример использования условного оператора в языке программирования Python:
if n 100: a = a + b
В Питоне вместо фигурных скобок используется двоеточие. Обособление вложенного кода, то есть тела оператора, достигается за счет отступов. В программировании принято делать отступ равным четырем пробелам. Можно использовать клавишу табуляции ( Tab ) на клавиатуре.
Большинство сред программирования автоматически создают отступ, как только вы поставите двоеточие и перейдете на новую строку. Однако при работе в интерактивном режиме отступы надо добавлять вручную.
Нахождение в теле условного оператора здесь обозначается тремя точками. При создании файла со скриптом таких точек быть не должно, как и приглашения >>> .
Python считается языком с ясным синтаксисом и легко читаемым кодом. Это достигается сведением к минимуму таких вспомогательных элементов как различные скобки и точка с запятой. Для разделения выражений используется переход на новую строку, а для обозначения вложенных выражений – отступы от начала строки. В других языках данный стиль программирования также используется, но лишь для удобочитаемости кода человеком. В Питоне же такой стиль возведен в ранг синтаксического правила.
Данный пример вырван из контекста и сам по-себе не является рабочим. Полная версия программы могла бы выглядеть так:
a = 50 b = 10 n = 98 if n 100: a = a + b print(a)
Последняя строчка кода print(a) уже не относится к условному оператору, что обозначено отсутствием перед ней отступа. Она не является вложенной в условный оператор, значит, не принадлежит ему.
Поскольку переменная n равна 98, а это меньше 100, то a станет равной 60. Это значение будет выведено на экран. Если переменная n изначально была бы связана, например, со значением 101, то на экран было бы выведено 50. Потому что при n , равной 101, логическое выражение в заголовке условного оператора вернуло бы ложь. Значит, тело не было бы выполнено, и переменная a не изменилась бы.
Структуру программы можно изобразить следующим образом:
Основная ветка программы выполняется всегда, а вложенный код лишь тогда, когда в темно-зеленой строчке, обозначающей заголовок условного оператора, случается истина.
Для небольших программ иногда чертят так называемые блок-схемы, отражающие алгоритм выполнения. В языке блок-схем различные части кода обозначаются своими фигурами. Так блоку последовательно выполняемых действий соответствует прямоугольник, ветвлению – ромб. Для кода выше блок-схема может выглядеть так:
Условный оператор может включать не одну ветку, а две, реализуя тем самым полноценное ветвление.
В случае возврата логическим выражением False поток выполнения программы не возвращается сразу в основную ветку. На случай False существует другой вложенный код, отличный от случая True . Другими словами, встретившись с расширенной версией условного оператора, поток выполнения программы не вернется в основную ветку, не выполнив хоть какой-нибудь вложенный код.
В языках программирования разделение на две ветви достигается с помощью добавления блока else, получается так называемое if–else (если-иначе). Синтаксис выглядит примерно так:
if логическое_выражение < выражение 1; выражение 2; … >else
Если условие при инструкции if оказывается ложным, то выполняется блок кода при инструкции else . Ситуация, при которой бы выполнились обе ветви, невозможна. Либо код, принадлежащий if , либо код, принадлежащий еlse . Никак иначе. В заголовке else никогда не бывает логического выражения.
Пример программы с веткой else на языке Python (под ним показаны варианты выполнения):
your_money = int(input('Сколько у вас монет? ')) sword = 50 helmet = 32 if sword + helmet > your_money: print('Вы не можете купить меч и шлем') else: print('Удачный апгрейд!')
Сколько у вас монет? 85 Удачный апгрейд!
Сколько у вас монет? 63 Вы не можете купить меч и шлем
Следует иметь в виду, что логическое выражение при if может выглядеть нестандартно, то есть не так как a > b и тому подобное. Там может стоять просто одна переменная, число, слово True или False , а также сложное логическое выражение, когда два простых соединяются через логически and или or .
a = ? if a: a = 1
Если вместо знака вопроса будет стоять 0, то с логической точки зрения это False , значит выражение в if не будет выполнено. Если a будет связано с любым другим числом, то оно будет расцениваться как True , и тело условного оператора выполнится. Другой пример:
a = 5 > 0 if a: print(a)
Здесь a уже связана с булевым значением. В данном случае это True . Отметим, что в выражении a = 5 > 0 присваивание выполняется после оператора сравнения, так что подвыражение 5 > 0 выполнится первым, после чего его результат будет присвоен переменной a . На будущее, если вы сомневаетесь в последовательности выполнения операторов, используйте скобки, например так: a = (5 > 0) .
if a > 0 and a b: print(b - a)
Тут, чтобы вложенный код выполнился, a должно быть больше нуля и одновременно меньше b . Также в Питоне, в отличие от других языков программирования, позволительна такая сокращенная запись сложного логического выражения:
if 0 a b: print(b - a)
Практическая работа
- Напишите программу, которая просит пользователя что-нибудь ввести с клавиатуры. Если он вводит какие-нибудь данные, то на экране должно выводиться сообщение «ОК». Если он не вводит данные, а просто нажимает Enter , то программа ничего не выводит на экран.
- Напишите программу, которая запрашивает у пользователя число. Если оно больше нуля, то в ответ на экран выводится число 1. Если введенное число не является положительным, то на экран должно выводиться -1.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Типы алгоритмов: линейные, разветвляющиеся, циклические
I.Организационный момент.
1. Приветствие ребят. Здравствуйте, ребята! Садитесь! Какое у вас настроение? Если хорошее — улыбнитесь всем! Если нет — посмотрите друг на друга и улыбнитесь! Начнем урок! Я представила вам алгоритм в словесной форме. Посмотрите на доску. Этот же алгоритм изображен графически. Сегодня на уроке мы научимся с вами представлять типы алгоритмов с помощью блок – схем (страница флипчарта 1).
Эпиграфом к нашему уроку будут слова знаменитого французского ученого Гюстава Гийома “Дорогу осилит идущий, а информатику мыслящий”.
2. Объявление целей урока.
II. Актуализация знаний учащихся
Но прежде чем приступим к изучению нового материала. Мы должны вспомнить, что изучали на прошлом уроке.
1. Проверка домашнего задания.
Проверить кроссворды, решенные учениками дома.
Ответы:
1. 1. графический
2. конечность
3. информация
4. исполнитель
5. алгоритм
6. программный
7. план
8. компьютер
9. инструмент
10. рисунок
11. шаг
Учитель объясняет алгоритм выполнения упражнений 1-3. Дети на местах работают с ресурсом.
III. Изучение нового материала.
1. Теоретическая часть.
Алгоритмы бывают трех типов: (страница флипчарта 7)
-линейный
-разветвляющийся
-циклический
Линейные алгоритмы – алгоритм, в котором команды выполняются в порядке их записи, т. е. последовательно друг за другом. (страница флипчарта 8)
Пример 1 (страница флипчарта 9). Сказка «Курочка Ряба»
Алгоритма представлен в виде ссылки на презентацию
Разветвляющийся алгоритм — алгоритм, в котором в зависимости от выполнения некоторого условия совершается либо одна, либо другая последовательность действий (страница флипчарта 10)
В словесном описании разветвляющегося алгоритма используются слова «если», «то», «иначе».
Полная форма: «если выполняется условие, то …, иначе …» . Действия предусмотрены и при выполнении условия, и при его невыполнении. (страница флипчарта 11)
Неполная форма: «если выполняется условие, то …». Действия предусмотрены только при выполнении условия. При невыполнении условия.
Пример 2. (страница флипчарта 12-13)
Если пошёл дождь, то откройте зонт, иначе – зонт положите в сумку (полная форма разветвляющегося алгоритма);
Если пошёл дождь, то откройте зонт (неполная форма разветвляющегося алгоритма).и какие действия не выполняются.
Пример 3. (страница флипчарта 12-13)
“Купить мороженое” .
Циклический алгоритм- алгоритм, в котором действия повторяются конечное число раз. (страница флипчарта 14)
Пример 4. (страница флипчарта 15.) Алгоритм «Наполнение».
Начало
1. Пока ведро неполное, повторять:
2. Налить в ведро кружку воды.
Конец
Проверить, перетащив рисунок на свободное место.
Тренинг-задача № 3 (страница флипчарта 20).
Мальчик учит наизусть четверостишие, заданное по литературе. Он один раз прочитывает четверостишие и пытается воспроизвести его по памяти. Так он будет делать до тех пор, пока не расскажет четверостишие без единой ошибки. Составить действия мальчика в виде блок-схемы.
Проверить, перетащив рисунок на свободное место.
3. Физкультминутка (страница флипчарта 21).
Мы руками поведем —
Будто в море мы плывем.
Раз, два, три, четыре —
Вот мы к берегу приплыли,
Чтобы косточки размять,
Начнем наклоны выполнять —
Вправо, влево, вправо, влево.
Не забудем и присесть —
Раз, два, три, четыре,
На счет пять — за парты сесть.
Мы выполнили алгоритм, и достигли определенной цели: отдохнули, расслабились.
4. Выполнение практической работы. Работа по разноуровневым карточкам. (страница флипчарта 22).
И возвращаемся к словам французского ученого Гюстава Гийома “Дорогу осилит идущий, а информатику мыслящий”.
Укажите стрелочками, к какому типу алгоритма относятся данные изображения. Дайте названия алгоритмам (страница флипчарта 23).
Заполнить таблицу двумя примерами на каждый тип алгоритма (страница флипчарта 24).
Составьте алгоритм в программе Paint, используя команды перемещения и копирования.
Вариант 1.(страница флипчарта 25).
Вариант 2.(страница флипчарта 26).
Эпизод из сказки «Гуси-лебеди».
IV. Домашнее задание (страница флипчарта 27).
1. Выучить конспект.
2. Нарисовать на А4 формате пример циклического алгоритма и блок – схему к сказке «Колобок».
V. Итог урока. (страница флипчарта 28).
На этом урок заканчивается. Наша цель достигнута. Мы повторили основные понятия алгоритма, познакомились типами алгоритмов, успешно применили знания на практике, вспомнили сказки, пословицы.
VI. Рефлексия. (страница флипчарта 29).
–Что вам сегодня понравилось на уроке?
– Что вы запомнили?
– Что было интересного?
VII. Оценивание.
Сегодня у вас будут вместо отметок – смайлики, которыми я оценю ваши успехи на уроке.
Технологическая карта №1
Тема урока: Типы алгоритмов: линейные, разветвляющиеся, циклические.
Цели урока: Научимся составлять классификацию типов алгоритмов;
Научимся представлять алгоритмы в виде блок-схем.
1. Проверка домашнего задания.
Выполнение тестов https://bilimland.kz/ru/courses/informatika-ru/6-klass/lesson/ponyatie-algoritma-i-ispolnitelya
2. Теоретическая часть
Условные обозначения для блок-схем:
— начало или конец программы
— ввод данных
— действия
-условие решения программы
-вывод данных или текста
-цикл с параметром
-подпрограмма
— стрелки – направление процесса
Алгоритмы бывают трех типов: -линейный
-разветвляющийся
-циклический
Линейные алгоритмы – алгоритм, в котором команды выполняются в порядке их записи, т. е. последовательно друг за другом. (страница флипчарта 8)
Пример 1 . Сказка «Курочка Ряба»
Разветвляющийся алгоритм — алгоритм, в котором в зависимости от выполнения некоторого условия совершается либо одна, либо другая последовательность действий.
В словесном описании разветвляющегося алгоритма используются слова «если», «то», «иначе».
Полная форма: «если выполняется условие, то …, иначе …» . Действия предусмотрены и при выполнении условия, и при его невыполнении.
Неполная форма: «если выполняется условие, то …». Действия предусмотрены только при выполнении условия. При невыполнении условия.
Если пошёл дождь, то откройте зонт, иначе – зонт положите в сумку (полная форма разветвляющегося алгоритма);
Если пошёл дождь, то откройте зонт (неполная форма разветвляющегося алгоритма).
Пример 3.
“Купить мороженое” .
Циклический алгоритм- алгоритм, в котором действия повторяются конечное число раз.
Пример 4. Алгоритм «Наполнение».
Начало
1. Пока ведро неполное, повторять:
2. Налить в ведро кружку воды.
Конец
3. Решение задач-тренингов (коллективная работа).
Тренинг-задача № 1.
Составить алгоритм «Почисти ковер».
1.Назови тип алгоритма.
2. Заполни алгоритм.
Записать с помощью блок-схемы пословицу «Болен – лечись, а здоров – берегись».
Тренинг-задача № 3.
Мальчик учит наизусть четверостишие, заданное по литературе. Он один раз прочитывает четверостишие и пытается воспроизвести его по памяти. Так он будет делать до тех пор, пока не расскажет четверостишие без единой ошибки. Составить действия мальчика в виде блок-схемы.
4. Физкультминутка.
Мы руками поведем —
Будто в море мы плывем.
Раз, два, три, четыре —
Вот мы к берегу приплыли,
Чтобы косточки размять,
Начнем наклоны выполнять —
Вправо, влево, вправо, влево.
Не забудем и присесть —
Раз, два, три, четыре,
На счет пять — за парты сесть.
5. Выполнение практической работы. Работа по разноуровневым карточкам.
1. Выполните задание № 1,2,3 по ресурсу www.bilimland.kz
Заполнить таблицу двумя примерами на каждый тип алгоритма.
Составьте алгоритм в программе Paint, используя команды перемещения и копирования.
Вариант 1. «Посадка саженца».
Вариант 2. Эпизод из сказки «Гуси-лебеди».
6. Домашнее задание.
1. Выучить конспект.
2. Нарисовать на А4 формате пример циклического алгоритма и блок – схему к сказке «Колобок».
Примеры линейного алгоритма | Примеры разветвляющегося алгоритма | Примеры циклического алгоритма |
1. Какие типы алгоритмов различают?
2. Какие типы алгоритмов изображены на рисунках.
Разноуровневые карточки
1. Выполните задание № 1,2,3 по ресурсу www.bilimland.kz
Заполнить таблицу двумя примерами на каждый тип алгоритма.
Составьте алгоритм в программе Paint, используя команды перемещения и копирования.
Вариант 1.(страница флипчарта 25).
«Посадка саженца».
Вариант 2.(страница флипчарта 26).
Эпизод из сказки «Гуси-лебеди».
§ 12. Алгоритмическая конструкция ветвление
Довольно часто на поставленный вопрос человек получает ответ «да» или «нет». В зависимости от ответа он определяет свои действия и выполняет одну или другую команду (группу команд).
Роботы и другие технические устройства тоже могут выполнять различные действия в зависимости от условия. Если условие истинно (на вопрос получен ответ «Да»), то выполняются одни действия, если ложно, то другие.
Алгоритмическая конструкция ветвление обеспечивает выполнение одной или другой последовательности команд в зависимости от истинности или ложности некоторого условия.
Ветвление может изображаться на блок-схеме следующим образом:
В данной конструкции в прямоугольнике(ах) записываются команды алгоритма. При такой организации алгоритма может выполниться только одна из двух команд (последовательностей команд). Другая последовательность будет проигнорирована (пример 12.1).
Для записи конструкции ветвления в языке программирования Pascal используется команда if . Формат записи команды:
if условие > then
Строка if условие > then является заголовком ветвления. Эту строку можно прочитать следующим образом: «Если условие верно, то». После слова then записывается последовательность команд 1, которая выполнится, если условие истинно. После слова else записывается последовательность команд 2, которая выполнится, если условие ложно. Слова begin и end; в данном случае играют роль операторных скобок. Обратите внимание, что перед словом else точка с запятой не ставится.
Ветвление может быть записано в полной или сокращенной форме.
Полная форма ветвления предусматривает организацию выполнения двух разных наборов команд, из которых выполняется только один. В сокращенной форме один из наборов команд (чаще по ответу «Нет») опускается. В этом случае, если условие ложное, то никакие действия не выполняются.
На блок-схеме сокращенная форма ветвления изображается следующим образом:
На языке программирования Pascal команда запишется следующим образом:
Алгоритм может содержать более одной конструкции ветвления (пример 12.3).
Пример 12.4. Решим задачу if 1 из встроенного задачника.
Робот должен закрасить клетку, которая находится за стеной. В зависимости от обстановки обход стены может осуществляться по-разному.
Вначале Робот должен сдвинуться вправо. Если стена снизу, то сверху свободно и можно обойти стену сверху, в противном случае Робот обходит стену снизу.
После обхода стены Робот закрашивает клетку. Алгоритм можно записать следующим образом:
Если сверху свободно, то
вверх; вправо; вниз;
вниз; вправо; вверх;
Пример 12.5. Робот находится на неизвестной клетке поля без линий. Он должен закрасить клетку слева от себя.
Для того чтобы закрасить клетку слева от себя, Робот должен переместиться влево, а затем закрасить клетку. Однако сделать это Робот сможет только тогда, когда не находится в клетках, являющихся левой границей поля. Поэтому, прежде чем сдвинуться влево, Робот должен проверить, свободно ли слева.
Результат работы данной программы зависит от начального положения Робота. Поэтому для проверки правильности работы программы необходимо подготовить начальные обстановки, которые дают разные ответы на вопрос: слева пусто?
12.2. Составные условия
В качестве условия в алгоритмах с циклами и ветвлениями используется любое понятное исполнителю этого алгоритма высказывание, которое может быть либо истинным, либо ложным.
Все условия, с которыми нам приходилось до сих пор встречаться при составлении алгоритмов для Робота, были простыми высказываниями. Однако для исполнителя Робот можно строить и составные условия.
Составное условие — условие, которое образуется из нескольких простых условий, соединенных друг с другом логическими операциями.
С логическими операциями над высказываниями вы уже знакомы. В PascalABC используются следующие логические операции:
Логическая операция | Запись в PascalABC |
Не | Not |
И | And |
Или | Or |
Система условий для исполнителя Робот построена таким образом, что можно обойтись без использования логической операции отрицания.
Отрицанием условия FreeFromLeft будет условие not FreeFromLeft . Однако условие «слева не свободно» означает, что там стена. Поэтому вместо условия not FreeFromLeft может быть использовано условие WallFromLeft . Отрицания для других условий показаны в таблице:
Понятие ветвления используется в различных сферах человеческой деятельности.
В ботанике под ветвлением побегов понимают процесс образования боковых побегов у растений.
При употреблении термина в переносном смысле под ветвлением понимают наличие нескольких путей, направлений, сюжетных линий и т. д.
Ветвления используются в дорожной разметке и картографии.
Пример 12.1. Выбор обуви весной, в зависимости от погоды:
Если на улице дождь, то
надеть резиновые сапоги
В данном примере в текущий момент времени может быть выполнена только одна команда из двух: или надеть сапоги, или надеть туфли.
Блок-схема данного алгоритма будет выглядеть следующим образом:
Пример 12.2. Выход на улицу осенью.
Если на улице дождь, то
В данном примере используется сокращенная форма команды ветвления. Если условие выполнено, то выполняется команда «взять зонт». Если условие ложное, то никаких действий не происходит. Команда «выйти на улицу» выполняется всегда независимо от истинности или ложности условия.
Блок-схема данного алгоритма будет выглядеть следующим образом:
Пример 12.3. Имеется три монеты, среди которых одна фальшивая. Известно, что фальшивая монета легче настоящих монет. Требуется найти фальшивую монету за минимальное число взвешиваний на чашечных весах без гирь.
Представим словесное описание алгоритма решения этой задачи.
Положить на каждую чашу весов монеты 1 и 2
Если весы в равновесии, то
фальшивая монета 3
Если монета 1 тяжелее, то
фальшивая монета 2
фальшивая монета 1
Пример 12.4. Одна из возможных начальных обстановок:
Другая возможная начальная обстановка:
Программа для исполнителя Робот:
Delphi/Pascal
uses Robot ;
if FreeFromUp then
up ; right ; down ;
down ; right ; up ;
Пример 12.5. Программа для исполнителя Робот:
Delphi/Pascal
uses Robot , RobTasks ;
Task ( ‘ myrob9 ’ ) ;
If FreeFromLeft then
left ; paint ;
Результаты работы программы для разных начальных обстановок:
Начальная обстановка |
Результат |
Пример 12.6. Рассмотрим начальную обстановку поля Робота:
Проверим для Робота следующие составные условия:
- WallFromLeft and CellIsPainted .
- WallFromUp or WallFromDown .
- Not (WallFromRight or FreeFromUp) .
Первое условие состоит из двух простых: WallFromLeft (условие А ) и CellIsPainted (условие В ). Условие может быть записано как « А И В ». Это условие верно только тогда, когда верны и А , и В . Условие А — WallFromLeft — истинно, условие В — CellIsPainted — истинно, условие А И В — истинно.
Второе условие может быть записано как « А ИЛИ В », где А — WallFromUp , В — WallFromDown . Условие А — истинно, условие В — ложно. Значит, условие « А ИЛИ В » — истинно.
В третьем условии частица Not отрицает составное условие or WallFromRight FreeFromUp . Условие может быть записано как НЕ (« А ИЛИ В »). Для того чтобы определить, истинно или ложно это условие, нужно сначала определить истинность условия « А ИЛИ В ». Условие А — ложно, условие В тоже ложно. Поэтому ложным будет и условие « А ИЛИ В », но тогда условие НЕ « А ИЛИ В » будет истинным.
1 Что такое алгоритмическая конструкция ветвление?
- Конструкция, которая обеспечивает выполнение одной или другой последовательности команд в зависимости от истинности или ложности некоторого условия.
- Условие, которое образуется из нескольких простых условий, соединенных друг с другом логическими операциями.
- Возможность наличия нескольких путей, направлений, сюжетных линий.
- Конструкция, которая предусматривает организацию выполнения набора команд.
2 Что такое составное условие?
- Условие для исполнителя Робот.
- Высказывание, которое всегда истинно.
- Условие, которое образуется из нескольких простых условий, соединенных друг с другом логическими операциями.
- Гысказывание, которое всегда ложно.
3 Какие логические операции можно использовать для записи составных условий?
Упражнения
- 1 Выделите конструкцию ветвления в отрывке из поэмы А. С. Пушкина «Руслан и Людмила» и изобразите ее с помощью блок-схемы.
У лукоморья дуб зеленый;
Златая цепь на дубе том:
И днем и ночью кот ученый
Все ходит по цепи кругом;
Идет направо — песнь заводит,
Налево — сказку говорит.
Там чудеса: там леший бродит,
Русалка на ветвях сидит… 1
1 Пушкин, А. С. Руслан и Людмила : поэма. — М. : Изд. Дом «Прибой». — 1996. — С. 5.
- 2 Для заданной обстановки поля Робота определите, какие из составных условий истинны, а какие ложны.
3* В задании 2 замените условия, содержащие not , соответствующими условиями без использования отрицания.
4 Для каждого из ложных условий задания 2 придумайте обстановку, в которой данное условие будет верным, а для каждого истинного — обстановку, в которой условие будет ложным.
- Решите задачи if 2 и if 3 из встроенного задачника.