5. Разработка структур данных и алгоритмов
Алгоритмы
Для удобства пользования программой (как драйвером тестирования) она должна позволять выполнять заданные функции (сложение, вычитание и изменение знака полиномов) в любом порядке и повторять эти действия произвольное число раз. Тогда алгоритм программы можно описать так:
АЛГОРИТМ СлоВИзм.
ЦИКЛ
Ввести запрос на выполнение функции nf { 1 – сложение, 2 – вычитание, 3 – изменение знака, 0 – выход из программы}
ЕСЛИ nf = 1
ТО
Выполнить операцию сложения.
ИНАЧЕ ЕСЛИ nf = 2
ТО
Выполнить операцию вычитания.
ИНАЧЕ ЕСЛИ nf = 3
ТО
Выполнить операцию изменения знака.
ИНАЧЕ ЕСЛИ nf = 0
ТО
ВЫЙТИ НА КОНЕЦ.
ИНАЧЕ {Ошибка в запросе}
ВСЕ ЕСЛИ
ВСЕ ЦИКЛ
КОНЕЦ СлоВИзм.
Для разработки структуры программы (состава и подчиненности модулей) и выбора представления структур данных необходимо выделить набор «элементарных» операций над данными, поэтому операторы 1.2.1, 1.2.2 и 1.2.3 алгоритма СлоВИз требуют дальнейшей детализации.
АЛГОРИТМ 1.2.1 СЛОЖЕНИЕ.
Ввести исходные данные (создать полиномы – операнды Pol1, Pol2) и проверить их корректность.
ЕСЛИ данные содержат ошибки
ТО
Выдать сообщение об ошибке
ВСЕ ЕСЛИ.
Создать полином (пустой) для записи результата операции (rezPol).
Выполнить операцию сложения: AddPol (Pol1, Pol2, rezPol).
Вывести полином – результат операции rezPol.
КОНЕЦ 1.2.1 СЛОЖЕНИЕ.
Анализ алгоритма 1.2.1 дает две «элементарные» операции над полиномами: «Создать пустой полином» и «Вывести полином (на экран)».
Операции 1 и 4 алгоритма 1.2.1 требуют дальнейшей детализации. Из-за недостатка времени рассмотрим детализацию только операции 4.
АЛГОРИТМ 1.2.1.4 СЛОЖЕНИЕ.
Встать в начало Pol1 и Pol2.
ЕСЛИ deg(Pol1) > deg(Pol1)
ТО
Копировать все элементы Pol1, для которых deg(Pol1) > deg(Pol2), начиная с первого, в rezPol.
ИНАЧЕ ЕСЛИ deg(Pol1) < deg(Pol2)
ТО
Копировать все элементы Pol2, для которых deg(Pol2) > deg(Pol1), начиная с первого, в rezPol.
ВСЕ ЕСЛИ.
Текущие элементы Pol1 и Pol2 имеют одинаковые степени.
ПОКА НЕ конец (Pol1) ИЛИ НЕ конец (Pol2)
ВЫПОЛНИТЬ
ЕСЛИ deg(Pol1) < deg(Pol2)
ТО Копировать в конец rezPol текущий элемент Pol2.
ИНАЧЕ ЕСЛИ deg(Pol1) > deg(Pol2)
ТО Копировать в конец rezPol текущий элемент Pol1.
ИНАЧЕ {текущие элементы Pol1 и Pol2 имеют одинаковые степени}
ЕСЛИ coef(Pol1) + coef(Pol2) 0
ТО Вставить в конец rezPol элемент, имеющий coef(rezPol) = coef(Pol1) + coef(Pol2) и deg (rezPol) = deg (Pol1).
Все если
ВСЕ ЕСЛИ
Перейти к следующим элементам Pol1 и Pol2.
ВСЕ ПОКА.
ЕСЛИ НЕ конец (Pol1) И НЕ конец (Pol2)
ТО
Копировать все элементы Pol2, начиная с текущего, в rezPol.
ИНАЧЕ ЕСЛИ НЕ конец (Pol2) И НЕ конец (Pol1)
ТО
Копировать все элементы Pol1, начиная с текущего, в rezPol.
ВСЕ ЕСЛИ.
КОНЕЦ 1.2.1.4 СЛОЖЕНИЕ.
0