Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Matrice dinamica di dimensione presa da file
Forum - C/C++ - Matrice dinamica di dimensione presa da file

Avatar
R_M (Normal User)
Newbie


Messaggi: 4
Iscritto: 07/02/2011

Segnala al moderatore
Postato alle 19:49
Lunedì, 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++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. void alloca_matrice(int***,int*,int*);
  5. void riempi_matrice(int***,int,int);
  6. void stampa(int**,int);
  7.  
  8. int main()
  9. {
  10.     int** matrice;
  11.     int dimensione=0;
  12.     int elementi=0;
  13.    
  14.     alloca_matrice(&matrice,&dimensione,&elementi);
  15.     riempi_matrice(&matrice,dimensione,elementi);
  16.     stampa(matrice,dimensione);
  17.     system("pause");
  18.     return 0;    
  19. }
  20.  
  21. void alloca_matrice(int***m,int*dim,int*num)
  22. {
  23.      FILE* fp=NULL;
  24.      int i;
  25.      int end=0;
  26.      fp=fopen("seq.dat","rb");
  27.      fseek(fp,0,SEEK_END);
  28.      end=ftell(fp);
  29.      fseek(fp,0,SEEK_SET);
  30.      while((ftell(fp))!=end)
  31.      {
  32.                             (*num)++;
  33.                             fseek(fp,sizeof(int),SEEK_CUR);
  34.      }
  35.      *dim=((*num)/2);
  36.      fseek(fp,(*dim)*sizeof(int),SEEK_SET);
  37.      fread(dim,sizeof(int),1,fp);
  38.      if(((*dim)*(*dim))<(*num))
  39.      {
  40.          printf("Il file contiene più interi di quanti ne puo' contenere la matrice");
  41.          exit(1);
  42.      }
  43.      else
  44.      {    
  45.           *m=malloc((*dim)*sizeof(int));
  46.           for(i=0;i<(*dim);i++);
  47.           {
  48.                          (*m)[i]=malloc((*dim)*sizeof(int));
  49.           }
  50.       }    
  51.      fclose(fp);
  52. }
  53.  
  54. void riempi_matrice(int*** m,int dim,int num)
  55. {
  56.      FILE*fp=NULL;
  57.      int i,j;
  58.      int flag=0;
  59.      fp=fopen("seq.dat","rb");
  60.      do
  61.      {
  62.           for(i=0;i<dim;i++)
  63.           {
  64.                     for(j=0;j<dim;j++)
  65.                     {
  66.                         if(flag==((num/2)+1))
  67.                         {}
  68.                         else
  69.                         {
  70.                             fread((&m)[i][j],sizeof(int),1,fp);
  71.                             flag++;
  72.                         }
  73.                     }
  74.           }    
  75.      }
  76.      while((i+j)<num);
  77.      for(;i<dim;i++)
  78.      {
  79.                     for(;j<dim;j++)
  80.                     {
  81.                            (*m)[i][j]=0;
  82.                      }
  83.      }
  84.      fclose(fp);
  85. }
  86.  
  87. void stampa(int** m,int dim)
  88. {
  89.      int i,j;
  90.      for(i=0;i<dim;i++)
  91.      {
  92.                        for(j=0;j<dim;j++)
  93.                        {
  94.                                          printf("%d", m[i][j]);
  95.                        }
  96.                        printf("/n");
  97.      }
  98. }


Ultima modifica effettuata da R_M il 08/02/2011 alle 22:01
PM
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 21:18
Lunedì, 07/02/2011
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:
http://www.pierotofy.it/pages/extras/forum/87/1022228-eser ...

Poi usa i tag code quando devi postare del codice.

Scusa x l'errore nel postare il codice... cmq sapresti aiutarmi a capire dov'è l'errore in questo codice? - R_M - 08/02/11 01:27
Io nn riesco a capire dov'è - R_M - 08/02/11 01:28
PM