Option Strict On
Option Explicit On
Public Class EffJahrZins
Public Shared Sub main(ByVal args() As String)
Dim oldNear As Double
Dim newNear As Double
Dim EffJahrZins As Double
Dim monate As Double
Dim sum As Double
Dim i As Integer
If args.Length <> 3 Then
WirfError()
Exit Sub
End If
Try
sum = CDbl(args(0))
Catch
WirfError("Kredit")
Exit Sub
End Try
Try
monate = CDbl(args(1))
Catch
WirfError("Monat")
Exit Sub
End Try
Try
EffJahrZins = CDbl(args(2))
Catch
WirfError("EffJahrZins")
Exit Sub
End Try
Console.WriteLine("Kredit: " & sum & " Monate: " & monate & " EffJahrZins: " & EffJahrZins)
newNear = (sum * ((1.0# + (EffJahrZins / 100.0#)) ^ (monate / 12.0#))) / monate
Dim lastToHigh As Double = newNear
Dim LastToLow As Double = 0.0#
Dim rest As Double
Dim zinssum As Double = sum
Do
Dim zins As Double = 0.0#
Dim saveNear As Double
rest = sum
zinssum = sum
For i = 0 To CInt(monate) - 1
zins = Math.Round(rest * ((EffJahrZins / 12.0#) / 100.0#), 5)
rest = Math.Round(rest - newNear + zins, 5)
zinssum = Math.Round(zinssum + zins, 5)
Next i
If rest > 0 Then
LastToLow = newNear
newNear = Math.Round((lastToHigh + newNear) / 2.0#, 5)
Else
lastToHigh = newNear
newNear = Math.Round((LastToLow + newNear) / 2.0#, 5)
End If
Loop While (Math.Round(newNear * monate, 2) <> Math.Round(zinssum, 2))
Console.WriteLine(Math.Round(newNear, 2))
Console.ReadLine()
End Sub
Private Shared Sub WirfError(Optional ByVal param As String = "")
If param = "" Then
Console.WriteLine("Ungültige Anzahl Parameter")
Else
Console.WriteLine("Ungültiger Paramter " & param)
End If
Console.WriteLine()
Console.WriteLine("Syntax: EffJahrZins [Kredit] [Monate] [EffektiverJahresZins]")
Console.WriteLine("Beispiel: EffJahrZins 18000,00 72 0,9")
End Sub
End Class