Eserciziario di informatica/Sottoprogrammi
Passaggio dei parametri per valore e per riferimento
modificaI parametri formali devono sempre essere passati per valore a meno che non si vogliano cambiare i valori di variabili nel contesto chiamante. L'esempio che segue è scritto in MS Visual Basic, richiede l'aggiunta di un pulsante di comando con il nome predefinito e associa del codice al singolo clic su questo pulsante di comando.
Private Sub CommandButton1_Click()
Dim s As String
s = Cint(InputBox("Inserisci una parola"))
s = f(s)
MsgBox (s)
End Sub
Function f(ByRef z As String) As Integer
Dim p As String, u As String
p = Mid(z, 1, 1)
u = Mid(z, Len(z),1)
f = p & u
End Function
- Trovare gli errori presenti.
- Cosa visualizza il msgbox inserendo la parola "Riferimento"?
- Cosa visualizza il msgbox inserendo la parola "Condensazione"?
- A cosa serve la funzione f? Come trasforma una stringa ricevuta come parametro formale?
Invocare sottoprogrammi all'interno di altri sottoprogrammi
modificaL'esempio che segue è scritto in MS VBA e richiede solo l'introduzione di una c.d. UserForm.
Option Explicit
Private Sub UserForm_Click()
Dim s As String
s = InputBox("Parola da svocalizzare?")
MsgBox (unVocalize(s))
End Sub
Private Function isVocal(ByVal t As String) As Boolean
isVocal = False
isVocal = (t = "a") Or _
(t = "e") Or _
(t = "i") Or _
(t = "o") Or _
(t = "u") Or _
(t = "A") Or _
(t = "E") Or _
(t = "I") Or _
(t = "O") Or _
(t = "U") Or _
(t = "è") Or _
(t = "é") Or _
(t = "ò") Or _
(t = "à") Or _
(t = "ù") Or _
(t = "ì")
End Function
Private Function unVocalize(ByVal t As String) As String
Dim nv As Integer, i As Integer, coft As String
nv = 0
i = 1
Do
coft = Mid(t, i, 1)
If (isVocal(coft) = False) Then
'(a) nota come dall'interno di una fun_
' zione abbiamo l'invocazione di una funzione
' (b) nota come il contesto di invocazione è una pro_
' posizione logica
unVocalize = unVocalize & coft
End If
i = i + 1
nv = nv + 1
Loop While (nv < Len(t))
End Function
- Quante definizioni di funzioni abbiamo nel codice sopra?
- Quante definizioni di routine?
- Quale evento generato dall’utente avvia l’esecuzione del codice?
- Quante invocazioni della funzione unVocalize() abbiamo nella routine UserForm_Click()?
- Perché l’assegnazione: unVocalize = unVocalize & coftnon contiene nessuna invocazione della funzione unVocalize()?
- Se inserisco la parola "effetto" quante invocazioni di funzioni vengono eseguite nel codice?
- Se inserisco la stringa "£"$"?
- Quale formula lega il numero delle invocazioni e la lunghezza della stringa inserita?
- È possibile invocare una funzione dal codice di un’altra funzione?