Oracolo in C

di il
15 risposte

Oracolo in C

Ragazzi ho bisogno di una mano con un programma un po lunghino in C:

chiedo aiuto a perone pazienti e che hanno voglia di starmi dietro...è una cosa urgente...per favore...

ecco il testo:

"Utilizzando i file di testo al posto dei vettori per memorizzare le frasi considerando una frase per riga
Si vuole realizzare un oracolo che dia responsi in base al nome, cognome e data di nascita. Il programma prevede di
avere un file che contiene delle frasi riguardanti ammonimenti, proverbi,
massime in genere, come ad esempio "Attenzione al raffreddore" oppure "meglio una gallina oggi che un uovo domani". 
Una volta chiesti i dati anagrafici dell'utente, il nome e cognome vengono trasformati in numeri, sommando tra loro i codici 
ASCII dei singoli caratteri che li compongono; a questo valore si sommano i valori di giorno mese e anno della data di nascita. 
Al risultato devono essere poi sommati i secondi dell'ora in cui viene usato l'oracolo, presi dall'ora di sistema usando la procedura Getime. 
Il numero ottenuto viene diviso per il numero degli elementi del file delle frasi, il resto della divisione è l'indice dell'elemento del vettore
da fornire come responso dell'oracolo.
Il programma deve inoltre memorizzare in un vettore i dati relativi agli ultimi 30 utenti che usato l'oracolo, e permettere di
·	Visualizzare l'elenco in ordine alfabetico degli utenti, completo delle frasi dell'oracolo
·	Visualizzare l'elenco degli utenti che hanno meno di una certa età introdotta da input
·	Visualizzare tutte le frasi "pronunciate" dall'oracolo."

15 Risposte

  • Re: Oracolo in C

    Il programma non è lunghino. Devi solo scegliere la struttura dati giusta. Siccome lì parla di numero degli elementi del file delle frasi a me viene in mente un vettore di stringhe di dimensione variabile quindi allocazione dinamica.
    Poi parla dei dati relativi agli ultimi 30 utenti che hanno utilizzato l'oracolo e quì mi viene in mente un vettore di strutture di dimensione fissa 30.
    Visualizzare l'elenco in ordine alfabetico significa ordinare il vettore degli utenti.
    Visualizzare l'elenco degli utenti che hanno meno di una certa età: query sul vettore.
    Visualizzare tutte le frasi "pronunciate" dall'oracolo." : stampa del vettore letto da file.
  • Re: Oracolo in C

    Dovrei farlo con i file...è questo che mi turba...
  • Re: Oracolo in C

    Non ho capito la risposta. Cosa significa? Devi leggere un file si ma una volta letto dove lo tieni?
  • Re: Oracolo in C

    Per esempio io la stampa della frase detta dal vettore ho provato a farla così:
    
    int i=0;//inizializzo il contatore a 0
    scanf("%[^\n]",prov);//input proverbio oracolo
        
        fwrite(&prov,sizeof(proverbi),1,fp);//scrivo su file
        fread(&prov,sizeof(proverbi),1,fp);//leggo da file
        printf("\n%s\n",prov[i]);//stampo
        i++;//incremento il contatore per passare alla frase successiva
    
    ma in esecuzione no va..funziona come se ci fossero degli errori di lettura
  • Re: Oracolo in C

    Il programma prevede di avere un file che contiene delle frasi riguardanti ammonimenti, proverbi,
    massime in genere,
    Questo a casa mia significa che il file lo devi già avere non creare.
  • Re: Oracolo in C

    Devo crearlo!!
  • Re: Oracolo in C

    Inizia a fare un sottoprogramma (funzione) che ti conti quante righe ha il file. Inizialmente il file crealo manualmente. Poi studiamo il load/save dei dati.
  • Re: Oracolo in C

    Questo è la funzione gia fatta per l'occasione
    
    void crea_file()
    {
        system("cls");
        int risp;
        //apre il file in modalità di lettura.
        fp=fopen("proverbi.txt","r");
        if(!fp)//controllo se il file "proverbi.txt" è stato creato.
        fp=fopen("proverbi.txt","w");//se trova il file lo apre in modalità scrittura.
        int i=0;
        do
        {
        
        printf("inserisci proverbio.. \n");
        fflush(stdin);
        //inserisco la stringa di caratteri relativa ai proverbi nel file.
        //questa funzione "%[^\n]" permette alla stringa di tener conto degli spazi e li reputa caratteri anch'essi.
        scanf("%[^\n]",prov);
        
        fwrite(&prov,sizeof(proverbi),1,fp);
        i++;
        printf("vuoi tornare al menu'?(0=no;1=si).. \n\n\n");
        fflush(stdin);
        scanf("%d",&risp);
        }while(risp!=1);
          
    return;}
  • Re: Oracolo in C

    Non hai risposto alla mia domanda. Dov'è che leggi quante righe ha il file?
  • Re: Oracolo in C

    Le conto con il contatore i
  • Re: Oracolo in C

    Che poi viene perso una volta che esci dalla funzione. Ma vuoi dei consigli o ti sembra tutto giusto?
    fflush non è da usare su input ma solo su output.
    http://www.drpaulcarter.com/cs/common-c-errors.php#4.
  • Re: Oracolo in C

    
    fp=fopen("proverbi.txt","r");
    if(!fp)//controllo se il file "proverbi.txt" è stato creato.
    fp=fopen("proverbi.txt","w");//se trova il file lo apre in modalità scrittura.
    
    Mi spieghi sto passaggio? Se il file non esiste lo apre in scrittura. Ma se il file esiste? Lo apre in lettura e non ci puoi scrivere sopra. Poi non vedo un fclose alla fine e il file continua a rimanere aperto.Quindi da correggere anche sta parte.
  • Re: Oracolo in C

    Legge il file, se esiste lo apre in scrittura. e poi hai ragione te manca l'fclose...
  • Re: Oracolo in C

    Apre in scrittura un file già aperto in lettura. credevo che avessi bisogno di una mano ma a quanto pare non serve. Buon prosseguimento.
Devi accedere o registrarti per scrivere nel forum
15 risposte