Oppure

Loading
07/02/11 21:25
dodo154
così dovrebbe andare....
dammi conferma...
#include <stdio.h>
#include <stdlib.h>
 

void carica(int*, int***);
void stampa(int, int**);
 
int main(void)
{
    int **matrice=NULL;
    int i=0, j;
    FILE *fp;
    int N;
    int *v;
 
    fp=fopen("immagine.dat", "wb");
    printf("creazione del file binario\n");
    do{
      printf("inserisci il numero di componenti del vettore: \n");
      scanf("%d", &N);
    }while(N%2==0);
    
    v=(int*)malloc(sizeof(int)*N);
    N=N/2;
    
    for(i=0; i<N; i++){
        printf("\nInserisci la %d^componente: ",i+1);
        scanf("%d", &v[i]);
	fwrite(&v[i],sizeof(int),1,fp);
    }
    
    printf("\n inserisci elemento centrale: ");
    scanf("%d", &v[i]);
    fwrite(&v[i],sizeof(int),1,fp);
    i++;
      
    for(j=0;j<N;j++){
	printf("\n inserisci la %d^ componente: ", i+1);
	scanf("%d", &v[i]);
	fwrite(&v[i],sizeof(int),1,fp);
	i++;
    }
 
    
    fclose(fp);
 
    printf("\nFile creato...\n");
    getchar();
 
    carica(&N, &matrice);
    stampa(N, matrice);
    return 0;
}
 
void carica(int* N, int*** mat)
{
    FILE* fp;
    int i,j;
    int conta=0;
    int z=0;
    int* vett;
 
    fp=fopen("immagine.dat","rb");
 
    while(!feof(fp)){
        conta++;  //voglio sapere il numero degli elementi
        fread(N, sizeof(int), 1, fp);
    }
 
    conta--;
    conta= conta/2;  // ho il numero degli elementi della prima parte
 
    rewind(fp);
 
    for(i=0;i<conta+1;i++)
        fread(N,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,sizeof(int),1); //salto i 4 byte dell'elemento centrale
 
    for(;i<conta;i++)
        fread(&vett[i],sizeof(int),1,fp);
 
//allocazione dinamica matrice
    fclose(fp);
 
    *mat=(int **)malloc((*N)*sizeof(int*));
 
    for(i=0;i<*N;i++)
        (*mat)[i]=(int *)malloc(sizeof(int)*(*N));
 
/*inserimento in matrice*/
 
    for(i=0; i<*N; i++){
        for(j=0; j<*N; j++){
            (*mat)[i][j]=0;
        }
    }
 
    for(i=0;i<*N && z<conta;i++){
        for(j=0;j<*N && z<conta;j++){
            (*mat)[i][j]=vett[z];
            z++;
        }
    }
}
 
void stampa(int N, int** mat)
{
    int i,j;
    
    printf("\n\n");
 
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            printf("%d\t", mat[i][j]);
        }
        printf("\n\n");
    }
}
aaa
08/02/11 8:29
Premoli
Si si può andare bene ;)

PS: Al massimo potresti aggiungere dei controlli per verificare se le varie aperture dei file, e le varie allocazioni vadano a buon fine.
Ultima modifica effettuata da Premoli 08/02/11 8:30
aaa
08/02/11 13:10
dodo154
ok... ti ringrazio per l'aiuto!
aaa
09/02/11 9:57
dodo154
@Premoli:
perdona ancora il mio disturbo...

ma la getch() inserita prima del caricamento e della stampa della matrice... mi legge i numeri giusto?
e poi.. questo pezzo non mi è tanto chiaro...
    conta--;
    conta= conta/2;  
 
    rewind(fp);
 
    for(i=0;i<conta+1;i++)
        fread(N,sizeof(int), 1, fp);
 
    rewind(fp);


ti ringrazio...
Ultima modifica effettuata da dodo154 09/02/11 9:59
aaa
09/02/11 10:08
Premoli
Scusami ma non ho capito, dove usi la getch()?

Poi quel pezzo di codice l'hai scritto tu, come mai non lo capisci? cosa non capisci?
aaa