Lezione 12 Esercizi Lez 12 1011 PB Elementi
Lezione 12 Esercizi Lez. 12 (10/11) - PB Elementi di Programmazione 1
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 Lez. 12 (10/11) - PB Elementi di Programmazione 2
Domanda 8 (ex lex. 11) • Indicare il contenuto delle celle B 1 ed B 2 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("B 1"). Value = Application. Worksheet. Function. Floor(x, 1) Range("B 2"). Value = y End Sub Lez. 12 (10/11) - PB Elementi di Programmazione 3
Domanda 8 (ex lex. 11) • Indicare il contenuto delle celle B 1 ed B 2 dopo l’esecuzione del seguente codice VBA: Option Explicit Sub ex() Dim x As Double, y As Double x = 4 y = 8 x 4 4 75. 3333 y 8 65. 333 y = y ^ 2 + x / 3 x = y + 10 Range("B 1"). Value = _ Application. Worksheet. Function. Floor(x, 1) Range("B 2"). Value = y End Sub Lez. 12 (10/11) - PB Elementi di Programmazione 4
Domanda 8 (ex lex. 11) • Indicare il contenuto delle celle B 1 ed B 2 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("B 1"). Value = _ Application. Worksheet. Function. Floor(x, 1) Range("B 2"). Value = y End Sub Lez. 12 (10/11) - PB x 4 4 75. 3333 y 8 65. 333 B 1 = 75 B 2 = 65. 333 Elementi di Programmazione 5
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. Lez. 12 (10/11) - PB Elementi di Programmazione 6
Esercizio 1 Option Explicit Sub carica() Dim v As Variant Dim pos As Integer, neg As Integer Open This. Workbook. Path & "dati. txt" For Input As 1 pos = 1 neg = 1 While Not EOF(1) Input #1, v If (Is. Numeric(v)) Then If (v > 0) Then Cells(pos, 1) = v pos = pos + 1 Else Cells(neg, 2) = v neg = neg + 1 End If Wend Close #1 End Sub Lez. 12 (10/11) - PB Elementi di Programmazione 7
Esercizio 2 • Scrivere una User. Form che viene richiamata nel foglio elettronico con un bottone che permette di acquisire due valori X ed Y e che scrive nella cella B 3 del foglio "Esercizio 2“ il maggiore dei due. Lez. 12 (10/11) - PB Elementi di Programmazione 8
Esercizio 2 • Scrivere – una User. Form (“modulo. Acquisizione”) – che viene richiamata nel foglio elettronico con un bottone (“parti”) – che permette di acquisire due valori • X (“primo. Val”) • Y (“secondo. Val”) – e che (cliccando un bottone “calcolo”) scrive nella cella B 3 del foglio “Esercizio 2” il maggiore dei due Lez. 12 (10/11) - PB Elementi di Programmazione 9
Esercizio 2 Private Sub calcolo_Click() Dim x As Double, y As Double x = CDbl(modulo. Acquisizione. primo. Value) y = CDbl(modulo. Acquisizione. secondo. Value) If (x > y) Then Sheets("Esercizio 2"). Range("B 3"). Value = x Else Sheets("Esercizio 2"). Range("B 3"). Value = y End If modulo. Acquisizione. Hide End Sub La User. Form 1 si chiama “modulo. Acquisizione” (ed il bottone del form per eseguire il calcolo si chiama “calcolo”) Lez. 12 (10/11) - PB Elementi di Programmazione 10
Esercizio 2 Private Sub parti_Click() Modulo. Acquisizione. Show End Sub nel Foglio dove vi è il bottone di nome parti Lez. 12 (10/11) - PB Elementi di Programmazione 11
Esercizio 3 • Scrivere una sub VBA che legge i valori contenuti nelle celle da A 1 a D 5 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 F 1 Lez. 12 (10/11) - PB Elementi di Programmazione 12
Esercizio 3 – Note sugli array • X(5) con option base 0 o senza 0 1 2 4 3 5 • X(5) con option base 1 1 Lez. 12 (10/11) - PB 2 3 Elementi di Programmazione 4 5 13
Esercizio 3 • Scrivere una sub VBA (“lettura”) che legge i valori contenuti nelle celle da A 1 a D 5 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 F 1 • Funzione “max” : – Riceve un vettore vt – Restituisce il valore massimo contenuto Lez. 12 (10/11) - PB Elementi di Programmazione 14
Esercizio 3 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 Lez. 12 (10/11) - PB • La soluzione del problema non può far caricare prima il vettore per poi ridimensionarlo perché – Senza l’opzione Preserve di Re. Dim si perde il contenuto del vettore – Con l’opzione non è possibile ridimensionarlo ad una lunhezza inferiore Elementi di Programmazione 15
Esercizio 3 Sub lettura() Dim y() As Double, X() As Double Dim i As Integer, j As Integer, v i = 1 Re. Dim y(8) For Each v In Range("A 1: D 3") If Is. Numeric(v) Then If (v > 0) Then y(i) = v i = i + 1 End If If i > 8 Then Exit For End If Next Lez. 12 (10/11) - PB Re. Dim X(i - 1) For j = LBound(y) To i - 1 X(j) = y(j) Next Range("F 1"). Value = max(X) End Sub Elementi di Programmazione 16
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 e. Intero per verificare se un valore è un numero intero Lez. 12 (10/11) - PB Elementi di Programmazione 17
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 “e. Intero” () – per verificare se un valore è un numero intero Lez. 12 (10/11) - PB Elementi di Programmazione 18
Esercizio 4 Option Explicit Function e. Intero(el As _ Variant) As Boolean e. Intero = False If (Is. Numeric(el)) Then If (CInt(el) = el) Then e. Intero = True End If End Function Lez. 12 (10/11) - PB Function Opera( _ Param. Array interv() As _ Variant) As Integer Dim i As Integer, v For i = LBound(interv) To _ UBound(interv) For Each v In interv(i) If e. Intero(v) Then Opera = Opera + v End If Next End Function Elementi di Programmazione 19
- Slides: 19