logo search
Методичка_Delphi_Ч1

Решение квадратного уравнения

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

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

Выше уже рассматривались некоторые из этих алгоритмов. На рисунке 4.1 изображен корневой алгоритм решения задачи, в котором анализируется значение коэффициента «а» и, в соответствии с его значением вызывается либо процедура решения линейного уравнения, либо процедура решения квадратного уравнения.

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

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

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

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

После этого можно запрограммировать решение линейного уравнения в соответствии с алгоритмом, представленным на рисунке 4.2. Его следует реализовать в виде процедуры с именем linUr. Это может быть процедура модуля, в которую в качестве параметров передаются коэффициенты «в» и «с». Выводить результаты следует в протокол выполненных расчетов, в качестве которого используется компонент TMemo.

Далее следует запрограммировать решение квадратного уравнения в соответствии с разработанной самостоятельно схемой алгоритма. Алгоритм следует реализовать в виде процедуры с именем kvUr. Это может быть процедура модуля, в которую в качестве параметров передаются коэффициенты «а», «в» и «с». В процедуре следует использовать обращение к написанной ранее функции вычисления дискриминанта. Выводить результаты следует в протокол выполненных расчетов, в качестве которого используется компонент TMemo.

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

Выполнив подготовительную работу, можно прейти к написанию процедуры обработки события onClick для кнопки «Найти корни». В этой процедуре следует реализовать алгоритм представленный на рисунке 4.1. Начало процедуры может быть таким же, как и в процедуре расчета по формуле в предыдущем проекте, но затем должно быть организовано разветвление. В ветвях должны быть обращения к процедуре решения линейного уравнения linUr и к процедуре решения квадратного уравнения kvUr.

Завершив написание процедур, проверьте работу проекта для всех контрольных примеров.