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++ - aiuto programma non funziona
Forum - C/C++ - aiuto programma non funziona

Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 12:12
Lunedì, 20/06/2011
Questo programma dovrebbe creare un albero binario ordinato in base al cognome e a parita di cognome, in base al nome
Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. typedef struct elementAlbero{
  6.         int mat;
  7.         char nome[10];
  8.         char cogn[10];
  9.         struct elementAlbero *sx;
  10.         struct elementAlbero *dx;
  11. }tree;
  12. typedef tree *Tree;
  13. int compareT(char [],char [], Tree);
  14. void inorder(Tree);
  15. Tree creaTree(int,char [],char [], Tree);
  16.  
  17. main(){
  18.   int i;
  19.   int m;
  20.   char n[10];
  21.   char c[10];
  22.   Tree T = NULL;
  23.  
  24.    for(i=0;i<4;i++){
  25.       printf("\ncogn: ");    scanf("%s",c);    
  26.       printf("\nnome: ");    scanf("%s",n);  
  27.       printf("\nmatr: ");    scanf("%d",&m);      
  28.       T = creaTree(m,n,c,T);      
  29.    }
  30.    printf("\n\n ");
  31.    inorder(T);
  32. system("pause");
  33. }
  34. int compareT(char c[], char n[], Tree nodo ){
  35.      
  36.     if(strcmp(c , nodo->cogn) == 0){            
  37.        if(strcmp(n, nodo->nome) > 0)return 1;      
  38.     }else{        
  39.         if(strcmp(c, nodo->cogn) > 0){
  40.              return 1;
  41.          }else {
  42.              if(strcmp(c, nodo->cogn) < 0){
  43.                  return 0;
  44.              }
  45.          }
  46.      }      
  47. }
  48.  
  49.  
  50. Tree creaTree(int m, char n[], char c[], Tree t){
  51.      
  52.         if(t == NULL){
  53.              t = (Tree) malloc(sizeof(tree));
  54.              strcpy(t->cogn, c);
  55.              strcpy(t->nome, n);
  56.              t->mat = m;
  57.              t->sx = NULL;
  58.              t->dx = NULL;
  59.              return t;
  60.         }else{
  61.               int y = compareT(c, n, t);
  62.               if(y == 0){
  63.                    t->sx = creaTree(m, n, c, t->sx);
  64.                    return t;
  65.               }else{
  66.                    t->dx = creaTree(m, n, c, t->dx);
  67.                    return t;                    
  68.               }
  69.         }
  70. }
  71. void inorder(Tree t){
  72.    if(t != NULL){
  73.         inorder(t->sx);
  74.           printf("%s %s %d\n",t->cogn,t->nome,t->mat);
  75.         inorder(t->dx);
  76.         }    
  77. }


non capisco perchè ordina solo in base al cognome .. grazie

Ultima modifica effettuata da Bonny il 20/06/2011 alle 12:19
PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 12:38
Lunedì, 20/06/2011
Codice sorgente - presumibilmente C++

  1. int compareT(char c[], char n[], Tree nodo)
  2. {
  3.     if(strcmp(c , nodo->cogn) == 0)
  4.       {            
  5.            if(strcmp(n, nodo->nome) > 0)
  6.                return 1;
  7.            else if(strcmp(n,nodo->nome)<0)
  8.                return 0;
  9.        }
  10.     else
  11.       {        
  12.             if(strcmp(c, nodo->cogn) > 0)
  13.                  return 1;
  14.             else if(strcmp(c, nodo->cogn) < 0)
  15.                  return 0;
  16.       }
  17.     //nel caso siano uguali
  18.     return -1;
  19. }



Il tuo problema stava nella prima if innestata.
Non ho controllato il resto del programma, ma ordinando comunque
in base al cognome dovrebbe essere corretto.
Penso fosse un errore solo in questa funzione.
Testalo poi vediamo.

Ultima modifica effettuata da comina8 il 20/06/2011 alle 12:39
hai ragione ho aggiunto "else return 0" e adesso funziona, mi perdo in un bicchiere d'acqua a volte:( - Bonny - 20/06/11 12:40
Sono errori che capitano a tutti con le cascate di if-else. Tranquillo =). CIao ciao - comina8 - 20/06/11 12:42
PM