PDA

View Full Version : [c]correzione esercizi


emiliano30
17-06-2005, 12:46
1) data la seguente struttura dovevo implementare una funzione per calcolare
la media dei voti(si suppone che la lista sia riempita)


Struct NodoLista{
int voto;
Struct NodoLista*nextPtr;
};
int media(NodoListaPtr)
{
int somma,media;
somma=media=cont=0;
/*controllo se la lista è vuota*/
if(currentPtr==NULL){
printf("la lista è vuota\n\n");
}
else{
while(currentPtr!=NULL){
somma=somma+current->nextPtr;
cont=cont++;
media=somma\cont;
}
}
return media;




2)secondo voi cosa dovrebbe fare questa funzione?


void vettstampa(int b[],int size){
if(size>0){
vettstampa(&b[1],size-1);
printf("%d",b[0]);

secondo me restituira un vettore sempre + piccolo(size-1) al progr chiamante
stampandolo(è una funzione ricorsiva), finche size sarà >di 0

:incazzed:
odio i compiti corretti senza mettere le soluzioni...cosi non insegni un caxxo

Brazorv
17-06-2005, 13:10
Nel primo esrcizio oltre a non aver dichiarato qualche variabile mi pare che il ciclo che calcola la media sia sbagliato
ammettendo che in currentPtr ci sia una copia della tasta della lista io avrei fatto così


while(currentPtr!=NULL){
somma=somma+currentPtr->voto;
currentPtr = curentPtr->nextPtr;
cont=cont++;
}
media=somma/cont;


nel secondo la funzione dovrebbe stampare il vettore al contrario

VICIUS
17-06-2005, 13:16
Struct NodoLista{
int voto;
Struct NodoLista*nextPtr;
};
int media(NodoListaPtr)
{
int somma,media;
somma=media=cont=0;
Non hai dichiarato cont. Visto che ci sei perché non le inizializi quando le dichiari ?
int somma = 0, count = 0, media = 0;


/*controllo se la lista è vuota*/
if(currentPtr==NULL){
printf("la lista è vuota\n\n");
}
else{
currentPtr da dove viene ? in ogni caso perché controllare se la lista è vuota quando
l'eserizio dice che è sempre piena ? mettici una assert () cosi ti copri le spalle.

while(currentPtr!=NULL){
somma=somma+current->nextPtr;
anche qui. current e nextPtr da dove saltano fuori ? e perché aggiungi nextPtr a somma ?
se il valore del nodo sta in voto dovevi usare current->voto. Ultima cosa qui puoi usare
l'operatore += cosi eviti di scrivere due volte somma :)

cont=cont++;
media=somma\cont;
}
}
return media;
perchè calcoli la media ad ogni passaggio ? visto che hai somma e count basta semplicemente
fare return somma / count; Qui poi si puo anche paralre del tipo di ritorno della funzione.
Visto che quasi sicuramente la media avra dei decimali potresti voler usare double o float
come tipo di ritorno invece di int e usare return (double)somma/count;

ciao ;)