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.