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
Scarica

Lezione 11 - 12/12/2011