Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve a tutti, tra pochi giorni ho un' esame di informatica, in particolare abbiamo trattato il c++. mi sono messo a fare degli esami degli anni passati in questi giorni e ho visto che alcune volte la soluzione mi esce proprio come quella della prof, altre volte no. Ora io so che in informatica ci sono mille modi differenti di fare un programma, però questo quesito in particolare mi ha lasciato un po di perplessità:
Scrivere una funzione che presi come argomenti una lista di elementi di tipo elem e due interi i e j, modifica la listaeliminando tutti gli elementi compresi fra la posizione i e la posizione j (i e j inclusi).
Assumere che il primo elemento della lista abbia posizione 1, il secondo elemento della lista abbia posizione 2 e cosi’ di
seguito. La funzione deve gestire le eventuali situazioni di errore.
io ho svolto l'esercizio in questo modo:
Codice sorgente - presumibilmente C++
void EliminaLista (elem *testa , int i , int j){
int inizio=0;int fine=0;
elem *p=testa; elem *q;
while(p!=NULL){
q=p;
p=p->pun;
inizio++;
if(inizio=i-1){
while(fine=j-1){
q->pun=p->pun;
delete p;
p=q;
fine++;
}
}
}
return;
}
ora invece vi mostro il codice del professore:
Codice:
Codice sorgente - presumibilmente C++
void elimina(elem*& p, int i, int j){
if((p==NULL)||(i<=0 || j <=0 || i >j))
return;
elem*q = p, *r;
for(int k=1;(k<i)&&(q!=NULL); k++){
r=q;
q=q->pun;
}
if(q==NULL)
return;
int quanti = j-i +1;
if(q==p){
while(p!=NULL&& quanti >0){
p=p->pun;
delete q;
quanti--;
q=p;
}
}
else{
while(q!=NULL&& quanti >0){
r->pun = q->pun;
delete q;
q=r->pun;
quanti--;
}
}
return;
}
come vedete la soluzione del prof è più lunga, questo sicuramente vuol dire che ho sbagliato io qualcosa perchè lui non scriverebbe mai un programma più lungo se non servisse. vorrei quindi sapere se effettivamente ho sbagliato io oppure sono corretti entrambi i codici.
ps: ho il sospetto che il passaggio argomenti per riferimento (che io non ho messo ma il prof si) c'entri qualcosa. grazie a tutti delle risposte!
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.