Oppure

Loading
07/02/11 18:49
R_M
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:


#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 08/02/11 21:01
aaa
07/02/11 20:18
Premoli
Ciao!!!


Prima di aprire un nuovo post usa la funzione cerca.
Proprio oggi c'è stata questa discussione che guarda caso è proprio il tuo identico esercizio:
pierotofy.it/pages/extras/forum/87/1022228-esercizio_c_vettore_e_matrice/

Poi usa i tag code quando devi postare del codice.
aaa