Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    [C++] Indicizzazione matrice

    Ho trovato questo codice che data una matrice quadrata n×n di interi ed un intero val, restituisce il
    numero totale di righe e di colonne la cui somma degli elementi è uguale a val. Per esempio, se la funzione viene chiamata con la matrice mat seguente e l’intero val = 3, la funzione
    restituirà 3.
    codice:
             1 2 0
      mat =  0 2 0
             0 0 3
    Ciò che non mi è chiaro è l'indicizzazione della matrice, che non ho mai visto in quella forma:
    codice:
    int quante(int* mat, int n, int val) { 
        int q = 0; 
        for(int i=0; i<n; i++) { 
            int s = 0; 
            for(int k=0; k<n; k++) { s += mat[i*n+k]; } 
            if(s==val) { q++; } 
            s = 0; 
            for(int k=0; k<n; k++) { s += mat[k*n+k]; } 
            if(s==val) { q++; } 
        } 
        return q; 
    }
    Grazie in anticipo a tutti coloro che mi risponderanno.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Semplicemente si considera la matrice come un array di dimensione Rows * Cols e si lavora con gli indici per trovare il punto da elaborare.
    Con matrici al cui interno c'è un pointer allocato con new, permette di risparmiare Cols allocazioni.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Originariamente inviato da shodan
    Semplicemente si considera la matrice come un array di dimensione Rows * Cols e si lavora con gli indici per trovare il punto da elaborare.
    Potresti spiegarmi come si "lavora" con gli indici per trovare il punto da elaborare?

  4. #4
    Supponi di avere una matrice fatta così:
    codice:
    1 4 7
    2 5 8
    3 6 9
    ; essa in memoria sarà disposta in questa maniera:
    codice:
    1 4 7 2 5 8 3 6 9
    ; di conseguenza per accedere all'elemento (x,y) nella rappresentazione "lineare" dell'array dovrai usare la formula
    codice:
    numeroelemento = y * larghezza + x
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Dove x e y che cosa sono?Scusa ma non riesco proprio a capirlo...
    Perchè io abitualmente identifico la x con l'asse delle ordinate e y l'asse delle ascisse, ma in questo caso la y sarebbe una costante.

  6. #6
    Sono le ascisse e le ordinate della matrice bidimensionale; la formula che ti ho detto ti consente di trasformare le coordinate della matrice bidimensionale nell'indice della sua rappresentazione monodimensionale.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.