Lez. 11 (11/12) - PB Elementi di Programmazione 1 Lezione 11 Esercizi
Lez. 11 (11/12) - PB Elementi di Programmazione 1
Lezione 11
Esercizi
Lez. 11 (11/12) - PB Elementi di Programmazione 2
Domanda 1Option ExplicitOption 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 + 1End Function 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 / yEnd Sub
Mostrare la valorizzazione delle variabili durante l’esecuzione del presente programma
Lez. 11 (11/12) - PB Elementi di Programmazione 3
Domanda 1Option ExplicitOption Base 1Function prova(ByVal a As Integer, ByRef b As
Integer) As Integer Dim c As Integer c = a + b b = a Mod b prova = b + 1End Function 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 / yEnd Sub
x y z 5 10 0 a b c prova 5 10 0 10 ^x 0 0 5 10 0 10 ^x 15 0 0 10 0 10 ^x 15 0 0 10 0 10 ^x 15 1 0 10 1 1<- 0 10 1 8 ^y 0 0 0 10 1 8 ^y 18 0 0 8 1 8 ^y 18 0 0 8 1 8 ^y 18 9 0 9 1 0 9 0
NB: 8 : 10 = 0 0 8
Lez. 11 (11/12) - PB Elementi di Programmazione 4
Domanda 2Trasformare 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 = 2Loop While (A < B)
Lez. 11 (11/12) - PB Elementi di Programmazione 5
Domanda 2Trasformare 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 = 2Loop While (A < B)
A = A + 3If A > 5 Then B = B -1 C = C + 1 Do While (C>0) B = B -1 C = C + 1 Loop End IfC = 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 = 2Loop
Lez. 11 (11/12) - PB Elementi di Programmazione 6
Domanda 2
Do x=x+1Loop While x >0
x=x+1Do While x>0 x=x+1Loop
APPLICAZIONE REGOLA GENERALE
Lez. 11 (11/12) - PB Elementi di Programmazione 7
Domanda 2
Do x=x+1 Do y = y +1 Loop While y<0Loop x >0
x=x+1 Do y = y +1 Loop While y<0Do While x>0 x=x+1 Do y = y +1 Loop While y<0Loop
Partenza
Passo 1:E’ indifferente partire
Dal ciclo interno o esterno
Lez. 11 (11/12) - PB Elementi di Programmazione 8
Domanda 2
x=x+1 Do y = y +1 Loop While y<0Do While x>0 x=x+1 Do y = y +1 Loop While y<0Loop
x=x+1y = y +1Do While y<0 y = y +1LoopDo While x>0 x=x+1 y = y + 1 Do While y<0 y = y +1 Loop Loop
Passo 1 Passo 2
Lez. 11 (11/12) - PB Elementi di Programmazione 9
Domanda 2Do x = x +1Loop While x < 0X56
x=x+1Do while x <0 x= x + 1LoopX56
Do while x <0 x= x + 1Loop X 5
Vera equivalenza
Equivalenza errata
Lez. 11 (11/12) - PB Elementi di Programmazione 10
Domanda 3
Date le seguenti dichiarazioni:
Dim a As Boolean, b As BooleanDim c As Double, d As Integered i seguenti valori iniziali:
a = False b = True c = 2.5 d = 4Indicare il valore delle espressioni:
d = d / 3 + ca = b OR (c > d - c)c = d / 3 + 7
Lez. 11 (11/12) - PB Elementi di Programmazione 11
Domanda 3Date le seguenti dichiarazioni:
Dim a As Boolean, b As BooleanDim c As Double, d As Integered i seguenti valori iniziali:
a = False b = True c = 2.5 d = 4Indicare il valore delle espressioni:
d = d / 3 + ca = b OR (c > d - c)c = d / 3 + 7
• d = d / 3 + cd= 1.333 + 2.5d= 4 ‘arrotonda!!!
• a = b OR _ (c > d - c) True OR True Truec = d / 3 + 7
C=8.333
Lez. 11 (11/12) - PB Elementi di Programmazione 12
Domanda 4
• Il codice che segue genera un errore di esecuzione; indicare quale errore e quale istruzione lo provoca:
Option ExplicitOption Base 1
Sub ex() Dim vet(3 To 8) vet(7) = 6 vet(8) = 1 vet(1) = 3End Sub
Lez. 11 (11/12) - PB Elementi di Programmazione 13
Domanda 4• Il codice che segue genera un errore
di esecuzione; indicare quale e quale istruzione lo provoca:
Option ExplicitOption Base 1Sub ex() Dim vet(3 To 8) vet(7) = 6 vet(8) = 1 vet(1) = 3End Sub
• Vet(1) non esiste
Lez. 11 (11/12) - PB Elementi di Programmazione 14
Domanda 5• Mostrare il contenuto della cella A2 dopo
l’esecuzione del seguente codice:Option ExplicitSub 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 15
Domanda 5• Mostrare il contenuto della cella A2
dopo l’esecuzione del seguente codice:
Option ExplicitSub 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
proXX a proXXreproXXXre
Lez. 11 (11/12) - PB Elementi di Programmazione 16
Domanda 6
• Date le seguenti dichiarazioni:Dim a As Integer, d As DoubleDim c As Boolean, b As Boolean • ed i seguenti valori iniziali: a = 8 d = 2.5 c = True b = FalseIndicare il valore delle espressioni: d = d / 3 + ca = b AND (c > 0)c = d /3 + 7 ‘d valore iniziale
Lez. 11 (11/12) - PB Elementi di Programmazione 17
Domanda 6• Date le seguenti dichiarazioni:
Dim a As Integer, d As DoubleDim c As Boolean, b As Boolean • ed i seguenti valori iniziali:
a = 8 d = 2.5 c = True b = FalseIndicare il valore delle espressioni: d = d / 3 + ca = b AND (c > 0)c = d /3 + 7 ‘d valore iniziale
d = d / 3 + cd = 0.833 + (-1)d = -0.17
a=b AND (c > 0)a= false AND falsea=False
c=true
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.
Lez. 11 (11/12) - PB Elementi di Programmazione 20
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 21
Domanda 8• Indicare il contenuto delle celle B1 ed B2 dopo l’esecuzione del
seguente codice VBA:
Option ExplicitSub 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 = yEnd Sub
Lez. 11 (11/12) - PB Elementi di Programmazione 22
Domanda 8• Indicare il contenuto delle celle B1 ed B2
dopo l’esecuzione del seguente codice VBA:
Option ExplicitSub 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 = yEnd Sub
x y 4 8 4 65.333 75.3333 65.333
B1 = 75B2 = 65.333
Lez. 11 (11/12) - PB Elementi di Programmazione 23
Esercizio 1Scrivere 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 24
Esercizio 2Sia 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