-
Notifications
You must be signed in to change notification settings - Fork 0
/
MainPage.dox
100 lines (81 loc) · 4.26 KB
/
MainPage.dox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/**
@mainpage Dokumentacja zadania wielomiany
## Treść zadania
Zadanie polega na zaimplementowaniu operacji na wielomianach
rzadkich wielu zmiennych o współczynnikach całkowitych oraz zaimplementowaniu
kalkulatora działającego na tych wielomianach i stosującego odwrotną notację
polską.
### Definicja wielomianu w zadaniu
Zmienne wielomianu oznaczamy @f$x_0, x_1, x_2@f$ itd. Definicja wielomianu jest
rekurencyjna. Wielomian jest sumą jednomianów postaci @f$px^n_0@f$, gdzie
@f$n@f$ jest wykładnikiem tego jednomianu będącym nieujemną liczbą całkowitą,
a @f$p@f$ jest współczynnikiem, który jest wielomianem. Współczynnik w
jednomianie zmiennej @f$x_i@f$ jest sumą jednomianów zmiennej @f$x_{i+1}@f$.
Rekurencja kończy się, gdy współczynnik jest liczbą (czyli wielomianem stałym),
a nie sumą kolejnych jednomianów. Wielomiany są rzadkie, co oznacza, że stopień
wielomianu może być znacznie większy niż liczba składowych jednomianów.
Przykłady wielomianów znajdują się niżej, w opisie działania kalkulatora.
## Opis programu
### Biblioteka podstawowych operacji na wielomianach
Program zawiera bibliotekę udostępniającą podstawowe operacje na wielomianach
rzadkich wielu zmiennych, której interfejs jest zdefiniowany w pliku poly.h.
Biblioteka udostępnia również struktury Poly i Mono, reprezentujące odpowiednio
wielomian i jednomian.
### Kalkulator działający na wielomianach
#### Użycie
Kalkulatora można używać uruchumiając plik wykonywalny *poly* powstający przy
kompilacji programu.
#### Działanie
Program kalkulatora czyta dane wierszami ze standardowego wejścia. Wiersz
zawiera wielomian lub polecenie do wykonania. Wielomian reprezentujemy jako
stałą lub sumę jednomianów. Stała jest liczbą całkowitą. Jednomian
reprezentujemy jako parę (*coeff,exp*), gdzie współczynnik *coeff* jest
wielomianem, a wykładnik *exp* jest liczbą nieujemną. Do wyrażenia sumy używamy
znaku +. Jeśli wiersz zawiera wielomian, to program wstawia go na stos.
Przykłady wielomianów:
- 3
- (2,3)
- (1,4)+(2,7)
- ((2,2),15)+(-7,8)
- (((4,3)+(5,4),2)+((1,5),0),1).
Powyższe wielomiany to kolejno:
- 3
- @f$2x_0^3@f$
- @f$x_0^4+2x_0^7@f$
- @f$2x_1^2x_0^{15}-7x_0^8@f$
- @f$((4x_2^3+5x_2^4)x_1^2 + x_2^5x_1^0)x_0 = 4x_2^3x_1^2x_0 + 5x_2^4x_1^2x_0
+ x_2^5x_0@f$.
Wiersz nie zawiera wielomianu, czyli zawiera polecenie, gdy rozpoczyna się
literą alfabetu angielskiego. Kalkulator wykonuje polecenia:
- ZERO – wstawia na wierzchołek stosu wielomian tożsamościowo równy zeru;
- IS_COEFF – sprawdza, czy wielomian na wierzchołku stosu jest współczynnikiem;
- IS_ZERO – sprawdza, czy wielomian na wierzchołku stosu jest tożsamościowo
równy zeru;
- CLONE – wstawia na stos kopię wielomianu z wierzchołka;
- ADD – dodaje dwa wielomiany z wierzchu stosu, usuwa je i wstawia na
wierzchołek stosu ich sumę;
- MUL – mnoży dwa wielomiany z wierzchu stosu, usuwa je i wstawia na
wierzchołek stosu ich iloczyn;
- NEG – neguje wielomian na wierzchołku stosu;
- SUB – odejmuje od wielomianu z wierzchołka wielomian pod wierzchołkiem,
usuwa je i wstawia na wierzchołek stosu różnicę;
- IS_EQ – sprawdza, czy dwa wielomiany na wierzchu stosu są równe
- DEG – wypisuje na standardowe wyjście stopień wielomianu;
- DEG_BY idx – wypisuje na standardowe wyjście stopień wielomianu ze względu na
zmienną o numerze idx;
- AT x – wylicza wartość wielomianu w punkcie x, usuwa wielomian z wierzchołka
i wstawia na stos wynik operacji;
- PRINT – wypisuje na standardowe wyjście wielomian z wierzchołka stosu
w najprostszej postaci;
- POP – usuwa wielomian z wierzchołka stosu;
- COMPOSE k – zdejmuje z wierzchołka stosu najpierw wielomian @f$p@f$, a potem
kolejno wielomiany @f$q_{k-1}, q_{k-2}, \ldots, q_{0}@f$ i umieszcza na stosie
wynik operacji złożenia @f$p(q_0, q_1, \ldots, q_{k-1})@f$.
Polecenia sprawdzające wypisują na standardowe wyjście 1 w przypadku prawdy
oraz 0 w przypadku fałszu.
Program kalkulatora wypisuje komunikaty o błędach na standardowe wyjście błędów.
#### Biblioteka stosu wielomianów
Implementacja kalkulatora korzysta z interfejsu biblioteki poly_stack.h –
udostępniającej strukturę stosu wielomianów rzadkich wielu zmiennych wraz
z operacjami na tym stosie.
*/