Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Programmazione c e alberi binari di ricerca

    Salve ragazzi, scrivo per avere un piccolo aiuto riguardo un esercizio di programmazione in C.

    Sostanzialmente l'esercizio prevede la lettura di un file di testo e l'inserimento ordinato in un albero di ricerca. In tale file vi sono diversi parametri, del tipo nome, cognome e un intero. Devo inserire il tutto in un albero ordinato in base a giorno.

    Ho pensato a questo codice
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define k 20
    
    typedef struct{
    	char paziente[k];
    	char infermiera[k];
    	int giorno;
    }element;
    
    typedef struct item{
    	element value;
    	struct item *left,*right;
    }nodo;
    
    typedef nodo *tree;
    
    int emptytree(){
    	return NULL;
    }
    
    int empty(tree t){
    	if(t==NULL) return 1;
    	else return 0;
    }
    
    element root(tree t){
    	return t->value;
    }
    
    tree left(tree t){
    	return t->left;
    }
    
    tree right(tree t){
    	return t->right;
    }
    
    tree cons_tree(element e,tree left,tree right){
    	tree aux;
    	aux=(tree)malloc(sizeof(nodo));
    	aux->value=e;
    	aux->left=left;
    	aux->right=right;
    	return aux;
    }
    
    tree insord_tree(element e,tree t){
    	if(empty(t))
    		return cons_tree(e,NULL,NULL);
    	else{
    		if(e.giorno<=root(t).giorno){
    			t->left=insord_tree(e,left(t));
    			return t;
    		}
    		else{
    			t->right=insord_tree(e,right(t));
    			return t;
    		}
    	}
    }
    
    tree carica_tree(FILE *f1,tree T){
    	element e;
    	while(!feof(f1)){
    		fscanf(f1,"%s%s%d",e.paziente,e.infermiera,&e.giorno);
    		T=insord_tree(e,T);
    	}	
    	return T;
    }
    
    void stampa(tree t){
    	if(!empty(t)){
    		stampa(t->left);
    		printf("%s,    \t%s,    \t%d\n",root(t).paziente,root(t).infermiera,root(t).giorno);
    		stampa(t->right);
    	}
    }
    	
    
    main(){
    	element e;
    	tree T=NULL;
    	FILE *f1;
    	f1=fopen("visite.txt","rt");
    	T=carica_tree(f1,T);
    	stampa(T);
    	fclose(f1);
    	
    }
    Mentre in fase di compilazione ottengo alcuni warning, in esecuzione ottengo un "Errore Di Segmentazione"

    Secondo voi, dove o cosa sbaglio?

  2. #2
    usa il debugger. Dove avviene e in che situazione il preciso segmentation fault?

    copia qui anche i vari warning
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  3. #3
    sembra che l'errore sia nella funzione di stampa. Tolta quella tale errore scompare...chi mi spiega come mai?è forse implementata male?

  4. #4
    Ho risolto implementando una nuova funzione stampa.

    Quello che mi chiedo adesso è la seguente: se io volessi fare un albero in base al nome ho implementato una cosa tipo
    codice:
    int minore(element e1,element e2){
                      if(strcmp(e1.paziente,e2.paziente)<=0)
                                return 1;
                      else return 0;
    }
    e l'ho usato nella funzione insord_tree() e tutto va.

    Quello che non va è se io volessi mettere i dati nell' albero in base al nome e se il nome è uguale in base all' int giorno sopra scritto nella typedef struct.

    Come direste di fare voi?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.