Corsi di Laurea
ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.
Accetto l'uso dei cookie
if ((l!=NULL)&&(r!=NULL))è uguale alla prima, cioè quando si suppone che ci sia sia il figlio destro che quello sinistro. Tu hai già fatto quella in cui c'è solo il figlio destro, ovvero:
if ((l==NULL)&&(r!=NULL)), ora dovresti fare il viceversa, cioè quella in cui consideri solo il figlio sinistro, cioè
if ((l!=NULL)&&(r==NULL)).
if ((l!=NULL)&&(r!=NULL))nell'else manca questo controllo (strcmp(l->info.satellite.docente,docente)==0) e r
{
if((l->info.satellite.voto > tree->info.satellite.voto)&&(l->info.satellite.voto > r->info.satellite.voto))
return l;
else if ((r->info.satellite.voto > tree->info.satellite.voto)&&(r->info.satellite.voto > l->info.satellite.voto))
return r;
else return tree;
}
if ((l==NULL)&&(r!=NULL))
if (r->info.satellite.voto > tree->info.satellite.voto)
return r;
else return tree;
if ((l!=NULL)&&(r!=NULL))
if (l->info.satellite.voto > tree->info.satellite.voto)
return l;
else return tree;
}
Sono un pò arrugginito però possiamo provare.
La terza condizioneif ((l!=NULL)&&(r!=NULL))è uguale alla prima, cioè quando si suppone che ci sia sia il figlio destro che quello sinistro. Tu hai già fatto quella in cui c'è solo il figlio destro, ovvero:if ((l==NULL)&&(r!=NULL)), ora dovresti fare il viceversa, cioè quella in cui consideri solo il figlio sinistro, cioèif ((l!=NULL)&&(r==NULL)).
E' ovviamente inutile fare il caso in cui sono entrambi nulli in quanto corrisponde al caso base.
Fai sapere.
if ((l!=NULL)&&(r!=NULL))nell'else manca questo controllo (strcmp(l->info.satellite.docente,docente)==0) e r
{
if((l->info.satellite.voto > tree->info.satellite.voto)&&(l->info.satellite.voto > r->info.satellite.voto))
return l;
else if ((r->info.satellite.voto > tree->info.satellite.voto)&&(r->info.satellite.voto > l->info.satellite.voto))
return r;
else return tree;
}
if ((l==NULL)&&(r!=NULL))
if (r->info.satellite.voto > tree->info.satellite.voto)
return r;
else return tree;
if ((l!=NULL)&&(r!=NULL))
if (l->info.satellite.voto > tree->info.satellite.voto)
return l;
else return tree;
}
else {In questo else dove controlla che nel nodo destro e quello sinistro il record insegnante coincide con quello di cui devi trovare il voto max?
l=ricerca_esami(tree->left,docente);
r=ricerca_esami(tree->right,docente);
if ((l!=NULL)&&(r!=NULL))
{
if((l->info.satellite.voto > tree->info.satellite.voto)&&(l->info.satellite.voto > r->info.satellite.voto))
return l;
else if ((r->info.satellite.voto > tree->info.satellite.voto)&&(r->info.satellite.voto > l->info.satellite.voto))
return r;
else return tree;
}
if ((l==NULL)&&(r!=NULL))
if (r->info.satellite.voto > tree->info.satellite.voto)
return r;
else return tree;
if ((l!=NULL)&&(r!=NULL))
if (l->info.satellite.voto > tree->info.satellite.voto)
return l;
else return tree;
}
}
else {In questo else dove controlla che nel nodo destro e quello sinistro il record insegnante coincide con quello di cui devi trovare il voto max?
l=ricerca_esami(tree->left,docente);
r=ricerca_esami(tree->right,docente);
if ((l!=NULL)&&(r!=NULL))
{
if((l->info.satellite.voto > tree->info.satellite.voto)&&(l->info.satellite.voto > r->info.satellite.voto))
return l;
else if ((r->info.satellite.voto > tree->info.satellite.voto)&&(r->info.satellite.voto > l->info.satellite.voto))
return r;
else return tree;
}
if ((l==NULL)&&(r!=NULL))
if (r->info.satellite.voto > tree->info.satellite.voto)
return r;
else return tree;
if ((l!=NULL)&&(r!=NULL))
if (l->info.satellite.voto > tree->info.satellite.voto)
return l;
else return tree;
}
}
ovvio perchè ad esempio nell'else che mi hai dato prevedi il caso in cui (strcmp(l->info.satellite.docente,docente)==0) e (strcmp(r->info.satellite.docente,docente)==0) ma non prevedi il caso in cui questo non si verifica ad esempio ammettiamo che (strcmp(l->info.satellite.docente,docente)==0) è verificato ma che (strcmp(l->info.satellite.docente,docente)==0) non è verificato che deve succedere?
TNode* esame_prof(TList list, char prof[]){
TNode* max;
if(list==NULL){
return NULL;
}
while((list != NULL) && (strcmp(list->info.satellite.docente, prof) != 0))
list = list->link;
max = list;
while(list!=NULL){
if((strcmp(list->info.satellite.docente, prof) == 0) && (list->info.satellite.voto > max->info.satellite.voto))
max=list;
list=list->link;
}
return max;
}
Sarà anche fatta bene ma a me nn funz
0 utenti, 0 ospiti, 0 utenti anonimi