Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<malloc.h>
- #include<process.h>
- #include<ctype.h>
- #include<conio.h>
- #include <assert.h>
- #define MAX 100
- typedef struct {
- int grad;
- float coef[MAX];
- } polinom;
- void citirePolinom(polinom *pol) {
- int i;
- printf("gradul polinomului:");
- scanf("%d",&(*pol).grad);
- for (i=0; i<=(*pol).grad; i++) {
- printf("a[%d]=",i);
- scanf("%f",&(*pol).coef[i]);
- }
- }
- void afisarePolinom(polinom p) {
- int i;
- for (i=p.grad; i>=0; i--) {
- printf("%+g*X^%d",p.coef[i],i);
- }
- printf("\n");
- }
- int max(int a, int b) {
- if(a>b)
- return a;
- else
- return b;
- }
- void copierePolinom(polinom p,polinom *q) {
- int i;
- q->grad = p.grad;
- for(i=0; i<=q->grad; i++) {
- q->coef[i]=p.coef[i];
- }
- }
- void suma(polinom p, polinom q, polinom *r) {
- int i;
- if(q.grad!=p.grad) {
- r->grad=max(q.grad,p.grad);//determinam daca nu au acelasi grad
- //determinam polinomul cu gradul cel mai mic
- if(p.grad<q.grad) {
- for (i=0; i<=q.grad; i++) {
- if (i<=p.grad)
- r->coef[i]=p.coef[i]+q.coef[i];
- else
- r->coef[i]=q.coef[i];
- }
- } else {
- for(i=0; i<=p.grad; i++) {
- if(i<=q.grad)
- r->coef[i]=p.coef[i]+q.coef[i];
- else
- r->coef[i]=p.coef[i];
- }
- }
- }
- //polinoamele au grade egale
- else {
- i=p.grad;
- while(i>0&&p.coef[i]+q.coef[i]==0) {
- i--;
- }
- r->grad=i;
- for(i=0; i<=r->grad; i++)
- r->coef[i]=p.coef[i]+q.coef[i];
- }
- }
- void produs(polinom p,polinom q, polinom *r) {
- int i,j;
- r->grad=p.grad+q.grad;
- for(i=0; i<=r->grad; i++) {
- r->coef[i]=0;
- }
- for(i=0; i<=p.grad; i++) {
- for(j=0; j<=q.grad; j++) {
- r->coef[i+j]=r->coef[i+j]+p.coef[i]*q.coef[j];
- }
- }
- }
- //catul si restul impartirii polinomului p la q, rezultatul se retine in c si r.
- void impartire(polinom p, polinom q, polinom *c, polinom *r) {
- polinom psave;
- int i,j,k;
- if(p.grad<q.grad) {
- c->grad = 0;
- c->coef[0] = 0;
- r->grad = q.grad;
- for(i=0; i<=r->grad; i++)
- r->coef[i] = q.coef[i];
- } else {
- c->grad=p.grad - q.grad;
- r->grad=q.grad - 1;
- for(i=p.grad-q.grad,j=p.grad; i>=0; i--,j--) {
- c->coef[i] = p.coef[j]/q.coef[q.grad];
- for(k=q.grad; k>=0; k--) {
- p.coef[i+k] = p.coef[i+k] - c->coef[i]*q.coef[k];
- }
- p.coef[j]=0;
- }
- for(i=0; i<=q.grad-1; i++)
- r->coef[i] = p.coef[i];
- }
- }
- //testeaza daca p este divizibil cu q.
- int esteDivizibil(polinom p, polinom q) {
- int i;
- int esteDivizor =1; //presupun ca q e divizior al lui p.
- polinom c,r;
- impartire(p,q,&c,&r);
- //Verific daca restul e 0.
- for(i=0; i<r.grad; i++) {
- if(r.coef[i]!=0) {
- esteDivizor = 0;
- break;
- }
- }
- return esteDivizor;
- }
- void main() {
- polinom p,q,c,r;
- printf("Introduceti primul polinom:");
- citirePolinom(&p);
- printf("Introduceti al doilea polinom:");
- citirePolinom(&q);
- printf("p=");
- afisarePolinom(p);
- printf("q=");
- afisarePolinom(q);
- printf("Suma polinoamelor este:");
- suma(p,q,&r);
- afisarePolinom(r);
- printf("Produsul polinoamelor este:");
- produs(p,q,&r);
- afisarePolinom(r);
- printf("Catul impartirii polinoamelor este:");
- impartire(p,q,&c,&r);
- afisarePolinom(c);
- printf("Restul impartirii polinoamelor este:");
- afisarePolinom(r);
- if(esteDivizibil(p,q)) {
- printf("p este divizibil cu q\n");
- }
- if(esteDivizibil(q,p)) {
- printf("q este divizibil cu p\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement