Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Modificare Lista a partire da un determinato indice
Forum - C/C++ - Modificare Lista a partire da un determinato indice

Avatar
imZodiac (Normal User)
Newbie


Messaggi: 2
Iscritto: 16/02/2014

Segnala al moderatore
Postato alle 10:59
Domenica, 16/02/2014
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++

  1. void EliminaLista (elem *testa , int i , int j) {
  2.  int inizio=0; int fine=0;
  3.  elem *p=testa; elem *q;
  4.  while (p!=NULL) {
  5.   q=p;
  6.   p=p->pun;
  7.   inizio++;
  8.   if (inizio=i-1) {
  9.    while (fine=j-1) {
  10.     q->pun=p->pun;
  11.     delete p;
  12.     p=q;
  13.     fine++;
  14.    }
  15.   }
  16.  }
  17. return ;
  18. }



ora invece vi mostro il codice del professore:

Codice:
Codice sorgente - presumibilmente C++

  1. void elimina(elem*& p, int i, int j) {
  2. if ((p==NULL) || (i<=0 || j <=0 || i >j))
  3. return;
  4. elem*q = p, *r;
  5. for (int k=1; (k<i) && (q!=NULL); k++) {
  6. r=q;
  7. q=q->pun;
  8. }
  9. if (q==NULL)
  10. return;
  11. int quanti = j-i +1;
  12. if (q==p) {
  13. while (p!=NULL && quanti >0){
  14. p=p->pun;
  15. delete q;
  16. quanti--;
  17. q=p;
  18. }
  19. }
  20. else {
  21. while (q!=NULL && quanti >0){
  22. r->pun = q->pun;
  23. delete q;
  24. q=r->pun;
  25. quanti--;
  26. }
  27. }
  28. return;
  29. }




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!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6385
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:53
Domenica, 16/02/2014
Vedi risposte che hai avuto qui

http://forum.html.it/forum/showthread.php?threadid=2904440

che è un ottimo forum.


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à.
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:27
Lunedì, 17/02/2014
Non si sfugge al guardiano dei cross-forum-posting. :rofl:


Il mio blog: https://piero.dev
PM Quote