Differenze tra le versioni di "Strutture: dichiarazione ed uso"

Da Gambas-it.org - Wikipedia.
(Array di Strutture)
(Array di Strutture)
Riga 234: Riga 234:
 
  Dim a As Byte
 
  Dim a As Byte
 
   
 
   
   <Font Color= #0000FF>prima</font> = New <Font Color= #B22222>Struct StrutturaModello[]</font>
+
   <Font Color= #0000FF>prima</font> = New <Font Color= #B22222>StrutturaModello[]</font>
 
   
 
   
 
  <Font Color= #006400>' ''Assegnamo i valori agli elementi della Struttura-Array:''</font>
 
  <Font Color= #006400>' ''Assegnamo i valori agli elementi della Struttura-Array:''</font>
 
   For a = 0 To 9
 
   For a = 0 To 9
 
   
 
   
     <Font Color= #1E90FF>seconda</font> = New <Font Color= #B22222>Struct StrutturaModello[]</font>
+
     <Font Color= #1E90FF>seconda</font> = New <Font Color= #B22222>StrutturaModello[]</font>
 
     With <Font Color= #1E90FF>seconda</font>
 
     With <Font Color= #1E90FF>seconda</font>
 
       .prB = a
 
       .prB = a
Riga 245: Riga 245:
 
     End With
 
     End With
 
   
 
   
 +
<Font Color= #006400>' ''La Struttura Array vuole una variabile Struttura del tipo "StrutturaModello":''</font>
 
     <Font Color= #0000FF>prima</font>.Add(<Font Color= #1E90FF>seconda</font>)
 
     <Font Color= #0000FF>prima</font>.Add(<Font Color= #1E90FF>seconda</font>)
 
   
 
   

Versione delle 15:49, 15 mag 2012

La Struttura similmente all'Array aggrega due o più elementi. Però, mentre l'Array aggrega elementi del medesimo tipo (per esempio tutti valori di tipo Integer, o di tipo Byte, etc), la Struttura aggrega solitamente (ma non necessariamente) elementi di tipo diverso.

Dichiariamo una Struttura con dei campi, che dovranno essere riempiti con dei valori. Tale Struttura avrà un proprio nome e farà da modello alle particolari variabili strutture che saranno effettivamente utilizzate per contenere valori.


PUBLIC Struct NomeStruttura    ' definisco i campi della Struttura "modello"

' Questa Struttura si riserverà, occupandola, 9 byte di memoria in tutto:
  valore1 As Integer   ' dal byte n° 0 al n° 3
  valore2 As Integer   ' dal byte n° 4 al n° 7
  valore3 as Byte      ' il byte n° 8
 END Struct

' creo una struttura "reale" composta a perfetta immagine di quella modello:
   Private nuovaStruttura As New NomeStruttura

' E' possibile anche usare la parola "Struct" invece di New:
   Private nuovaStruttura As Struct NomeStruttura



Public Sub Form_Open()

Dim variabValor as Byte

 variabValor = Inputbox("Immetto un valore per \"riempire\" il campo \"variabile\" di \"nuovaStruttura\": valore3 .")

' attribuisco un valore a ciascun campo variabile della struttura
' (qui i valori sono due "costanti" ed uno "variabile" che immetto io con InputBox):
 nuovaStruttura.valore1 = 3
 nuovaStruttura.valore2 = 6
 nuovaStruttura.valore3 = variabValor

End


Public Sub Button1_Click()

' quindi opero con i valori contenuti da "nuovaStruttura",
' per esempio li faccio mostrare in console:
  With nuovaStruttura
    Print .valore1
    Print .valore2
    Print .valore3
  End With

End


Strutture contenenti Array e Matrici

Le Strutture possono essere costituite da campi di variabili Array e Matrici.

Esempio:

PUBLIC Struct StrutturaModello
    arB[10] As Byte       ' array monodimensionale definito
    arI As Integer[]      ' array monodimensionale non definito
    mt$[10, 4] As String  ' matrice
End Struct

 Private strutturaVariabile As New StrutturaModello


PUBLIC Sub Form_Open()

 Dim a, m As Byte

  strutturaVariabile.arI = New Integer[]

  For a = 0 To 9
    With strutturaVariabile
      .arB[a] = a
      .arI.Add(a + a)
        For m = 0 To 3
         .mt$[a, m] = Chr(strutturaVariabile.arI[a] + 70)
        Next
   End With
 Next

End


PUBLIC Sub Button1_Click()

 Dim a, m As Byte

  For a = 0 To 9
   With strutturaVariabile
    Print .arB[a]
    Print .arI[a]
    For m = 0 To 3
      Print .mt$[a, m]
    Next
   End With
 Next

End


Strutture che contengono altre Strutture

Le Strutture possono contenere, come proprio elemento, altre Strutture. Da tenere presente che è necessario dichiarare e definire la Struttura, che sarà contenuta nella Struttura principale, prima della dichiarazione della Struttura principale contenente.

Esempio:

' va dichiarata e definita innanzitutto la Struttura
' che sarà contenuta nella Struttura principale:
Public Struct strutturaInterna
  sb As Byte
  sI As Integer
  s$ As String
End Struct

Private internaStru As New strutturaInterna


' ...quindi la Struttura principale:
PUBLIC Struct StrutturaPrincipale
  prB As Byte
  prI As Integer
  internaStru As Struct strutturaInterna
End Struct

Private struttVariab As New StrutturaPrincipale



Public Sub Form_Open()

 Dim a As Byte

  a = 1

' Assegnamo i valori alle variabili contenute nei campi della Struttura principale:
 With struttVariab
   .prB = 10
   .prI = 1000
   .internaStru.sb = a
   .internaStru.sI = struttVariab.prI + a
   .internaStru.s$ = "prova " & Str(a)
 End With

End


' Andiamo a mostrare i risultati in console:
Public Sub Button1_Click()

 Dim a As Byte

  a = 1

 With struttVariab
   Print .prB
   Print .prI
   Print .internaStru.sb
   Print .internaStru.sI
   Print .internaStru.s$
 End With

End

Il risultato in console sarà:
10
1000
1
1001
prova 1


Array di Strutture

E' infine possibile realizzare array di Strutture.

Esempio 1:

Public Struct strutturaModello
 prB As Byte
 prI As Integer
End Struct

' Dichiariamo la variabile della Struttura come array.
' Sarà necessario inserire dopo "As" la parola "Struct":
  Private prima[10] As Struct StrutturaModello


Public Sub Form_Open()

 Dim a As Byte

' Assegnamo i valori agli elementi della Struttura-Array:
For a = 0 To 9
 With prima[a]
   .prB = a
   .prI = 1000 + a
 End With
Next

End


' Andiamo a mostrare i risultati in console:
Public Sub Button1_Click()

 Dim a As Byte

For a = 0 To 9
 With prima[a]
   Print .prB
   Print .prI
 End With
Next

End

Esempio 2:

Public Struct strutturaModello
 prB As Byte
 prI As Integer
End Struct

' Dichiariamo la variabile della Struttura come array indefinito.
' In questo caso sarà necessario inserire dopo "As" la parola "New":
  Private prima As New StrutturaModello[]

' Dichiariamo un'altra variabile simile alla Struttura modello:
  Private seconda As New StrutturaModello


Public Sub Form_Open()

Dim a As Byte

  prima = New StrutturaModello[]

' Assegnamo i valori agli elementi della Struttura-Array:
  For a = 0 To 9

    seconda = New StrutturaModello[]
    With seconda
     .prB = a
     .prI = 1000 + a
    End With

' La Struttura Array vuole una variabile Struttura del tipo "StrutturaModello":
    prima.Add(seconda)

  Next

End


' Andiamo a mostrare i risultati in console:
Public Sub Button1_Click()

 Dim a As Byte

For a = 0 To 9
 With prima[a]
   Print .prB
   Print .prI
 End With
Next

End