Referat Polinoame

Mai jos puteti citi fragmente din Referat Polinoame si de asemenea puteti face Download Referat Polinoame

Citeste fragmente din Referat Polinoame

Algebra polinoamelor incomplete de mai multe nedeterminate, implementare dinamică. Structuri de date: Pentru implementarea unui polinom incomplet de mai mult nedeterminate am definit o clasă ‘poli’ cu următoarele date: Int nr_var Numărul de nedeterminate ale polinomului Int nr_elem Numărul de elemente Nu se citeşte, ci este iniţializat în funcţie de elementele introduse Float *coef Coeficienţii polinomului (nu exista coeficienţi de valoare 0 () Int *gr[30] Vector de pointeri spre întregi reprezentând pentru fiecare coeficient puterile corespunzătoare fiecărei nedeterminate Ex: Pentru polinomul P(x,y,z)=x2y +1 Gr[0][0]=2, Gr[0][1]=1, Gr[0][0]=0 Gr[1][0]=0, Gr[0][1]=0, Gr[0][0]=0 Toate datele de mai sus sunt private pentru a nu fi permisă modificarea lor decât prin funcţiile clasei. Tot privată este şi funcţia ‘pos’ pentru că nu trebuie să fie vizibilă din exterior. Operaţiile efectuate asupra polinoamelor: Adunare Scădere Înmulţirea a 2 polinoame Calculul derivatei în raport cu o variabilă specificată prin indice Calculul primitivei în raport cu o variabilă specificată prin indice class poli{ private:int nr_var; int nr_elem; float *coef; int *gr[30]; private:int pos(int *,int); public:poli(); void init(); void af(); void af_t(); void add_sub(poli&,poli&,int op); void mul(poli&,poli&); void deriv(int); void prim(int); void operator=(poli&); ~poli(); }; Prezentarea programului: poli(); constructorul clasei iniţializează polinomul ca polinom nul nu poate fi decât public void init(); funcţie publică ce iniţializează polinomul cu valori citite de la tastatură polinomul se consideră introdus corect, adică nu trebuie introduse aceleaşi secvenţe de puteri (Ex: P(x)=5x+2+3 ) se citesc coeficienţi până când nu se mai introduce unul valid (în mod normal asta s-ar face frumos cu CTRL-Z, dar din păcate cscanf()-ul nu îl recunoaşte) void af(); funcţie publică pentru afişarea caracteristicilor (polinomul efectiv, numărul de variabile, numărul de elemente) void af_t(); funcţie publică pentru afişarea în tabelul celor 10 vectori din programul demonstrativ în mod normal nu ar avea ce căuta în bibliotecă void add_sub(poli&,poli&,int op); funcţie publică pentru adunare/scădere; op=1 pentru adunare, op=-1 pentru scădere funcţia este comună pentru micşorarea codului am ales parametrii adrese, nu pentru a-i modifica ci pentru a nu lucra cu copii ale lor (nu avea nici un rost) sunt permise şi apelări de genul: p.add(p1,p) sau chiar p.add(p,p) void mul(poli&,poli&); funcţie publică pentru înmulţire aceleaşi observaţii ca la funcţia add_sub() void deriv(int); funcţie publică pentru derivare în raport cu o variabilă indicele variabilei este minim 1 şi maxim nr_var void prim(int); funcţie publică pentru aflarea unei primitive în raport cu o variabilă indicele variabilei este minim 1 şi maxim nr_var void operator=(poli&); redefinirea operatorului de atribuire (copiez varorile) deşi nu-l folosesc în programul demostrativ, trebuie redefinit pentru că în interiorul clasei sunt adrese şi prin atribuirea implicită s-ar face şi atribuire de adrese… ~poli(); destructorul clasei Observaţie: Datele se consideră introduse corect. Sursa programului: M12t2.h class poli{ private:int nr_var; //nr de variabile int nr_elem; //nr de elemente float *coef; //coeficientii polinomului int *gr[30]; //gradele corespunzatoare private:int pos(int *,int);//caut un anumit termen si returnez pozitia //dupa conventia clasica (0..n daca a fost //gasit, sau -1 daca nu) public:poli(); //constructor void init(); //citire de la tastatura void af(); //afisare void af_t(); //afisare trunchiata void add_sub(poli&,poli&,int op); //op=1 adunare, op=-1 scadere void mul(poli&,poli&); //inmultire void deriv(int); //derivare in raport cu o variabila void prim(int); //calculeaza o primitiva in raport cu o //variabila void operator=(poli&); //fac atribuire ~poli(); //destructor }; M12t2p14.cpp #include #include #include #include #include #include "m12t2.h"#define X cprintf(" ");#define eps 1.e-6poli::poli() //initializez un obiect nou{ coef=0; nr_var=0;nr_elem=0; memset(gr,0,sizeof(gr)); } poli::~poli() { delete []coef; for (int i=0;i~poli(); //il fac nul nr_var=p.nr_var; nr_elem=p.nr_elem; coef=new float[p.nr_elem]; for (int i=0;i~poli(); //apelez destructorul cprintf("Nr de variabile:");cscanf("%d",&nr_var);X coef=new float[30]; float c; int i=-1; do { cprintf("Coeficientul:");ok=cscanf("%f",&c);X if (ok) if (fabs(c)p2.nr_var) _nr_var=p1.nr_var; else _nr_var=p2.nr_var; c=new float[30]; if (p1.nr_elem) //daca p1 nu e vid if (p2.nr_elem) //daca p2 nu e vid { unsigned char *mrk=new unsigned char [p2.nr_elem]; //vector de marcaje memset(mrk,0,p2.nr_elem); for (i=0;i~poli(); //distrug obiectul, creand unul nou corect,nu //modificandu-l pe cel vechi coef=c; for (i=0;i<_nr_elem;i++) gr[i]=g[i]; nr_elem=_nr_elem; nr_var=_nr_var; } void poli::mul(poli &p1,poli &p2) { float *c; int *g[30]; int _nr_var,_nr_elem,i,j,k=-1,p,*aux; if (p1.nr_var>p2.nr_var) _nr_var=p1.nr_var; else _nr_var=p2.nr_var; c=new float[30]; if (p1.nr_elem&&p2.nr_elem) //daca ambii sunt nevizi { aux=new int[_nr_var]; for (i=0;i~poli(); coef=c; for (i=0;i<_nr_elem;i++) gr[i]=g[i]; nr_elem=_nr_elem; nr_var=_nr_var; } void poli::deriv(int p) { float *c; int *g[30]; int i,k=-1; c=new float[30]; if (nr_elem) //daca e nevid { for (i=0;i~poli(); coef=c; nr_elem=k+1; for (i=0;i #include #include "m12t2.h" poli v[10]; void fix() { textcolor(7); cprintf("ALEGETI "); textcolor(1); cprintf("1.Initializare "); cprintf("2.Afisare "); cprintf("3.Adunare "); cprintf("4.Scadere "); cprintf("5.Inmultire "); cprintf("6.Derivare "); cprintf("7.Primitiva "); cprintf("8.Stergere "); cprintf("9.Despre "); cprintf("Q.Iesire"); textcolor(7); Š Œ Ê Ø ’ ª 6 Š Š Œ Ž for (int i=1;i<=12;i++){gotoxy(15,i);putchar( ł );} gotoxy(34,1); cprintf("%s","...Situatia polinoamelor..."); gotoxy(1,12); for (i=1;i<=79;i++) putchar( Ä ); gotoxy(15,12);putchar( Á ); window(16,2,18,12); textcolor(2); for (i=1;i<=10;i++) cprintf("%2d:",i); } void toate() { window(19,2,80,11); textcolor(2); clrscr(); for (int i=1;i<=10;i++){ gotoxy(1,i);v[i-1].af_t(); } } void in() { window(1,13,80,25); clrscr(); int p; cprintf("Initializare... "); cprintf("Introduceti indicele polinomului "); scanf("%d",&p); v[p-1].init(); v[p-1].af(); toate(); } void afis() { window(1,13,80,25); clrscr(); int p; cprintf("Afisare... "); cprintf("Introduceti indicele polinomului "); scanf("%d",&p); v[p-1].af(); toate(); } void ad() { window(1,13,80,25); clrscr(); int p1,p2,p; cprintf("Se aduna P1 cu P2, iar rezultatul se depune in P3 "); cprintf("Introduceti cei 3 indici (separati prin SPATIU): "); scanf("%d %d %d",&p1,&p2,&p); v[p-1].add_sub(v[p1-1],v[p2-1],1); v[p-1].af(); toate(); } void sc() { window(1,13,80,25); clrscr(); int p1,p2,p; cprintf("Se scade din P1 P2, iar rezultatul se depune in P3 "); cprintf("Introduceti cei 3 indici (separati prin SPATIU): "); scanf("%d %d %d",&p1,&p2,&p); v[p-1].add_sub(v[p1-1],v[p2-1],-1); v[p-1].af(); toate(); } void inm() { window(1,13,80,25); clrscr(); int p1,p2,p; cprintf("Se inmulteste P1 cu P2, iar rezultatul se depune in P3 "); cprintf("Introduceti cei 3 indici (separati prin SPATIU): "); scanf("%d %d %d",&p1,&p2,&p); v[p-1].mul(v[p1-1],v[p2-1]); v[p-1].af(); toate(); } void drv() { window(1,13,80,25); clrscr(); int p,var; cprintf("Derivare... "); cprintf("Introduceti indicele polinomului: ");scanf("%d",&p); cprintf("Introduceti indicele variabilei: ");scanf("%d",&var); v[p-1].deriv(var); v[p-1].af(); toate(); } void prm() { window(1,13,80,25); clrscr(); int p,var; cprintf("Primitiva... "); cprintf("Introduceti indicele polinomului: ");scanf("%d",&p); cprintf("Introduceti indicele variabilei: ");scanf("%d",&var); v[p-1].prim(var); v[p-1].af(); toate(); } void st() { window(1,13,80,25); clrscr(); int p; cprintf("Stergere... "); cprintf("Introduceti indicele polinomului: ");scanf("%d",&p); v[p-1].~poli(); toate(); } void about() { window(1,13,80,25); clrscr(); cprintf("Musaloiu-Elefteri Raluca "); cprintf("312 CB "); cprintf("miercuri 27.01.1999 "); } void operatii() { window(1,13,80,25); char c=getch(); toate(); textcolor(7); while (c!= Q ){ switch (c){ case 1 :in();break; case 2 :afis();break; case 3 :ad();break; case 4 :sc();break; case 5 :inm();break; case 6 :drv();break; case 7 :prm();break; case 8 :st();break; case 9 :about();break; } c=getch(); } } void main(void) { clrscr(); fix(); operatii(); } ( ceea ce înţelege float-ul ca ‘valoare 0’ 쥁@