11-27-2023, 07:54 PM
To once again take chances handing over arguments to procedures (and functions).
A "Shared" is not necessary to access the address of a variable, as "Call by reference" is the standard access for procedures and functions in QuickBasic (QB64). "Shared" is only necessary if one want to make a variable accessible throughout the entire program.
For "AlsWert einzahlung, (zinswert), jahre" (Line 31) only the interest value is passed as a value, since this value should be changed as a copy.
A "Shared" is not necessary to access the address of a variable, as "Call by reference" is the standard access for procedures and functions in QuickBasic (QB64). "Shared" is only necessary if one want to make a variable accessible throughout the entire program.
For "AlsWert einzahlung, (zinswert), jahre" (Line 31) only the interest value is passed as a value, since this value should be changed as a copy.
Code: (Select All)
'Uebung zu Call by reference/value - 27. Nov. 2023
Option _Explicit
Declare Sub AlsWert(einzahlung As Double, zinwertn As Double, jahre As Integer)
Declare Sub AlsReferenz(einzahlung As Double, zinwertn As Double, jahre As Integer)
'einzahlung = Deposit -- zinswert = Interest value
Dim As Double einzahlung, zinswert, endkapital, q
Dim As Integer jahre
Locate 2, 2
Input "Jaehrliche Einzahlung : ", einzahlung
Locate 3, 2
Input "Hoehe der Verzinsubg : ", zinswert
Locate 4, 2
Input "Einzahlungsdauer in Jahren: ", jahre
'Zinsfaktor berechnen - (Calculate interest factor)
q = (1 + (zinswert / 100))
'Berechnung des Endkapitals nach X Jahren - (Final capital after X years)
endkapital = (einzahlung * q * (((q ^ jahre) - 1) / (q - 1)))
Locate 6, 2
Print Using "Das Endkapital betraegt bei ##.##% Zinsen nach ## Jahren: ##,####.##"; zinswert, jahre, endkapital
Locate 8, 2
Print "Als Wertuebergabe (Call by value)"
Locate 9, 2
AlsWert einzahlung, (zinswert), jahre
Locate 11, 2
'The interest value was not changed (copy)
Print Using "Der Zinswert wurde nicht veraendert (Kopie): ##.##%"; zinswert
Locate 13, 2
Print "Als Referenz (Call by reference)"
Locate 14, 2
AlsReferenz einzahlung, zinswert, jahre
Locate 16, 2
'The interest value was changed because the program has access to the address of the variable.
Print "Der Zinswert wurde veraendert, da das Programm "
Locate 17, 2
Print Using "Zugriff auf die Adresse hat: ##.##%"; zinswert
End 'Hauptprogramm
Sub AlsWert (einzahlung As Double, zinswert As Double, jahre As Integer)
Dim As Double endkapital, q
zinswert = 5.7
'Zinsfaktor berechnen
q = (1 + (zinswert / 100))
'Berechnung des Endkapitals nach X Jahren
endkapital = (einzahlung * q * (((q ^ jahre) - 1) / (q - 1)))
Print Using "Das Endkapital betraegt bei ##.##% Zinsen nach ## Jahren: ##,####.##"; zinswert, jahre, endkapital
End Sub
Sub AlsReferenz (einzahlung As Double, zinswert As Double, jahre As Integer)
Dim As Double endkapital, q
zinswert = 6.75
'Zinsfaktor berechnen
q = (1 + (zinswert / 100))
'Berechnung des Endkapitals nach X Jahren
endkapital = (einzahlung * q * (((q ^ jahre) - 1) / (q - 1)))
Print Using "Das Endkapital betraegt bei ##.##% Zinsen nach ## Jahren: ##,####.##"; zinswert, jahre, endkapital
End Sub