2.3 7.8 2.3 7.8
typedef struct LIST *LISTA; struct LIST { type ELEM; LIST * SUCCESSIVO; } ; void INIZIALIZZA(LISTA l, type e) /*questa procedura modifica la lista l in modo che alla fine tutti i suoi elementi avranno la componente ELEM uguale ad e*/ { if(l != NULL){ l -> ELEM = e; INIZIALIZZA(l -> SUCCESSIVO); }
#include <stdio.h> #define MAX 100 /*massimo grado dei polinomi*/ typedef int POLI[MAX+1]; /*gli elementi del tipo POLI rappresentano i polinomi in una variabile di grado massimo MAX con coeficceinti interi notare che i coefficcenti sono al più 101*/ /*si assume che i valori di tutti i coefficenti devono essere fissati quindi 3.0 e rappresentato dall'array dove il primo coefficente e' uguale a 3 e tutti gli altri sono uguali a 0*/ void STAMPA(POLI p) /*questa procedura stampa p sul file di output standard*/ { int i; for(i=MAX; i>1; i--) if(p[i]>0.0) printf("+%dX^%-d ",p[i],i); else if(p[i]<0.0) printf("%dX^%-d ",p[i],i); if(p[1]>0.0) printf("+%dX ",p[1]); else if(p[1]<0.0) printf("%dX ",p[1]); if(p[0]>0.0) printf("+%d",p[0]); else if(p[0]<0.0) printf("%d ",p[0]); } void SOMMA(POLI p1, POLI p2, POLI p3) /*questa procedura ritorna in p3 la somma di p1 e di p2*/ { int i; for(i=MAX; i>=0; i--) p3[i] = p1[i] + p2[i]; } void DERIVA(POLI p1, POLI p2) /*questa procedura ritorna in p2 la derivata prima di p1*/ { int i; for(i=0; i<MAX; i++) p2[i] = p1[i+1]*(i+1); p2[MAX]=0; } main() { POLI P1, P2, P3; int i; /*assegnare a P1 il polinomio 3 X3 + 7 x - 8*/ for(i=0;i<MAX+1;i++) P1[i]=0; P1[3]=3; P1[1]=7; P1[0]=-8; /*assegnare a P2 il polinomio 2 X2 - 7 x + 18*/ for(i=0;i<MAX+1;i++) P2[i]=0; P2[2]=2; P2[1]=-7; P2[0]=18; STAMPA(P1); printf("\n"); STAMPA(P2); printf("\n"); /* stampare la somma di P1 e di P2*/ SOMMA(P1,P2,P3); STAMPA(P3); printf("\n"); /* stampare la derivata di P1*/ DERIVA(P1,P3); STAMPA(P3); }Altra soluzione che utilizza l'informazione esplicita del grado del polinomio.
#include <stdio.h> #define MAX 100 /*massimo grado dei polinomi*/ typedef struct{int COEF[MAX+1]; int GRADO; /*il grado del polinomio*/ } POLI; /*gli elementi del tipo POLI rappresentano i polinomi in una variabile di grado massimo MAX con coeficceinti interi notare che i coefficcenti sono al più 101 si assume che tutti i coefficenti fino al grado del polinomio sono definiti*/ void STAMPA(POLI p) /*questa procedura stampa p sul file di output standard*/ { int i; for(i = p.GRADO; i>1; i--) if(p.COEF[i]>0.0) printf("+%dX^%-d ",p.COEF[i],i); else if(p.COEF[i]<0.0) printf("%dX^%-d ",p.COEF[i],i); if(p.COEF[1]>0.0 && p.GRADO >= 1) printf("+%dX ",p.COEF[1]); else if(p.COEF[1]<0.0) printf("%dX ",p.COEF[1]); if(p.COEF[0]>0.0) printf("+%d",p.COEF[0]); else if(p.COEF[0]<0.0) printf("%d ",p.COEF[0]); } POLI SOMMA(POLI p1, POLI p2) /*questa funione ritorna la somma di p1 e di p2*/ { int i; POLI somma; for(i=0; i <=(p1.GRADO > p2.GRADO ? p2.GRADO : p1.GRADO); i++) somma.COEF[i] = p1.COEF[i] + p2.COEF[i]; if(p1.GRADO > p2.GRADO) for(i=p2.GRADO+1; i <=p1.GRADO; i++) somma.COEF[i] = p1.COEF[i]; else for(i=p1.GRADO+1; i <=p2.GRADO; i++) somma.COEF[i] = p2.COEF[i]; somma.GRADO = (p1.GRADO > p2.GRADO ? p1.GRADO : p2.GRADO); while(somma.COEF[somma.GRADO]==0) somma.GRADO--; return somma; } POLI DERIVA(POLI p) /*questa funzione ritorna la derivata prima di p*/ { int i; POLI der; der.GRADO = p.GRADO -1; for(i=0; i<= der.GRADO; i++) der.COEF[i] = p.COEF[i+1]*(i+1); return der; } main() { POLI P1, P2; /*assegnare a P1 il polinomio 3 X3 + 7 x - 8*/ P1.GRADO = 3; P1.COEF[3]=3; P1.COEF[2]=0; P1.COEF[1]=7; P1.COEF[0]=-8; /*assegnare a P2 il polinomio 2 X2 - 7 x + 18*/ P2.GRADO = 2; P2.COEF[2]=2; P2.COEF[1]=-7; P2.COEF[0]=18; STAMPA(P1); printf("\n"); STAMPA(P2); printf("\n"); /* stampare la somma di P1 e di P2*/ STAMPA(SOMMA(P1,P2)); printf("\n"); /* stampare la derivata di P1*/ STAMPA(DERIVA(P1)); }