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

Da Gambas-it.org - Wikipedia.
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Oltre che nelle modalità consuete è possibile accedere ad una ''Matrice'' - in lettura ed in scrittura - secondo il metodo chiamato "''Row Major Order''" <SUP>&#091;[[#Riferimenti|Rifer.]]&#093;</sup>, il quale descrive un accesso ''lineare'' alla ''Matrice''.  
+
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>.  
  
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:
 +
<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>
 +
<TR><td width=20 bgcolor="#00FFFF"></td><td width=20 bgcolor="#00FFFF"></td><td width=20 bgcolor="#00FFFF"></td><td width=20 bgcolor="#00FFFF"></td><td width=20 bgcolor="#00FFFF"></td></tr>
 +
<TR><td width=20 bgcolor="#FFFF00"></td><td width=20 bgcolor="#FFFF00"></td><td width=20 bgcolor="#FFFF00"></td><td width=20 bgcolor="#FFFF00"></td><td width=20 bgcolor="#FFFF00"></td></tr>
 +
<TR><td width=20 bgcolor="#00FF00"></td><td width=20 bgcolor="#00FF00"></td><td width=20 bgcolor="#00FF00"></td><td width=20 bgcolor="#00FF00"></td><td width=20 bgcolor="#00FF00"></td></tr>
 +
<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>
 +
 +
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>
 +
<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>
 +
<td width=20 bgcolor="#00FFFF"></td><td width=20 bgcolor="#00FFFF"></td><td width=20 bgcolor="#00FFFF"></td><td width=20 bgcolor="#00FFFF"></td><td width=20 bgcolor="#00FFFF"></td>
 +
<td width=20 bgcolor="#FFFF00"></td><td width=20 bgcolor="#FFFF00"></td><td width=20 bgcolor="#FFFF00"></td><td width=20 bgcolor="#FFFF00"></td><td width=20 bgcolor="#FFFF00"></td>
 +
<td width=20 bgcolor="#00FF00"></td><td width=20 bgcolor="#00FF00"></td><td width=20 bgcolor="#00FF00"></td><td width=20 bgcolor="#00FF00"></td><td width=20 bgcolor="#00FF00"></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><td width=20 bgcolor="#0000FF"></td></tr>
 +
</table>
 +
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 
 +
 
 +
<FONT Color=gray>' ''Scriviamo in modo consueto all'interno di tutti gli elementi della Matrice:''</font>
 +
  For i = 0 To 2
 +
    For k = 0 To 2
 +
      matr[i, k] = i + k
 +
    Next
 +
  Next
 +
 
 +
<FONT Color=gray>' ''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'''
 +
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
 +
 
 +
<FONT Color=gray>' ''Scriviamo negli elementi della Matrice, accedendo ad essa in modo lineare:''</font>
 +
  st = Memory matr.Data For Write
 +
  For i = 0 To matr.Max
 +
    Write #st, i As Integer
 +
  Next
 +
  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
 +
 
 +
'''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.
  
  
Riga 8: 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&*
 
 
 
 
 
 
 
<FONT Color=Red size=4><B>Pagina in costruzione !</b></font>
 

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