Riempimento matrice

di il
5 risposte

Riempimento matrice

Buongiorno a tutti! Mi sono appena iscritto perchè non riesco ad ovviare al mio problema.
Ve lo descrivo tutti senza troppi preamboli.
Devo riempire una matrice acquisendo degli interi da un file esterno. Come potete vedere dal codice allegato, ho prima riempito tutta la matrice di 0 e ora sto cercando di riempirla con i numeri che mi servono. In sostanza nel file di input il primo numero corrisponde all'indice di riga, il secondo all'indice di colonna e il terzo sarebbe il numero che vorrei andasse "nella cella". In sostanza se la riga del file di input è 1 2 5, 1 è la riga, 2 la colonna, 5 il numero da inserire in quella posizione.
N.B. Dato che gli array partono da 0, tutta la riga e la colonna dello 0 deve rimanere tale! Questo perchè ci andrò ad allocare un altro dato che mi serve. Quindi se dico 1 è la riga intendo proprio nella posizione 1 e non 0.
Vi allego il pezzo di programma che ho scritto e il file di input per farvi capire meglio.
La prima riga del file di input non riguarda il problema che vi ho posto, gli interi che mi servono per riempire la matrice sono le righe composte da 3 cifre separate da uno spazio.
Se non mi sono spiegato bene chiedete, cercherò di essere più chiaro

#include<stdio.h>
#include<stdlib.h>
#define MAX 50000

main()
{
      int n,m,h,s,a,b,l;
      int contatore;
      int collegamenti[MAX+1][MAX+1];
      
      FILE *fr, *fw;
      fr=fopen("input.txt","r");
      fw=fopen("output.txt","w");
      
      fscanf(fr,"%d %d %d %d",&n,&m,&h,&s);
      //inizializzo la matrice
      for(i=0;i<MAX+1;i++)
       for(j=0;j<MAX+1;j++)
        collegamenti[i][j]=0;
      
      //carico le gallerie in base alla loro luminosità
      int p;
      for(p=0;p<m;p++)
      {
          fscanf(fr,"%d %d %d",&a,&b,&l);
          

      return 0;
}

5 6 1 5
1 2 5
2 3 1
3 4 3
4 5 2
5 1 6
1 4 4

5 Risposte

  • Re: Riempimento matrice

    Beh il + l'hai fatto.
    
    fscanf(fr,"%d %d %d",&riga,&colonna,&numero);
    collegamenti[riga][colonna] = numero;
    
  • Re: Riempimento matrice

    E automaticamente recepisce che se "riga" è 2 si piazza sulla riga due?
  • Re: Riempimento matrice

    Certo. basta eseguire il debug e verificare.
  • Re: Riempimento matrice

    Ok, domanda molto importante. Fra le assunzioni del problema c'è che il mio numero 1<=m<=50000.
    Ciò significa che la mia matrice dovrebbe essere per essere utilizzabile con un qualsiasi file di input che rispetti le assuzioni [50000][50000]. Logicamente dove l'alloco una memoria del genere?!?! In compilazione mi dice che l'array supera il limite. Come posso risolvere?
  • Re: Riempimento matrice

    Hai esaurito lo spazio dello stack (di solito circa 1MB). quindi devi usare il malloc e il free per allocare lo spazio sul heap.
    
    int main()
    {
       int n = 50000;
    
       // Crea i puntatori dove n = 50000
       int **matrix = (int**)malloc(sizeof(int*) * n);
    
       // Crea i dati.
       int *matrix_data = (int *)malloc(sizeof(int) * n * n);
    
       // Crea la matrice n*n
       for (int i=0; i < n; i++, matrix_data+=n)
          matrix[i] = matrix_data;  
    
       // eliminare la matrice
        free(matrix[0]);  
        free(matrix); 
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte