URGENTISSIMO!Problema con matrice sparsa

di il
23 risposte

23 Risposte - Pagina 2

  • Re: URGENTISSIMO!Problema con matrice sparsa

    MAX_ROWS e MAX_COLS sono rispettivamente i valori massimi di riga e colonna rilevati in lettura.
    Nell' esempio tuo:
    14 \\elemento
    1 \\riga
    2 \\colonna
    14 \\elemento
    3 \\riga
    3 \\colonna
    14 \\elemento
    4 \\riga
    3 \\colonna
    MAX_ROWS=4 MAX_COLS=3

    ... ora devo uscire... risponderò più tardi

    ~Max~
  • Re: URGENTISSIMO!Problema con matrice sparsa

    Ti ho postato il codice che implementa il metodo completo descritto nel mio post precedente. L'unico accorgimento e` che la tua funzione leggiFile deve restituire anche la dimensione del vettore, ovvero il numero di elementi letti dal file.
    
    typedef struct matrice{
    	int elemento;
    	int riga;
    	int colonna;
    };
    
    typedef matrice vett[N];
    typedef matrice s[N]; 
    
    int main(){
    
    	int i, j;
    	int num_elementi;
    	int n_righe = 0, n_colonne = 0;
    	int ** M;
    	matrice V;
    
    	num_elementi = leggiDati(V, "file"); /* legge i dati dal file */
    	/*NB!!!!!!! leggiDati deve ritornare anche il numero di elementi letti e inseriti in V!!!!!!!!!!!!!!!!!!!!!!!*/
    
    	/* si calcola la dimensione della matrice */
    	for (i = 0; i < num_elementi; i++){
    		if (V[i].riga > n_righe)
    			n_righe = V[i].riga;
    		if (V[i].colonna > n_colonne)
    			n_colonne = V[i].colonna;
    	}
    
    	/* alloca la matrice in memoria */
    	M = (int **) malloc(sizeof(int *) * n_righe);
    	for (i = 0; i < n_righe; i++)
    		M[i] = (int *) malloc(sizeof(int) * n_colonne);
    	
    
    	/* azzera la matrice */
    	for (i = 0; i < n_righe; i++)
    		for (j = 0; j < n_colonne; j++)
    			M[i][j] = 0;
    
    	/* inserisce gli elementi di V in M */
    	for (i = 0; i < num_elementi; i++)
    		M[V[i].riga][V[i].colonna] = V[i].elemento;
    
    	/* stampa M */
    	for (i = 0; i < n_righe; i++)
    		for (j = 0; j < n_colonne; j++)
    			printf("Matrice[%d][%d] = %d\n", i, j, M[i][j]);
    	
    
    }
    
  • Re: URGENTISSIMO!Problema con matrice sparsa

    Continuo a ringraziarvi per il vostro aiuto...
    Ma se sto utilizzando un array di record...non posso utilizzare la matrice come tale (intesa m[j]) altrimenti l'array di record che lo uso a fare?!
    Non so se mi sbaglio...nel caso potete spiegarmelo...GRAZIE
  • Re: URGENTISSIMO!Problema con matrice sparsa

    Si, infatti puoi utilizzare direttamente la matrice.
    La mia soluzione esegue questra trasformazione da vettore di record a matrice per abbassare il tempo computazionale dell'algoritmo. Se non sei obbligato ad utilizzare questo vettore e` certamente meglio utilizzare direttamente la matrice. Per fare cio` ti basta conoscere prima la dimensione totale della matrice (ricavando dal file gli indici massimi di riga e colonna), e poi con una seconda lettura del file, inserisci direttamente gli elementi.
  • Re: URGENTISSIMO!Problema con matrice sparsa

    Ho cambiato il mio punto CPP cosi,ma nemmeno va bene... UFF

    #include "eser.h"

    void leggiFile(vett v,vett m,int &r,int &nr,int &nc){
    fstream ("leggi.txt",ios::in);
    r=0;
    int i=1;
    nr=0;
    nc=0;
    if(!f1)cout<<"FILE NON APERTO CORRETTAMENTE!\n";
    else cout<<"FILE APERTO CORRETTAMENTE!\n";
    while(!f1.eof()){
    >>v.elemento;
    >>v.riga;
    >>v.colonna;
    i++;
    r++;
    }
    for(i=0;i<r;i++){
    if(v.riga>nr)nr=v.riga;
    if(v.colonna>nc)nc=v.colonna;
    }
    for(i=0;i<nr||i<nc;i++)m.elemento=0;
    .close();
    }

    void stampa(vett v,vett m,int r,int nr,int nc){
    cout<<"VEDIAMO GLI ELEMENTI PRESENTI NELLE VARIE COORDINATE:\n";
    int i,j;
    for(i=0;i<nr||i<nc;i++)if(v.elemento!=0)m.elemento=v[i].elemento;
    for(i=0;i<nr;i++){
    for(j=0;j<nc;j++){
    cout<<"Elemento:"<<m[i].elemento<<" ";
    cout<<"Riga: ["<<i+1<<"] ";
    cout<<"Colonna: ["<<j+1<<"] ";
    cout<<"\n";
    }
    }
    }
  • Re: URGENTISSIMO!Problema con matrice sparsa

    Per favore modifica il post usando il tag 'code' altrimenti Non si capisce niente !

    Max
  • Re: URGENTISSIMO!Problema con matrice sparsa

    
    void stampa(vett v,int r, int nr, int nc){
      cout<<"VEDIAMO GLI ELEMENTI PRESENTI NELLE VARIE COORDINATE:\n";
      int i,j;
      for(i=1;i<=nr;i++)
      {
        for(j=1;j<=nc;j++)
        {
          //if(v[i].riga==i&&v[i].colonna==j)cout<<"Elemento:"<<v[i].elemento<<" ";
          //else cout<<"Elemento:"<<0<<" ";
          //cout <<v[i].elemento<<" ";
          cout<<"Elemento: "<< cerca (v, r, i, j)<<" ";
          cout<<"Riga: ["<<i<<"] ";
          cout<<"Colonna: ["<<j<<"] ";
          cout<<"\n";
        }
      }
    }
    
    ...poi fai come credi...
  • Re: URGENTISSIMO!Problema con matrice sparsa

    Non te la prendere però ihihihihih
  • Re: URGENTISSIMO!Problema con matrice sparsa

    @intel... ma daiiiii
Devi accedere o registrarti per scrivere nel forum
23 risposte