07/02/11 8:37
dodo154
salve a tutti!
sono nuovo del sito, avrei un quesito da proporre a voi che sicuramente siete più esperti.
Ho quest'esercizio:
In un file binario è memorizzata una sequenza non ordinata di numeri(pari e dispari);
il numero di questi interi è dispari;
dichiarare, chiamare e definire opportune funzioni che sono in grado di allocare in memoria dinamica, una matrice quadrata la cui dimensione è uguale all'elemento che sta al centro della sequenza;
inizializzare la matrice con tutti gli interi presenti nel file (escluso l'intero che stabilisce la dimensione);
riempire le restanti celle della matrice allocata con zero.
ho abbozzato qualche riga di codice ma... non funge; qualcuno di voi può darmi una mano?
vi ringrazio in anticipo
sono nuovo del sito, avrei un quesito da proporre a voi che sicuramente siete più esperti.
Ho quest'esercizio:
In un file binario è memorizzata una sequenza non ordinata di numeri(pari e dispari);
il numero di questi interi è dispari;
dichiarare, chiamare e definire opportune funzioni che sono in grado di allocare in memoria dinamica, una matrice quadrata la cui dimensione è uguale all'elemento che sta al centro della sequenza;
inizializzare la matrice con tutti gli interi presenti nel file (escluso l'intero che stabilisce la dimensione);
riempire le restanti celle della matrice allocata con zero.
ho abbozzato qualche riga di codice ma... non funge; qualcuno di voi può darmi una mano?
vi ringrazio in anticipo
#include<stdio.h> #include<stdlib.h> int** carica(int*,int***); void stampa(int,int***); int main(void) { int** matrice=NULL; int dim=0; matrice=carica(&dim,&matrice); stampa(dim,&matrice); return 0; } int** carica(int* dim, int*** mat) { FILE* fp; int i,j,ele; int conta=0; int k=0; int z=0; // indice del vettore int* vett; fp=fopen("immagine.dat","rb"); while(!feof(fp)) conta++; //voglio sapere il numero degli elementi conta= conta/2; // ho il numero degli elementi della prima parte rewind(fp); for(i=0;i<conta+1;i++) fread(dim,sizeof(int), 1, fp); rewind(fp); //allocazione dinamica vettore conta=conta*2; // vettore di soli elementi escluso l'elemento centrale del file binario vett=malloc(sizeof(int)*conta); i=0; for(;i<conta/2;i++) fread(&vett[i],sizeof(int),1,fp); fseek(fp,4,1); //salto i 4 byte dell'elemento centrale for(;i<conta/2;i++) fread(&vett[i],sizeof(int),1,fp); fclose(fp); //allocazione dinamica matrice *mat=malloc((*dim)*sizeof(int*)); for(i=0;i<*dim;i++) *mat[i]=malloc(sizeof(int)*(*dim)); /*inserimento in matrice*/ for(i=0;i<*dim && z<conta;i++) { for(j=0;j<*dim && z<conta;j++) { (*mat)[i][j]=vett[z]; z++; } } if(z==(*dim)*(*dim)) //caso particolare in cui il numero degli elementi dell'array concide esattamente con gli elementi della matrice return *mat; else if(j==*dim) { i++; // altrimenti passa alla nuova riga j=0; if(i==*dim) return *mat; } // ora avrò i e j corrispondenti alla posizione dove comincia l'assegnamento degli zeri while(j!=*dim) { (*mat)[i][j]= 0; // completo la riga di zeri j++; } for(;i<*dim;i++) { for(j=0;j<*dim ;j++) { (*mat)[i][j]=0; } } return *mat; } void stampa(int dim, int*** mat) { int i,j; for(i=0;i<dim;i++) { for(j=0;j<dim;j++) { printf("%d\t", (*mat)[i][j]); } printf("\n\n"); }
aaa