Sunteți pe pagina 1din 12

Polinoame

Proiect Tehnici de Programare.

Lazar Laurentiu Traian


Grupa: 30226
Cuprins
1.Obiectivul
temei..
3
2.Analiza
problemei
..3
3.Modelare
....4
4.Scenarii de
utilizare..4
5.Proiectare
...7
6.Interfata
utilizator.
8
7.Implementare
..9
8.Concluzi
14
9.Bibliografie. ...
.14

1.Obiectivul temei
Cerinta: Propuneti, proiectati si implementati un sistem de procesare a
polinoamelor de o singura
variabila cu coeficienti intregi.

Acest program se ocupa cu operatii de baza cu polinoame. Utilizatorul va


introduce doua polinoame si va alege operatia pe care doreste sa o execute.
In functie de aceasta alegere ii se va afisa rezultatul/rezultatele.
Operatiile care pot fi efectuate sunt adunarea, scaderea, inmultirea,
derivarea, aflarea valorii polinomului pentru un numar intreg x dat si aflarea
valori radacinei situate intre doi parametri.

2.Analiza problemei
Programul trebuie sa execute in mod corect cele mai comune operatii asupra
polinoamelor.Trebuie cautata o metoda Object Oriented de reprezentare a
polinoamelor si de efectuare a operatiilor intre ele.Trebuie sa existe si
interactiune intre calcule si partea grafica a programului.
Numarul de polinoame poate varia, dar pentru simplitatea problemei
am ales sa fac aceste operatii asupra a doua polinoame. Cel mai simplu mod
de punere in aplicare a acestei probleme este de a reprezenta polinoamele in
functie de gradele si coeficientii lor , deoarece avem de a face cu polinoame
de o singura variabila. Cele mai simple operaiuni (adunare, scadere, etc)
sunt efectuate pe baza algoritmilor clasici.
Cum scopul nostru nu este de a dobndi cunostinte n matematica, ci n
tehnici de programare, eu nu voi pune n aplicare algoritmi dificili.
Utilizatorul trebuie sa aiba un loc unde sa poata scrie polinoamele si un loc
unde sa poata vedea rezultatul. n afara de aceasta, el ar trebui sa poata
alege operatiunile care urmeaza sa fie aplicate polinoamelor.
Acestea fiind stabilite, ar trebui sa le transpuna n vederea Object
Oriented. Trebuie sa existe o clasa Polinom care reprezinta tipul obiectului
polinomial si o clasa care reprezinta interfata utilizatorului
Butoanelor le trebuie asignate evenimente ce sunt declansate la apasarea
lor. Pentru a asigura un confort cat mai sporit utilizatorului, polinoamele
trebuie procesate din reprezentarea lor naturala intr-o reprezentare cat mai
eficienta pentru computer.
De asemenea rezultatele trebuie returnate intr-un mod cat mai simplist.

3.Modelare
Cea mai buna metoda de reprezentare a polinoamelor si a operatiilor
intre ele este in a le inveli in jurul unor obiecte care sa interactioneze intre
ele si sa genereze rezultate.
Operatiile sunt strans legate de polinoame si e necesar cel putin un polinom
pentru a le efectua de aceea cel mai potrivit loc pentru ele este in
polinoame( termenul pe care se aplica operatia este cel care o invoca).
In matematica un polinom este o expresie construita dintr-una sau mai
multe variabile si constante, folosind doar operatii de adunare, scadere,
inmultire si ridicare la putere constanta pozitiva intreaga. este
un polinom.

Polinoamele sunt construite din termeni numii monoame, care constau


dintr-o constant (numit coeficient) nmulit cu una sau mai
multe variabile (de regul reprezentate prin cifre). Fiecare variabil poate
avea un exponent constant ntreg pozitiv, dac in cazul nostrum vom folosii o
singura variabila. Exponentul unei variabile dintr-un monom este egal
cu gradul acelei variabile n acel monom. Un polinom este o sum de unul
sau mai multe monoame. De exemplu, urmtoarea expresie este un polinom:
Toate acestea fiind prezentate eu am folosit urmatoarea modelare:
Polinoamele sunt reprezentate ca obiecte de tip Polinom.Obectul Polinom
contine o lista de tipul Monom. Prin urmare obiectul Polinom este alcatuit din
mai multe obiecte Monom.
In realizarea problemei am decis ca am nevoie de 4 clase: Polinom,
Monom, Procesor, GUI.
In clasa Polinom folosesc o lista de monoame, iar in Monom folosesc 2 int.
Unul pentru grad si unul pentru coefficient.
Folosesc un constructor cu un parametru (int grad,int coef), pentru ca sa aloc
coeficienti si grad fiecarui monom. De aceea am ales sa introduce coeficienti
si gradele de la tastatura.O alta metoda de implmentare ar putea fii
intrducerea coeficientilor si un gether pentru grad.
In clasa Procesor se efectueaza operatii care necesita mai mult de un
polinom sau de un monom.Iar in GUI se implementeaza logica programului si
se face legatura acesteia cu interfata.

Use Case:

4.Scenarii de utilizare
Interfaa utilizatorului este realizata folosind elemente Swing: JFrame,
JPanel, JLabel, JButton, JTextField.

Partea superioara a cadrului consta in doua campuri de text n care


utilizatorul introduce coeficientii si gradul celor doua polinoame potrivit
exemplului urmator:

In dreapta acestor campuri butoane pentru verificare. Acestea


trebuie sa fie apasate de catre utilizator inainte de a selecta operatia care
doreste sa fie executata.

Partea din stanga a cadrului este alcatuita din butoane


corespunzatoare a cinci operatii , cea de a sasea operatie fiind situata in
dreptul zonei de introducere a intervalului pentru verificarea radacinii.

Partea de mijloc dreapta a cadrului este alcatuita din doua butoane


corespunzatoare la doua operatii care necesita parametrii: valoarea
polinomului intr-un punct si valoarea radacini polinomului intre doua variabile
date.
In scopul de a asigura utilizarea datelor introduse i ca fiecare buton sa aiba
functionalitate, aceasta clasa (GUI) implementeaza metode din interfata
ActionListener. O interfata este un tip special in java care consta numai in metoda
definitiilor. Metoda pe care am pus-o in aplicare de la interfata ActionListener este
actionPerformed (ActionEvent e), metoda care are ca parametru obiectul clasei
ActionEvent (clasa care descrie toate evenimentele posibile ntr-un mediu
Swing). Prin urmare, pentru fiecare actiune posibila care poate fi efectuata de catre
utilizator, un raspuns specific este tratat n aceasta metoda.

Specificatii:

Coeficienii trebuie sa fie introdusi n campurile de text, dupa cum


urmeaza:

coef1 grad1 coef2 grad2 si asa mai departe

Sau

coef1,grad1,coef2,grad2 si asa mai departe

De asemenea este posibila orice combinatie intre acestea dar nu alt


ceva! Orice alt caracter introdus este un posibil risc de nefunctionare!!

Este posibila o singura introducere per polinom.De aceea utilizatorul


trebuie sa fie atent la introducerea de polinom pnetru a nu fi necesara o
restartare a programului.

Dupa introducerea de polinom utilizatorul este obligat sa apase pe


butoanele de verificare ca programul sa functioneze in continuare.

Pentru operatia de adunare avem:


Polinomul 3X ^ 4 + 10X^3 + X^ 2 + 5 si polinomul 2X^4 + X^3 -
8X^2 + 6X^ 1 + 1
Rezultatul trebuie sa fie 5X^4 + 11X^ 3 - 7X^ 2 + 6X + 6

Pentru operatia de scadere avem:


Polinomul 3X^ 4 + 10X^ 3 + X^2 + 5, si polinomul 4X^ 4 + X^3 -
8X^2 + 6X^ 1 + 1
Rezultatul trebuie sa fie X^ 4 + 9X^ 3+9X^ 2 - 6X^ 1 + 4

Pentru operatia de inmultire avem:


Polinomul 2X^ 3 + X^ 1 + 4 si polinomul X^1 + 2
Rezultatul trebuie sa fie 2X^ 4 + 4X^ 3 + X^ 2 + 6X^ 1 + 8

Pentru operatia de derivare avem:


Polinomul 4X^5 + 2X^4 - 8X^ 3 + X^ 1 + 2 ordinul de derivare 1
Rezultatul obtinut trebuie sa fie 20X^4 + 8X^ 3 - 24X^ 2 + 1

Pentru operatia de aflare a valorii polinomului avem:


Polinomul 4X^ 5 + 2X^ 4 - 8X^ 3 + X^ 1 + 2
X=1
Rezultatul obtinut trebuie sa fie 1

Pentru operatia de aflare a radacinii polinomului in interval avem:


Polinomul X^2 +2X + 1
X = -10
Y=10
Rezultatul obtinut trebuie sa fie -1, Sau obtinut 1 radacini

5.Proiectare
Diagrama UML:
6.Interfata utilizator

Crearea GUI-ului: Fereastra cu titlul: Calculator Polinoame.


Butoane pentru: Adunare, Scadere, Inmultire, Derivare, Calcul in Punct,
Radacina, Verificare polinom sau alte valor , Afisare.
Butoanele de verificare trebuie utilizate astfel: dupa introducerea unor
valori in casutele corespunzatoare se va apasa butonul corespunzator
casutei care doriti sa fie verificata.Ver Pol pentru polinoame si Ver Val pentru
Variabila.
Butonul Radacina verifica introducerea intervalului (X,Y) efectueaza
verificarea si afiseaza rezultatul. ATENTIE!!! Dupa verificarea polinoamelor
este necesara o afisare a acestora pentru ca programul sa afiseze alt ceva in
continuare.
7.Implementare
Adunare: Procesor.add(pol,pol2);
Pentru efectuarea aceste operatii se apasa butonul Adunare

Implementeaza adunarea a doua polinoame prin adunarea si asezarea


in primul polinom in mod ordonat coeficientii(coeficientii termenilor de
acelasi grad). Metoda primeste doua polinoame ca parametru si stocheaza
rezultatul in primul polinom.

In primul rand am verificat care polinom are mai multe


monoame(deoarece gradul nu ma ajuta in acest caz deoarece poate exista
polinomul 1x^100 +1 din doar doua monoame).

Dupa care in primul polinom se introduce toate monoamele din al


doilea polinom.Dupa care se aranjeaza in functie de coeficient si grad cu
ajutorul metodei simplify().

Pentru efectuarea aceste operatii se apasa butonul Adunare

Scadere: Procesor.sub(pol,pol2);
Pentru efectuarea aceste operatii se apasa butonul Scadere

Scaderea se realizeaza in acelasi mod ca si adunarea doar ca inainte


de adaugare in polinom semnul coeficientului este schimbat.

Inmultire: Polinom = Procesor.product (pol,pol2);


Pentru efectuarea aceste operatii se apasa butonul Inmultire

Metoda product returneaza un polinom cu valoarea pol*pol2.Aceasta


metoda apeleaza product(Monom,Monom) care efectueaza inmultirea intre
doua monoame.
Se efectueaza inmultirea fiecare cu fiecare cu ajutorul a 2 for-uri.
Inmultirea intre doua monoame se face in felul urmator:
(coef1*coef2)x^(grad1+grad2)
Derivare: Polinom = Polinom.deriv (pol);
Pentru efectuarea aceste operatii se apasa butonul Derivare

Returneaza un polinom cu valoarea polinomului primit ca parametru


derivat. Metoda apeleaza Mono.deriv(Monom x).Derivarea unui monom se
realizeaza prin inmultirea coeficientului cu gradul dupa care decrementarea
gradului. Retine: Derivarea este singura operatie care poate fii efectuata de
mai multe ori in conditii de siguranta.

Calcul in Punct: Integer = Polinom.calcPct(pol,a);


Pentru efectuarea aceste operatii se apasa butonul CalcPct

Returneaza valoarea polinomului in punctual a. Mai specific calculeaza


valoarea polinomului atunci cand x = a.Se apeleaza metoda
Monom.calcPct(Monom,a) pentru fiecare monom al polinomului.Metoda
returneaza un int cu valoarea: coefM*a^gradM.

Radacini: Polinom.calcRad(pol,X,Y);
Pentru efectuarea aceste operatii se apasa butonul
Radacina.Intervalul se obtine dupa Introducerea valorilor in casutele
corespunzatoare. Se verifica fiecare numar intreg din interval daca este sau
nu radacina si se inregistreaza intrun string ca mai apoi sa fie afisat

8.Concluzi
Programul ruleaza satisfacator si chiar daca are mici dezavantaje
asigura un schelet puternic pentru o dezvoltare ulterioara mai usoara . El
poate fi folosit in diferite aplicatii si chiar daca nu se compara cu greii in
domeniu, face fata in ceea ce este specializat . Exista si mici probleme in
ceea ce priveste domeniul de utilizare ( Datorita faptului ca toate
polinoamele sunt cu coeficienti intregi).
Programul e pe departe de a fi perfect . Exista multe situatii netratate
in timpul parsarii diferitiilor coeficienti sau ordine .
Lucrurile acestea se pot remedia prin cateva linii de cod puse la locul
potrivit .
Mai exista posibilitatea de a extinde programul prin folosirea unui reset
pentru a putea efectua mai multe operatii la o singura lansare a programului
sau prin adaugarea unor metode de calcul a radaciniilor, afisarea de
grafice,compunerea polinoamelor si chiar metode noi de introducere a
polinoamelor si a operatiilor intre ele cum ar fi
( polinom1 ) / ( polinom2 ) sau ( polinom1 ) + ( polinom2 ) sau int( polinom )
.
Se poate extinde domeniul de lucru al polinoamelor de la numere
intregi la numere flotante .
Am invatat modalitatea de creare a unei documentatii, de lucru sub
presiune , de consultare a colegiilor in ceea ce priveste mijloacele de
rezolvare a problemelor aparute.

9.Bibliografie:
1. http://wikipedia.com
2. http://stackoverflow.com
3. http://www.math.ucla.edu/~tao/java/Polynomial.java
4. http://www.math.ucla.edu/~tao/java/Monomial.java

S-ar putea să vă placă și