Differenze tra le versioni di "Strutture: dichiarazione ed uso"
Riga 10: | Riga 10: | ||
<Font Color= #006400>' ''Questa Struttura si riserverà, occupandola, 9 byte di memoria in tutto:''</font> | <Font Color= #006400>' ''Questa Struttura si riserverà, occupandola, 9 byte di memoria in tutto:''</font> | ||
− | valore1 As String | + | valore1 As String <Font Color= #006400>' ''dal byte n° 0 al n° 3''</font> |
− | valore2 As | + | valore2 As Byte <Font Color= #006400>' ''il byte n° 4''</font> |
− | valore3 as | + | valore3 as Integer <Font Color= #006400>' ''dal byte n° 5 al byte n° 8''</font> |
'''End''' Struct | '''End''' Struct | ||
Riga 27: | Riga 27: | ||
Dim variabValor as Byte | Dim variabValor as Byte | ||
− | var$ = Inputbox("Immettiamo un | + | var$ = Inputbox("Immettiamo un numero per \"riempire\" il campo \"valore3\" di \"variabileStruttura\": valore3 .") |
<Font Color= #006400>' ''Attribuiamo un valore a ciascun campo variabile della variabile di tipo Struttura'' | <Font Color= #006400>' ''Attribuiamo un valore a ciascun campo variabile della variabile di tipo Struttura'' | ||
Riga 33: | Riga 33: | ||
<Font Color= #0000FF>variabileStruttura</font>.valore1 = "Esempio sulle Strutture" | <Font Color= #0000FF>variabileStruttura</font>.valore1 = "Esempio sulle Strutture" | ||
<Font Color= #0000FF>variabileStruttura</font>.valore2 = 6 | <Font Color= #0000FF>variabileStruttura</font>.valore2 = 6 | ||
− | <Font Color= #0000FF>variabileStruttura</font>.valore3 = var$ | + | <Font Color= #0000FF>variabileStruttura</font>.valore3 = Val(var$) |
'''End''' | '''End''' |
Versione delle 08:50, 1 lug 2013
La Struttura similmente al vettore (Array) aggrega due o più elementi. Però, mentre il vettore 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.
In Gambas3 la Struttura, analogamente ad un oggetto, può essere considerata una Classe senza metodi, che, come nel C, definisce e si riserva una porzione di memoria.
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 di tipo Struttura che saranno effettivamente utilizzate per contenere valori.
Nell'esempio che segue, la Struttura modello avrà il nome: NomeStruttura, mentre la variabile del tipo di quella Struttura la chiameremo: variabileStruttura:
Public Struct NomeStruttura ' definiamo i campi della Struttura "modello" ' Questa Struttura si riserverà, occupandola, 9 byte di memoria in tutto: valore1 As String ' dal byte n° 0 al n° 3 valore2 As Byte ' il byte n° 4 valore3 as Integer ' dal byte n° 5 al byte n° 8 End Struct ' Dichiariamo una variabile di tipo Struttura (composta a perfetta immagine della Struttura modello): Private variabileStruttura As New NomeStruttura ' E' possibile anche usare la parola "Struct" invece di New: Private variabileStruttura As Struct NomeStruttura Public Sub Form_Open() Dim variabValor as Byte var$ = Inputbox("Immettiamo un numero per \"riempire\" il campo \"valore3\" di \"variabileStruttura\": valore3 .") ' Attribuiamo un valore a ciascun campo variabile della variabile di tipo Struttura ' (in questo esempio i valori sono due già definiti (3 e 6) ed il terzo che abbiamo immesso con "InputBox"): variabileStruttura.valore1 = "Esempio sulle Strutture" variabileStruttura.valore2 = 6 variabileStruttura.valore3 = Val(var$) End Public Sub Button1_Click() ' quindi operiamo con i valori contenuti dalla variabile "variabStruttura", ' per esempio li facciamo mostrare in console: With variabileStruttura Print .valore1 Print .valore2 Print .valore3 End With End
Indice
Strutture contenenti Vettori e Matrici
Le Strutture possono essere costituite da campi di variabili vettoriali (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 variabileStruttura As New StrutturaModello Public Sub Form_Open() Dim a, m As Byte variabileStruttura.arI = New Integer[] For a = 0 To 9 With variabileStruttura .arB[a] = a .arI.Add(a + a) For m = 0 To 3 .mt$[a, m] = Chr(variabileStruttura.arI[a] + 70) Next End With Next End Public Sub Button1_Click() Dim a, m As Byte For a = 0 To 9 With variabileStruttura 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, ossia quella che conterrà la Struttura interna: 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 variabile 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
Variabili array di tipo "Struttura"
E' infine possibile realizzare variabili array di tipo "Struttura".
Vettori con numero di elementi definito
Possiamo dichiarare e creare variabili array di tipo Struttura con numero di elementi definito.
1° esempio
Public Struct strutturaModello prB As Byte prI As Integer End Struct ' Dichiariamo la variabile della Struttura come array con numero di elementi definito. ' In questo tipo di esempio sarà necessario inserire dopo "As" la parola "Struct": Private strutturaVariabile[10] As Struct StrutturaModello Public Sub Form_Open() Dim a As Byte ' Assegnamo i valori agli elementi della variabile array di tipo Struttura: For a = 0 To 9 With strutturaVariabile[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 strutturaVariabile[a] Print .prB Print .prI End With Next End
2° esempio
Public Struct strutturaModello prB As Byte prI As Integer End Struct ' Dichiariamo la variabile della Struttura come array con numero di elementi definito. ' In questo caso sarà necessario inserire dopo "As" la parola "New": Private strutturaVariabile As New StrutturaModello[10] Public Sub Form_Open() Dim a As Byte ' Assegnamo i valori agli elementi della variabile array di tipo Struttura: For a = 0 To 9 strutturaVariabile[a] = New StrutturaModello With strutturaVariabile[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 strutturaVariabile[a] Print .prB Print .prI End With Next End
Vettori con numero di elementi indefinito
E' possibile creare una variabile array di tipo Struttura avente numero di elementi non predefinito. Si potranno quindi aggiungere gli elementi alla variabile vettore ogni qual volta le si attribuisce una semplice variabile di tipo Struttura.
Esempio:
Public Struct strutturaModello prB As Byte prI As Integer End Struct ' Dichiariamo la variabile della Struttura come array con numero di elementi indefinito. ' In questo caso sarà necessario inserire dopo "As" la parola "New": Private prima As New StrutturaModello[] Public Sub Form_Open() Dim a As Byte ' Dichiariamo un'altra variabile del tipo della Struttura modello: Dim seconda As StrutturaModello ' Assegnamo i valori agli elementi della variabile normale di tipo Struttura: For a = 0 To 9 ' Va prevista ovviamente la creazione di ogni variabile di tipo Struttura: seconda = New StrutturaModello With seconda .prB = a .prI = 1000 + a End With ' La variabile Struttura array vuole una variabile Struttura (non array) 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
Definizione esplicita successiva della quantità degli elementi
In una variabile vettoriale di tipo Struttura priva di definizione del numero dei propri elementi non è consentito definire detto numero successivamente.
Variazione successiva del numero degli elementi
E' possibile variare successivamente, anche in modo ricorsivo, il numero degli elementi di una variabile vettoriale (array) di tipo Struttura, purché il numero dei suoi elementi, preliminarmente dichiarati, sia maggiore di zero.
Nell'esempio che segue dichiariamo una variabile array di tipo Struttura con numero di elementi uguale ad uno, successivamente varieremo più volte detto numero portandolo complessivamente a sei:
Public Struct esempio b As Byte i As Integer End Struct ' Viene dichiarata una variabile vettoriale (array) del tipo della "Struttura" ' denominata "esempio", e contestualmente viene impostato ad 1 il numero iniziale degli elementi ' che si provvederà a variare successivamente: Private eV As New Esempio[1] Public Sub Form_Open() Dim j, k As Byte ' Il ciclo imposta volta per volta il valore dell'incremento il numero di elementi ' della variabile vettoriale di tipo "Struttura": For k = 2 To 6 ' Viene variato il numero degli elementi della variabile vettoriale ' del tipo della Struttura denominata "esempio": eV = New Esempio[k] For j = 0 To eV.Max ' Viene creata, quindi, la nuova variabile: eV[j] = New Esempio ' Vengono assegnati i valori ai campi della variabile: With eV[j] .b = j .i = j + 1 End With Next Next ' Si verifica il numero complessivo finale ' degli elementi della variabile vettoriale: Print "eV.Count = "; eV.Count End Public Sub Button1_Click() Dim j As Byte ' Si verifica quindi il valori contenuti dai campi ' di ciascuna variabile creata: For j = 0 To eV.Max With eV[j] Print "b = "; .b Print "i = "; .i End With Next End