SOLUZIONE 22-06-99 (C)
Questionario cartaceo
- Vero; infatti i numeri in base 3 rappresentabili con 20 cifre
decimali sono 3 elevato alla 20 (più di 3 elevato alla 10 =
59049),
mentre quelli in base 5 rappresentabili con 5 cifre sono 3125.
- (Notare che tutti i parametri delle varie funzioni sono parametri
valore)
2.3 7.8
2.3 7.8
- Un disco rigido oppure un CD.
-
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);
}
Parte laboratorio
#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));
}