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

    [C]Frequenze di lettere in un testo

    Prima di tutto ciao a tutti..

    Ho un ennesimo problema da risolvere e chiedo a voi che siete la mia unica speranza..

    Stavolta il problema è:
    Il problema è rottura di codice..(il codice è crittato)

    Ho 4 testi di diversa lingua,io devo calcolare la frequenza delle lettere che compaiono nei diversi testi,poi confrontarli con il testo crittato datomi dall'esercizio per sapere in che lingua è scritto il codice.

    Io ho cominciato nel aprire i 4 testi in lettura, e poi avevo pensato di calcolare la frequenza
    codice:
    for (i=0; i<256; i++) 
       	     {
        		printf("n=%d, \t %c,\t freq= %f\n", i ,i, frequenza[i] );
        		getchar();
             }
    è giusto?o c'è un metodo più veloce o più corretto?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E dove sta il calcolo?

  3. #3
    dimenticavo anche questo pezzo scusa
    codice:
    for (i=0; i<256; i++)         
     {
       frequenza[i] = frequenza[i] / totale * 100 ;
      }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Intendevo il conteggio delle lettere del testo ... dove sta?

  5. #5
    codice:
    for(i=0; i<256; i++)
    {

  6. #6
    intendi questo??
    codice:
    for(i=0; i<256; i++)
    {
        frquenza[i]=0;
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Stai scherzando?

    Quel codice serve ad azzerare il vettore dei conteggi ... io ti chiedevo il codice che legge dal file e conta la frequenza dei caratteri letti .

    Insomma ... fai vedere tutto il codice ...

  8. #8
    Scusa la mia ignoranza!!!
    Cmq questo è tutto ciò che ho fatto...
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include<ctype.h>
    
    int main()
    {
        int i, temp;
        float distanza, frequenza[256];
        char file1[]="italiano.txt";
        char file2[]="latino.txt";
        char file3[]="francese.txt";
        char file4[]="tedesco.txt";
    	long totale;
    	unsigned char c;
        
        FILE*fp1;
        FILE*fp2;
        FILE*fp3;
        FILE*fp4;
        FILE*fp5;
        
        for (i=0; i<256; i++) 
    	{
        		frequenza[i] = 0 ;
        	}
        	totale=0;
        
        fp1=fopen(file1, "r");
        if (fp1==NULL)
        {
                      printf("Non trovo il file %s\n", file1);
                      getchar();
                      exit(-1);
                      }
        fp2=fopen(file2, "r");
        if (fp2==NULL)
        {
                      printf("Non trovo il file %s\n", file2);
                      getchar();
                      exit(-1);
                      }
        fp3=fopen(file3, "r");
        if (fp3==NULL)
        {
                      printf("Non trovo il file %s\n", file3);
                      getchar();
                      exit(-1);
                      }
        fp4=fopen(file4, "r");
        if (fp4==NULL)
        {
                      printf("Non trovo il file %s\n", file4);
                      getchar();
                      exit(-1);
                      }
        fp5=fopen("fileFrequenze.txt", "w");
        if(fp5==NULL)
        {
                      printf("Non trovo il file.\n");
                      getchar();
                      exit(-1);
        }
            
    
    	/////////////////////////////////
    	// controllo delle frequenze
        	while ( fscanf(fp1, "%c", &c)== 1 )
        	{ 
              /*
               if(((c >'a') || (c < 'z'))||((c >'A') || (c < 'Z')))  //  e'nella tabella ASCII ?
               {
               
                  printf("%c", c);
                  
                  }*/ //NON GUARDARE QUESTO ERA SOLO UNA PROVA CHE 
                      //AVEVO IN MENTE DI FARE
               temp = (int) c;    // un cast fa solo bene per leggere un carattere 
               frequenza[temp]= frequenza[temp]+1;
               totale = totale + 1 ;
            }
            for (i=0; i<256; i++)   // normalizzazione dei conteggi 
            {
                frequenza[i] = frequenza[i] / totale * 100 ;
            }
     	
        
    
    	/////////////////////////
    	// stampa delle frequenze ottenute sullo schermo
    	for (i=0; i<256; i++) 
           {
        	   printf( "n=%d, \t %c,  \t freq= %.8f\n", i , i, frequenza[i] );
           }
     	
    	
     	fclose (fp1);
     	fclose (fp2);
     	fclose (fp3);
     	fclose (fp4);
     	fclose (fp5);
    
        	getchar();
       	exit(0);
    }

  9. #9
    Talasciando quello che ho fatto prima...

    sono riuscito a scrivere il codice che mi calcola le frequenze delle lettere,solamente che adesso ho un altro problema quando vado a stampare su file le percentuali delle varie lettere mi stampa valori strani del tipo:


    codice:
    a,  	 freq= 3003.000000
    b,  	 freq= 313.000000
    c,  	 freq= 1299.000000
    d,  	 freq= 6061697275592955600000000000000000000.000000
    e,  	 freq= 6065774039923289600000000000000000000.000000
    f,  	 freq= -1.#QNAN0
    g,  	 freq= 6065770236971488900000000000000000000.000000
    h,  	 freq= 6065684670555973500000000000000000000.000000
    i,  	 freq= 6065725235375180800000000000000000000.000000
    j,  	 freq= 3.000000
    k,  	 freq= 7915339093589150100000000000000000.000000
    l,  	 freq= 1650.000000
    m,  	 freq= 6087643548078427000000000000000000000.000000
    n,  	 freq= -1.#QNAN0
    .
    .
    .
    cosa può essere?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.