Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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 17:29
Lunedì, 07/02/2011
Ho un file di interi e sò solo che il numero totale degli interi è dispari. Della sequenza del file devo leggere l'intero centrale (ad es. se ho 13 interi devo leggere il 7). Il valore di questo intero è la dimensione della matrice quadrata che devo allocare dinamicamente. Dopo averla allocata dinamicamente, la devo riempire con gli interi del file, tranne quello che mi ha dato la dimensione. Se gli interi del file sono di meno degli elementi che può contenere la matrice, allora quelli rimanenti gli inizializzo a zero.

Non ho errori in compilazione, ma in esecuzione

Ecco il codice che ho scritto:

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.      }
  36.      *dim=((*num)/2);
  37.      fseek(fp,(*dim)*sizeof(int),SEEK_SET);
  38.      fread(dim,sizeof(int),1,fp);
  39.      if(((*dim)*(*dim))<(*num))
  40.      {
  41.          printf("Il file contiene più interi di quanti ne puo' contenere la matrice");
  42.          exit(1);
  43.      }
  44.      else
  45.      {    
  46.           *m=malloc((*dim)*sizeof(int));
  47.           for(i=0;i<(*dim);i++);
  48.           {
  49.                          (*m)[i]=malloc((*dim)*sizeof(int));
  50.           }
  51.       }    
  52.      fclose(fp);
  53.  
  54. }  
  55.  
  56. void riempi_matrice(int*** m,int dim,int num)
  57. {
  58.      FILE*fp=NULL;
  59.      int i,j;
  60.      int flag=0;
  61.      fp=fopen("seq.dat","rb");
  62.      do
  63.      {
  64.           for(i=0;i<dim;i++)
  65.           {
  66.                     for(j=0;j<dim;j++)
  67.                     {
  68.                         if(flag==((num/2)+1))
  69.                         {}
  70.                         else
  71.                         {
  72.                             fread((&m)[i][j],sizeof(int),1,fp);  :idea:
  73.                             flag++;
  74.                            
  75.                         }
  76.                     }
  77.           }    
  78.      }
  79.      while((i+j)<num);
  80.      for(;i<dim;i++)
  81.           {
  82.                     for(;j<dim;j++)
  83.                     {
  84.                            (*m)[i][j]=0;
  85.                     }
  86.           }
  87.      fclose(fp);
  88.    
  89. }
  90.  
  91. void stampa(int** m,int dim)
  92. {
  93.      int i,j;
  94.      for(i=0;i<dim;i++)
  95.      {
  96.                        for(j=0;j<dim;j++)
  97.                        {
  98.                                          printf("%d", m[i][j]);
  99.                        }
  100.                        printf("/n");
  101.      }
  102. }



:idea: indica dove attraverso il debug ho notato che mi dà errore. Per la precisione mi dà errore la seconda volta che la esegue, a causa del ciclo

Ultima modifica effettuata da R_M il 08/02/2011 alle 22:01
PM
Avatar
crash outside control (Normal User)
Expert


Messaggi: 217
Iscritto: 12/02/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 18:34
Lunedì, 07/02/2011
Già ... ._.

Scusa. Ho avuto problemi con la connessione mentre postavo - R_M - 07/02/11 21:09


Anche un orologio fermo segna l'ora giusta due volte al giorno.
Hermann Hesse
PM