Sunteți pe pagina 1din 3

AIA I – Laborator nr.

11-02
/*
Forma generala a unui polinom este:
a n  x n  a n 1  x n 1  ...  a 1  x  a 0
Se reprezintă polinoame, folosind structuri, prin grad si coeficienţii depuşi intr-un tablou
unidimensional alocat static.

struct pol
{ int grad;
float coef[10];
};
Polinoamele vor avea gradul maxim 9.
Se va face corespondenta următoare: coeficientul monomului de grad 0 se va memora in elementul de
index 0 al tabloului, cel al monomului de grad 1, in elementul de index 1, etc.
De exemplu, polinomul:
3.2 * x 4  5 * x 3  7.5 * x 2  9 * x1  15

are grad=4, iar elementele tabloului:


elementul de index 3 reprezintă
coeficientul monomului de grad 3
coef
0 1 2 3 4 5 6 7 8 9
15 9 -7.5 5 3.2 - - - - -

Din cele 10 elemente ale tabloului coef, sunt utilizate grad+1 elemente, în cazul luat ca exemplu, se
vor folosi 5 elemente; restul elementelor sunt ignorate.
*********************************************************************************/

#include <stdio.h>
#include <conio.h>
#include <math.h>

struct pol
{ int grad;
float coef[10];
};

void citire( pol* ); //citirea de la tastatura a datelor pentru un polinom


void afisare( pol ); //afisareea unui polinom
pol suma(pol, pol); //calculeaza si returneaza suma a doua polinoame
float val_pol(pol, float); //calculeaza si returneaza valoarea unui pol.ptr un x dat

int main()
{
pol p1, p2, p3;
float x, val;
printf("\nIntroduceti date pentru polinomul p1:");
citire(&p1);
printf("\nIntroduceti date pentru polinomul p2:");
citire(&p2);
printf("\n");

Pag. 1/3
AIA I – Laborator nr. 11-02
printf("\nPolinomul p1 este:");
afisare(p1);
printf("\n");
printf("\nPolinomul p2 este:");
afisare(p2);
printf("\n");
p3=suma(p1,p2);
printf("\nPolinomul suma p1+p2 este:");
afisare(p3);
printf("\n");
printf("\nIntrodu valoare x:");
scanf("%f", &x);
val=val_pol(p1, x);
printf("\nValoarea polinomului p1 pentru x= %f este: %f", x, val);
printf("\n");
getch();
}

void citire(pol * p)
{ //gradul polinomului este limitat de dimensiunea tabloului alocat
//nr. coeficienti = grad+1
do
{ printf("\nIntrodu gradul polinomului(<9):");
scanf("%d",&p->grad);
}
while(p->grad<0 || p->grad>9);
printf("\nIntrodu valorile coeficientilor:\n");
for(int i=0; i<=p->grad;i++)
{ printf("\ncoef[%d]=",i);
scanf("%f",&p->coef[i]);
}
}

void afisare(pol p)
{ printf("\n");
for(int i= p.grad ; i>0 ; i--)
printf("%+.2f*x^%d ", p.coef[i], i);
printf("%+.2f", p.coef[0]);
}

pol suma(pol p1, pol p2)


{ pol p;
p.grad=p1.grad>p2.grad ? p1.grad : p2.grad;
for(int i= 0; i<= p.grad ; i++)
{ if (i<=p1.grad)
p.coef[i]= p1.coef[i];
else
p.coef[i]=0;
if (i<=p2.grad)
p.coef[i] += p2.coef[i];
}
return p;
}
Pag. 2/3
AIA I – Laborator nr. 11-02

float val_pol(pol p, float x)


{ float val=0;
for (int i=0; i<=p.grad ; i++)
val += p.coef[i] *pow(x,i);
return val;
}

TEMA

Sa se modifice declaratia structurii pol cu:


struct pol
{
int grad;
float coef*;
};

Sa se completeze programul cu functiile:

void init(pol&); // initializare polinom (citeste gradul polinomului, aloca


// tabloul de coeficienti si initializeaza cu 0 coeficientii)

void elimin_pol(pol*); // asigura eliberarea zonei de memorie alocata pentru


// coeficienti

Sunt necesare modificari in functiile existente?

Pag. 3/3

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