190 likes | 272 Views
Lezione 12. Esercizi. INFORMAZIONI. Esami Orale non previsto (eventuali domande a facoltà del professore) Uso libero di excel Il compito è tutto nel file xls 2 ore di tempo. Indicare il contenuto delle celle B1 ed B2 dopo l’esecuzione del seguente codice VBA: Option Explicit Sub ex()
E N D
Lezione 12 Esercizi Elementi di Programmazione
INFORMAZIONI • Esami • Orale non previsto (eventuali domande a facoltà del professore) • Uso libero di excel • Il compito è tutto nel file xls • 2 ore di tempo Elementi di Programmazione
Indicare il contenuto delle celle B1 ed B2 dopo l’esecuzione del seguente codice VBA: Option Explicit Sub ex() Dim x As Double, y As Double x = 4 y = 8 y = y ^ 2 + x / 3 x = y + 10 Range("B1").Value = Application.WorksheetFunction.Floor(x, 1) Range("B2").Value = y End Sub Domanda 8 (ex lex.11) Elementi di Programmazione
Indicare il contenuto delle celle B1 ed B2 dopo l’esecuzione del seguente codice VBA: Option Explicit Sub ex() Dim x As Double, y As Double x = 4 y = 8 y = y ^ 2 + x / 3 x = y + 10 Range("B1").Value = _ Application.WorksheetFunction.Floor(x, 1) Range("B2").Value = y End Sub x y 4 8 4 65.333 75.3333 65.333 Domanda 8 (ex lex.11) Elementi di Programmazione
Indicare il contenuto delle celle B1 ed B2 dopo l’esecuzione del seguente codice VBA: Option Explicit Sub ex() Dim x As Double, y As Double x = 4 y = 8 y = y ^ 2 + x / 3 x = y + 10 Range("B1").Value = _ Application.WorksheetFunction.Floor(x, 1) Range("B2").Value = y End Sub x y 4 8 4 65.333 75.3333 65.333 B1 = 75 B2 = 65.333 Domanda 8 (ex lex.11) Elementi di Programmazione
Esercizio 1 • Scrivere la sub VBA che legge dei numeri decimali dal file di testo dati.txt dove sono scritti uno per riga e quindi riempie consecutivamente la colonna A del foglio di lavoro con i valori positivi, la colonna B con quelli negativi. Elementi di Programmazione
Esercizio 1 Option Explicit Sub carica() Dim v As Variant Dim pos As Integer, neg As Integer Open ThisWorkbook.Path & "\dati.txt" For Input As 1 pos = 1 neg = 1 While Not EOF(1) Input #1, v If (IsNumeric(v)) Then If (v > 0) Then Cells(pos, 1) = v pos = pos + 1 Else Cells(neg, 2) = v neg = neg + 1 End If End If Wend Close #1 End Sub Elementi di Programmazione
Esercizio 2 • Scrivere una UserForm che viene richiamata nel foglio elettronico con un bottone che permette di acquisire due valori X ed Y e che scrive nella cella B3 del foglio "Esercizio2“ il maggiore dei due. Elementi di Programmazione
Esercizio 2 • Scrivere • una UserForm (“moduloAcquisizione”) • che viene richiamata nel foglio elettronico con un bottone (“parti”) • che permette di acquisire due valori • X (“primoVal”) • Y (“secondoVal”) • e che (cliccando un bottone “calcolo”) scrive nella cella B3 del foglio “Esercizio2” il maggiore dei due Elementi di Programmazione
Esercizio 2 Private Sub calcolo_Click() Dim x As Double, y As Double x = CDbl(moduloAcquisizione.primoVal.Value) y = CDbl(moduloAcquisizione.secondoVal.Value) If (x > y) Then Sheets("Esercizio2").Range("B3").Value = x Else Sheets("Esercizio2").Range("B3").Value = y End If moduloAcquisizione.Hide End Sub La UserForm1 si chiama “moduloAcquisizione” (ed il bottone del form per eseguire il calcolo si chiama “calcolo”) Elementi di Programmazione
Esercizio 2 Private Sub parti_Click() ModuloAcquisizione.Show End Sub nel Foglio dove vi è il bottone di nome parti Elementi di Programmazione
Esercizio 3 • Scrivere una sub VBA che legge i valori contenuti nelle celle da A1 a D5 e quindi • carica il vettore X con i primi 8 valori positivi contenuti nell’intervallo. Se vi sono meno di 8 valori ridimensiona il vettore al numero di elementi effettivamente presenti • Attraverso la funzione max restituisce l’elemento di valore massimo del vettore che viene scritto in F1 Elementi di Programmazione
0 1 4 5 2 3 Esercizio 3 – Note sugli array • X(5) con option base 0 o senza • X(5) con option base 1 1 4 5 2 3 Elementi di Programmazione
Esercizio 3 • Scrivere una sub VBA (“lettura”) che legge i valori contenuti nelle celle da A1 a D5 e quindi • carica il vettore X • con i primi 8 valori positivi contenuti nell’intervallo. • Se vi sono meno di 8 valori ridimensiona il vettore al numero di elementi effettivamente presenti • Attraverso la funzione max restituisce l’elemento di valore massimo del vettore che viene scritto in F1 • Funzione “max” : • Riceve un vettore vt • Restituisce il valore massimo contenuto Elementi di Programmazione
Option Base 1 Option Explicit Function max(vt() As _ Double) As Double Dim i As Integer max = vt(LBound(vt)) For i = LBound(vt) + 1 _ To UBound(vt) If max < vt(i) Then max = vt(i) End If Next End Function La soluzione del problema non può far caricare prima il vettore per poi ridimensionarlo perché Senza l’opzione Preserve di ReDim si perde il contenuto del vettore Con l’opzione non è possibile ridimensionarlo ad una lunhezza inferiore Esercizio 3 Elementi di Programmazione
Sub lettura() Dim y() As Double, X() As Double Dim i As Integer, j As Integer, v i = 1 ReDim y(8) For Each v In Range("A1:D3") If IsNumeric(v) Then If (v > 0) Then y(i) = v i = i + 1 End If End If If i > 8 Then Exit For End If Next ReDim X(i - 1) For j = LBound(y) To i - 1 X(j) = y(j) Next Range("F1").Value = max(X) End Sub Esercizio 3 Elementi di Programmazione
Esercizio 4 • Aggiungere al foglio elettronico la funzione opera che dato un intervallo di valori anche disgiunto restituisce la somma dei valori interi contenuti nell’intervallo • Definire ed usare la funzione eIntero per verificare se un valore è un numero intero Elementi di Programmazione
Esercizio 4 • Aggiungere al foglio elettronico (modulo) • la funzione “opera” • che dato un intervallo di valori anche disgiunto • restituisce la somma dei valori interi contenuti nell’intervallo • Definire ed usare la funzione “eIntero” () • per verificare se un valore è un numero intero Elementi di Programmazione
Option Explicit Function eIntero(el As _ Variant) As Boolean eIntero = False If (IsNumeric(el)) Then If (CInt(el) = el) Then eIntero = True End If End If End Function Function Opera( _ ParamArray interv() As _ Variant) As Integer Dim i As Integer, v For i = LBound(interv) To _ UBound(interv) For Each v In interv(i) If eIntero(v) Then Opera = Opera + v End If Next Next End Function Esercizio 4 Elementi di Programmazione