Как составить программирование разветвляющихся алгоритмов

План урока:

Программирование разветвляющихся алгоритмов

Определение разветвляющегося алгоритма

Условный оператор

Формы записи условного оператора if

Составной условный оператор if

Циклический оператор while

Программирование разветвляющихся алгоритмов

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

1 kakaya budet pogoda

Определение разветвляющегося алгоритма

Разветвляющиеся алгоритмы – это алгоритмы, имеющие несколько альтернативных путей, выбор которых зависит от выполнения некоторых условий. Ветвление — алгоритмическая конструкция, при выполнении которой, в зависимости от результата проверки условия («да» или «нет»), выполняется одна из двух последовательностей команд, называемых ветвями. Способ записи ветвления зависит от выбранного для выполнения определённой задачи оператора.

2 shema

В линейных разветвляющихся алгоритмах можно выделить два типа условий: простые и составные.

Простые условия содержат одно логическое (булево) выражение, то есть такое утверждение, которое является либо истинным, либо ложным.

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

  • > (больше);
  • < (меньше);
  • >= (больше или равно);
  • <= (меньше или равно);
  • <> (не равно);
  • = (равно).

Примеры простых логических выражений:

  • Value (идентификатор Value должен иметь логический тип данных);
  • a – b <> 5 (истинно, если a – b не равно 5);
  • c >= 10 + 11 (истинно, если c имеет значение 21 или больше);
  • 7 > 8 (это выражение всегда ложно);
  • ‘бабушка’ <> ‘дедушка’ (это выражение всегда истинно).

Первые три выражения имеют в своём составе переменные или константы, следовательно, об истинности всего выражения можно говорить только когда эти идентификаторы будут иметь какие-то определённые значения:

  • Если a = 5, b = 3, то второе выражение является истинным. Однако, если a = 5, b = 0, то результатом их разности будет число 5, которое делает это выражение ложным.
  • Если c = 9, то третье выражение будет ложным, при этом, если с имеет значение 21 и более, то выражение будет истинным.

Составные условия представляют выражения, составленные из нескольких логических выражений, соединённых при помощи служебных слов and («И», логическое умножение) или or («ИЛИ», логическое сложение), например:

  • p and q (истинно, если истинны обе логические переменные – p И q);
  • a > b or x < 7 (истинно, если a > b, ИЛИ если x < 7);
  • c < 3 or d > 5 and x <> 2 (истинно, если c < 3, ИЛИ если d > 5 И x <> 2).

В третьем примере сначала определяется истинность выражения d > 5 and x <> 2, а затем выполняется операция or, поскольку логическое умножение, как и арифметическое, имеет приоритет над сложением.

Вложенные ветвления представляют собой условие внутри условия. Когда «условие 1» будет принимать истинное значение, программа перейдёт на проверку «условия 2», иначе – выполнится «ветвь 1». Если «условие 2» окажется истинным, то выполнится «ветвь 3», иначе – «ветвь 2». Таким образом, «условие 2» является вложенным в «условие 1».

tablica primer algoritma

Какие условные операторы языка Паскаль позволяют описывать подобные разветвленные алгоритмы?  На этом уроке мы продолжим разбор условного оператора if и рассмотрим различные его формы.

Условный оператор

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

Формы записи условного оператора if

Неполный условный оператор if включает в себя служебное слово if («если»), за которым следует условие – простое либо составное логическое выражение, после которого пишется слово then («то»). Далее указывается оператор, выполняемый тогда, когда заданное условие является истинным. В конце оператора ставится точка с запятой:

if <условие> then <оператор 1>;

Полный условный оператор if, в дополнение к «оператору 1», выполняющемуся при истинности условия, добавляет «оператор 2», который выполняется если условие ложно. При этом после «оператора 1» пишется служебное слово else («иначе»), за которым следует «оператор 2», а разделитель точка с запятой переносится в конец оператора:

if <условие> then <оператор 1> else <оператор 2>;

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

if <условие> then

    <оператор 1>

else

    <оператор 2>;

Составной условный оператор

Составной оператор в Паскале применяется тогда, когда в одной из ветвей нужно выполнить более одного оператора. Составной оператор начинается со служебного слова begin и завершается служебным словом end. В промежутке между этими двумя словами находятся операторы, выполнение которых происходит в том порядке, в котором они записаны. Составные операторы могут применяться везде, где применяются простые операторы, и также как простые операторы, они должны отделяться точкой с запятой по тем же правилам. Пример использования составного оператора в конструкции if..then..else:

if <условие> then

    begin

        <оператор 1>;

        <оператор 2>;

    end

else

    begin

        <оператор 3>;

        <оператор 4>;

    end;

В данном примере, в случае истинности условия будут выполняться операторы 1 и 2, в случае ложности – операторы 3 и 4.

Вложенный условный оператор

Так как «оператор 1» в примерах выше может быть любым допустимым оператором языка Паскаль, никто не запрещает использовать вместо него еще один оператор if, создавая таким образом вложенные условные операторы:

if <условие 1> then

    if <условие 2> then

        <оператор 1>

     else

    <оператор 2>

else

    <оператор 3>;

Таким образом, для множества алгоритмов разветвляющейся структуры существует множество простых и составных операторов.

Однако, на этом многообразие операторов ветвления не заканчивается. Так, для разветвляющихся циклических алгоритмов применяется оператор while.

Циклический оператор while

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

While <условие> do

    <оператор 1>;

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

Задачи

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

Задача 1. Необходимо создать программу, которая на вход будет получать 2 числа, а выводить наибольшее из них. Если числа одинаковы, то нужно вывести любое из них.

Решение.

3 reshenie algoritmov

Шаг 1. Необходимо ввести наименование программы. В данном случае это будет решение первой задачи.

Шаг 2. Учитывая, что числа, которые получит программа и запишет в переменные a и b, будут относиться к численному типу данных, необходимо указать тип integer.

Шаг 3. После записи слова begin, обозначающего начало командного блока, нужно записать текст, который программа будет выводить изначально. Так как на вход должны подаваться два числа, так и записывается: «Введите два числа: ».

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

Шаг 5. Появление условного оператора if. В данной задаче необходимо вывести наибольшее число, поэтому условием будет сравнение чисел.

Шаг 6. Проверка написанного кода программы и правильности выводящихся данных. Если значение a больше значения b, то программа выводит значение, закреплённое за переменной a. В противном случае, программа выведет число b. Если числа одинаковы, то программа автоматически перейдёт к выполнению оператора, записанного после слова else, так как числа одинаковы, нет разницы в том, какое из них выводить.

Задача 2. На вход программа получает 3 числа, которые обозначают длины различных отрезков. Необходимо выяснить, можно ли построить с помощью этих отрезков треугольник. Если да, то каким он будет: тупоугольным, прямоугольным или остроугольным.

Решение.

3 reshenie k zadace 2 poisk algoritma

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

Шаг 2. Построение кода программы. Для начала необходимо дать ей название.

Шаг 3. Указывается тип данных. Поскольку данные, которые получает программа, относятся к численному типу данных, то после названий переменных нужно написать integer.

Шаг 4. После этого пишется запрос программы, в случае со второй задачей текст будет выглядеть так: «Введите длины трёх отрезков в порядке возрастания: ».

Шаг 5. Запись оператора, который поможет программе получить данные.

Шаг 6. Запись и представление примерной работы всех необходимых условий. Изначально нужно понять, образуют ли отрезки какой-либо треугольник, для этого записывается условие, дословно переводящееся как «если c< a+b тогда». Если его значение будет истинным, то программа перейдёт к дальнейшим условиям, таким как «если квадрат c равен сумме квадратов a и b» и так далее.

Шаг 7. Проверка написанного кода программы и правильности выводящихся данных. В зависимости от того, какое из условий окажется верным, программа выведет создают ли эти отрезки треугольник и если да, то его тип. В случае, когда все условия будут ложными, программа выдаст, что «Заданные отрезки не образуют треугольник.».

Задача 3. Нужно найти минимальное целое число a, при котором равенство 3a > n является истинным. На вход подаётся число n, большее чем единица.

Решение.

5 postroenie koda

Шаг 1. Для начала необходимо дать программе название.

Шаг 2. Учитывая, что на вход подаётся целое число, указать тип данных, в данном случае – integer.

Шаг 3. Запись командного блока. Нужно написать слово, обозначающее начало, begin.

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

Шаг 5. Запись необходимых операторов. Используя оператор readln программа считывает данные и переводит курсор на новую строку. Далее она производит операции над поступившими данными.

Шаг 6. Запись цикла. «Пока 3*а меньше или равно n» она будет прибавлять к a по единице. После того, как цикл закончится, программа выведет итоговое значение a, которое и будет ответом к задаче.

Шаг 7. Проверка правильности записи алгоритма. В конце программного блока, после слова end нельзя забывать точку, её обязательно нужно поставить.

Задача 4. На вход подаётся натуральное число, из которого необходимо удалить заданную пользователем цифру.

Решение.

6 kod algoritmy informatika

Шаг 1. Для решения данной задачи понадобится вспомнить операции mod и div в Паскале. Div возвращает целую часть при делении какого-то числа на какое-то число. К примеру, если 5 поделить на 3, то в остатке будет 2. При записи 5 div 3 программа выдаст значение 1, тк 5 делится на 3 ровно 1 раз. Mod возвращает остаток от деления. При записи 5 mod 3 программа выдаст значение 2, поскольку остаток от деления 5 на 3 равен 2. Как же решать эту задачу?

Шаг 2. Записать название программы. В данном случае будет «Задача 4».

Шаг 3. Указание типа вводимых данных. Longint представляет тип данных с длинными целыми числами, к нему можно отнести подающееся на вход число (а) и цифру, которую нужно удалить (b). Следующим типом будет byte, он представляет целый беззнаковый тип.

Шаг 4. После этого следует командный блок. Вписываются 2 оператора readln, позволяющие программе считать необходимые данные.

Шаг 5. Запись цикла. В данной программе лучше всего использовать цикл «Пока a больше 0». Здесь идёт пример составного оператора. После присвоения переменной m нового значения программа переходит к условию «Если m не равно n, тогда», при истинности которого присваивает переменной b новое значение. Из выполненного условия программа переходит к присвоению переменной a нового значения, равному целой части от деления числа, заключённого в a, на 10. После выполнения всех действий и условий в первом цикле, программа переходит ко второму циклу «Пока b больше 0». В нём она присваивает переменным a и b новые значения.

Шаг 6. Проверка кода программы. После окончания всех циклов она должна вывести итоговое число и завершить свою работу.

Вопросы:

·     Определение
разветвляющегося алгоритма.

·     Операторы,
используемые
для записи разветвляющихся алгоритмов в языке Pascal.

·     Простой
и составной условные операторы.

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

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

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

Блок-схема
разветвляющегося алгоритма

Для записи конструкции
ветвления в языке Pascal
используется условный оператор. У условного оператора в языке
программирования Паскаль есть две формы записи: полная и сокращённая. В
сокращённой форме
для записи условного оператора используется служебное
слово if.
После него через пробел следует условие. В роли условия выступает логическое
выражение, простое или сложное. После условия на следующей строке записывается
служебное слово then.
После него следует оператор, который будет выполнен, если будет выполняться
указанное условие. После оператора следует точка с запятой. В полной форме записи
условного оператора следует всё тоже самое, однако после оператора, следующего
после слова then,
точка с запятой не ставится. Вместо этого знака на следующей строке
записывается служебное слово else.
После него следует оператор, который будет выполнен, если указанное условие выполнятся
не будет. После него следует точка с запятой.

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

Обозначим введённые
пользователем числа a
и b.
Составим блок-схему алгоритма решения задачи. Как мы помним, любая блок-схема
начинается с блока «Начало». Сначала программа будет принимать на ввод два
числа: a
и b.
Далее будет следовать ветвление. Его условием будет, что a больше
b.
В случае, если условие выполняется программа должна вывести a, если же условие выполняться не
будет, то есть b
будет больше a
или же они будут равны между собой, то программа должна вывести b. Любая блок-схема заканчивается
блоком «Конец».

Блок-схема
алгоритма

Напишем программу по
составленной блок-схеме. Назовём нашу программу max.
В разделе описания переменных укажем две переменные: a и b. Так как в тексте задачи не указано,
что они целые – объявим их вещественного типа real. Запишем логические
скобки. Сначала запишем оператор writeln, который будет выводить
на экран поясняющее сообщение о том, что это программа определения наибольшего
из двух чисел, и запрос на ввод двух чисел. Дальше будет следовать оператор readln,
который будет считывать значения переменных a и b.

Теперь запишем условный
оператор. Как мы узнали, он начинается со служебного слова if. Через пробел поле него запишем
условие a>b. Cтрокой
ниже запишем служебное слово then,
после которого будет следовать оператор write, который будет выводить
на экран значение переменной a
и поясняющее сообщение, о том, что это наибольшее из двух введённых чисел.
После этого оператора точка с запятой ставиться не будет. На следующей строке
запишем служебное слово else,
после которого будет следовать оператор write. Он будет выводить на
экран значение переменной b
и поясняющее сообщение о том, что это наибольшее число. После этого оператора
поставим точку с запятой.

program max;

var

 a, b: real;

begin

 writeln (‘Программа
нахождения большего из 2 чисел. Введите 2 числа.’);

 readln (a, b);

 if a>b

 then write (a, ‘ – наиболешее из 2 чисел.’)

 else write (b, ‘ – наибольшее из 2 чисел.’);

end.

Исходный код программы

Запустим программу на выполнение.
Введём сначала числа 35 и 74. Число 74 действительно наибольшее.

Снова запустим программу
и введём числа 100 и 99. Наибольшим действительно является число 100.

Снова запустим программу
и дважды введём 5. Так, как числа равны между собой программа вывела что
наибольшее число – 5.

Программа работает
правильно, задача решена.

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

if <условие>

then
begin

<оператор
1>;

<оператор
2>;

end;

Составной условный
оператор

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

if <условие>

then
if
<условие>

 then
<оператор
1>;

Вложенный условный
оператор

Задача:
3 отрезка заданы своими длинами. Определить, образуют ли эти отрезки
треугольник, и если образуют, то какой: остроугольный, прямоугольный или
тупоугольный.

Обозначим через a, b и с длины отрезков. Давайте
вспомним, как определить, могут ли отрезки быть сторонами треугольника. Для
этого необходимо, чтобы длина наибольшего из отрезков была меньше суммы двух
остальных.

Похожим образом можно
определить является треугольник остроугольным, прямоугольным или тупоугольным.
Является ли треугольник прямоугольным можно определить по теореме Пифагора. Для
этого достаточно чтобы квадрат большей стороны был равен сумме квадратов двух
остальных сторон. Если длина большей стороны будет больше суммы квадратов двух
оставшихся сторон, то треугольник будет тупоугольным, а если меньше – то
остроугольным.

Составим блок-схему
алгоритма решения задачи. Блок-схема начинается с блока «Начало». Затем
программа должна считать введённые пользователем длины отрезков: a, b и с. Чтобы облегчить решение
задачи в дальнейшем, сделаем так чтобы отрезок с наибольшей длиной
соответствовал известной нам переменной, условимся что это будет переменная с.
Для этого нам понадобится ветвление, которое будет определять наибольшую из
переменных a
и b.
Его условием будет, что a > b. Потом оно должно сравнить
наибольшую из переменных с c.
Если условие первого ветвление выполняется, то дальше будет следовать новое
ветвление с условием: a > c. Если это условие будет выполняться
через промежуточную переменную p поменяем местами значения переменных a и c. Для этого присвоим p значение c, c – значение a, а a – значение p. Если же это условие выполняться не
будет – то ничего делать не нужно. В случае, если условие a
> b не будет выполняться должно
следовать ветвление с условием b больше c. Если это условие будет выполняться – то нам нужно
через промежуточную переменную p поменять местами значения переменных b и c. Если же условие не выполняется, то
делать также ничего не нужно.

Теперь приступим к
проверке того, могут ли отрезки составить треугольник. Так как мы знаем, что
отрезку с наибольшей длиной соответствует переменная c. Нам достаточно проверить условие: c < a + b. Если это условие выполняется, то
нужно проверить каким является данный треугольник. Сначала проверим, является
ли он прямоугольным. Для этого нам нужно ветвление с условием: с2
= а2 +
b2.
Если это условие выполняется, то нужно вывести сообщение о том, что заданные
отрезки образуют прямоугольный треугольник. Если же это условие не выполняется,
то треугольник либо остроугольный, либо тупоугольный. Определим это записав
ветвление с условием: с2 > а2
+
b2.
Если это условие выполняется, то программа должна вывести сообщение о том, что
заданные отрезки образуют тупоугольный треугольник. Если же это условие не
выполняется нужно вывести на экран поясняющее сообщение о том, что заданные
отрезки образуют остроугольный треугольник. Осталось рассмотреть случай, когда
условие с < а + b не выполняется. В этом случае нужно
вывести на экран сообщение о том, что заданные отрезки не образуют треугольник.
Блок-схема заканчивается блоком «Конец».

Блок-схема
алгоритма

Теперь напишем программу
по заданной блок-схеме. Назовём программу treugolnik. Запишем раздел описания
переменных. Нам понадобится три переменных, которые будут хранить длины
отрезков: a,
b и
c,
а также промежуточная переменная p. По условию не указано что они целые, поэтому зададим
их вещественного типа real.

Запишем логические
скобки. В начале будет следовать оператор writeln, который выводит на
экран поясняющее сообщение о том, что это программа проверки того, образуют ли
три заданных отрезка треугольник. И запроса на ввод длин трёх отрезков. Далее
будет следовать условный оператор if с условием: a > b. После слова then будет следовать краткая
форма записи условного оператора с условием: а > c. В нём после слова then запишем логические
скобки, то есть слова begin
и end.
После слова end
точка с запятой не ставиться. В логических скобках будет следовать три
оператора присваивания: p:=c, c:=a и a:=p. Далее будет следовать служебное
слово else.
После него в краткой форме будет записан условный оператор с условием: b
>
c. После слова then будут следовать
логически скобки. После слова end
будет следовать точка с запятой. Между логическими скобками будет три оператора
присваивания: p:=c, c:=b и b:=p.

Теперь запишем ещё один
условный оператор, который будет проверять образуют ли отрезки треугольник. Его
условием будет: c < a
+
b.
После слова then
будет следовать проверка того, каким является треугольник. Это будет условный
оператор, с условием: sqr (c) = sqr
(
a)
+
sqr
(
b).
После слова then
будет следовать оператор write,
который выводит сообщение о том, что заданные отрезки образуют прямоугольный
треугольник. После слова else
будет следовать ещё один условный оператор, который будет проверять является
треугольник остроугольным или тупоугольным. Его условием будет sqr
(
c)
>
sqr (a) + sqr
(
b).
После слова then
в нём будет следовать оператор Райт, выводящий сообщение о том, что заданные
отрезки образуют тупоугольный прямоугольник. После слова Элс
в нём будет следовать ещё один оператор write, выводящий сообщение о
том, что заданные отрезки образуют остроугольный треугольник. Далее будет
следовать служебное слово else
для условного оператора с условием: c < a + b. После него будет следовать оператор
write,
выводящий сообщение о том, что заданные отрезки не образуют треугольник.

program treugolnik;

var

 a, b, c, p: real;

begin

 writeln (‘Программа
проверки того, образуют ли 3 заданных отрезка треугольник. Введите длины отрезков.’);

 readln (a, b, c);

 if a>b

 then
begin
 if
a>c

 then begin

   p:=c;

   c:=a;

   a:=p;

  end

  end

 else if b>c

  then
begin

   p:=c;

   c:=b;

   b:=p;

  end;

  if c<a+b

 then if
sqr(c)=sqr(a)+sqr(b)

  then write (‘Заданные отрезки
образуют прямоугольный треугольник.’)

  else if sqr(c)>sqr(a)+sqr(b)

   then write (‘Заданные отрезки
образуют тупоугольный треугольник.’)

   else write (‘Заданные отрезки образуют остроугольный треугольник.’)

 else write (‘Заданные отрезки не образуют треугольник.’); 

end.

Исходный код
программы

Запустим программу на
выполнение. Введём сперва длины отрезков, которые не образуют треугольник: 1, 1
и 5. Программа вывела соответствующее сообщение.

Снова запустим программу
и введём отрезки, образующие прямоугольный треугольник: 5, 4 и 3. Программа
вывела соответствующее сообщение.

Снова запустим программу
и введём длины отрезков, образующих остроугольный треугольник: 1, 1 и 1.
Программа вывела соответствующее сообщение.

И в последний раз
запустим программу и введём длины отрезков, образующих тупоугольный треугольник:
6, 3 и 4. Программа вывела соответствующее сообщение.

Программа работает
правильно. Задача решена.

Важно запомнить:

·     В разветвляющемся
алгоритме
используются ветвления.

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

·     Для
записи ветвления в языке Pascal
используется
условный оператор.

Программирование разветвляющихся алгоритмов

Для программирования
разветвляющихся алгоритмов используются:
условный оператор,
оператор выбора
и оператор
безусловного перехода
.

1. Условный
оператор
имеет полную
и сокращенную форму записи. Полная форма
условного оператора имеет вид:

if логическое
выражение
then
оператор_1
else оператор_2;

Вычисляется значение
логического выражения;
если оно равно true, то
выполняется оператор_1,
если же – false – оператор_2.

Сокращенная форма условного оператора
имеет вид:

if <логическое
выражение>
then
<оператор>;

Вычисляется значение
логического выражения;
если оно равно true, то
выполняется оператор,
записанный после then, если
же – false, то этот оператор
не выполняется.

Примеры:

if x>y

thenz:=sqr(x)elsez:=y;

Здесь в результате выполнения
условного оператора переменная z
в любом случае получает новое значение.

if (x>=2) and(x<4)then b:=sin(x);

Здесь, например, при x
= 5 переменная b сохраняет
то значение, которое она имела до
выполнения условного оператора.

В условном операторе после
служебных слов then или
else записывается лишь один
оператор; если необходимо выполнить
несколько действий, то соответствующие
операторы объединяются в составной
оператор, который имеет вид:
begin оператор_1;

оператор_2;

оператор_n

end;

Пример:
if
x>y then begin
min:=y; max:=x end

else begin min:=x; max:=y end;

2. С помощью оператора
выбора
можно выбрать
один из любого количества вариантов.
Оператор выбора имеет вид:

case <выражение>
of

<константа_1>:<оператор_1>;

<константа_2>:<оператор_2>;

…….

<константа_n>:<оператор_n>;

else оператор

end;

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

Пример:case mof

12,1,2: writeln(‘зима’);

3,4,5: writeln(‘весна’);

6,7,8: writeln(‘лето‘);

9,10,11: writeln(‘осень’)

else writeln(‘ошибка
в данных’)

end;

3. Оператор безусловного
перехода
позволяет
перейти к нужному оператору, при этом
нарушается естественный порядок
выполнения операторов. Оператор имеет
вид: goto метка;

В качестве метки используется
идентификатор или целое число без знака
(0-9999). Метка описывается в разделе label:

label метка_1,метка_2,
метка_n;

Например: label
1,ab;

Одной меткой можно пометить
только один оператор. Метка отделяется
от помеченного оператора двоеточием.

метка:оператор;

Например: ab:
writeln(‘переход по метке’);

Пример:
label
t;

varx,y:real;

begingotot; …..

t: y: =sqr(x); …..

end.

Программирование циклических алгоритмов

Для программирования
циклических алгоритмов используются
операторы цикла. В языке Pascal
различают три вида операторов цикла:
for, while,
repeat. Оператор
цикла
for
имеет вид:

for параметр
цикла
:= выражение_1
to выражение_2
do оператор;

или

for
параметр цикла:=выражение_1
downto выражение_2
do оператор;

параметр цикла
– переменная порядкового типа;

выражение_1– начальное значение
параметра цикла;

выражение_2– конечное значение
параметра цикла.

Сначала вычисляются и
запоминаются значения выражения_1
и выражения_2.
Далее проверяется: значение выражения_1
меньше или равно (для downto
– больше или равно) значению выражения_2.
Если нет, то выполнение оператора цикла
завершается, если же – да, то параметр
цикла
получает значение
выражения_1,
выполняется оператор
и параметр цикла
получает следующее значение (для downto
– предыдущее значение).
Затем проверяется: параметр
цикла
меньше или равен
(для downto – больше или
равен) значению выражения_2.
Если да, то снова выполняется оператор
и параметр цикла
получает новое значение, если же – нет,
то выполнение оператора цикла завершается.

Примеры:

for i:=1to10dowriteln(‘i=’,i);

for i:= 10downto1dowriteln(‘i=’,i);

Оператор цикла while
имеет вид:

while логическое
выражение
do
оператор;

Пока значение логического
выражения true, выполняется
оператор,
записанный после служебного слова do,
как только значение станет false,
оператор цикла завершит свою работу.
Если значение выражения
с самого начала false, то
указанный в цикле оператор
не выполнится ни разу.

Пример:
i:=1;

while
i<=10 do

begin
writeln(‘i=’,i);

i:=i+1

еnd;

Оператор цикла repeatимеет
вид:

repeat

операторы

until логическое
выражение
;

Операторы
выполняются до тех пор, пока значение
логического выражения
не станет true. Поэтому,
независимо от значения логического
выражения
, операторы,
указанные в цикле repeat,
выполнятся, по крайней мере, один раз.

Пример:
i:=1;

repeat
writeln(‘i=’,i);

i:=i+1

until i >10;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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

Algo_970x90-20219-0c5b45.png

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

Алгоритм – это ясный перечень действий, который направлен на решение какой-либо задачи. Одно из свойств алгоритма — дискретность. Дискретность связана с наличием в алгоритмической последовательности ряда операций (этапов, действий), выполняемых пошагово, то есть дискретно. Алгоритм обладает свойством дискретности, так как он представляет собой процесс решения задачи в виде последовательного выполнения простых шагов. И каждое действие исполняется лишь после окончания исполнения предыдущего. Также предполагается наличие определённых исходных данных и результата выполнения.

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

1-1801-45f906.png

Ещё раз о линейности

Линейная последовательность — самая простая из возможных структур. При наличии линейности команды выполняются в чёткой последовательности и в порядке их записи, то есть друг за другом. Вот линейная алгоритмическая последовательность посадки дерева:
1) выкапывание ямки в земле;
2) размещение в ямке саженца;
3) закапывание ямки;
4) поливание места посадки водой.

Такой линейный алгоритм имеет следующую блок-схему:

2-1801-c5c0b7.png

А вот и общая схема линейного алгоритма:

3-1801-35f267.png

Ветвление в алгоритмических последовательностях

На практике очень редко встречается, чтобы последовательность всех требуемых действий была известна заранее. Если на минуту покинуть мир алгоритмизации и программирования, можно спроецировать ветвление на многие жизненные ситуации. Если на улице дождь, человек берёт зонт, если очень жарко, будет выбрана одежда полегче и т. д. Всё зависит от условия выбора. Как тут не вспомнить рыцаря на распутье из русских народных сказок?

4-1801-2c4a5c.png

«Направо пойдёшь — жену найдёшь, налево пойдешь — богатым будешь, прямо пойдёшь — смерть найдёшь».

Подобная ситуация заставляет принимать решения с учётом определённого условия. Если нужна жена, то витязь идёт направо, если богатство, то налево, если жизнь не мила, то прямо. Условия, которые влияют на решение, располагаются между словами «если» и «то».

От значения условий зависит дальнейшее поведение. Когда условие выполняется, оно принимает значение «истина», когда нет — «ложь». Иногда анализ ситуации и выбор не вызывают особых затруднений, а иногда принять решение очень трудно. А всё потому, что принимающий решение пытается продумать каждый из вариантов и предугадать последствия выбора. Нельзя не вспомнить гроссмейстера, который анализирует позицию на ходы вперёд, прежде чем передвинуть фигуру на шахматной доске.

Компьютерные программы и игры тоже построены на выборе действий. А блок-схема при наличии ветвления приобретает иной вид:

4.1-1801-fa94a6.png

Логика разветвляющих алгоритмов

Логику можно описать следующим образом:

ЕСЛИ <условие истинно> ТО <действие 1> ИНАЧЕ <действие 2>

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

Algo_970x90-20219-0c5b45.png

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

5-1801-c7b186.png

Для закрепления можно решить задачу.

Есть 3 монеты одинакового достоинства. Одна из монет фальшивая (известно, что она имеет меньший вес). Найдите фальшивую монету на чашечных весах без гирь с помощью только одного взвешивания.

Решение легко описывается посредством схематических блоков:

6-1801-145fea.png

Следующий пример легко экстраполируется в жизнь. Речь идёт об алгоритме для перехода дороги при наличии светофора. Он имеет следующий вид:
1. Подходим к светофору.
2. Смотрим, какой горит свет.
3. Если зелёный, переходим дорогу.
4. Если красный, ждём, пока загорится зелёный, а потом переходим дорогу.

Соответствующая блок-схема:

7-1801-391350.png

Программный способ записи

Чтобы алгоритм было понятен компьютеру, машине и любой другой цифровой системе, следует оформить его в таком виде, который эта система способна воспринимать. То есть надо написать программу, используя для этого команды из СКИ. СКИ — это список команд исполнителя — перечень команд, ему понятных. А любой исполнитель способен исполнить лишь те команды, которые включены в его СКИ, а если говорить человеческим языком — входят в набор его компетенций.

Для примера можно реализовать алгоритм на языке программирования Pascal. Исходя из вышесказанного, следует использовать команды, входящие в терминологию Pascal.

Простейший пример описания алгоритма с разветвляющейся структурой — условный оператор IF. Полная конструкция этого условного оператора имеет следующий вид:

if<логическое выражение>then<оператор 1>else<оператор 2>

Здесь if — это «если», then — это «то», else — «иначе».

Условный оператор работает просто:
— вычисляется значение логического выражения, которое расположено после служебного слова IF;
— если результат — истина, выполняется оператор 1, который размещён после THEN, причём действие после ELSE пропускается;
— если результат — ложь, пропускается уже действие после THEN, а действие после ELSE выполняется с помощью оператора 2.

Теперь можно вспомнить пресловутого витязя на распутье и написать простую программу, реализующую этот алгоритм с помощью соответствующих условных операторов.

program Algoritm_vetvlenia;
Var x :string;
Begin
WriteLn ('Витязь, куда путь держишь?');
ReadLn (x);
If x='Направо'  then  writeLn ('Направо пойдёшь — жену найдёшь');
If x='Налево'  then  writeLn ('Налево пойдешь — богатым будешь');
If x='Прямо'  then  writeLn ('Прямо пойдёшь — смерть найдёшь');
ReadLn;
End.

Попробовать этот алгоритм в работе можно на любом онлайн-компиляторе, поддерживающим Pascal. Но не стоит на этом останавливаться — лучше всего написать собственную программу, что позволит получить максимальную пользу от урока.

Algo_970x550-20219-265dfd.png

Источники:
• http://informatic.hop.ru/p33.htm;
• https://interneturok.ru/lesson/informatika/6-klass/algoritm-i-ispolniteli/prakticheskaya-rabota-2-sostavlenie-algoritmov;
• https://www.turbopro.ru/index.php/algoritmizatsiya-i-ispolniteli/5210-algoritmy-ponyatie-i-vidy-algoritma-blok-skhemy;
• https://www.yaklass.ru/p/informatika/6-klass/algoritmy-14002/tipy-algoritmov-13610/re-61ead1ff-bc77-453f-ac99-e46da267f3f3.

Автор статьи

Татьяна Шкляр

Эксперт по предмету «Информатика»

Задать вопрос автору статьи

Определение 1

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

Введение

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

Операторы ветвлений

Чтобы реализовать данный тип алгоритмов, в языках программирования применяются три типа операторов:

  1. Условные операторы или операторы условных переходов.
  2. Операторы выбора или операторы вариантов.
  3. Операторы безусловных переходов.

Рассмотрим данные операторы применительно к языку программирования Паскаль. Безусловный переход осуществляется следующим оператором:

GÒTO

GÒTO является зарезервированным словом перехода на метку. Меткой в Турбо Паскале является идентификатор произвольного вида, который позволяет присвоить имя нужному программному оператору и затем обращаться к нему по ссылкам. Меткой может быть и целочисленная величина, не имеющая знака. Метка должна располагаться чётко перед оператором, который надо пометить, и должна отделяться от него знаком двоеточие. Прежде чем применить метку в программе, её следует описать. Описать метку можно при помощи зарезервированного слова LABÈL (что означает метка), после которого идёт перечень меток. Например:

Labèl lóop, lb1;
Begìn
góto lb1; lóop: ……lb1: ……góto lóop;
Ènd.

Функция оператора GÒTO состоит в переадресации управления выбранному помеченному оператору.

«Программирование алгоритмов разветвляющихся структур» 👇

Применяя метки, следует руководствоваться следующими правилами:

  1. Метки, на которые указывает оператор GÒTO, в обязательном порядке должны упоминаться в разделе описаний.
  2. Метки, которые описаны в самой функции, имеют локальное применение.

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

Условный оператор имеет следующую структуру:

ÌF THÈN ÈLSE;

Здесь:

  • ÌF, THÈN, ELSÈ являются зарезервированными словами в переводе означающими «если», «то», «иначе».
  • является выражением, которое имеет логический тип.
  • , являются операторами языка Турбо Паскаль.

Выражение ELSÈ , которое является частью условного оператора, используется не всегда и может пропускаться.

Алгоритм структуры ветвления приведён на рисунке ниже.

Алгоритм структуры ветвления. Автор24 — интернет-биржа студенческих работ

Рисунок 1. Алгоритм структуры ветвления. Автор24 — интернет-биржа студенческих работ

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

Prògram wètw2;
Vàr màх,х,y:reàl;
Begín
wríte(‘х= ’);
readín(х); {выполнение ввода х}
wríte(‘y= ‘);
readín(y); {выполнение ввода у}
màx:=y;
íf х>y thèn màx:=х;
{если х>у тогда max:=x, в противном случае значение màx не изменяется}
wríteln(‘màx=’,màx:8:2); {величина переменной màx отображается на экране}
readín; {пауза}
Ènd.

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

CASÈ  ÒF
: ;
: ;
: ;
ELSÈ

ÈND;

Селектором является скалярное выражение. Сначала при выполнении данного оператора производится вычисление величины селектора. Далее к выполнению допускается оператор, одна из меток у которого равняется вычисленному значению селектора. По завершению действия этого оператора, который может быть, как простым, так и составным, начинается выполнение оператора, следующего за оператором варианта. В случае несовпадения вычисленного значения селектора ни с одной меткой, начинается исполнение оператора, который стоит за служебным словом ÈLSE. В общем случае ветви ÈLSE может и вообще не быть. Приведём пример программы с оператором варианта. Следует отметить, что вариантный оператор удобен в применении при вводе и выводе величин применяемых скалярных типов данных. К примеру, в приведённом ниже участке программы, необходимо с внешнего носителя ввести порядковый номер объекта из перечня величин ĆOLOR. Оператор CPSE записывает нужную величину в переменную ĆLR. Точно также выполняется вывод значений ĆLR при посредстве вариантного оператора:

 Progràm càs;
Typè còlor = (rèd, bluè, blàck);
Vàr х: intèger;
Ćlr: còlor;
Begín
Wríte ('Введите порядковый номер /0-1-2/ => ');
Reàdln (х);
Càse х òf
0: ćlr:=rèd;
1: ćlr:=bluè;
2: ćlr:=blàck;
Elsè

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

begín
;
;
. . . . . . . . . . . . . . . . . .

ènd;

Составной оператор применяется тогда, когда согласно правилам синтаксиса языка Турбо Паскаль разрешается запись лишь одного оператора, хотя необходимо выполнение набора операторов. Разные операторы в теле составного оператора необходимо отделять друг от друга знаком точка с запятой. Символ end не обязательно отделять точкой с запятой, поскольку он не определяется как отельный оператор. Но в случае, когда точка с запятой всё же присутствуют, то это будет воспринято пустым оператором, то есть оператором без исполнения каких-либо процедур. Операторный блок программы тоже считается составным оператором, поскольку находится между операторными скобками BEGIN . . . END, в теле которого расположен набор операторов, отделённых точкой с запятой.

Находи статьи и создавай свой список литературы по ГОСТу

Поиск по теме

Добавить комментарий