Traccia d'esame

di il
26 risposte

Traccia d'esame

Salve a tutti,
mi sono appena iscritta a questo forum perché mi servirebbe una mano con l'impostazione di questo esercizio d'esame (da scrivere in linguaggio C):
Informatizzare il catasto del comune di Benevento, con particolare attenzione alle unità abitative. 
Ciascuna unità abitativa appartiene ad un solo proprietario. Il file "proprietari.txt" contiene i dati anagrafici dei proprietari, 
ovvero il codice fiscale, il cognome, il nome, la data di nascita ed il luogo di nascita, ed è organizzato nel seguente modo:
		
		BBNA15
		Abbenante
		Pasquale
		15-07-1984
		Benevento
		BRDRS4
		Baiardini
		Rosa
		10-01-1985
		Roma
		......
		
Il file "soluzioni.txt" contiene tutte le informazioni sulle abitazioni. In particolare, esse sono caratterizzate 
da: identificativo, codice fiscale del proprietario, nome abitazione, via, comune, piano, numero stanze, 
metri quadrati e valore dell'abitazione. Un esempio di file "soluzioni.txt" è il seguente:
		
		23app
		BBNA15
		parco delle rose
		via Roma
		Benevento
		3
		5
		120
		200000.00
		89ind
		BRDRS4
		parco del sole
		via Milano
		Benevento
		3
		4
		90
		302000
		......
	
Implementare le seguenti funzionalità:
	- Dato il codice fiscale di un proprietario, stampare un report con tutte le abitazioni
		di sua proprietà;
	- Dato l'identificativo di un'abitazione, stampare tutti i dati della stessa e quelli 
		del suo proprietario.
Devo creare delle liste? Qualcuno di buona volontà, se ha un pò di tempo a disposizione, potrebbe postare lo svolgimento di tale esercizio? Giusto per avere una linea guida, nel caso dovesse uscirmi all'esame una traccia simile. Purtroppo su internet non riesco a trovare cose del genere, solo esercizi che trattano singoli argomenti
Ringrazio in anticipo chi mi aiuterà.

26 Risposte

  • Re: Traccia d'esame

    potrebbe postare lo svolgimento di tale esercizio?
    Queste richieste sono vietate. E anche senza senso ... Al massimo si danno consigli e spunti su errori e problemi, ma l'esercizio lo devi fare tu ...
  • Re: Traccia d'esame

    oregon ha scritto:


    E anche senza senso ... Al massimo si danno consigli e spunti su errori e problemi, ma l'esercizio lo devi fare tu ...
    Mi dispiace che lei abbia risposto in un modo così avventato. E' giusto che io mi sforzi di scrivere l'esercizio e cercare di trovare una soluzione, ma io non ho assolutamente "preteso" che qualcuno si mettesse a scrivere il codice per me. Ho solo chiesto una cortesia, sperando nella generosità di un esperto in materia, per chi si trova come me in alto mare, senza sapere da che parte iniziare (e mi sembra che tutto ciò un senso ce l'abbia). Ad ogni modo, mi scuso se ho chiesto troppo.
  • Re: Traccia d'esame

    Non ho risposto in modo avventato. Forse la richiesta del codice dell'esercizio - senza aver letto prima il regolamento di questo forum - è stata una richiesta un po' avventata.

    E ho detto che non ha senso perché il codice pronto non aiuta così come si crede.

    In ogni caso, manca ancora una minima idea o proposta di soluzione su cui ragionare.
  • Re: Traccia d'esame

    Allora potrebbe darmi delle indicazioni su come procedere? Così cercherò di scrivere il codice e mostrarle qualcosa. Mi scusi ancora, grazie.
  • Re: Traccia d'esame

    Per prima cosa, si devono definire le strutture dati da usare, in base a quanto indicato nella traccia.

    Solo dopo aver definito tali strutture, si può passare a scrivere codice.
  • Re: Traccia d'esame

    Ho scritto così le due strutture. Sulla seconda non sono sicura. In pratica, la mia idea sarebbe quella di creare una lista contenente un array di persone (un array di struttura, se non erro).
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
      char codfisc[16];
      char cognome[20];
      char nome[30];
      char dataNascita;
      char luogoNascita[20];     
    }Persona;
    
    typedef struct SNodo{
       Persona p;
       struct  SNodo *next;     
    }Nodo;
  • Re: Traccia d'esame

    Per cognome e nome userei lo stesso numero di caratteri
    La data non può essere di 1 solo carattere

    Ma per le abitazioni?
  • Re: Traccia d'esame

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
      char codfisc[16];
      char cognome[20];
      char nome[20];
      char dataNascita[11];	//considero la data nel formato gg/mm/aaaa
      char luogoNascita[20];     
    }Persona;
    
    typedef struct SNodo{
       Persona p;
       struct  SNodo *next;     
    }Nodo;
    
    typedef struct{
    	char id[10];
    	char codfiscProprietario[16];
    	char nomeAbitaz[30];
    	char via[30];
    	char comune[20];
    	int piano;
    	int nStanze;
    	int mq;
    	double valore;
    }Soluzione;
    
    typedef struct NSol{
    	Soluzione s;
    	struct NSol *next;
    }NodoSoluzione;
    
    Ecco. Ora devo procedere con la lettura dei files, giusto?
  • Re: Traccia d'esame

    Io eliminerei dalla struttura Soluzione il codice fiscale e aggiungerei un puntatore ad un NodoSoluzione alla struttura Persona.

    Così da ogni nodo di ogni proprietario parte una lista delle sue proprietà.
    
    typedef struct{
       char id[10];
       char nomeAbitaz[30];
       char via[30];
       char comune[20];
       int piano;
       int nStanze;
       int mq;
       double valore;
    }Soluzione;
    
    typedef struct NSol{
       Soluzione s;
       struct NSol *next;
    }NodoSoluzione;
    
    typedef struct {
      char codfisc[16];
      char cognome[20];
      char nome[20];
      char dataNascita[11];   //considero la data nel formato gg/mm/aaaa
      char luogoNascita[20];    
      NodoSoluzione *sol; 
    }Persona;
    
    typedef struct SNodo{
       Persona p;
       struct  SNodo *next;     
    }Nodo;
    
  • Re: Traccia d'esame

    oregon ha scritto:


    Io eliminerei dalla struttura Soluzione il codice fiscale e aggiungerei un puntatore ad un NodoSoluzione alla struttura Persona.
    Ah, bene. Avrei potuto fare anche al contrario? Cioè invece di aggiungere il puntatore ad un NodoSoluzione alla struttura Persona, definire un puntatore ad un Nodo (Persona) alla struttura Soluzione??
  • Re: Traccia d'esame

    Sì ... anche ...

    Avresti una lista di persone e ogni persona che punta all'inizio di una lista di unità immobiliari di cui è proprietario. Cioè

    Persona1 -> Unità1 -> Unità2
    |
    V
    Persona2 -> Unità3
    |
    V
    Persona3 -> Unità4 -> Unità5


    Nel primo modo invece avresti

    Unità1 -> Proprietario1
    |
    V
    Unità2 -> Proprietario2
    |
    V
    Unità3 -> Proprietario3
  • Re: Traccia d'esame

    Ok, perfetto. Ora sto cercando di leggere uno dei due file, ma non riesco...
    void leggiFileProprietari(Proprietario proprietari[]){
    	FILE *fp;
    	int i=0;
    	
    	fp=fopen("proprietari.txt", "r");
    	if(fp==NULL){
    		printf("File inesistente!\n");
    		exit(0);
    	}
    	while(!foeof){
    		fscanf(fp, "%s", proprietari[i].);
    		fscanf(fp, "%s", proprietari[i].);
    		fscanf(fp, "%s", proprietari[i].);
    		fscanf(fp, "%s", proprietari[i].);
    		fscanf(fp, "%s", proprietari[i].);
    		i++;
    	}
    	fclose(fp);
    }
    Perchè quando digito il punto dopo non mi escono i vari campi del proprietario i-esimo?
  • Re: Traccia d'esame

    Non hai chiamato il tipo Persona? Cosa è adesso Proprietario?
  • Re: Traccia d'esame

    oregon ha scritto:


    Non hai chiamato il tipo Persona? Cosa è adesso Proprietario?
    E' vero!
    Il problema però c'è sempre
    void leggiFileProprietari(Persona persone[]){
    	FILE *fp;
    	int i=0;
    	
    	fp=fopen("proprietari.txt", "r");
    	if(fp==NULL){
    		printf("File inesistente!\n");
    		exit(0);
    	}
    	while(!foeof){
    		fscanf(fp, "%s", persone[i].);
    		fscanf(fp, "%s", persone[i].);
    		fscanf(fp, "%s", persone[i].);
    		fscanf(fp, "%s", persone[i].);
    		fscanf(fp, "%s", persone[i].);
    		i++;
    	}
    	fclose(fp);
    }
Devi accedere o registrarti per scrivere nel forum
26 risposte