' Funktionen, die in allen Lösungen gebraucht werden:

Function wandle_in_double_um(ByVal eingabe As StringAs Double
    If Not IsNumeric(eingabe) Then
        Err.Raise 5000, "wandle_in_double_um", "Bitte nur Zahlen eingeben!"
    End If
    wandle_in_double_um = CDbl(eingabe)
End Function


' Aufgabe 5.1

Sub Hauptprogramm_Wetterstation()
    On Error GoTo Fehlerbehandlung
    Dim Temperatur1 As Double
    Dim Temperatur2 As Double
    Dim Temperatur3 As Double

    Temperatur1 = wandle_in_double_um(InputBox("Bitte erste Temperatur eingeben"))
    Temperatur2 = wandle_in_double_um(InputBox("Bitte zweite Temperatur eingeben"))
    Temperatur3 = wandle_in_double_um(InputBox("Bitte dritte Temperatur eingeben"))

    pruefeTemperatur Temperatur1
    pruefeTemperatur Temperatur2
    pruefeTemperatur Temperatur3


    MsgBox ("Mittelwert: " & berechneMittelwert(Temperatur1, Temperatur2, Temperatur3))
    Exit Sub
Fehlerbehandlung:
    MsgBox ("Fehler: " & Err.Description)
End Sub

Sub pruefeTemperatur(ByVal Temperatur As Double)
    Const TempMin As Double = -30
    Const TempMax As Double = 40

    If (Temperatur < TempMin Or Temperatur > TempMax) Then
        Err.Raise 5002, "pruefeTemperatur", "Die Temperatur muss zwischen -30 und 40 liegen"
    End If
End Sub

Function berechneMittelwert(ByVal z1 As DoubleByVal z2 As DoubleByVal z3 As DoubleAs Double
    berechneMittelwert = (z1 + z2 + z3) / 3
End Function



' Aufgabe 5.2

Sub Hauptprogramm_Verbrauch()
    On Error GoTo Fehlerbehandlung
    Dim Benzinmenge As Double
    Dim Reichweite As Double
    Dim Verbrauch As Double

    Benzinmenge = wandle_in_double_um(InputBox("Bitte Benzinmenge eingeben"))
    Verbrauch = wandle_in_double_um(InputBox("Bitte Verbrauch eingeben"))

    pruefeBenzinmenge Benzinmenge
    pruefeVerbrauch Verbrauch

    Reichweite = berechneReichweite(Benzinmenge, Verbrauch)

    MsgBox ("Ihr Reichweite ist: " & Reichweite & " km.")
    Exit Sub
Fehlerbehandlung:
    MsgBox ("Fehler: " & Err.Description)
End Sub


Function berechneReichweite(ByVal Benzin As DoubleByVal Verbrauch) As Double
    berechneReichweite = Benzin * 100 / Verbrauch
End Function

Sub pruefeBenzinmenge(ByVal Benzinmenge As Double)
    Const maxBenzin As Double = 70

    If Benzinmenge < 0 Or Benzinmenge > maxBenzin Then
        Err.Raise 5003, "pruefeBenzinmenge", "Die Benzinmenge muss zwischen 0 und 70 liegen"
    End If
End Sub

Sub pruefeVerbrauch(ByVal Verbrauch As Double)
    Const VerbrauchMin As Double = 2
    Const VerbrauchMax As Double = 25
    Const VerbrauchPlausi As Double = 15


    If (Verbrauch < VerbrauchMin) Or (Verbrauch > VerbrauchMax) Then
        Err.Raise 5002, "pruefeVerbrauch", "Der Verbrauch muss zwischen 2 und 25 liegen"
    End If

    If Verbrauch > VerbrauchPlausi Then
        MsgBox ("Ihr Verbrauch ist sehr hoch!")
    End If
End Sub