Con passaggio del doppio puntatore per indirizzo:
#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=NULL;
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++;
printf("\n%d %d %d %d",i,j,num,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");
}
}
Con passaggio del doppio puntatore per argomento:
#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=NULL;
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++;
printf("\n%d %d %d %d",i,j,num,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");
}
}