| U bent hier: schouppe.net > computerlogica > modulair programmeren > oefeningen > oef501 |
501. Schrijf de functie converteer(getal, van, naar). De parameters 'van' en 'naar' kunnen zijn : centimeters, meters, inches. Dus, de functie converteer(100,"centimeter","meter") moet als waarde 1 teruggeven (een inch is gelijk aan 2.54 centimeter).
Analyse van de opgave: De opgave zegt niets over de mogelijke waarden van het te converteren getal. Aangezien het kan uitgedrukt worden in centimeters is het aangeraden om een variabele met een groot bereik te nemen. We gaan ervan uit dat het een geheel getal moet zijn, dus opteren we voor het Long datatype. De functie kan wel een decimaal getal als resultaat teruggeven.
De gebruiker kan kiezen tussen meter, centimeter en inch als eenheid. Wat moet er echter gebeuren als de gebruiker een typfout maakt. We veronderstellen dat de functie dan de waarde 0 teruggeeft. Een uitbreiding zou kunnen zijn dat de functie in het werkblad de foutboodschap #waarde! teruggeeft.
De omzetting naar dezelfde eenheid moet mogelijk zijn (alhoewel nutteloos). Dus, de functie converteer(100,"meter","meter") moet het resultaat 100 opleveren.
De opgave vermeldt alleen dat een functie moet geschreven worden. Om de functie uit te testen zullen we ook een testprocedure voorzien. Bovendien stellen we de bijkomende eis dat de functie ook moet kunnen opgeroepen worden vanuit het werkblad.
Oplossing: U kunt het programma in werking zien aan de hand van dit Excel werkboek. Het PSD en de code is hieronder gegeven. De tekening met Easycode is zeer uitgebreid. Merk op dat u in EasyCode met het menu File Properties een andere layout kunt kiezen voor de selectiestructuur.

Function convert(lengte As Single, bron As String, doel As String) As Single
Dim resultaat As Single
convert = 0
If bron = "meter" Then
If doel = "centimeter" Then
resultaat = lengte * 100
Else
If doel = "inch" Then
resultaat = lengte / 2.54
Else
If doel = "meter" Then
resultaat = lengte
Else
resultaat = 0
End If
End If
End If
Else
If bron = "centimeter" Then
If doel = "meter" Then
resultaat = lengte / 100
Else
If doel = "inch" Then
resultaat = lengte / 2.54
Else
If doel = "centimeter" Then
resultaat = lengte
Else
resultaat = 0
End If
End If
End If
Else
If bron = "inch" Then
If doel = "meter" Then
resultaat = lengte * 2.54 / 100
Else
If doel = "centimeter" Then
resultaat = lengte * 2.54
Else
If doel = "inch" Then
resultaat = lengte
Else
resultaat = 0
End If
End If
End If
Else
resultaat = 0
End If
End If
End If
convert = resultaat
End Function
Sub oef501()
Dim lengte As Single, bron As String, doel As String
lengte = InputBox("Geef te converteren lengte (getal)")
bron = InputBox("Geef parameter 1 (meter, centimeter, inch)")
doel = InputBox("Geef parameter 2 (meter, centimeter, inch)")
MsgBox convert(lengte, bron, doel)
End Sub
Analyse
van de oplossing: men kan de functie zowel oproepen vanuit de VBA testprocedure
als vanuit het werkblad. Indien men met 'functie invoegen' werkt, kan de gebruiker
zowel een celreferentie als een constante invoeren. Bijvoorbeeld, bij de parameter
lengte kan de gebruiker zowel de cel E20 intypen als het getal 100. Voor de
eenheden kan dit eveneens. Bij de constante zou men eigenlijk de string "meter"
(met aanhalingstekens) moeten ingeven. Indien men dat niet doet, corrigeert
Excel de input. Dit gebeurt echter niet als men zelf de functie volledig intypt
in het werkblad. Het volgende levert dus een fout: =convert(100;meter; inch).
De correcte syntax is: =convert(100; "meter";"inch").
| ©
H. Schouppe Laatste wijziging: 2004-05-12 |