No Image

Что такое ветвление в информатике

СОДЕРЖАНИЕ
0 просмотров
11 марта 2020

Опера́тор ветвле́ния (усло́вная инстру́кция, усло́вный опера́тор) — оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения.

Содержание

Общее описание [ править | править код ]

Оператор ветвления применяется в случаях, когда выполнение или невыполнение некоторого набора команд должно зависеть от выполнения или невыполнения некоторого условия. Ветвление — одна из трёх (наряду с последовательным исполнением команд и циклом) базовых конструкций структурного программирования.

Виды условных инструкций [ править | править код ]

Существует две основные формы условной инструкции, встречающиеся в реальных языках программирования: условный оператор (оператор if ) и оператор многозначного выбора (переключатель, case , switch ).

Условный оператор [ править | править код ]

Условный оператор реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true . В большинстве языков программирования условный оператор начинается с ключевого слова if (в переводе с англ. — «если»).

Встречаются следующие формы условного оператора:

Условный оператор с одной ветвью [ править | править код ]

Условный оператор с двумя ветвями [ править | править код ]

Условный оператор с несколькими условиями [ править | править код ]

Реализация [ править | править код ]

Algol, Pascal [ править | править код ]

Паскаль унаследовал от Алгола-60 синтаксис, согласно которому в ветвях условного оператора может быть помещена только одна команда. Поэтому для размещения там большего количества команд они группируются в составной оператор с помощью пары ключевых слов begin и end . Ветвь else необязательна. begin и end необходимы, только если операторов несколько (например, из соображений единообразия оформления кода). В примере — оператор выбора в Паскале:

Algol-68, Ada, Modula-2 [ править | править код ]

Необходимость условного оператора в Алголе и Паскале с момента появления была объектом критики. Критики говорили, что многочисленные составные операторы загромождают программу, мешают нормальной расстановке отступов и провоцируют ошибки (если в последней ветви оператора if забыть составной оператор там, где он необходим, то компилятор ничего не заметит, но при выполнении программы из группы операторов, которые должны выполняться в этой ветви, по условию будет выполняться только первый, все остальные — всегда). Следующие поколения языков — потомков Алгола попытались избавиться от этого недостатка. В их числе три широко известных языка: Алгол-68, Модула-2 и Ада. Конструкция оператора if в них практически одинакова, с точностью до отдельных ключевых слов:

  • Модула-2

Во всех случаях «командыX» — любое число операторов разделённых точкой с запятой. Во всех случаях все ветви условного оператора, кроме первой (ветви «then») необязательны и могут быть пропущены. Если ветвь «else» отсутствует и ни одно из условий не выполняется, то управление передаётся на команду, следующую за ключевым словом завершения условной конструкции (END, FI или END IF).

C, C++ и их потомки [ править | править код ]

C и C++ (а вслед за ними и Java, C#, PHP и множество других языков) имеют условный оператор, структурно аналогичный Паскалю. Отличие состоит в том, что условие должно быть записано в круглых скобках, а вместо ключевых слов begin и end используются фигурные скобки <> :

Nemerle [ править | править код ]

В отличие от большинства языков, где оператор if может иметь как одну, так и две ветви, в Nemerle оператор if (синтаксис полностью аналогичен языку Си) обязан иметь две ветви. Условный оператор с одной ветвью начинается с ключевого слова when , кроме того, в языке имеется ещё один условный оператор — unless , представляющий собой «обратный when» — в нём команды условной ветви выполняются, если условие ложно.

Forth [ править | править код ]

В Forth условный оператор имеет отличный от вида в других языках вид, из-за постфиксной формы записи и стековой организации. Условный оператор состоит из трёх слов IF ELSE THEN [1] .

Здесь просто помещает значение на вершину стека, IF анализирует флаг, и если:

  • он не равен нулю, то выполняются выражения до ELSE или THEN ;
  • если он равен нулю, то выполняется выражения между ELSE и THEN .

При отсутствии ELSE получается селектор с одной ветвью: выражения между IF и THEN выполняются только при ненулевом значении флага.

Fortran [ править | править код ]

Fortran изначально имел только арифметический IF, в котором в зависимости от знака выражения производился переход на одну из трёх меток. Например, часть кода подпрограммы решения квадратного уравнения:

Затем были добавлены логические (булевские) выражения и логический IF с одним оператором, вычисляемый GOTO, позже — структурный IF (с несколькими условиями), например:

Perl [ править | править код ]

Perl поддерживает структурный if с несколькими условиями, а также модификаторы оператора (statement modifiers), которые записываются после выполняемой части оператора. Например, два следующих примера идентичны по функциональности:

Вместо if можно писать unless, что приводит к инверсии значения условного выражения перед проверкой. То же самое действие через unless:

Для составного оператора (блока) допустима только структурная форма, но не модификатор. Например:

Завершающее ключевое слово не нужно, за счёт требования обязательного оформления операторов под условиями в блоки <…>.

Не существует аналога слова unless для веток elsif.

Erlang [ править | править код ]

Erlang использует два условных оператора — if и case. Оба имеют результирующее значение, которое равно значению последнего оператора в выполненной ветке и может быть использовано (назначено имени, передано в функцию…), поэтому в нём нет отдельного тернарного условного оператора. В операторе case выполняется Сопоставление с образцом, с возможностью дополнительных условий на значения в сравниваемом, а в операторе if — только проверка условий. В условиях (guard tests) допускается ограниченное множество операций и встроенных функций.

Читайте также:  Почему так долго грузится интернет

Пример на case (удаление записи о событии из дерева времён):

Переключатель (Оператор выбора) [ править | править код ]

Конструкция переключателя имеет несколько (две или более) ветвей. Переключатель выполняет одну заданную ветвь в зависимости от значения вычисляемого ключевого выражения. Принципиальным отличием этой инструкции от условного оператора является то, что выражение, определяющее выбор исполняемой ветви, возвращает не логическое, а целое значение, либо значение, тип которого может быть приведён к целому. В некоторых языках допускается использовать в переключателе выражения некоторых типов, не приводимых к целому (например, текстовые строки).

Прототипом современной синтаксической конструкции была используемая в старых языках программирования команда перехода по вычисляемой метке. В этой команде указывалось выражение-селектор, возвращающее целое значение, и набор меток. При выполнении команды вычислялось выражение, а его значение использовалось как номер метки (в списке команды), на которую производился переход. Такие конструкции были, например, в языках программирования Фортран («вычисляемый GOTO») и Бейсик. Привлекательной стороной конструкции является её достаточно высокая эффективность: для определения нужной ветви (метки перехода) не требуется последовательно сравнивать результат выражения-селектора со многими значениями, достаточно записать в память массив команд безусловного перехода с нужными адресами, чтобы при выполнении команды вычислять нужный элемент непосредственно из значения выражения. При этом скорость выполнения команды не зависит от количества меток. В современных языках реализация оператора-переключателя также часто выполняется в виде таблицы перехода, состоящей из команд безусловного перехода на соответствующие фрагменты кода. Вычисляемое выражение преобразовывается в значение сдвига по таблице перехода, определяющее выполняемую команду. В языках, где выражение-селектор может иметь нецелое значение, напрямую вычислить нужную ветвь конструкции переключателя можно далеко не всегда, поэтому в них используются другие методы оптимизации исполнения.

В современных языках программирования высокого уровня команда-переключатель обычно имеет имя switch (в переводе с англ. — «переключатель») либо case (в переводе с англ. — «случай»). Однако, выбор по вычисляемой метке может сохраняться в современных языках программирования низкого уровня, например, инструкция JL языка программирования STL для программируемых логических контроллеров S7-300 и S7-400, выпускаемых Siemens

Например, в языке Си синтаксис команды следующий:

Здесь i — выражение-селектор, которое обязано иметь приводимый к целому тип, каждая ветвь исполнения начинаются с ключевого слова case , за ним следует значение выражения, при котором должна выполняться данная ветвь. Интересной особенностью языка Си является то, что в нём переключатель трактуется именно как команда перехода по вычисляемой метке, а роль меток играют заголовки ветвей ( case значение : ). Чтобы после завершения кода ветви произошёл выход из оператора переключателя, используется специальная команда break . Если такой команды в ветви нет, после исполнения кода выбранной ветви начнётся исполнение кода следующей за ней. Эта особенность может использоваться для оптимизации, хотя может служить причиной труднообнаруживаемых ошибок (если программист случайно пропустит break, компилятор не выдаст ошибки, но программа будет выполняться неверно). Ветвь default исполняется тогда, когда среди прочих ветвей не нашлось ни одной подходящей.

Синтаксис команды-переключателя Си унаследован множеством языков, но семантика его не всегда полностью аналогична Си. Например, в C# допускается использовать выражение-селектор строкового типа и соответствующие метки.

Особенности вычисления логических выражений [ править | править код ]

На порядок исполнения программы с условными операторами может существенно влиять принятая в языке логика вычисления условных выражений. Когда условие представляет собой сложное логическое выражение, к примеру «f(x) > 0 И g(y) > 0», существует две стратегии вычисления его результата:

  • Полное вычисление: вычислить f(x), g(y), произвести сравнение результатов с нулём, затем выполнить операцию «И» для результатов. Так поступает, к примеру, Visual Basic.
  • Неполное вычисление: вычислить f(x), сравнить значение с нулём. Если результат сравнения — «истина», то вычислять остальную часть выражения. Если же первое условие ложно, то пропустить второе условие, в том числе вычисление входящего в него g(y), так как для операции «И» при ложности одного из операндов всё выражение заведомо ложно.

Второй вариант является наиболее распространённым для промышленных языков (в частности, для Алгола, Фортрана, С++, С, Java, JavaScript, ECMAScript, JScript, C#, Python). В этих языках действует жёсткое правило: «Логическое выражение всегда вычисляется слева направо и его вычисление останавливается сразу же, как только результат всего выражения становится определённым». Это означает, что если выражение состоит из нескольких подусловий, объединённых оператором «И» (AND), то вычисление выражения прекратится, как только одно из подусловий окажется ложным (так как «ложь AND любое значение» в результате всегда даёт «ложь»), и, наоборот, если несколько подусловий объединены оператором «ИЛИ» (OR), вычисление прекратится после первого же истинного подусловия, поскольку в этом случае всё выражение истинно, независимо от дальнейших вычислений. А вот выражение, содержащее оператор «Исключающее ИЛИ» (XOR) неполному вычислению не поддаётся, поскольку в нём одно из значений не может определить результат вычисления всего выражения.

Языки Ада и Erlang используют разные ключевые слова для этих вариантов: слова and и or означают полное вычисление, а and then, or else (Ада), andalso, orelse (Erlang) — неполное. В Erlang andalso и orelse менее приоритетны, чем операции сравнения, что позволяет избежать скобок вокруг элементарных условий. Язык Visual Basic.NET имеет похожие ключевые слова: AndAlso и OrElse.

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

Читайте также:  1С таблица значений максимальное количество строк

Выбор именно такой логики исполнения связан с тем, что она позволяет упростить логические выражения, в которых используются зависимые элементы. Классический пример — линейный поиск в массиве:

Алгоритм, реализуемый программой, совершенно очевиден, но в реализации есть одна тонкость (см. строку, помеченную восклицательными знаками): условие цикла состоит из двух частей, связанных оператором AND. Первое подусловие проверяет, не вышел ли индекс i за пределы массива, второе — не равен ли текущий элемент массива искомому значению. Если массив не содержит искомого значения, то после проверки последнего элемента значение переменной i увеличится на единицу; на следующей итерации первое подусловие окажется ложным и цикл завершится без проверки второго подусловия. Если бы логические выражения вычислялись полностью, то при отсутствии искомого элемента в массиве после последней итерации происходила бы ошибка: попытка определить a[i] вызывала бы некорректное обращение к памяти.

Следует обратить внимание, что, кроме неполного вычисления значения выражения, здесь также играет существенную роль фиксированный порядок вычисления подусловий: поскольку проверка выхода за границу массива записана первой, она всегда будет выполняться раньше, чем проверка достижения искомого значения. Если бы порядок вычисления подвыражений был неопределённым, гарантировать правильность приведённого фрагмента программы было бы невозможно.

При полном вычислении логических выражений приведённый алгоритм пришлось бы записать примерно в следующем виде:

Как видим, пришлось искусственно задать порядок вычисления условий выхода и ввести дополнительную переменную. Именно для того, чтобы избежать подобных трюков, и введено неполное вычисление логических выражений.

Примечание: Код изложенный выше, является примером использования оператора IF, но не более. Этот код нельзя использовать как правило для написания алгоритмов на языке Паскаль.

Ниже приведен оптимальный алгоритм для поиска числа в массиве:

Разветвляющий алгоритм – это алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий.

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

Вся программа состоит из команд (операторов). Команды бывают простые и составные (команды, внутри которых встречаются другие команды). Составные команды часто называют управляющими конструкциями. Этим подчеркивается то, что эти операторы управляют дальнейшим ходом программы.

Оператор ветвления на Паскале (условный оператор)

Чтобы вычисления могли разветвляться по нескольким направлениям, служит конструкция

IF THEN ELSE Если условие справедливо (ИСТИНА), то выполняются (стоящий между THEN и ELSE), а (стоящий после ELSE) будет пропущен. Если условие не справедливо (ЛОЖЬ), то игнорируются и выполняются .

IF – если, THEN – то, ELSE – иначе.

Неполная форма оператора выглядит следующим образом:

Если условие справедливо, то программа выполняет тот оператор, который стоит после ключевого слова THEN и дальше руководствуется обычным порядком действий. Если условие не справедливо, то оператор, стоящий после THEN не выполняется, и программа сразу переходит к обычному порядку действий. Конструкция IF. THEN позволяет в зависимости от справедливости условия либо выполнить оператор, либо пропустить этот оператор. Условия – в них используются следующие операторы сравнения:

Устанавливая рекомендуемое программное обеспечение вы соглашаетесь
с лицензионным соглашением Яндекс.Браузера и настольного ПО Яндекса .

Обучение Обеспечить усвоение учащимися особенностей конструирования алгоритмов с использованием команды ветвления; рассмотреть команду ветвления в полной и неполной форме; выработать умения и навыки в составлении алгоритмов по блок-схемам и блок-схем по алгоритмам с командами ветвления

Воспитание – добросовестного отношения к учению, привитие интереса к предмету и убеждённости, что решение большинства проблем, стоящих перед человеком в жизни можно разрешить, реализуя разветвляющийся алгоритм.

Развитие – познавательного интереса , творчески подходить к решению разнообразных задач, умения выделять главное, анализировать.

Тип урока: совершенствование знаний, умений и навыков

Вид урока: Урок теоретических и практических самостоятельных работ

Метод обучения: Метод алгоритмических предписаний

Приемы обучения: инструктивно-практический, групповые, индивидуальные.

Формы обучения: индивидуальная, коллективная.

Структура урока: оргмомент, актуализация опорных знаний, формирование новых понятий и способов действий, закрепление полученных знаний.

Оборудование: ПК, мультипроектор, операционная система Windows 98, лицензионный пакет MS Office , презентация; конспект, карточки-задания.

ветвление – это такая организация действий, при которой в зависимости от выполнения или невыполнения некоторого условия совершается либо одна, либо другая последовательность действий .

алгоритм – это последовательность действий, которые должен выполнить исполнитель для достижения конкретной цели.

Сообщение темы (Команды ветвления), цели урока и план урока

Проверить подготовку к уроку и выполнение домашнего задания.

Изучение нового материала.

Формирование умений и навыков по конструированию алгоритмов с использованием команды ветвления.

Х о д у р о к а

Организационный момент. Приветствие учащихся, объявить цель урока и план. Сегодня на уроке мы продолжим работу по конструированию алгоритмов. К концу урока вы научитесь составлять алгоритмы, используя команду ветвления, где выбор для выполнения той или иной команды предполагает проверку уже не одного, а нескольких условий.

Посмотрите на план сегодняшнего урока. Можно назвать его алгоритмом? Почему?

1. Проверить домашнюю работу.
2. Рассмотреть команду ветвления в полной и неполной форме.
3. Решать задачи, с использованием команды ветвления.
4. Записать задание на дом.

Ответ: Да. Команды выполняются строго последовательно друг за другом.

Какой это алгоритм?

Ответ: Это линейный алгоритм
И так начинаем исполнять наш алгоритм. Проверим, как вы подготовились дома.

2. Проверка домашнего задания.

Перед вами геометрические фигуры и служебные слова. Вы должны ответить на вопросы, найти верный ответ и записать соответствующие ответы, в таблицу:

Читайте также:  Блютуз часы для телефона на руку

Слайд с геометрическими фигурами и служебными словами

1. Эта геометрическая фигура используется в блок- схемах для обозначения начала и конца алгоритма.

2. Данная геометрическая фигура используется в блок-схемах для обозначения любого вычисления.

3. Какое служебное слово служит заголовком алгоритма

4. Чем заканчивается любой алгоритм?

5. Какое служебное слово стоит перед «телом алгоритма»?

6. Для проверки условия используется эта фигура

7. Ввод-вывод данных обозначается этой геометрической фигурой.

8. Чем обозначается направление действий

Теперь посмотрите какой фигуре или слову соответствует конкретная буква. Расшифруйте это слово. Дайте определение.

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

Какие св-ва алгоритма вы знаете?

С заданием вы справились, молодцы!

3. Активизация знаний.

Наша повседневная жизнь была бы скучной и неинтересной, если бы свои действия мы совершали последовательно одно за другим и на их выполнение не влияли бы никакие ситуации. Но на практике всё обстоит иначе: каждому человеку рано или поздно надо делать выбор, так как в любой реальной задаче – её решение будет зависеть от большого количества факторов, влияющих на это решение. Однако, это не значит, что при решении данной реальной задачи необходимо учитывать все влияющие факторы, отсутствие которых может существенно повлиять на результат.

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

4. Изучение нового материала.

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

1. Алгоритмический язык

Ветвление с условием в алгоритмах записывают одним из следующих способов:

1) Если выполняется условие, то выполняется действие 1

2)Если выполняется условие, то выполняется действие 1, иначе выполняется действие 2

Первый из способов записи называется ветвлением в неполной форме , второй – ветвлением в полной форме. Как же компьютер воспринимает программы с ветвлениями? Встретив в программе ветвление компьютер проверяет выполняется ли условие, и в зависимости от данного условия будет выполнять один или другой набор действий А 1 , А 2 , А 3 … ,А n или В 1 , В 2 , … В m . Как только компьютер совершил выбранную последовательность действий, ветвление заканчивается , то есть исполнение программы продолжается с действия следующего за ветвлением.

Например, алгоритм мойки машины. Каждый может составить такой алгоритм, руководствуясь своим жизненным опытом.

Если идет дождь, то машину не мыть

Если капот открыт, то перед мойкой его необходимо закрыть.

Если загрязнение сильное, то мыть со специальным моющим средством

Здесь выполняется команда ветвления в неполной форме.

Представим команду ветвления в виде блок-схемы:

Рассмотрим более сложные положения, когда необходимо делать выбор. Например, спросить книгу у друга.

«Встречу друга» – это условие, которое надо проверить в данном примере.

Что будет происходить после проверки условия?

Если условие выполнены, совершается действие: спрошу книгу

Если же условие не выполнено, то совершается другое действия: зайду к другу

Этот алгоритм можно отобразить на следующей блок-схеме

Формирование умений и навыков по конструированию алгоритмов с использованием команды ветвления.

ЕСЛИ будет хорошая погода, ТО …………. ИНАЧЕ …..

ЕСЛИ на голове змеи имеется два желтых пятнышка, ТО …. ИНАЧЕ …..

ЕСЛИ пошел дождь, ТО …….

ЕСЛИ назвался груздем, ТО …….

ЕСЛИ ласточки летают низко, ТО ………, ИНАЧЕ ………

ЕСЛИ аккумуляторы сели ТО………., ИНАЧЕ…………….

ЕСЛИ день рабочий, ТО ……. ИНАЧЕ ……….

ЕСЛИ родители деньги дадут, ТО………., ИНАЧЕ…….

3. Написанное на карточке изобразить в виде блок-схемы:

1) Вам нужно определить фамилию пропавшей, если известно, что это женщина не старше 25 и не моложе 16 лет. Возраст ее кратен 7. В списке три фамилии. Кто из них?

1. Иванова Е. И., 26 лет;

2. Петрова А. Л., 21 год;

3. Сидорова Е. Н., 16 лет.

Ответ: Петрова А. Л., 21 год.

2) Вам нужно установить марку и номер машины, в которой уехала пропавшая, если известно, что цвет машины не красный, а номер кратен 9. У дома пропавшей были замечены следующие машины:

1. черный джип с номером 1101;

2. красный «Запорожец» с номером 9909;

3. белая «Волга» с номером 2709.

Ответ: белая «Волга» с номером 2709.

3) Определить, кто из соседей говорит правду, если известно, что между 7.00 и 11.20 часами пропавшая еще находилась дома, а при ответе на вопрос «Когда Вы видели пропавшую на улице в последний раз?»

1. сосед из кв. № 59 ответил — в 9.00 ч,

2. соседка из кв. № 7— в 11.30 ч.

Ответ: соседка из кв. № 7.

4) На выставку отбираются кошки, которых рост должен быть больше 19 см, но меньше 27 см. Определить, какая кошка пройдет отбор?

Мы сегодня на уроке ещё раз убедились, в любой сложной ситуации можно найти выход, составив алгоритм действий, содержащий ветвление. Условия, которые должны при этом выполняться могут быть тоже сложными. Объявить оценки за урок.

1. Выучить опорный конспект.

Придумать задачи по теме «Ветвление».

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector