PDA

Visualizza la versione completa : [C] Lettura file e stampa calcoli


claudiocrack
19-10-2005, 21:14
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



#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);
}

byaur
20-10-2005, 15:42
dove si blocca???
che errore ti da il compilatore??

:dh: :dh:

byaur
20-10-2005, 15:46
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] ?? :oVVoVe:

claudiocrack
20-10-2005, 20:53
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?

byaur
21-10-2005, 13:35
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


:oVVoVe: :oVVoVe: :ciauz:

FinalFantasy
22-10-2005, 10:00
nn capisco una cosa...c nn ad oggetti, intanto per vedo

FILE *file;

ma ke vuol dire ci?

byaur
23-10-2005, 17:25
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... :dh: :dh: :dh:



:ciauz: :ciauz:

ascatem2
23-10-2005, 21:19
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.

ascatem2
23-10-2005, 21:45
#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.

Loading