Differenze tra le versioni di "Accedere linearmente in scrittura ed in lettura ad una Matrice"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
Oltre che nelle modalità consuete è possibile accedere ad una ''Matrice'' - in lettura ed in scrittura - in modo ''lineare'', come descritto dal metodo chiamato "''Row Major Order''" <SUP>&#091;[[#Riferimenti|Rifer.]]&#093;</sup>.
+
Oltre che nelle modalità consuete è possibile accedere ad una ''Matrice'' - in lettura ed in scrittura - in modo ''lineare'', come descritto dal metodo chiamato "''Row Major Order'' " <SUP>&#091;[[#Riferimenti|Rifer.]]&#093;</sup>.  
 
 
In particolare, il "''Row Major Order''" è un metodo di rappresentazione sequenziale della memoria riservata per la ''Matrice''. In questo metodo gli elementi di una ''Matrice'' sono disposti in sequenza riga per riga. Così gli elementi della prima riga occupano la prima serie di locazioni di memoria riservata per la ''Matrice'', gli elementi della seconda riga occupano la successiva serie della memoria e così via.
 
  
 +
In particolare, il "''Row Major Order'' " è un metodo di rappresentazione sequenziale della memoria riservata per la ''Matrice''. In questo metodo gli elementi di una ''Matrice'' sono disposti in sequenza riga per riga. Così gli elementi della prima riga occupano la prima serie di locazioni di memoria riservata per la ''Matrice'', gli elementi della seconda riga occupano la successiva serie della memoria e così via.
  
 
Dunque, se per ipotesi abbiamo una ''Matrice'' costituita da 5 righe e 5 colonne, essa solitamente verrebbe così visivamente rappresentata:
 
Dunque, se per ipotesi abbiamo una ''Matrice'' costituita da 5 righe e 5 colonne, essa solitamente verrebbe così visivamente rappresentata:
Riga 13: Riga 12:
 
</table>
 
</table>
  
Il metodo "''Row Major Order''" rappresenta la predetta ''Matrice'' in modo ''lineare'' disponendo gli elementi di ciascuna riga uno dopo l'altro per blocchi, come segue:
+
Il metodo "''Row Major Order'' " rappresenta la predetta ''Matrice'' in modo ''lineare'' disponendo gli elementi di ciascuna riga uno dopo l'altro per blocchi, come segue:
 
<TABLE border=1 cellpadding=3>
 
<TABLE border=1 cellpadding=3>
 
<TR><td width=20 bgcolor="#FF0000"></td><td width=20 bgcolor="#FF0000"></td><td width=20 bgcolor="#FF0000"></td><td width=20 bgcolor="#FF0000"></td><td width=20 bgcolor="#FF0000"></td>
 
<TR><td width=20 bgcolor="#FF0000"></td><td width=20 bgcolor="#FF0000"></td><td width=20 bgcolor="#FF0000"></td><td width=20 bgcolor="#FF0000"></td><td width=20 bgcolor="#FF0000"></td>
Riga 21: Riga 20:
 
<td width=20 bgcolor="#0000FF"></td><td width=20 bgcolor="#0000FF"></td><td width=20 bgcolor="#0000FF"></td><td width=20 bgcolor="#0000FF"></td><td width=20 bgcolor="#0000FF"></td></tr>
 
<td width=20 bgcolor="#0000FF"></td><td width=20 bgcolor="#0000FF"></td><td width=20 bgcolor="#0000FF"></td><td width=20 bgcolor="#0000FF"></td><td width=20 bgcolor="#0000FF"></td></tr>
 
</table>
 
</table>
 
+
Per utilizzare questo metodo in Gambas dobbiamo accedere alla memoria della ''Matrice'' attraverso la proprietà "''.Data'' " dell'Oggetto ''Matrice''.
 
 
Per utilizzare questo metodo in Gambas dobbiamo accedere alla memoria della ''Matrice'' attraverso la proprietà "''.Data''" dell'Oggetto ''Matrice''.
 
  
 
Mostriamo un esempio di accesso ''lineare'' in sola lettura di una ''Matrice'':
 
Mostriamo un esempio di accesso ''lineare'' in sola lettura di una ''Matrice'':
Riga 32: Riga 29:
 
    
 
    
 
  <FONT Color=gray>' ''Scriviamo in modo consueto all'interno di tutti gli elementi della Matrice:''</font>
 
  <FONT Color=gray>' ''Scriviamo in modo consueto all'interno di tutti gli elementi della Matrice:''</font>
  For i = 0 To 2
+
  For i = 0 To 2
    For k = 0 To 2
+
    For k = 0 To 2
      matr[i, k] = i + k
+
      matr[i, k] = i + k
    Next
+
    Next
  Next
+
  Next
 
+
 
 
  <FONT Color=gray>' ''Leggiamo i valori, presenti nella Matrice, accedendo ad essa in modo lineare:''</font>
 
  <FONT Color=gray>' ''Leggiamo i valori, presenti nella Matrice, accedendo ad essa in modo lineare:''</font>
  For i = 0 To matr.Max
+
  For i = 0 To matr.Max
    Print Int@(matr.Data + (i * SizeOf(gb.Integer)))
+
    Print Int@(matr.Data + (i * SizeOf(gb.Integer)))
  Next
+
  Next
 
+
 
 
  '''End'''
 
  '''End'''
 
 
 
Quest'altro esempio mostra un accesso ''lineare'' in scrittura e poi in lettura di una ''Matrice'':
 
Quest'altro esempio mostra un accesso ''lineare'' in scrittura e poi in lettura di una ''Matrice'':
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
Riga 54: Riga 49:
 
    
 
    
 
  <FONT Color=gray>' ''Scriviamo negli elementi della Matrice, accedendo ad essa in modo lineare:''</font>
 
  <FONT Color=gray>' ''Scriviamo negli elementi della Matrice, accedendo ad essa in modo lineare:''</font>
  st = Memory matr.Data For Write
+
  st = Memory matr.Data For Write
  For i = 0 To matr.Max
+
  For i = 0 To matr.Max
    Write #st, i As Integer
+
    Write #st, i As Integer
  Next
+
  Next
  st.Close
+
  st.Close
 
 
<FONT Color=gray>' ''Con le funzioni di Gambas di dereferenziazione dei Puntatori, leggiamo i valori,''
 
' ''presenti nella Matrice, accedendo ad essa In modo lineare:''</font>
 
  For i = 0 To matr.Max
 
    Print Int@(matr.Data + (i * SizeOf(gb.Integer)))
 
  Next
 
 
    
 
    
 +
<FONT Color=gray>' ''Con le funzioni di Gambas di dereferenziazione dei Puntatori, leggiamo i valori, presenti nella Matrice, accedendo ad essa In modo lineare:''</font>
 +
  For i = 0 To matr.Max
 +
    Print Int@(matr.Data + (i * SizeOf(gb.Integer)))
 +
  Next
 +
 
 
  '''End'''
 
  '''End'''
 
 
I due esempi dimostrano appunto che i dati, presenti nell'area di memoria dell'Oggetto ''Matrice'' deputata alla loro memorizzazione, sono scritti in modo comunque sequenziale.
 
I due esempi dimostrano appunto che i dati, presenti nell'area di memoria dell'Oggetto ''Matrice'' deputata alla loro memorizzazione, sono scritti in modo comunque sequenziale.
 
  
  
Riga 75: Riga 67:
 
=Riferimenti=
 
=Riferimenti=
 
* https://en.wikipedia.org/wiki/Row-_and_column-major_order
 
* https://en.wikipedia.org/wiki/Row-_and_column-major_order
* https://www.google.it/?gws_rd=ssl#q=Row+Major+Order&*
 

Versione attuale delle 15:45, 6 feb 2022

Oltre che nelle modalità consuete è possibile accedere ad una Matrice - in lettura ed in scrittura - in modo lineare, come descritto dal metodo chiamato "Row Major Order " [Rifer.].

In particolare, il "Row Major Order " è un metodo di rappresentazione sequenziale della memoria riservata per la Matrice. In questo metodo gli elementi di una Matrice sono disposti in sequenza riga per riga. Così gli elementi della prima riga occupano la prima serie di locazioni di memoria riservata per la Matrice, gli elementi della seconda riga occupano la successiva serie della memoria e così via.

Dunque, se per ipotesi abbiamo una Matrice costituita da 5 righe e 5 colonne, essa solitamente verrebbe così visivamente rappresentata:

Il metodo "Row Major Order " rappresenta la predetta Matrice in modo lineare disponendo gli elementi di ciascuna riga uno dopo l'altro per blocchi, come segue:

Per utilizzare questo metodo in Gambas dobbiamo accedere alla memoria della Matrice attraverso la proprietà ".Data " dell'Oggetto Matrice.

Mostriamo un esempio di accesso lineare in sola lettura di una Matrice:

Public Sub Main()
 
 Dim matr As New Integer[3, 3]
 Dim i, k As Integer  
 
' Scriviamo in modo consueto all'interno di tutti gli elementi della Matrice:
 For i = 0 To 2
   For k = 0 To 2
     matr[i, k] = i + k
   Next
 Next
 
' Leggiamo i valori, presenti nella Matrice, accedendo ad essa in modo lineare:
 For i = 0 To matr.Max
   Print Int@(matr.Data + (i * SizeOf(gb.Integer)))
 Next
 
End

Quest'altro esempio mostra un accesso lineare in scrittura e poi in lettura di una Matrice:

Public Sub Main()
 
 Dim matr As New Integer[3, 3]
 Dim i, k As Integer
 Dim st As Stream
 
' Scriviamo negli elementi della Matrice, accedendo ad essa in modo lineare:
 st = Memory matr.Data For Write
 For i = 0 To matr.Max
   Write #st, i As Integer
 Next
 st.Close
  
' Con le funzioni di Gambas di dereferenziazione dei Puntatori, leggiamo i valori, presenti nella Matrice, accedendo ad essa In modo lineare:
 For i = 0 To matr.Max
   Print Int@(matr.Data + (i * SizeOf(gb.Integer)))
 Next
 
End

I due esempi dimostrano appunto che i dati, presenti nell'area di memoria dell'Oggetto Matrice deputata alla loro memorizzazione, sono scritti in modo comunque sequenziale.


Riferimenti