Eserciziario di informatica/Sottoprogrammi

Indice del libro

Passaggio dei parametri per valore e per riferimento

modifica

I 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
  1. Trovare gli errori presenti.
  2. Cosa visualizza il msgbox inserendo la parola "Riferimento"?
  3. Cosa visualizza il msgbox inserendo la parola "Condensazione"?
  4. A cosa serve la funzione f? Come trasforma una stringa ricevuta come parametro formale?

Invocare sottoprogrammi all'interno di altri sottoprogrammi

modifica

L'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
  1. Quante definizioni di funzioni abbiamo nel codice sopra?
  2. Quante definizioni di routine?
  3. Quale evento generato dall’utente avvia l’esecuzione del codice?
  4. Quante invocazioni della funzione unVocalize() abbiamo nella routine UserForm_Click()?
  5. Perché l’assegnazione: unVocalize = unVocalize & coftnon contiene nessuna invocazione della funzione unVocalize()?
  6. Se inserisco la parola "effetto" quante invocazioni di funzioni vengono eseguite nel codice?
  7. Se inserisco la stringa "£"$"?
  8. Quale formula lega il numero delle invocazioni e la lunghezza della stringa inserita?
  9. È possibile invocare una funzione dal codice di un’altra funzione?