| Алгоритмы с ветвящейся структуройПредставление ветвлений на АЯ. Трассировка ветвящихся алгоритмовРассмотрим несколько задач, решение которых на компьютере получается с помощью ветвящихся алгоритмов. Первая задача: даны два числа; выбрать большее из них. Пусть исходными данными являются переменные А и В. Их значения будут задаваться вводом. Значение большего из них должно быть присвоено переменной С и выведено на экран компьютера. Например, если А = 5, В = 8, то должно получиться: С = 8. Блок-схема алгоритма решения этой задачи изображена на рис. 3.6. 
 
   |  |  
   | Рис. 3.6. Алгоритм выбора большего из двух чисел (с полным ветвлением) |  
 
 Нетрудно понять смысл этого алгоритма. Если значение переменной А больше, чем В, то переменной С присвоится значение А. В противном случае, когда А < В, переменной С присвоится значение В. Условием, по которому разветвляется алгоритм, является отношение неравенства А > В. Изучая базы данных и электронные таблицы, вы узнали, что такое отношение является логическим выражением. Если оно справедливо, то результатом будет логическая величина "истина" и выполнение алгоритма продолжится по ветви "да"; в противном случае логическое выражение примет значение "ложь" и выполнение алгоритма пойдет по ветви "нет". До выполнения на компьютере правильность алгоритма можно проверить путем заполнения трассировочной таблицы. Вот как будет выглядеть трассировка нашего алгоритма для исходных значений А = 5, В = 8. 
   | Шаг | Операция | А | В | С | Проверка условия |  
   | 1 | ввод А, В | 5 | 8 |  |  |  
   | 2 | А>В | 5 | 8 |  | 5 > 8, нет (ложь) |  
   | 3 | С:=В | 5 | 8 | 8 |  |  
   | 4 | вывод С | 5 | 8 | 8 |  |  Ветвление является структурной командой. Его исполнение происходит в несколько шагов: проверка условия (выполнение логического выражения) и выполнение команд на одной из ветвей "да" или "нет". Поэтому в трассировочной таблице записываются не команды алгоритма, а отдельные операции, выполняемые компьютером на каждом шаге. В алгоритме на рис. 3.6 используется полное ветвление. Эту же самую задачу можно решить, применяя структурную команду неполного ветвления. Блок-схема такого алгоритма изображена на рис. 3.7. 
 
   |  |  
   | Рис. 3.7.  Алгоритм выбора большего из двух значений (с неполным ветвлением) |  
 
 Выполните самостоятельно трассировку этого алгоритма для вариантов 1) А = 0,2, В = 0,3; 2) А = 7, В = 4; 3) А = 5, В = 5. Если вы все проделаете правильно, то убедитесь, что алгоритм верный. А теперь запишем рассмотренные алгоритмы на Алгоритмическом языке (АЯ). Во-первых, нужно решить вопрос о том, как описать переменные в этом алгоритме. Вспомним, что для всех переменных в алгоритме на Алгоритмическом языке необходимо указать их тип. Переменные А, В, С - числовые величины. В этой задаче они могут принимать любые значения. В программировании числовые величины, которые могут иметь любые значения - целые, дробные, - называются вещественными. Им ставится в соответствие вещественный тип. На Алгоритмическом языке этот тип указывается служебным словом вещ. Как выглядит команда ветвления, вы уже знаете. Вот два алгоритма на АЯ, соответствующие блок-схемам на рис. 3.6 и 3.7: 
   | алг    БИД1 вещ   А, В, С
 нач    ввод А, В
 если А>В
 то С:=А
 иначе С:=В
 кв
 вывод С
 кон
 | алг     БИД2 вещ   А, В, С
 нач    ввод А, В
 С:=А
 если В>А
 то С:=В
 кв
 вывод С
 кон
 |  Под сокращенным названием алгоритмов ВИД подразумевается "Большее из двух". Для программирования характерно то, что одна и та же задача может быть решена с помощью разных алгоритмов. И чем сложнее задача, тем больше можно придумать различных алгоритмов ее решения. Для больших задач (производственных, научных) практически невозможно точное совпадение алгоритмов, составленных разными программистами. Следующая задача: упорядочить значения двух переменных X и Y по возрастанию. Смысл этой задачи следующий: если для исходных значений переменных справедливо отношение X < Y (например, X = 1, Y = 2), то оставить их без изменения; если же X > Y (например, X = 2, Y = 1), то выполнить обмен значениями. Алгоритм обмена значениями двух переменных был рассмотрен в предыдущем параграфе. Вспомним, что для обмена нужна третья вспомогательная переменная. В алгоритме решения данной задачи используется неполное ветвление. Приведем блок-схему (рис. 3.8) и алгоритм на АЯ. 
  | алг    СОРТИРОВКА вещ   X, Y, С
 нач    ввод X, Y
 если X>Y
 то     С:=Х
 Х:=Y
 Y:=С
 кв
 вывод X, Y
 кон
 |  |  
  | Рис. 3.8. Блок-схема алгоритма упорядочения двух величин |  Здесь роль вспомогательной переменной для обмена выполняет С. Сложные ветвящиеся алгоритмыПолучим алгоритм решения еще одной задачи: найти наибольшее значение среди трех величин: А, В, С. Естественно, возникает следующая идея этого алгоритма: сначала нужно найти большее из значений АИВИ присвоить его какой-то дополнительной переменной, например D; затем найти большее среди D и С. Это значение можно присвоить той же переменной D. Решение задачи сводится к двукратному применению уже знакомого алгоритма нахождения большего из двух значений. Блок-схема алгоритма - на рис. 3.9 
  | алг БИТ1вещ А, В, С, D
 нач  ввод А, B, С
 если А>В
 то D:=A
 иначе D:=B
 кв
 если C>D
 то D:=C
 кв
 вывод D
 кон
 |  |  
  | Рис. 3.9.   Блок-схема алгоритма "БИТ" с последовательными ветвлениями |  Нетрудно догадаться, что "БИТ" обозначает "Большее из трех". В структуре этого алгоритма содержатся два последовательных ветвления: первое - полное, второе - неполное. Эту же задачу можно решить с помощью алгоритма, имеющего структуру вложенных ветвлений. Его блок-схема приведенная  на рис. 3.10. А вот как выглядят описание этого алгоритма на АЯ и трассировочная таблица при А = 5,В = 7,С = 2. Алг БИТ2 вещ А, В, С, D
 нач  ввод А, В, С
 если А>В
 то если A>C то D:=A иначе D:=С кв
 иначе  если  В>С то D:=B иначе D:=С кв
 кв
 вывод D
 кон
 
   | Шаг | Операция | А | В | С | D | Проверка условия |  
   | 1 | ввод А, В, С | 5 | 7 | 2 | - |  |  
   | 2 | А>В | 5 | 7 | 2 | - | 5 > 7, нет |  
   | 3 | В>С | 5 | 7 | 2 | - | 7 > 2, да |  
   | 4 | D:=B | 5 | 7 | 2 | 7 |  |  
   | 5 | вывод D | 5 | 7 | 2 | 7 |  |  Вопросы и задания 1.	Какую структуру имеет алгоритм нахождения  большего из двух значений? 2.	Почему отношение неравенства можно назвать логическим выражением? 3.	В каком случае для числовой переменной следует указывать цб лый тип, в каком - вещественный? 4.	Составьте алгоритм (в виде блок-схемы и на АЯ) нахождения меньшего из двух значений. 5.	Составьте алгоритм нахождения наименьшего из трех значений. 6.	Для вывода на экран произвольной символьной строки нужно в команде вывода записать эту строку в апострофах. Например, по команде
 вывод "ОТВЕТ"на экран выведется слово ОТВЕТ. Определите, какая задача решается по следующему алгоритму: 
алг   Задача-6вещ  X
 нач   ввод X
 если Х < 0
 то вывод "отрицательное число"
 иначе вывод "положительное число"
 кв
 кон
 7.	Составьте алгоритм, по которому на компьютере будет происходить следующее: в переменную S вводится возраст Саши, в переменную М вводится возраст Маши. В качестве результата на экран выводится фраза "Саша старше Маши" или "Маша старше Саши" (предполагаем, что кто-нибудь из них обязательно старше). 8.	Решите предыдущую задачу, учитывая возможность одинакового возраста Саши и Маши. В таком случае может быть получен ответ: "Саша и Маша - ровесники". 9. Составьте алгоритм упорядочения значений трех переменных по возрастанию, т. е. при любых исходных значениях А, В, С отсортируйте их так, чтобы стало: А   В   С. Проверьте алгоритм трассировкой при разных вариантах значений исходных данных. 
 
 |