Crash-Kurs 3
Heute beschäftigen wir uns u.a. mit folgenden Themen:
- Initialisierung des Zufallszahlengenerators: randomize - Funktion: rnd
- Schleife: do...while - Arrays
Arbeitsanleitung
Aufgabe 1. Erstellen Sie eine Prozedur (Aufgabe4), mit Hilfe derer der Anwender eine beliebige Anzahl von Zufallszahlen erzeugen kann. Die For...Next-Schleife ich hierfür ungeeignet. Warum?
Jede Zufallszahl soll in einer MsgBox ausgegeben werden. Wurde eine Zufallszahl mehrfach generiert, so soll diese nur ein einziges Mal ausgegeben werden. Dies bedeutet, daß jede erzeugte Zahl zwischengespeichert wird (und mehrfach erzeugte Zahlen ignoriert werden), bis die gewünschte Anzahl von Zahlen generiert wurde. Wie kann ich mir die erzeugten Zahlen
zwischenspeichern?
Public Sub Aufgabe4() Dim int_zufallszahl as Integer Dim int_maximal as Integer Dim int_anzahl as Integer Dim i as Integer
Dim j as Integer
Dim int_feld(1 To 10) As Integer
int_anzahl = CInt(InputBox("Wieviel Zufallszahlen wollen Sie ? (max. 10)", "Erzeugung von Zufallszahlen ohne Wiederholung")) int_maximal = CInt(InputBox("Maximalwert der Zufallszahlen", "Erzeugung von Zufallszahlen ohne Wiederholung"))
i = 0
If int_anzahl < 1 Or int_anzahl > 10 Then MsgBox ("Keine Zufallszahlen möglich") Else
Randomize ' Zufallszahlengenerator initialisieren.
Do While i < int_anzahl
i = i + 1 ' Zähler hochzählen.
int_zufallszahl = Int((int_maximal * Rnd) + 1) ' Zufallszahl im Bereich von 1 bis int_maximal generieren.
int_feld(i) = int_zufallszahl For j = 1 To (i - 1)
If int_feld(i) = int_feld(j) Then
i = i - 1 ' doppelte Zufallszahl gefunden; Zähler wieder zurückstellen End If
Next j Loop
For i = 1 To int_anzahl
MsgBox ("Die " & i & "-te erzeugte Zufallszahl lautet: " & int_feld(i)) Next i
End If End Sub
Aufgabe 2. Ändern Sie die Prozedur nun so ab (Name: Aufgabe5), daß eine Zufallszahl auch mehrfach auftreten kann.
/tmp/jodconverter_6717d9fd-f48d-4274-b469-d0d1e759f7a2/tempfile_2714.doc - 1 -
Aufgabe 3. Es sollen Rabattbeträge für Übernachtungen berechnet werden.
Eine Übernachtung kostet normalerweise 150,- DM/Person. Es wird zunächst nach der Anzahl der Übernachtungen gefragt. Ist die Anzahl der
Übernachtungen > 5, dann gibt es 20 Prozent Preisnachlaß. Handelt es sich bei dem Übernachtenden um ein Kind, wird nur die Hälfte berechnet.
/tmp/jodconverter_6717d9fd-f48d-4274-b469-d0d1e759f7a2/tempfile_2714.doc - 2 -
Sub rabatt()
Dim Personenart As String
Dim int_aufenthaltstage As Integer Dim dbl_preis As Double
int_aufenthaltstage = InputBox("Aufenthaltsdauer") Personenart = InputBox("Kind oder Erwachsener?") If Personenart = "Kind" Then
If int_aufenthaltstage < 5 Then dbl_preis = 150 * 0.5 Else
dbl_preis = 150 * 0.8 * 0.5 End If
MsgBox ("Preis: " & dbl_preis) Else
If Personenart = "Erwachsener" Then If int_aufenthaltstage < 5 Then dbl_preis = 150
Else
dbl_preis = 150 * (1 - 0.2) End If
End If
MsgBox ("Preis: " & dbl_preis) End If
End Sub
Sub rabattneu()
Dim Personenart As String
Dim int_aufenthaltstage As Integer Dim dbl_preis As Double
int_aufenthaltstage = InputBox("Aufenthaltsdauer") Personenart = InputBox("Kind oder Erwachsener?") If Personenart = "Kind" And int_aufenthaltstage < 5 Then art = 1
ElseIf Personenart = "Kind" And int_aufenthaltstage >= 5 Then art = 2
ElseIf Personenart = "Erwachsener" And int_aufenthaltstage < 5 Then art = 3
ElseIf Personenart = "Erwachsener" And int_aufenthaltstage <= 5 Then art = 4
Else art = 5 End If
Select Case art ' Klassifizierung auswerten.
Case 1
dbl_preis = 150 * 0.5 Case 2
dbl_preis = 150 * 0.8 * 0.5 Case 3
dbl_preis = 150 Case 4
dbl_preis = 150 * 0.8 Case Else
dbl_preis = 0 MsgBox ("Fehler") End Select
MsgBox ("Preis:" & dbl_preis)
End Sub
/tmp/jodconverter_6717d9fd-f48d-4274-b469-d0d1e759f7a2/tempfile_2714.doc - 3 -