Lezione 11 Esercizi Lez. 11 (11/12) - PB Elementi di Programmazione 1 Domanda 1 Option Explicit Option Base 1 Function prova(ByVal a As Integer, ByRef b As Integer) As Integer Dim c As Integer c=a+b b = a Mod b prova = b + 1 End Function Mostrare la valorizzazione delle variabili durante l’esecuzione del presente programma Sub ex() Dim x As Integer, y As Integer, z As Double y = 10 x=5 z = prova(y, x) y = prova(8, y) z=x/y End Sub Lez. 11 (11/12) - PB Elementi di Programmazione 2 Domanda 1 Option Explicit Option Base 1 Function prova(ByVal a As Integer, ByRef b As Integer) As Integer Dim c As Integer c=a+b b = a Mod b prova = b + 1 End Function Sub ex() Dim x As Integer, y As Integer, z As Double x 5 5 5 0 0 0 0 0 0 0 0 0 y 10 10 10 10 10 10 10 10 8 8 9 9 z 0 0 0 0 0 1 1 1 1 1 1 0 a 10 10 10 10 8 8 8 8 NB: 8 : 10 = 0 0 8 b c prova ^x 0 0 ^x 15 0 ^x 15 0 ^x 15 1 1<^y 0 0 ^y 18 0 ^y 18 0 ^y 18 9 y = 10 x=5 z = prova(y, x) y = prova(8, y) z=x/y End Sub Lez. 11 (11/12) - PB Elementi di Programmazione 3 Domanda 2 Trasformare usando l’istruzione do While ... Loop Do A = A + 3 If A > 5 Then Do B = B -1 C = C + 1 Loop While (C>0) End If C = 2 Loop While (A < B) Lez. 11 (11/12) - PB Elementi di Programmazione 4 Domanda 2 Trasformare usando l’istruzione do While ... Loop Do A = A + 3 If A > 5 Then Do B = B -1 C = C + 1 Loop While (C>0) End If C = 2 Loop While (A < B) Lez. 11 (11/12) - PB A = A + 3 If A > 5 Then B = B -1 C = C + 1 Do While (C>0) B = B -1 C = C + 1 Loop End If C = 2 Do While (A < B) A = A + 3 If A > 5 Then B = B -1 C = C + 1 Do While (C>0) B = B -1 C = C + 1 Loop End If C = 2 Loop Elementi di Programmazione 5 Domanda 2 Do x=x+1 Loop While x >0 x=x+1 Do While x>0 x=x+1 Loop APPLICAZIONE REGOLA GENERALE Lez. 11 (11/12) - PB Elementi di Programmazione 6 Domanda 2 Do x=x+1 Do y = y +1 Loop While y<0 Loop x >0 Partenza Lez. 11 (11/12) - PB x=x+1 Do y = y +1 Loop While y<0 Do While x>0 Passo 1: x=x+1 E’ indifferente partire Do Dal ciclo interno o esterno y = y +1 Loop While y<0 Loop Elementi di Programmazione 7 Domanda 2 x=x+1 Do y = y +1 Loop While y<0 Do While x>0 x=x+1 Do y = y +1 Loop While y<0 Loop Passo 1 Lez. 11 (11/12) - PB x=x+1 y = y +1 Do While y<0 y = y +1 Loop Do While x>0 x=x+1 y = y + 1 Do While y<0 y = y +1 Loop Passo 2 Loop Elementi di Programmazione 8 Domanda 2 Do x = x +1 Loop While x < 0 X 5 6 x=x+1 Do while x <0 x= x + 1 Loop X Vera equivalenza 5 6 Lez. 11 (11/12) - PB Do while x <0 x= x + 1 Loop X 5 Equivalenza errata Elementi di Programmazione 9 Domanda 3 Date le seguenti dichiarazioni: Dim a As Boolean, b As Boolean Dim c As Double, d As Integer ed i seguenti valori iniziali: a = False b = True c = 2.5 d = 4 Indicare il valore delle espressioni: d = d / 3 + c a = b OR (c > d - c) c = d / 3 + 7 Lez. 11 (11/12) - PB Elementi di Programmazione 10 Domanda 3 Date le seguenti dichiarazioni: Dim a As Boolean, b As Boolean Dim c As Double, d As Integer ed i seguenti valori iniziali: a = False b = True c = 2.5 d = 4 Indicare il valore delle espressioni: d = d / 3 + c a = b OR (c > d - c) c = d / 3 + 7 •d = d / 3 + c d= 1.333 + 2.5 d= 4 ‘arrotonda!!! • a = b OR _ (c > d - c) True OR True True c = d / 3 + 7 C=8.333 Lez. 11 (11/12) - PB Elementi di Programmazione 11 Domanda 4 • Il codice che segue genera un errore di esecuzione; indicare quale errore e quale istruzione lo provoca: Option Explicit Option Base 1 Sub ex() Dim vet(3 To 8) vet(7) = 6 vet(8) = 1 vet(1) = 3 End Sub Lez. 11 (11/12) - PB Elementi di Programmazione 12 Domanda 4 • Il codice che segue genera un errore di esecuzione; indicare quale e quale istruzione lo provoca: Option Explicit Option Base 1 Sub ex() Dim vet(3 To 8) • Vet(1) non esiste vet(7) = 6 vet(8) = 1 vet(1) = 3 End Sub Lez. 11 (11/12) - PB Elementi di Programmazione 13 Domanda 5 • Mostrare il contenuto della cella A2 dopo l’esecuzione del seguente codice: Option Explicit Sub ex() Dim S As String S = "prova a provare" S = Replace(S, "va", "XX") Range("A1").Value = S Range("A2").Value=_ Left(S, 4) Range("A3").Value=_ right(S, 4) End Sub Lez. 11 (11/12) - PB Elementi di Programmazione 14 Domanda 5 • Mostrare il contenuto della cella A2 dopo l’esecuzione del seguente codice: Option Explicit Sub ex() Dim S As String S = "prova a provare" S = Replace(S, "va", "XX") Range("A1").Value = S Range("A2").Value=_ Left(S, 4) Range("A3").Value=_ right(S, 4) End Sub Lez. 11 (11/12) - PB proXX a proXXre proX XXre Elementi di Programmazione 15 Domanda 6 • Date le seguenti dichiarazioni: Dim a As Integer, d As Double Dim c As Boolean, b As Boolean • ed i seguenti valori iniziali: a = 8 d = 2.5 c = True b = False Indicare il valore delle espressioni: d = d / 3 + c a = b AND (c > 0) c = d /3 + 7 ‘d valore iniziale Lez. 11 (11/12) - PB Elementi di Programmazione 16 Domanda 6 • Date le seguenti dichiarazioni: Dim a As Integer, d As Double Dim c As Boolean, b As Boolean • ed i seguenti valori iniziali: a = 8 d = 2.5 c = True b = False Indicare il valore delle espressioni: d = d / 3 + c a = b AND (c > 0) c = d /3 + 7 ‘d valore iniziale Lez. 11 (11/12) - PB d = d / 3 + c d = 0.833 + (-1) d = -0.17 a=b AND (c > 0) a= false AND false a=False c=true Elementi di Programmazione 17 Domanda 7 • Scrivere l’intestazione della funzione ft() che ha tre parametri X, Y, Z; di questi il primo è di tipo Double gli altri due sono facoltativi di tipo Integer il primo per valore, il secondo per riferimento. La funzione restituisce un tipo Double. Lez. 11 (11/12) - PB Elementi di Programmazione 18 Domanda 7 • Scrivere l’intestazione della funzione – – – – ft() che ha tre parametri X, Y, Z; di questi il primo è di tipo Double gli altri due sono facoltativi di tipo Integer • il primo per valore, • il secondo per riferimento. – La funzione restituisce un tipo Double. Lez. 11 (11/12) - PB Elementi di Programmazione 19 Domanda 7 • Scrivere l’intestazione della funzione ft() che ha tre parametri X, Y, Z; di questi il primo è di tipo Double gli altri due sono facoltativi di tipo Integer il primo per valore, il secondo per riferimento. La funzione restituisce un tipo Double. function ft( X as Double, _ Optional ByVal _ Y As Integer,_ Optional Z As Integer ) As Double Lez. 11 (11/12) - PB Elementi di Programmazione 20 Domanda 8 • 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 Lez. 11 (11/12) - PB Elementi di Programmazione 21 Domanda 8 • 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 Lez. 11 (11/12) - PB x 4 4 75.3333 y 8 65.333 65.333 B1 = 75 B2 = 65.333 Elementi di Programmazione 22 Esercizio 1 Scrivere una procedura in VBA che: - legge attraverso una InputBox un valore e lo inserisce in una variabile di nome K, verificando che sia negativo intero ed eventualmente continuando a richiederlo nuovamente se ciò non fosse - trasforma K nel suo valore assoluto - legge una alla volta tutte le celle della colonna "A" del foglio che sono valorizzate con un numero intero fino a quando non incontra un valore minore o uguale a zero - per ogni valore V letto nella cella della colonna "A" scrive nel file "risultati.txt“ una riga riportandovi il valore dato dalla somma dei seguenti due termini: 1) V ^ K (cioè V elevato K) 2) V - (K!) - alla fine del file riporta in un'ulteriore riga il valore dato dalla somma di tutti i valori V letti Lez. 11 (11/12) - PB Elementi di Programmazione 23 Esercizio 2 Sia dato il file di testo di nome dati.txt contenente per ogni riga un numero intero. a) scrivere una funzione in VBA di nome "multipli" che riceve due parametri interi N e M e che calcola tutti i multipli di N da (N*1) ad (N*M) e li restituisce come array di numeri interi b) scrivere una procedura in VBA di nome Esercizio2(), che richiede all'utente di fornire un numero intero positivo minore di 20 (richiedendolo nuovamente se non è stato fornito correttamente), legge dal file "dati.txt" un valore per riga alla volta e riporta sul foglio di calcolo, riga per riga, nella colonne A il valore letto del file e nelle colonne successive tutti i valori restituiti dalla funzione "multipli" sopra definita applicata con N pari al numero letto dal file ed M pari a quello fornito dall'utente Lez. 11 (11/12) - PB Elementi di Programmazione 24