R_M (Normal User)
Newbie
Messaggi: 4
Iscritto: 07/02/2011
|
Ho un file di interi e sò solo che il numero totale degli interi nel file è dispari. Da questo file devo leggere l'intero centrale (es. se i numeri nel file sono 13, devo leggere il settimo). Il valore di questo intero sarà la dimensione della matrice quadrata che devo allocare dinamicamente. Dopo aver allocato la matrice devo inserire tutti gli interi del file nella matrice, tranne quello che mi ha dato la dimensione. Se la matrice ha più elementi di quelli contenuti nel file gli inizializzo a zero.
Nn ho errori in compilazione, ma in esecuzione.
Spero in un vostro aiuto.
Ecco il codice:
Codice sorgente - presumibilmente C++ |
#include<stdio.h> #include<stdlib.h> void alloca_matrice(int***,int*,int*); void riempi_matrice(int***,int,int); void stampa(int**,int); int main() { int** matrice; int dimensione=0; int elementi=0; alloca_matrice(&matrice,&dimensione,&elementi); riempi_matrice(&matrice,dimensione,elementi); stampa(matrice,dimensione); system("pause"); return 0; } void alloca_matrice(int***m,int*dim,int*num) { FILE* fp=NULL; int i; int end=0; fp=fopen("seq.dat","rb"); fseek(fp,0,SEEK_END); end=ftell(fp); fseek(fp,0,SEEK_SET); while((ftell(fp))!=end) { (*num)++; fseek(fp,sizeof(int),SEEK_CUR); } *dim=((*num)/2); fseek(fp,(*dim)*sizeof(int),SEEK_SET); fread(dim,sizeof(int),1,fp); if(((*dim)*(*dim))<(*num)) { printf("Il file contiene più interi di quanti ne puo' contenere la matrice"); exit(1); } else { *m=malloc((*dim)*sizeof(int)); for(i=0;i<(*dim);i++); { (*m)[i]=malloc((*dim)*sizeof(int)); } } fclose(fp); } void riempi_matrice(int*** m,int dim,int num) { FILE*fp=NULL; int i,j; int flag=0; fp=fopen("seq.dat","rb"); do { for(i=0;i<dim;i++) { for(j=0;j<dim;j++) { if(flag==((num/2)+1)) {} else { fread((&m)[i][j],sizeof(int),1,fp); flag++; } } } } while((i+j)<num); for(;i<dim;i++) { for(;j<dim;j++) { (*m)[i][j]=0; } } fclose(fp); } void stampa(int** m,int dim) { int i,j; for(i=0;i<dim;i++) { for(j=0;j<dim;j++) { printf("%d", m[i][j]); } printf("/n"); } }
|
Ultima modifica effettuata da R_M il 08/02/2011 alle 22:01 |