Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C] scrittura file con fprintf

    Ciao,
    non riesco a chiamare una funzione nel main per scrivere dei dati in un file di testo.
    Ecco il codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void generaCodice(int []);
    
    main ()
    {
    
       int codice[5];
    
       FILE *cfPtr; //puntatore al file da creare
    
       if ((cfPtr =fopen("vettori.dat", "w")) ==NULL) //crea  e apre il file in scrittura
           printf("Il file non può essere aperto");
    
       else
       {
             /*QUI DOVREI CHIAMARE LA FUNZIONE CHE GENERA I VETTORI. QUESTI DEVONO ESSERE SCRITTI NEL FILE */
         }
    
      fclose(cfPtr); //chiude il file
    
      return 0;
    }
    
    
    void generaCodice(int codice[]) //funzione che genera i vettori
    {
    
       srand((unsigned)time(NULL));
    
        int i,j,n;
    
        for (i=0;i<32;i++)
            {
    
                for (j=0;j<5;j++)
                    {
    
    
                        n=rand()%2;
    
                        codice[j]=n;
                        printf("%d",codice[j]);
    
                    }
    
    
                printf("\n");
            }
    
    
    }
    Suggerimenti?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466

    Re: [C] scrittura file con fprintf

    Originariamente inviato da lucianad
    non riesco a chiamare una funzione nel main per scrivere dei dati in un file di testo.
    Pero non chiami la fprintf nel tuo programma.. Quindi per quel che ho capito devi sostituire la printf con la fprintf nella funzione generaCodice, ed in principio, dichiarandola così:
    codice:
    void generaCodice(int codice[], FILE *cfPtr);
    e con la sostituzione
    codice:
    fprintf(cfPtr, ...);
    Spero di aver capito..

  3. #3
    No, allora ora mi dà i seguenti errori (in grassetto):
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    
    void generaCodice(int [], FILE * );  // error: too few arguments to function (void generaCodice(int*, FILE *) 
    
    
    
    
    main ()
    {
    
    int codice[5];
    
    FILE *cfPtr; //puntatore al file da creare
    
    if ((cfPtr =fopen("vettori.dat", "w")) ==NULL) //crea  e apre il file in scrittura
        printf("Il file non può essere aperto");
    
    else
       {
            generaCodice(codice); //error at this point in file
        }
    
    fclose(cfPtr);
    
    
    return 0; 
    }
    
    
    void generaCodice(int codice[], FILE *cfPtr)
    {
    
       srand((unsigned)time(NULL));
    
        int i,j,n;
    
        for (i=0;i<32;i++)
            {
    
                for (j=0;j<5;j++)
                    {
    
    
                        n=rand()%2;
    
                        codice[j]=n;
                        fprintf(cfPtr,"%d",codice[j]);
    
                    }
    
    
                printf("\n");
            }
    
    
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da lucianad
    No, allora ora mi dà i seguenti errori (in grassetto):
    codice:
            generaCodice(codice); //error at this point in file
    Chiaro, la devi richiamare come l'hai dichiarata... ossia con gli stessi parametri..
    codice:
            generaCodice(codice, cfPtr);
    Spero di essere stato chiaro..

  5. #5
    asina che sono!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da lucianad
    asina che sono!
    Ma va.. Solo disattenzione..

  7. #7
    Ultimo problema: una volta scritti i dati sul file, devo tenere solo i vettori con due 1 e tutto il resto a 0 (esempio: 11000, 01001 etc etc). Finora il programma è questo:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    
    void generaCodice(int [], FILE * ); //prototipo
    
    
    
    
    
    main ()
    {
    
    int codice[5];
    
    FILE *cfPtr; //puntatore al file da creare
    
    if ((cfPtr =fopen("vettori.dat", "w+")) ==NULL) //crea  e apre il file in lettura e scrittura
        printf("Il file non può essere aperto");
    else{
    
        generaCodice(codice, cfPtr);
        
    
        }
    
    
    
    
    fclose(cfPtr);
    
    
    
    
    return 0;
    
    }
    void generaCodice(int codice[], FILE *cfPtr) //genera codici e ricerca il numero di 1 e 0 presenti in ciascun vettore
    {
    
       srand((unsigned)time(NULL));
    
        int i,j,n,m;
        int contatoreUNO;
        int contatoreZERO;
    
    
        for (i=0;i<32;i++)
            {
                contatoreUNO=0;
                contatoreZERO=0;
    
    
                for (j=0;j<5;j++)
                    {
    
    
                        n=rand()%2;
    
                        codice[j]=n;
                        fprintf(cfPtr,"%d",codice[j]);
    
                        m=codice[j];
    
                        if(m==1)
                            {
                                contatoreUNO += 1;
                            }
                        else
                            {
                                contatoreZERO +=1;
                            }
                    }
    
    
                fprintf(cfPtr,"\n"); //scrive sul file i codici
    
                printf("\n%d° vettore : %d %d",i+1, contatoreUNO, contatoreZERO); //stampa a schermo il numero di 1 e 0
                
                
            }
    
    
    }
    Ora non so come dirgli:
    se il contatoreUNO è uguale a 2
    allora mantieni il dato
    altrimenti cancellalo

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Ricordati che tu stai lavorando con UN solo vettore, ossia codice[], ma NON su N vettori.. Sei tu che ti esprimi male o stai sbagliando a scrivere il programma?

  9. #9
    no è che ho combinato un casino. è diventato un file disordinatissimo, lo sto riscrivendo per bene..

    l'esercizio consiste nel generare 32 vettori che hanno 5 bit ognuno. Questi bit possono essere o 0 o 1.
    I vettori devono essere scritti in un file, poi bisogna considerare solo quelli che hanno due elementi a 1 e tutti gli altri a 0.
    Gli altri vettori devono essere eliminati.
    Infine, devo confrontare i vettori rimasti a due a due e confrontare per ciascuna coppia i bit a parità di posizione, conteggiando il numero di bit diversi tra loro, calcolare e stampare il minimo della distanza tra i codici.
    Entropia è quella cosa per cui non si riesce a rimettere il dentifricio nel tubo.
    -W.Allen-
    Non sono pigro..vivo a basso consumo energetico -anonimo-

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da lucianad
    l'esercizio consiste nel generare 32 vettori che hanno 5 bit ognuno.
    Ed allora devi usare un vettore multidimensionale inizializzato nella seguente maniera:
    codice:
    a[32][5];
    Io lo dichiarerei char...
    Gli altri vettori devono essere eliminati.
    Possono non essere stampati ?
    Infine, devo confrontare i vettori rimasti a due a due e confrontare per ciascuna coppia i bit a parità di posizione, conteggiando il numero di bit diversi tra loro, calcolare e stampare il minimo della distanza tra i codici.
    Qui puoi usare la strcmp e fare i tuoi calcoli..
    PS: si chiamano bytes in questo caso..

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.