110 likes | 213 Views
De ce avem nevoie unii de ceilal ţi?. Proiect realizat de: Andreea, Adonis, Raul, Marius.
E N D
De ce avem nevoie unii de ceilalţi? Proiect realizat de: Andreea, Adonis, Raul, Marius
Proiectul nostru este o prezentareVom lucra în echipă pentru a implementa operaţii cu polinoame cu coeficienţi numere reale, folosind subprograme definite de utilizator.Munca noastră în echipă se împarte astfel: Andreea : voi face • o funcţie care citeşte de la tastatură datele unui polinom (gradul şi coeficienţii polinomului, sub forma unui vector) • o funcţie care afişează la monitor un polinom dat. • o funcţie care calculează şi returnează valoarea unui polinom într-un punct dat. • Adonis : voi face • o funcţie care calculează suma a două polinoame date, rezultatul fiind un polinom • o funcţie care citeşte datele a două polinoame şi afişează polinomul sumă. Voi folosi bineînţeles funcţiile definite de Andreea. • Raul : voi face • o funcţie care calculează produsul a două polinoame date, rezultatul fiind un polinom • o funcţie care citeşte datele a două polinoame şi afişează polinomul produs. • Voi folosi funcţiile definite de Andreea pentru citirea şi afişarea unui polinom. • Marius : voi face • Programul principal în care utilizatorul introduce o opţiune în funcţie de care se va calcula una din operaţiile cu polinoame: • valoarea unui polinom într-un punct • suma a două polinoame • produsul a două polinoame. • Voi apela funcţiile definite de Andreea, Adonis şi Raul.
Andreea • Introducerea datelor unui polinom presupune citirea de la tastatură a gradului polinomului (un număr natural) şi a coeficienţilor acestuia (numere reale), începând de la coeficientul dominant până la termenul liber. • Antetul funcţiei la care m-am gândit este:void citire(float a[ ], int &n) - void este tipul funcţiei - n este gradul polinomului, parametru transmis prin referinţă, pentru ca funcţia să poată modifica valoarea acestui parametru, valoarea rămânând moodificatăşi după apel - a[ ] este vectorul ce reţine coeficienţii polinomului. Nu trebuie transmis prin referinţă, deoarece este un pointer constant la primul element din vector • Antetul funcţiei pentru afişarea unui polinom :void afisare(float a[], int n) - parametrii nu trebuie transmişi prin referinţă, pentru că nu îşi modifică valoarea în corpul funcţiei. • Pentru calculul valorii unui polinom într-un punct voi folosi o funcţie de tip float, deoarece această operaţie presupune de fapt calculul unei sume de numere reale.Antetul funcţiei la care m-am gândit este :float valoare(int n,float a[ ], float q) - q reprezintă punctul în care se va calcula valoarea polinomului
void citire(float a[ ],int &n){ int i; cout<<"introduceti gradul polinoului: "; cin>>n; do{ cout<<"coeficientul lui X^"<<n<<"="; cin>>a[n];} while(a[n]==0); for(i=n-1;i>=0;i--){ cout<<"coeficientul lui X^"<<i<<"="; cin>>a[i]; } cout<<endl; } void afisare(float a[ ],int n){ int i; if(n==0) cout<<a[0]; else for(i=n;i>=0;i--){ if(a[i]>0&&i!=n) cout<<"+"; else if(a[i]<0) cout<<"-"; if(a[i]!=0&&abs(a[i])!=1) cout<<abs(a[i]); if(i!=0&&a[i]!=0) cout<<"X^"<<i; if(i==0&&abs(a[0])==1) cout<<1; } } AndreeaDefiniţiile funcţiilor pe care le-am avut de făcut sunt următoarele: float valoare(int n,float a[ ],float q){ int i; float S,P; S=a[0];P=1; for(i=1;i<=n;i++){ P=P*q; S=S+P*a[i]; } return S; }
Adonis • Implementarea operaţiei de adunare a două polinoame presupune de fapt adunarea coeficineţilorcelor două polinoame. Fie n şi m gradul celor două polinoame. - dacă m≠n atunci gradul polinomului sumă = max(n, m) - dacă m=n, atunci gradul polinomului sumă = cel mai mare număr natural k astfel încât ak + bk ≠ 0 • Antetul primei funcţii pe care o voi face este: void suma(int n,float a[ ],int m, float b[ ],int &gs,float s[ ]) - Se adună polinomul de grad n ai cărui coeficienţi se reţin în vectorul a cu polinomul de grad m ai cărui coeficienţi se reţin în vectorul b, iar rezultatul este polinomul de grad gs, cu coeficienţii memoraţi în vectorul s. - parametrul gs se transmite prin referinţă, deoarece se modifică în corpul funcţiei şi valoarea modificată este preluată de programul apelant. • Antetul celei de-a doua funcţii la care m-am gândit este: void adunare( ) - Este o funcţie fără parametri, care apelează funcţia suma şi funcţiile pentru citirea şi afişarea unui polinom
void suma(int n,float a[ ],int m,float b[ ],int &gs,float s[ ]){ int i; if(n>m) gs=n; else if(m>n) gs=m; else{ gs=n; while(a[gs]+b[gs]==0) gs--; } for(i=0;i<=gs;i++) s[i]=a[i]+b[i]; } void adunare( ){ citire(a,n); citire(b,m); cout<<"Rezultatul este:"<<endl; suma(n,a,m,b,gs,s); cout<<"("; afisare(a,n);cout<<")+(";afisare(b,m); cout<<")="; afisare(s,gs);cout<<endl; } AdonisDefiniţiile celor două funcţii sunt următoarele:
Raul • Pentru a implementa operaţia de înmulţire a două polinoame,am calculat matematic produsul a două polinoame de grad n şi m, cu coeficienţi în două tablouri a şi b şi am dedus următoarele formule: - gradul polinomului produs este egal cu n+m - termenul r al produsului este , i = 0,1,…,n şi j = 0,1,…,m • Astfel, antetul primei funcţii pe care o voi face este: void produs(int n,float a[ ],int m, float b[ ],int &gp,float p[ ]) - Lista parametrilor formali conţine 6 parametri separaţi prin virgulă, reprezentând în ordine gradul n,coeficienţii polinomului reţinuţi în vectorul a, gradul m, coeficienţii polinomului reţinuţi în vectorul b, gradul gs şi coeficienţii memoraţi în vectorul p pentru polinomul produs. - parametrul gp se transmite prin referinţă, deoarece se modifică în corpul funcţiei şi valoarea modificată este preluată de programul apelant. • A doua funcţie care citeşte datele a două polinoame, calculează şi afişează produsul lor este o funcţie fără parametri, care apelează funcţia produs şi funcţiile pentru citirea şi afişarea unui polinom definite de Andreea.
void produs(int n,float a[ ],int m,float b[ ],int &gp,float p[ ]){ int i,j,r; gp=n+m; for(r=0;r<=gp;r++){ p[r]=0; for(i=0;i<=n;i++) for(j=0;j<=m;j++) if(i+j==r) p[r]=p[r]+a[i]*b[j]; } } void inmultire( ){ citire(a,n); citire(b,m); cout<<"Rezultatul este:"<<endl; produs(n,a,m,b,gp,p); cout<<"(";afisare(a,n);cout<<")*(";afisare(b,m);cout<<")="; afisare(p,gp);cout<<endl; } RaulDefiniţiile celor două funcţii sunt următoarele:
Marius • Mie îmi revine sarcina de a crea programul principal. Am primit de la colegii mei definiţiile funcţiilor care le voi folosi. • Voi citi de la tastatură o opţiune în funcţie de care voi apela subprogramele corespunzătoare operaţiei dorite : 1- pentru calculul valorii unui polinom într-un punct, 2 - pentru adunarea a două polinoame, 3 - pentru înmulţirea a două polinoame. • Pentru declararea unui polinom voi folosi tipul de date tablou (vector) care reţine coeficienţii polinomului şi o variabilă (număr natural) care reţine gradul polinomului.Voi declara astfel variabilele globale ce vor fi folosite în programul principal, dar care au fost deja folosite de colegii mei în subprograme. • Voi folosi instrucţiuni de apel corespunzătoare tipului funcţiei apelate, având grijă ca numele funcţiei de la apel să coincidă cu numele funcţiei din antet. Parametrii efectivi vor fi separaţi prin virgulă şi vor corespunde ca tip şi număr cu parametrii formali din antetul subprogramului
//programul principal void main(){ cout<<endl; cout<<"Introduceti optiunea 0 pentru a iesi din program"<<endl; cout<<"Introduceti optiunea 1 pentru calculul valorii unui polinom intr-un punct"<<endl; cout<<"Introduceti optiunea 2 pentru operatia de adunare a doua polinoame"<<endl; cout<<"Introduceti optiunea 3 pentru operatia de inmultire a doua polinoame"<<endl; cout<<endl; do{ cout<<"optiune=";cin>>opt; cout<<endl; switch(opt){ case 0:break; case 1:{citire(a,n); cout<<"introduceti punctul in care se va calcula valoarea polinomului : "; cin>>q; cout<<"Valoarea polinomului "; afisare(a,n); cout<<" in punctul "<<q<<" este "<<valoare(n,a,q)<<endl; break;} case 2:{adunare();break;} case 3:{inmultire();break;} default: cout<<"ati introdus o optiune gresita"<<endl; } cout<<endl;} while(opt!=0); } MariusPuse cap la cap variabilele globale, subprogramele definite de colegii mei şi programul principal creat de mine, rezultă următorul program C++ care implementează câteva dintre operaţiile cu polinoame. #include<iostream.h> #include<math.h> int opt,n,m,q,gs,gp; float a[100],b[100],s[100],p[100];
Concluzii • Este clar că dacă nu am fi lucrat în echipă, am fi rezolvat mult mai greu problema sau chiar nu am fi rezolvat-o • Faptul că fiecare dintre noi a avut de rezolvat o sarcină mai mică, rezolvarea întregii probleme a durat mult mai puţin • Lucrând în echipă, am înţeles mult mai bine cum funcţionează subprogramele • Dacă unul dintre noi nu şi-ar fi rezolvat corect sarcina sau ar fi întârziat cu rezolvarea ei, atunci întreaga problemă ar fi fost periclitată.