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

    [C] Lettura file e stampa calcoli

    Problema proposto:

    Creare un programma che legga 20 numeri da un txt...numeri incolonnati che possono anche irpetersi...
    per esempio

    23
    54
    32
    23
    65
    32
    76
    23
    ecc
    ecc

    il programma prende i numeri crea una specie di tabella con il numero quante volte compare e due percentuali...

    qualcuno sa spiegarmi perche il programma si blocca e non riesco a completare il ciclo del programma correttamente?
    lo ho complitato con TC in DOS perche a scuola nn abbiamo altro...

    Grazie mille

    codice:
    #include <stdio.h>
    
    #define MAX 20
    
    FILE *fdati;
    
    int a,n=0;
    int f[MAX][4];
    
    
    void CARICA()
    {
    	int i=0;
    	if (n==0) { f[0][0]=a; f[0][1]; n++; }
    		else
    	{ while (i<n) { if (f[i][0]==a) { f[i][1]++; i=n+1; }
    		else i++; }
    	if (i>n) {f[n][0]=a ; f[n][1]=1; n++; } }
    }
    
    void CALCOLA()
    {
    	int x=0;
    	inty,k;
    	
    	for (y=0 ; y<n ; y++)
    	 { x=x+ f[y][1] ;}
    	 
    	for (y=0 ; y<n ; y++)
    	 { f[y][2] =(100*(f[y][1])/x); f[0][3]=f[0][2]; }
    	 
    	for (k=1 ; k<n-1 ; k++)
    	 { f[k][3]=f[k][2] + f[k-1][3]; } 
    
    }
    
    void STAMPA()
    {
    	int i=0;
    	for (i=0 ; i<n ; i++) {
    	printf("%8d %8d %8d &8d \n", f[i][0] ,f[i][1] ,f[i][2] ,f[i][3]); }
    	}
    
    
    int main()
    {
    	if((fdati=fopen ("dati.txt","rt"))==NULL) {printf("ERRORE"); return(1);}
    	while (! feof(fdati))
    	{fscanf(fdati,"%d",&a); printf("%d\n",a); CARICA();}
    	CALCOLA();
    	STAMPA();
    	fclose(fdati);
    }
    There are two kinds of researchers:
    those that have implemented something and those that have not.
    The latter will tell you that there are 142 ways of doing things
    and that there isn't consensus on which is best.
    The former will simply tell you that 141 of them don't work.

  2. #2
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    dove si blocca???
    che errore ti da il compilatore??

    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  3. #3
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061

    Re: [C] Lettura file e stampa calcoli

    Originariamente inviato da claudiocrack
    ......
    .......
    void CARICA()
    {
    int i=0;
    if (n==0) { f[0][0]=a; f[0][1]; n++; } <------
    else
    { while (i<n) { if (f[i][0]==a) { f[i][1]++; i=n+1; }
    else i++; }
    if (i>n) {f[n][0]=a ; f[n][1]=1; n++; } }
    }
    [/CODE]
    ma f[0][1] ?? VVoVe:
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  4. #4
    scusami ho dimenticato di copiarlo quando lo ho scritto in forum è un f[0][1]=1


    l' errore nn è quello...

    il compilatore compila esegue pero durante l' esecuzione si inchioda e nn riesco piu a uscire per tornare al editore del programma...
    in pratica eseguo il programma e non riesco piu a terminarlo...

    che sia il compilatore?
    There are two kinds of researchers:
    those that have implemented something and those that have not.
    The latter will tell you that there are 142 ways of doing things
    and that there isn't consensus on which is best.
    The former will simply tell you that 141 of them don't work.

  5. #5
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    dove ti si inchioda dentro un ciclo in particolare, una funzione...???

    metti dei printf() dentro le funzioni, prima e dopo i cicli cosi vedi precisamente dove ti si blocca...
    insomma fai un po di debug!!!1


    VVoVe: VVoVe:
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  6. #6
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    nn capisco una cosa...c nn è ad oggetti, intanto però vedo

    FILE *file;

    ma ke vuol dire ciò?

  7. #7
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    codice:
    FILE *file
    è semplicemente un puntatore al tipo derivato FILE... cioè in soldoni un puntatore a FILE...
    dopodiche si usera il file pointer, file, per leggere e scrivere sul o dal file attraverso le funzioni o di libreria o di sistema...
    il C non è ad oggetti ma i puntatori esistono...



    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  8. #8
    Consigli:
    il main deve SEMPRE ritornare un valore intero, tipicamente 0.

    se una funzione non ha parametri devi SEMPRE mettere void dentro alla coppia di tonde.

    non devi MAI usare variabili con ambio globale.

  9. #9
    codice:
    #include <stdio.h>
    
    #define LARG 4
    #define LUNG 20
    
    void carica(int a,int *n,int f[][LARG]){
    	int i=0;
    	if (!(*n)){
             f[0][0]=a;
             f[0][1]=1;
             (*n)++;
        }else{
              while (i<(*n)){
                     if (f[i][0]==a){
                         f[i][1]++;
                         i=*n+1; 
                     }else
                        i++;
              }/*end while*/
              
              if(i==*n){
                f[*n][0]=a;
                f[*n][1]=1;
                (*n)++;
              }/*end if*/
          }/*end if else*/
    }/*carica*/
    
    void calcola(int f[][LARG],int n){
    	int tot=0,y;
    	
        for(y=0; y<n;tot+=f[y][1],y++);
        printf("\n\n%d\n\n",tot);
    	tot=100/tot; 
    	printf("\n\n%d\n\n",tot);
    	for(y=0; y<n;f[y][2]=f[y][1]*tot,f[y][3]=f[y][2], y++);
    	
    	for (y=1 ; y<n ;f[y][3]=f[y][2] + f[y-1][3], y++);
    }/*calcola*/
    
    void stampa(int f[][LARG],int n){
    	int i;
    	for (i=0 ; i<n ; i++)
    	printf("%8d %8d %8d %8d \n", f[i][0] ,f[i][1] ,f[i][2] ,f[i][3]);
    }/*stampa*/
    	
    
    
    int main(void){
        FILE *fdati;
        int a,n=0;
        int f[LUNG][LARG];
    	if((fdati=fopen ("dati.txt","r"))==NULL){
            printf("ERRORE");
            return(1);
        }/*end if apertura file*/
        
    	while(! feof(fdati)){
             fscanf(fdati,"%d",&a);
             printf("%d\n",a);
             carica(a,&n,f);
        }/*end while lettura da file*/
        fclose(fdati);
        
    	calcola(f,n);
    	stampa(f,n);
    	return 0;
    }/*main*/
    ho cercato di renderlo simile a prima, dovresti comemntarla d+ perchè non avevo tempo.

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.