de ce avem nevoie unii de ceilal ţi?

11
De ce avem nevoie unii de ceilalţi? Proiect realizat de: Andreea, Adonis, Raul, Marius

Upload: didina

Post on 19-Mar-2016

27 views

Category:

Documents


3 download

DESCRIPTION

De ce avem nevoie unii de ceilal ţi?. Proiect realizat de: Andreea, Adonis, Raul, Marius. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: De ce avem nevoie unii de ceilal ţi?

De ce avem nevoie unii de ceilalţi?

Proiect realizat de:Andreea, Adonis, Raul, Marius

Page 2: De ce avem nevoie unii de ceilal ţi?

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.

Page 3: De ce avem nevoie unii de ceilal ţi?

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

Page 4: De ce avem nevoie unii de ceilal ţi?

AndreeaDefiniţiile funcţiilor pe care le-am avut de făcut sunt următoarele:

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; }

}

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;}

Page 5: De ce avem nevoie unii de ceilal ţi?

Adonis• Implementarea operaţiei de adunare a două polinoame presupune de fapt adunarea

coeficineţilor celor 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

Page 6: De ce avem nevoie unii de ceilal ţi?

AdonisDefiniţiile celor două funcţii sunt următoarele:

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;}

Page 7: De ce avem nevoie unii de ceilal ţi?

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.

rji

jiji Xba )(

Page 8: De ce avem nevoie unii de ceilal ţi?

RaulDefiniţiile celor două funcţii sunt următoarele:

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;}

Page 9: De ce avem nevoie unii de ceilal ţi?

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

Page 10: De ce avem nevoie unii de ceilal ţi?

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.

//programul principalvoid 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);}

#include<iostream.h>#include<math.h>int opt,n,m,q,gs,gp;float a[100],b[100],s[100],p[100];

Page 11: De ce avem nevoie unii de ceilal ţi?

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ă.