Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - albero non funziona
Forum - C/C++ - albero non funziona

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 21:24
Lunedì, 15/02/2010
ho provato ad implementare questo albero ma non mi funziona e mi dà i seguenti errori:
pp(66) : error C3861: 'trovadato': identifier not found
1>c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(76) : error C2059: syntax error : '('
1>c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(77) : error C2039: 'p' : is not a member of 'nodo'
1>        c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(15) : see declaration of 'nodo'
1>c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(77) : error C2232: '->nodo::info' : left operand has '' type, use '.'
1>c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(83) : error C3861: 'confrontadati': identifier not found
error C2050: switch expression not integral
error C2051: case expression not constant
error C3861: 'trovanodo': identifier not found
error C2051: case expression not constant
error C3861: 'trovanodo': identifier not found
warning C4060: switch statement contains no 'case' or 'default' labels
error C2664: 'stamparicorsiva' : cannot convert parameter 1 from 'dati' to 'nodo *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called


Codice sorgente - presumibilmente C++

  1. #include "stdafx.h"
  2. #include <string>
  3. #include <iostream>
  4. using namespace std;
  5. struct campi
  6. {
  7.     int codice;
  8.     char descrizione[20];
  9. };
  10.  typedef struct campi dati;
  11.  struct nodo
  12.  {
  13.     dati info;
  14.     struct nodo *dx, *sx;
  15.  };
  16.  int  uguale=0;
  17. int segue=1;
  18. int precede=-1;
  19.  
  20. struct nodo *radice;
  21.  
  22. void operazione(char testata[]) {
  23.     printf("\n%s\n",testata);
  24.     return;
  25. }
  26.  
  27. int confrontodati(dati dato1, dati dato2)
  28. {
  29.     int c;
  30.     if(strcmp(dato1.descrizione,dato2.descrizione)==0)
  31.         c = uguale;
  32.     else
  33.         c = segue;
  34.     return c;
  35. }
  36.  
  37. int leggidato(struct campi *D){
  38.     int cod;
  39.     printf("codice (0=fine): ");
  40.    cin>>cod;
  41.     if(cod !=0) {
  42.         D->codice = cod;
  43.         printf("descrizione: ");
  44.         cin>>D->descrizione;
  45.     }
  46.     return cod;
  47. }
  48.  
  49. void inizializza(void)
  50. {
  51.        radice= NULL;
  52.        return;
  53. }
  54.  
  55. struct nodo *generando(void)
  56. {
  57.     struct nodo *p = NULL;
  58.     dati D;
  59.     int fine;
  60.     fine = leggidato(&D);
  61.     while(fine != 0)
  62.     {  
  63.                 p=trovadato(D,p);
  64.         fine = leggidato(&D);
  65.     }
  66. return p;
  67. }
  68.  
  69. struct nodo *trovadato(dati dato, struct nodo *p)
  70. {
  71.     if(p==NULL)
  72.         {
  73.         p->(struct nodo *) malloc (sizeof(struct nodo));
  74.         p->info = dato;
  75.         p-> sx = NULL;
  76.         p-> dx = NULL;
  77.     }
  78.     else
  79.         {
  80.         switch(confrontadati(dato, p->info))
  81.                 {
  82.             case precede:
  83.                 p->sx = trovanodo(dato, p->sx);
  84.                 break;
  85.             case segue:
  86.                 p->dx = trovanodo(dato,p->dx);
  87.                 break;
  88.         }
  89.     }
  90.     return p;
  91. }
  92.  
  93. void stamparicorsiva(struct nodo*p)
  94. {
  95.     if (p!=NULL)
  96.         {
  97.         stamparicorsiva(p->sx);
  98.         stamparicorsiva(p->info);
  99.         stamparicorsiva(p->dx);
  100.     }
  101.     return;
  102. }
  103.  
  104. void creaalbero(void)
  105. {
  106.     operazione ("inserimento dei dati");
  107.     radice = generando();
  108.     return;
  109. }
  110.  
  111. void stampaalbero(void)
  112. {
  113.     operazione("stampa lista ordinata\n");
  114.     printf("\n");
  115.     return;
  116. }
  117.  
  118. void main()
  119. {
  120.     int scelta;
  121.     inizializza();
  122.     do
  123.         {
  124.         do
  125.                 {
  126.             printf("\n --------------------------\n");
  127.             printf("1.creazione albero");
  128.             printf("2. stampa ordinata");
  129.             printf("3.fine");
  130.             printf("\n --------------------------\n");
  131.             scanf("%d",&scelta);
  132.         }
  133.         while(scelta < 1 || scelta >2);
  134.             switch (scelta)
  135.                         {
  136.                 case 1:
  137.                 creaalbero();
  138.                 break;
  139.                 case 2:
  140.                 stampaalbero();
  141.                 break;
  142.             }
  143.      }
  144.      while(scelta !=3);
  145. }




Aiutatemi!!!!!!!!!


matteog
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:35
Lunedì, 15/02/2010
Se devi usare la funzione trovadato prima di definirla, allora devi indicarne il prototipo all'inizio del tuo file sorgente.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 21:49
Lunedì, 15/02/2010
Codice sorgente - presumibilmente C++

  1. #include "stdafx.h"
  2. #include <string>
  3. #include <iostream>
  4. using namespace std;
  5. struct campi
  6. {
  7.     int codice;
  8.     char descrizione[20];
  9. };
  10.  typedef struct campi dati;
  11.  struct nodo
  12.  {
  13.     dati info;
  14.     struct nodo *dx, *sx;
  15.  };
  16.  struct nodo *trovadato(dati dato, struct nodo *p);
  17. int  uguale=0;
  18. int segue=1;
  19. int precede=-1;
  20.  
  21. struct nodo *radice;
  22.  
  23. void operazione(char testata[]) {
  24.     printf("\n%s\n",testata);
  25.     return;
  26. }
  27.  
  28. int confrontodati(dati dato1, dati dato2)
  29. {
  30.     int c;
  31.     if(strcmp(dato1.descrizione,dato2.descrizione)==0)
  32.         c = uguale;
  33.     else
  34.         c = segue;
  35.     return c;
  36. }
  37.  
  38. int leggidato(struct campi *D){
  39.     int cod;
  40.     printf("codice (0=fine): ");
  41.    cin>>cod;
  42.     if(cod !=0) {
  43.         D->codice = cod;
  44.         printf("descrizione: ");
  45.         cin>>D->descrizione;
  46.     }
  47.     return cod;
  48. }
  49.  
  50. void inizializza(void)
  51. {
  52.        radice= NULL;
  53.        return;
  54. }
  55.  
  56. struct nodo *generando(void)
  57. {
  58.     struct nodo *p = NULL;
  59.     dati D;
  60.     int fine;
  61.     fine = leggidato(&D);
  62.     while(fine != 0)
  63.     {  
  64.                 p=trovadato(D,p);
  65.         fine = leggidato(&D);
  66.     }
  67. return p;
  68. }
  69.  
  70. struct nodo *trovadato(dati dato, struct nodo *p)
  71. {
  72.     if(p==NULL)
  73.         {
  74.         p=(struct nodo *) malloc (sizeof(struct nodo));
  75.                 p->info = dato;
  76.         p-> sx = NULL;
  77.         p-> dx = NULL;
  78.     }
  79.     else
  80.         {
  81.                 switch(confrontodati(dato,p->info))
  82.                 {
  83.             case -1:
  84.                 p->sx = trovadato(dato, p->sx);
  85.                 break;
  86.             case 1:
  87.                 p->dx = trovadato(dato,p->dx);
  88.                 break;
  89.         }
  90.     }
  91.     return p;
  92. }
  93.  
  94. void stamparicorsiva(struct nodo*p)
  95. {
  96.     if (p!=NULL)
  97.         {
  98.         stamparicorsiva(p->sx);
  99.         stamparicorsiva(p);
  100.         stamparicorsiva(p->dx);
  101.     }
  102.     return;
  103. }
  104.  
  105. void creaalbero(void)
  106. {
  107.     operazione ("inserimento dei dati");
  108.     radice = generando();
  109.     return;
  110. }
  111.  
  112. void stampaalbero(void)
  113. {
  114.     operazione("stampa lista ordinata\n");
  115.     printf("\n");
  116.     return;
  117. }
  118.  
  119. void main()
  120. {
  121.     int scelta;
  122.     inizializza();
  123.     do
  124.         {
  125.         do
  126.                 {
  127.             printf("\n --------------------------\n");
  128.             printf("1.creazione albero");
  129.             printf("2. stampa ordinata");
  130.             printf("3.fine");
  131.             printf("\n --------------------------\n");
  132.             scanf("%d",&scelta);
  133.         }
  134.         while(scelta < 1 || scelta >2);
  135.             switch (scelta)
  136.                         {
  137.                 case 1:
  138.                 creaalbero();
  139.                 break;
  140.                 case 2:
  141.                 stampaalbero();
  142.                 break;
  143.             }
  144.      }
  145.      while(scelta !=3);
  146. }



lò corretto ma adesso non funziona niente tranne la costruzione o almeno sembra perchè?????


matteog
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:52
Lunedì, 15/02/2010
Testo quotato




Italiano questo sconosciuto ...

"L'ho corretto" ... almeno usiamo bene l'italiano se il C non lo si conosce ...

E poi che vuol dire "non funziona niente" ... ci sono altri errori in compilazione ? No ?

Allora dicci "cosa fai" esattamente quando esegui il programma, cosa ti aspetti e, invece, che risultati hai ...

Devi essere tu ad indicare i problemi, non noi a cercarli ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 21:55
Lunedì, 15/02/2010
allora scusate per l'italiano non mi ero accorto di quell'orrore!!!comunque non stampa niente quando premo due nel menù!non vi sono errori in fase di compilazione credo sia un problema limitato allafunzione stampa ma non sò dove si trova l'errore.La costruzione sembrerebbe funzionare invece.


matteog
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:00
Lunedì, 15/02/2010
Scusami ... ci vedrò poco ma nella funzione stampaalbero non c'è nulla che possa servire a stampare l'albero ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 22:03
Lunedì, 15/02/2010
hai ragione


matteog
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:04
Lunedì, 15/02/2010
Ma non l'hai scritto tu il programma? :-|


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 22:55
Lunedì, 15/02/2010
è un programma che ci hanno dato a scuola e che mi ha inviato una mia amica dicendo che funzionava ma quando lò compilato non funzionava nulla!! quindi ho provato a capire dove stava il problema grazie mille:idea:


matteog
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo