Основы программирования на C++, PASCAL
1.3. Ветвления и циклы в вычислительных алгоритмах
Составим алгоритм решения квадратного уравнения
![](osnovi.files/image009.png)
Задача хорошо знакома из математики. Исходными данными здесь являются коэффициенты а, b, с. Решением в общем случае будут два корня x1 и х2, которые вычисляются по формуле:
![](osnovi.files/image010.png)
Все используемые в этой программе величины вещественного типа.
![](osnovi.files/image011.png)
Слабость такого алгоритма видна невооруженным глазом. Он не обладает важнейшим свойством, предъявляемым к качественным алгоритмам, — универсальностью по отношению к исходным данным. Какими бы ни были значения исходных данных, алгоритм должен приводить к определенному результату и завершать работу. Результатом может быть число, но может быть и сообщение о том, что при определенных данных задача решения не имеет. Недопустимы остановки в середине алгоритма из-за невозможности выполнить какую-то операцию. Упомянутое свойство в литературе по программированию называют результативностью алгоритма (в любом случае должен быть получен какой-то результат).
Чтобы построить универсальный алгоритм, сначала требуется тщательно проанализировать математическое содержание задачи.
Решение уравнения зависит от значений коэффициентов a, b, с. Вот анализ рассмотренной выше задачи (ограничиваемся только поиском вещественных корней):
если a = 0, b = 0, с = 0, то любое х — решение уравнения;
если а = 0,b = 0, с ≠ 0,то уравнение действительных решений не имеет;
если а = 0, b ≠ 0, то это линейное уравнение, которое имеет одно решение х = -с/b;
если a ≠ 0 и d = b2- 4ас ≥ 0, то уравнение имеет два вещественных корня (формулы приведены выше);
если а ≠ 0 и d < 0, то уравнение не имеет вещественных корней.
Блок-схема алгоритма приведена на рис. 3.
![](osnovi.files/image012.png)
Этот же алгоритм на алгоритмическом языке:
![](osnovi.files/image013.png)
В этом алгоритме многократно использована структурная команда ветвления. Общий вид команды ветвления в блок-схемах и на алгоритмическом языке следующий:
![](osnovi.files/image014.png)
Вначале проверяется условие (вычисляется отношение, логическое выражение). Если условие истинно, то выполняется серия 1 — последовательность команд, на которую указывает стрелка с надписью «да» (положительная ветвь). В противном случае выполняется серия 2 (отрицательная ветвь). В АЯ условие записывается после служебного слова если, положительная ветвь — после слова то, отрицательная — после слова иначе. Буквы кв обозначают конец ветвления.
![](arrow/2.png)
![](arrow/1.png)