Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet_polinom.doc
Скачиваний:
2
Добавлен:
16.11.2019
Размер:
198.66 Кб
Скачать

Описание программы

Программа использует класс Spisok

class Spisok

{

private:

node *phead; //указатель на начало списка .

node *pend;

node *cursosr;

node *Res; //указатель на найденное звено .

int N_monom;

public:

Spisok() {phead = new (node); (*phead).next=NULL;} //конструктор

~Spisok() { delete phead; } //деструктор.

void Initial(node **first, node **last);

int Empty(node *first);

void Add(node **last,int elem, unsigned int pol);

void Show(node *first);

int Poisk_Eqv (node *first,unsigned int pol,node **last);

int Poisk_Less (node *first,int el,node **last);

void Izm (node *Res, int el,unsigned int pol);

void DelAll(node *first, node **last);

void AddLess (node **Res, int el,unsigned int pol);

int Next (node *first,int el,node **last);

void Del1 ();

};

Описание алгоритма

Работа программы начинается с вывода основного меню. Для начала работы выбирается пункт

"1.Операции"

При этом осуществляется запрос имени файла, где хранится описание полинома.

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

P='x7y2z1+3x2z1-6y2-3z9 '

Q='-7x2z1+6y2+5'

Коэффициенты мономов имеют целочисленный тип. При вводе полинома производится синтаксический разбор строки и приведение монома к стандартному виду – коэффициент со знаком и свертка.

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

Рекомендуемая форма печати полинома состоит в представлении полинома в виде текстовой строки с формульным выражением, описывающим полином. Например, полином P(x,y,z) из контрольного примера может быть представлен как строка:

P(x,y,z)='x7y2z1-4x2z1-3x9+5'

Реализация алгоритмов обработки полиномов организуется путем следующих шагов

  1. Производится считывание исходной строки полинома с stdin ()

  2. Выполняется анализ исходной строки на наличие запрещенных символов

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

  4. Если свернутые степени мономов совпадают, то осуществляется приведение подобных членов: к коэффициенту монома полинома P прибавляется коэффициент монома полинома Q. Если при этом сумма коэффициентов оказывается равной нулю, то соответствующий моном полинома P исключается из списка.

Для полиномов реализованы следующие функции:

  • Сложение и вычитание

  • Умножение

  • Взятие производной. Для сложения полиномов P и Q производится одновременный обход обоих списков, начиная с головных звеньев, по правилу слияния упорядоченных массивов. Сумма формируется на месте первого слагаемого (P). При этом, если свернутая степень текущего монома полинома Q больше свернутой степени текущего монома полинома P, то копия монома полинома Q вставляется в полином P; в полиноме Q осуществляется переход на следующее звено. Если свернутая степень текущего монома полинома P больше свернутой степени текущего монома полинома Q, то в полиноме P осуществляется переход на следующее звено. Если свернутые степени текущих мономов полиномов P и Q совпадают, то осуществляется приведение подобных членов: к коэффициенту монома полинома P прибавляется коэффициент монома полинома Q. Если при этом сумма коэффициентов оказывается равной нулю, то соответствующий моном полинома P исключается из списка. В обоих списках осуществляется переход к следующему звену. Для реализации операций вставки и удаления звеньев в односвязных списках необходимы указатели как текущего, так и предыдущего звеньев.

  • Удаление полинома. При удалении полинома предлагается немедленно возвращать освободившуюся память в кучу. В этом случае не образуется мусор из освободившихся звеньев. При удалении полинома осуществляется обход списка аналогично предыдущей операции, и каждое звено возвращается в кучу процедурой Dispose(q).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]