1 / 19

Lezione 12

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()

olathe
Download Presentation

Lezione 12

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lezione 12 Esercizi Elementi di Programmazione

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. Esercizio 2 Private Sub parti_Click() ModuloAcquisizione.Show End Sub nel Foglio dove vi è il bottone di nome parti Elementi di Programmazione

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

More Related