Чтение онлайн

ЖАНРЫ

Технологии программирования

Костерин В В

Шрифт:

if d < -1e-6 then begin

{ Вывод надписи: уравнение не имеет решения }

WriteLn ('уравнение не имеет решения');

end;

Декомпозируем действие "Расчет двух различных корней". Это действие представляет цепочку из трех элементарных операторов. Выполним проверку информационной согласованности действий:

Входная информация: a, b, c, d

{ Расчет двух различных корней }

x1:= ((-b) — Sqrt (d))/(2.0*a);

x2:= ((-b) + Sqrt (d))/(2.0*а);

Write ('два
различных корня x1 = ', x1:10:4);

WriteLn (' x2 = ', х2:10:4);

Здесь вывод одной строки осуществлен двумя операторами. Осуществим сборку всей программы, удалив избыточные комментарии и избыточные операторные скобки begin — end, охватывающие лишь один оператор. Испытаем полученную программу на всех заранее подготовленных тестах. Собранный вариант программы:

Program Kvadrat;

{ Программа решения квадратного уравнения

вида a*x*x + b*x + c = 0 с произвольными значениями

коэффициентов a, b, c типа вещественный }

Uses

Crt, Dos;

Var

a, b, c: Real; {Коэффициенты квадратного уравнения}

xl, x2: Real; {Корни квадратного уравнения}

dl: Real; {Значение дискриминанта}

begin

ClrScr; { Очистка экрана }

{Вывод информации о назначении программы}

WriteLn ('Программа решения квадратного уравнения');

WriteLn (
'вида a*x*x + b*x + c = 0 с произвольными', 'значениями');

WriteLn ('коэффициентов a, b, c типа ', 'вещественный');

WriteLn

{Ввод значений коэффициентов a, b, c}

Write ('Укажите значение коэффициента а = ');

ReadLn(a); { Ввод а }

Write ('Укажите значение коэффициента b = ');

ReadLn(b); { Ввод b}

Write ('Укажите значение коэффициента с = ');

ReadLn(c); { Ввод с }

{ Вывод проверочно-протокольной информации

о введенных значениях коэффициентов a, b, c }

WriteLn;

WriteLn ('Решается квадратное уравнение');

WriteLn (а:10:4, '*x*x + ', b:10:4, '*x + ',
с:10:4, ' = 0:');

{ Само решение квадратного уравнения }

if (Abs (a) > 1e-6)

then

begin

{ Продолжение решения с вычислением дискриминанта }

{ Вычисление дискриминанта квадратного уравнения }

d:= Sqr(b) — 4.0*а*с;

{ Решение уравнения }

if d > 1e-6

then

begin

{
Расчет двух различных корней }

x1:= (-b) — Sqrt(d)/(2.0*a);

х2:= (-b) + Sqrt(d)/(2.0*a);

Write ('два различных корня x1 = ',
x1:10:4);

WriteLn (' х2 = ', х2:10:4);

end;

if ((d >= -1e-6) and (d <= 1e-6))

then

WriteLn ('два равных корня х = ', (-b)/(2.0*a):10:4);

if d < -1e-6 then

WriteLn ('уравнение не имеет решения');

end;

if ((Abs(a) <= 1e-6) and (Abs(b) > 1e-6))

then

begin

{ Решение линейного уравнения }

x1:= — c/b;

WriteLn ('уравнение линейное х = ', x1:10:4);

end;

if ((Abs(a) <= 1e-6) and (Abs(b) <= 1e-6 and
(Abs(c) > 1e-6))

then

WriteLn ('Нет решения');

if ((Abs(a) <= 1e-6 and (Abs(b) <= 1e-6 and
(Abs(c) <= 1e-6))

then

begin

Write ('Бесчисленное множество решений',

'уравне');

WriteLn ('ния (корни — любые числа)');

end;

WriteLn;

Write ('Для завершения программы нажмите');

WriteLn ('любую клавишу…');

repeat until KeyPressed; { Цикл ожидания
нажатия любой клавиши }

end.

5.10. ПРИМЕР ВЫПОЛНЕНИЯ УЧЕБНОЙ РАБОТЫ "РАЗРАБОТКА АЛГОРИТМА УМНОЖЕНИЯ"

В качестве примера приводится учебная работа, выполненная одним из обучаемых. Работа была оформлена на отдельных листах формата A4. Курсивом выделены пояснения авторов учебника, которые были дополнительно ими внесены в текст работы.

Страница 1 (без нумерации) представляет собой титульный лист с наименованием: "ЗАДАНИЕ НА СОСТАВЛЕНИЕ СТРУКТУРИРОВАННОГО АЛГОРИТМА".

Страница 2 содержит постановку задачи и набор тестов, составленных до разработки алгоритма процесса.

Шаг 1. ПОСТАНОВКА ЗАДАЧИ

Составить алгоритм умножения двух положительных чисел с произвольным (до ста) количеством цифр. Цифры сомножителей и результата должны находиться в одномерных массивах. Разрядность результата не должна превышать 100 цифр.

Шаг 2. НАБОР ТЕСТОВ, СОСТАВЛЕННЫХ ДО РАЗРАБОТКИ АЛГОРИТМА ПРОЦЕССА

Поделиться с друзьями: