Lezione 6 Parametri Facoltativi Matrici di parametri Lez
- Slides: 30
Lezione 6 Parametri Facoltativi Matrici di parametri Lez. 6 (10/11) - PB Elementi di Programmazione 1
Parametri facoltativi • In VB è possibile passare ad una routine una serie di parametri facoltativi (optional parameter) – Si fa precedere dalla parola chiave Optional • By. Ref o By. Val se presenti • altrimenti Optional precede il nome del parametro I parametri Optional devono essere gli ultimi – Si dichiara il parametro di tipo Variant • Strettamente parlando il parametro potrebbe essere di qualsiasi tipo ma se è di tipo Variant è possibile usare la funzione Is. Missing(nome. Parametro) che restituisce True se il parametro è stato passato alla funzione Lez. 6 (10/11) - PB Elementi di Programmazione 2
Parametri facoltativi – Quando si richiama la routine i parametri facoltativi possono essere omessi • Usando la notazione posizionale si mette la virgola (, ) per i parametri che non si vogliono fornire quando si debbono dare dei valori ai parametri successivi a quello da saltare • usando la notazione : = per indicare solo i parametri necessari Lez. 6 (10/11) - PB Elementi di Programmazione 3
Parametri facoltativi • E’ buona norma dare un valore prefissato per i parametri facoltativi : • usando la funzione Is. Missing() per stabilire se il parametro è presente e quindi dando il valore in caso non lo sia • usando la notazione: Optional nome. Parametro = valore. Default oppure Optional nome. Parametro As Tipo = valore. Default Lez. 6 (10/11) - PB Elementi di Programmazione 4
Esempio Option Explicit Function facoltativi(x As Integer, _ Optional By. Val y = 2, _ Optional k As Variant) If Is. Missing(k) Then k = 3 facoltativi = x + y + k End Function Sub richiama() Msg. Box (facoltativi(8)) Msg. Box (facoltativi(8, 7)) Msg. Box (facoltativi(8, , 100)) End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 5
Errata Corrige dell’Esempio Durante la lezione dell’ 8/11, nell’esempio appena sopra riportato era stato per errore indicato: Optional k As Integer) Invece di: Optional k As Variant) Lez. 6 (10/11) - PB Elementi di Programmazione 6
Vettori e matrici • Sono gruppi di variabili dello stesso tipo nelle quali si fa riferimento agli elementi mediante un indice: – possono avere una (vettori) o più dimensioni (matrici) • Si userà matrice per indicare entrambi i casi – la dimensione può essere fissa o dinamica – gli indici partono da 0: • Si può fare in modo che gli indici partano sempre da 1, come le celle di Excel, scrivendo all’inizio del modulo fuori da tutte le routine: Option Base 1 • si può modificare il punto di partenza e di arrivo Lez. 6 (10/11) - PB Elementi di Programmazione 7
Una matrice monodimensionale • Dim v(n) v 0 1 2 n v(2) Lez. 6 (10/11) - PB Elementi di Programmazione 8
Esempio Option Explicit Sub prv() Dim v(3) As Integer, i As Integer Dim a 1 As Integer, a 2 As Integer Dim a 3 As Integer For i = 0 To 3 v(i) = Input. Box("dammi intero " & i & ": ") Range("B" & (i + 1)). Value = v(i) * 2 Range("C" & (i + 1)). Value = v(i) Next End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 9
Matrici • Il singolo elemento di una matrice è una variabile del tipo con cui è formata la matrice – Nelle matrici di tipo Variant possono essere presenti sia elementi di tipo numerico che di tipo stringa • Le matrici son passate solo per riferimento (By. Ref) ad una routine • Le matrici NON POSSONO essere – Assegnate in blocco – Confrontate in blocco Lez. 6 (10/11) - PB Elementi di Programmazione 10
Matrici Le matrici NON POSSONO essere – Assegnate in blocco – Confrontate in blocco Lez. 6 (10/11) - PB Elementi di Programmazione 11
Matrici statiche • La dichiarazione avviene specificando il numero di elementi di ogni dimensione: Dim nome. Matrice(dim 1, . . . , dim. N) As Tipo – Se si cerca di accedere ad un elemento oltre le dimensioni viene generato un errore di esecuzione – Le variabili di tipo numerico sono inizializzate a 0, quelle di tipo Variant ad Empty • Ci si riferisce ad un elemento attraverso le sue coordinate: nome. Matrice(coord 1, . . . , coord. N) Lez. 6 (10/11) - PB Elementi di Programmazione 12
• Dim matri(3, 2) • 1 2 • 1 1 2 4 • 2 2 • 3 3 6 Lez. 6 (10/11) - PB Elementi di Programmazione 13
Option Explicit Sub prova. Vettore() Dim vet(3) As Double, matr(4, 3) As Double Dim i, j As Integer For i = 0 To 3 vet(i) = Rnd Next For i = 0 To 4 For j = 0 To matr(i, j) Next - 1 3 - 1 = Rnd Range("A 1"). Value = "vettore" For i = 0 To 3 - 1 Cells(1, i + 2). Value = vet(i) Next Range("A 3"). Value = "matrice" For i = 0 To 4 - 1 For j = 0 To 3 - 1 Cells(3 + j, i + 2). Value = matr(i, j) Next End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 14
Esempio Option Explicit Sub matrix() – carica un matrice 2 x 3 di Dim Mt(2, 3) As Double di nome Mt Dim som As Double – somma tutti gli elementi Dim i As Integer contenuti nella matrice Dim j As Integer • la prima coordinata indica le som = 0 righe, la seconda le colonne For i = 0 To 1 0 1 2 For j = 0 To 2 Mt 0 (0, 0) (0, 1) (0, 2) Mt(i, j) =_ 2 5 6. 5 Input. Box("valore (" &_ 1 (1, 0) (1, 1) (1, 2) i & ", " & j & "): ") -6. 5 8 3 som = som + Mt(i, j) Next Cells(1, 1) = som End Sub • Scrivere un sub in VBA che Lez. 6 (10/11) - PB Elementi di Programmazione 15
Matrici statiche • In VB è possibile indicare esplicitamente l’intervallo di variazione degli indici: Dim nm. Matr (da 1 To a 1, . . . , da. N To a. N) • E’ possibile conoscere quali sono i valori degli indici minimo e massimo di una matrice grazie a LBound(Nome. Matrice, dimensione) UBound(Nome. Matrice, dimensione) – Se non specificato dimensione vale 1 – E’ meglio usare i valori di queste funzioni per gestire le matrici Lez. 6 (10/11) - PB Elementi di Programmazione 16
Sub prova. Vettore() Dim vet(3) As Double, matr(4, 3) As Double, i As Integer, j As Integer For i = LBound(vet) To UBound(vet) vet(i) = Rnd Next For i = LBound(matr, 1) To UBound(matr, 1) For j = LBound(matr, 2) To UBound(matr, 2) matr(i, j) = Rnd Next Range("A 1"). Value = "vettore" For i = LBound(vet) To UBound(vet) Cells(1, i + 2). Value = vet(i) Next Range("A 3"). Value = "matrice" For i = LBound(matr, 1) To UBound(matr, 1) For j = LBound(matr, 2) To UBound(matr, 2) Cells(3 + j, i + 2). Value = matr(i, j) Next End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 17
Matrici statiche Sub prova. Indici() Dim Vet(5 To 9) As Double Dim i As Integer For i = LBound(Vet) To UBound(Vet) Vet(i) = i * 10 Next For i = LBound(Vet) To UBound(Vet) Cells(6, i + 2). Value = Vet(i) Next End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 18
Esempio • Scrivere una funzione che legge il contenuto delle celle da A 1 ad A 5 e lo memorizza in un vettore • lo raddoppia e lo scrive nelle celle da B 7 in poi Lez. 6 (10/11) - PB Elementi di Programmazione 19
Option Explicit Option Base 1 Sub matri() Dim celle(5) As Double, i As Integer For i = LBound(celle) To UBound(celle) celle(i) = Cells(i, 1). Value Next For i = LBound(celle) To UBound(celle) Cells(i + 6, 2). Value = celle(i) * 2 Next End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 20
Matrici dinamiche • Le matrici dinamiche possono cambiare la loro dimensione durante l’esecuzione Dim nm. Matr. Din() As Tipo – Prima dell’uso la matrice va dimensionata: Re. Dim nm. Matr. Dim(dim 1, . . . , dim. N) • Una matrice può essere ridimensionata più volte durante l’esecuzione – Ogni ridimensionamento fa perdere il contenuto precedente a meno di usare l’opzione Preserve. • Dimi può essere l’estremo superiore oppure un intervallo (valore. Iniziale To Valore. Finale) Lez. 6 (10/11) - PB Elementi di Programmazione 21
Matrici dinamiche Sub matr. Din() Dim n. D() As Double Modifica estremo superiore Dim i, j As Integer prima dimensione Re. Dim n. D(8) For i = LBound(n. D) To UBound(n. D) Modifica estremo n. D(i) = i Inferiore e superiore della Cells(1, i + 1). Value = n. D(i) seconda dimensione Next Re. Dim n. D(4, 8 To 13) For i = LBound(n. D, 1) To UBound(n. D, 1) For j = LBound(n. D, 2) To UBound(n. D, 2) n. D(i, j) = i * j + 100 Cells(3 + i, j + 1) = n. D(i, j) Next End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 22
Option Explicit Option Base 1 Sub allunga() Dim vt() As Double, i As Integer Dim v. Dim As Integer, j As Integer Re. Dim vt(4) For i = LBound(vt) To UBound(vt) vt(i) = Rnd: Cells(1, i) = vt(i) Next v. Dim = UBound(vt): Re. Dim vt(8, 2) For i = LBound(vt) To UBound(vt) For j = LBound(vt, 2) To UBound(vt, 2) vt(i, j) = Rnd Next: Next For i = LBound(vt) To UBound(vt) For j = LBound(vt, 2) To UBound(vt, 2) Cells(2 + i, j) = vt(i, j) Next: Next End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 23
Matrici Dinamiche • L’uso di Re. Dim con l’opzione Preserve impedisce la modifica: – Delle dimensioni della matrice eccetto l’ultima • In un vettore a due dimensioni posso modificare solo la seconda • In un vettore ad una dimensione posso modificare la dimensione – Del numero delle dimensioni – Del tipo della matrice • Il tipo della matrice è modificabile quando non si usa Preserve e solo se il tipo è Variant Lez. 6 (10/11) - PB Elementi di Programmazione 24
Matrici Dinamiche Option Base 1 Sub matr. Din. Pre() Dim n. D() As Double Dim i, j As Integer Re. Dim n. D(8) For i = LBound(n. D) To UBound(n. D) n. D(i) = i Cells(2, i + 1). Value = n. D(i) Next Re. Dim Preserve n. D(12) For i = LBound(n. D) To UBound(n. D) n. D(i) = i * 1000 Cells(3, i + 1) = n. D(i) Next End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 25
Matrici • Le matrici devono essere passate per riferimento ad una routine Sub carica(v() As Double) Dim i As Integer For i = LBound(v) To UBound(v) v(i) = Input. Box("dammi un valore") Next End Sub stampa. Foglio(v() As Double, cx As Integer, cy As Integer) Dim i As Integer For i = LBound(v) To UBound(v) Cells(cx, cy + i) = v(i) Next End Sub x() Dim vt(5) As Double, vq() As Double Call carica(vt): Call stampa. Foglio(vt, 1, 1) End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 26
Matrici di Parametri • In VB è possibile richiamare con un numero di parametri non fissato a priori usando le matrici di parametri – Il parametro è preceduto dalla parola chiave Param. Array ed è di tipo Variant – è sempre l’ultimo elemento di una lista di parametri Lez. 6 (10/11) - PB Elementi di Programmazione 27
Matrici di Parametri Option Explicit: Option Base 1 Function argo. Var(uno As Integer, _ Param. Array vari() As Variant) Dim i As Integer, s As String s = "" For i = LBound(vari) To UBound(vari) s = s & i & " " & vari(i) & vb. New. Line Next Msg. Box ("uno vale " & uno & vb. New. Line & s) argo. Var = UBound(vari) End Function Sub usa. Arg. Var() Dim uno As Integer, due As Integer uno = argo. Var(8, "wer", 890, 34. 78) due = argo. Var(800, 0. 78, "casa") Msg. Box ("-> " & uno & vb. New. Line & " --> " & due) End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 28
Riferirsi ad intervalli di celle • Per le routine può essere necessario riferirsi a blocchi di celle di un foglio di lavoro – Per avere una interazione corretta basta ricordare: • Un intervallo di celle è SEMPRE una matrice bidimensionale • Una singola cella non è una matrice – Il predicato Is. Array(variabile) restituisce True se la variabile è una matrice • Il parametro che indica l’intervallo va passato come Variant e va poi assegnato ad una variabile locale di tipo Variant Lez. 6 (10/11) - PB Elementi di Programmazione 29
Riferirsi ad intervalli di celle Function interv(inte As Variant) As Double Dim X As Variant Dim i As Integer, j As Integer X = interv = 0 If Is. Array(X) Then For i = LBound(X) To UBound(X) For j = LBound(X, 2) To UBound(X, 2) if Is. Numeric(X(i, j)) Then interv = interv + X(i, j) End. If Next End If End Function Sub total() Range("A 10"). Value = interv(Range("a 1: d 5")) End Sub Lez. 6 (10/11) - PB Elementi di Programmazione 30
- Ana mar¡a god¡nez gonz lez
- Luis gonz lez de alba
- Lez testi
- Luis gonz lez de alba
- Matthew bourne facts
- Matrici di proiezione
- Matrici informatica
- Dot plot
- Esercizi matrici java
- Testul raven
- Matrici termoindurenti
- Matrici attentive spinnler tognoni 1987
- Matrici ecologiche e dei sostegni
- Reticolazione
- Esempio di lezione simulata letteratura italiana
- Struttura della lezione
- Esempi jigsaw
- Esempio di lezione clil diritto
- La lezione della farfalla
- Italian articles chart
- L esperienza delle cose moderne e la lezione delle antique
- Lezione delle antique cose
- Lezione 7
- Parametri vitali
- Abc matematika
- Konakion intramuscolo
- Parametri vitali
- Iperventilazione sintomi
- Efektivna vrednost naizmenicne velicine
- Parametri vitali bambino
- Cvvhdf dialisi impostazioni