flex-bison-in-action/analyzers/polynomials/poly_calc/poly_calc.h

50 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef POLY_CALC_H
#define POLY_CALC_H
// Структура для представления слагаемого
typedef struct {
int coefficient; // коэффициент
int exponent; // степень переменной
} Term;
// Структура для представления полинома
typedef struct {
Term *terms; // массив слагаемых
int size; // количество слагаемых
int capacity; // вместимость массива
} Polynomial;
typedef struct {
char name;
Polynomial poly;
} Variable;
// Инициализация полинома
void init_polynomial(Polynomial *p);
// Добавление слагаемого в полином
void add_term(Polynomial *p, int coeff, int exp);
// Сортировка слагаемых в полиноме по убыванию степени
void sort_polynomial(Polynomial *p);
// Освобождение памяти, занятой полиномом
void free_polynomial(Polynomial *p);
// Копирование полинома
// Polynomial copy_poly(Polynomial *p);
// Печать полинома
void print_polynomial(Polynomial *p, char letter);
// Возвращает копию полинома
Polynomial copy_poly(Polynomial *p);
// Например есть полином x+1 и терм (2,1)=2x, значит в полиноме есть
// incremental (увеличиваемое), т.е. есть к чему прибавить 2x
Term* exist_incremental(Polynomial *p, Term term);
// Сложение одного слагаемого и полинома (вспомогательная функция)
void add_term_and_poly(Polynomial *p, Term term);
// Вернет сумму двух полиномов
Polynomial add_polynomials(Polynomial *p1, Polynomial *p2);
// Вычтет p2 из p1 и вернет разность
Polynomial sub_polynomials(Polynomial *p1, Polynomial *p2);
// Перемножит полиномы, вернет результат
Polynomial mul_polynomials(Polynomial *p1, Polynomial *p2);
// Возведение полинома в целую степень
Polynomial deg_poly(Polynomial *p1, int degree);
#endif