Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636

    [C] gestione aventi matrimoni

    ciao
    avrei il seguente problema da risolvere

    Una sala ricevimenti deve gestire i dati relativi al numero di invitati dei matrimoni che organizza
    Le informazioni sono memorizzati in un file ("eventi.dat") che contiene strutture (variabile matrimonio) del tipo seguente:
    COGNOME SPOSO | COGNOME SPOSA | DATA | NUMERO INVITATI
    Si realizzi un programma che :
    1. ordini in maniera decrescente i dati dei matrimoni in base al numero di invitati
    2. consenta di ricavare il cognome degli sposi in base alla data del matrimonio ( si utilizzi l'algoritmo di ricerca dicotomica).
    Tute le operazioni sui dati vanno fatte in memoria centrale dopo aver letto i dati da "eventi.dat" e trsferite successivamente sullo stesso file

    Io ho fatto in questo modo però ho un dubbio riguardo alla struttura (variabile matrimonio), cioè non capisco se devo creare una struct nel file "eventi.dat"

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define maxchar 20
    #define N 10
    /*
     *
     */
    int main() {
    
        struct eventi{
            char sposo[maxchar];
            char sposa[maxchar];
            int dat;
            int invi;
        }evento[N];
    
        char cognomesposo[N];
        char cognomesposa[N];
        int data;
    	int datacerca;
    	int invitati;
    	int i,j,k, appo;
        char buffer[N];
    
        FILE *cfPtr;
    
        if ((cfPtr = fopen ("eventi.dat", "w")) == NULL){
            printf ("il file non può essere aperto");
    
        }else{
            printf ("Inserisci i dati : \n");
            printf ("Inserisci EOF per terminare l'inserimento \n");
    		printf ("\n\n%-10s%-10s%-10s%-10s\n", "SPOSO", "SPOSA", "DATA", "INVITATI");
            scanf ("%s%s%d%d", cognomesposo, cognomesposa, &data, &invitati);
    
            while (!feof(stdin)){
    		fprintf (cfPtr, "%s %s %d %d\n", cognomesposo, cognomesposa, data, invitati);
            scanf ("%s\t%s\t%d\t%d\t", cognomesposo, cognomesposa, &data, &invitati);
    
            }
    
                fclose(cfPtr);
            }
    
        if ((cfPtr = fopen("eventi.dat", "r")) == NULL){
            printf("il file non può essere aperto");
    
        }else{
    
            i = 0;
            fscanf(cfPtr, "%s%s%d%d", cognomesposo, cognomesposa, &data, &invitati);
    
            strcpy(evento[i].sposo,cognomesposo);
            strcpy(evento[i].sposa,cognomesposa);
            evento[i].dat = data;
            evento[i].invi = invitati;
            i++;
    
            while (!feof(cfPtr)){
    
                const int aResult = fscanf(cfPtr, "%s%s%d%d", cognomesposo, cognomesposa, &data, &invitati);
    			if (aResult != -1){
                strcpy(evento[i].sposo, cognomesposo);
                strcpy(evento[i].sposa, cognomesposa);
                evento[i].dat = data;
                evento[i].invi = invitati;
    			i++;
    			}
            }
    
        }
    
        for (j = 0; j < i - 1; j++){
            for (k = j + 1; k < i; k++){
                if (evento[j].invi < evento[k].invi){
                    strcpy(buffer,evento[k].sposo);
                    strcpy(evento[k].sposo,evento[j].sposo);
                    strcpy(evento[j].sposo,buffer);
                    strcpy(buffer,evento[k].sposa);
                    strcpy(evento[k].sposa,evento[j].sposa);
                    strcpy(evento[j].sposa,buffer);
                    appo = evento[k].dat;
                    evento[k].dat = evento[j].dat;
                    evento[j].dat = appo;
                    appo = evento[k].invi;
                    evento[k].invi = evento[j].invi;
                    evento[j].invi = appo;
                }
            }
        }
    
        printf ("\n\n%-10s%-10s%-10s%-10s", "SPOSO", "SPOSA", "DATA", "INVITATI");
        for (j = 0; j < i; j++){
            printf ("\n%-10s%-10s%-10d%-10d", evento[j].sposo, evento[j].sposa,evento[j].dat,evento[j].invi);
        }
    
    	printf ("\n\nInserisci la data del matrimonio\n");
    	scanf ("%d",&datacerca);
    
    	for (j = 0; j < i; j++){
    		if (datacerca == evento[j].dat){
    			printf ("\n\n%-10s%-10s", "SPOSO", "SPOSA");
    			printf ("\n%-10s%-10s", evento[j].sposo, evento[j].sposa);
    			}
            }
    
    	if ((cfPtr = fopen ("eventi.dat", "w")) == NULL){
            printf ("il file non può essere aperto");
    
        }else{
    		for (j = 0; j < i; j++){
    			strcpy(cognomesposo, evento[j].sposo);
    			strcpy(cognomesposo, evento[j].sposo);
    			data = evento[j].dat;
    			invitati = evento[j].invi;
    			fprintf (cfPtr, "%s %s %d %d\n", cognomesposo, cognomesposa, data, invitati);
    			}
    		fclose(cfPtr);
            }
    
    	system("PAUSE");
    
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho capito quello che non hai capito ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    a quanto pare l'esercizio chede che i dati devono essere inserita in una struttura (variabile matrimonio) e quindi messi nel file...ma non ne sono sicuro..perchè non si se la struct viene usata anche per la "memorizzazione" nei file

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Puoi memorizzare i dati nel file come vuoi ... continuo a non capire il tuo dubbio e non capisco se ti aspetti un chiarimento da chi ti ha proposto l'esercizio (universita'?)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    no semplicemente l'esercizio chiede di utilizzare una variabile "matrimoni" (struttura) ma per come ho fatto io, la memorizzazione nel file non avviene tramite una "struct"
    quello che vorrei sapere è se sia possibile memorizzare una struct in un file o solo tramite fscanf successive

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per cominciare le fscanf ti servono per leggere da file e non per memorizzarci dati.

    Per quanto riguarda le strutture, per scrivere tutto un elemento su un file, puoi utilizzare la funzione

    fwrite

    ampiamente documentata (in rete e in un qualsiasi libro).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    Originariamente inviato da oregon
    Per cominciare le fscanf ti servono per leggere da file e non per memorizzarci dati.

    Per quanto riguarda le strutture, per scrivere tutto un elemento su un file, puoi utilizzare la funzione

    fwrite

    ampiamente documentata (in rete e in un qualsiasi libro).
    si infatti ho sbagliato fprintf volevo dire
    fwrite mi permette di scrivere una inter struct su un file?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da jurij7
    fwrite mi permette di scrivere una inter struct su un file?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    scusate ma secondo voi, una descrizione di questo tipo, che significa :

    Un file ("proprietà.dat") contiene le informazioni relative all'assegnazione in strutture (variabile assegnazione) del tipo mostrato di seguito:

    Numero_appartamento | Nome_proprietario | Cognome_Proprietario | Settimana_acquistata

    cioè il file presenta una struct con questi campi? non riesco a capire

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Penso che voglia dire che nel file sono memorizzati i dati nello stesso ordine degli elementi di una variabile struttura mostrata nel testo ....

    Quindi, devi usare la fread per leggere e la fwrite per scrivere.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.