Основы программирования на C++, PASCAL
1.3. Ветвления и циклы в вычислительных алгоритмах
Составим алгоритм решения квадратного уравнения
Задача хорошо знакома из математики. Исходными данными здесь являются коэффициенты а, b, с. Решением в общем случае будут два корня x1 и х2, которые вычисляются по формуле:
Все используемые в этой программе величины вещественного типа.
Слабость такого алгоритма видна невооруженным глазом. Он не обладает важнейшим свойством, предъявляемым к качественным алгоритмам, — универсальностью по отношению к исходным данным. Какими бы ни были значения исходных данных, алгоритм должен приводить к определенному результату и завершать работу. Результатом может быть число, но может быть и сообщение о том, что при определенных данных задача решения не имеет. Недопустимы остановки в середине алгоритма из-за невозможности выполнить какую-то операцию. Упомянутое свойство в литературе по программированию называют результативностью алгоритма (в любом случае должен быть получен какой-то результат).
Чтобы построить универсальный алгоритм, сначала требуется тщательно проанализировать математическое содержание задачи.
Решение уравнения зависит от значений коэффициентов 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.
Этот же алгоритм на алгоритмическом языке:
В этом алгоритме многократно использована структурная команда ветвления. Общий вид команды ветвления в блок-схемах и на алгоритмическом языке следующий:
Вначале проверяется условие (вычисляется отношение, логическое выражение). Если условие истинно, то выполняется серия 1 — последовательность команд, на которую указывает стрелка с надписью «да» (положительная ветвь). В противном случае выполняется серия 2 (отрицательная ветвь). В АЯ условие записывается после служебного слова если, положительная ветвь — после слова то, отрицательная — после слова иначе. Буквы кв обозначают конец ветвления.