fb:porticula NoPaste
Quersumme einer positiven oder negativen Zahl
Uploader: | Volta |
Datum/Zeit: | 21.01.2009 19:21:47 |
'Quersumme einer positiven oder negativen Zahl
'Die iterative Programmierung (engl. to iterate = wiederholen) verwendet
'im Gegensatz zur rekursiven Programmierung keine Selbstaufrufe,
'sondern Schleifen (Wiederholungen von Anweisungen oder Anweisungsfolgen).
'Dadurch werden die typischen Stapelüberläufe verhindert,
'und die Programme werden schneller abgearbeitet
Function Quersum_i (n As Integer) As Integer
Dim As Integer i, tmp = Abs(n) 'Abs(n) damit das Ergebnis positiv wird
While tmp ' Abbruch bei n = 0
i += tmp Mod 10 ' plus Einerstelle
tmp \= 10 ':10 = eine Dezimalstelle nach rechts
Wend
Function = i
End Function
'Bei der rekursiven Programmierung ruft sich eine Prozedur, Funktion
'in einem Computerprogramm selbst wieder auf. Auch der gegenseitige Aufruf
'stellt eine Rekursion dar. Wichtig bei der rekursiven Programmierung ist
'eine Abbruchbedingung in der Funktion, weil sich das rekursive Programm
'sonst (theoretisch) unendlich oft selbst aufrufen würde.
Function Quersum_r (n As Integer) As Integer
'Abbruch bei n = 0 ; Einerstelle + nächsten Aufruf mit n:10
If n Then Function = Abs(n Mod 10) + Quersum_r(n\10)
End Function
Dim As Integer j, i = 123456789
Dim t As Double
Print "Quersumme von " & i ;" ="; Quersum_i(i);" (Iterative Programmierung)"
Print "Quersumme von " & -i ;" ="; Quersum_i(-i);" (Iterative Programmierung)"
Print "Test (1000000 mal) in: ";
t = Timer
For j = 1 To 1000000
Quersum_i(i)
Quersum_i(-i)
Next
t = Timer-t
Print Left(Str(t),5);" Sekunden."
'Rekursive Programme haben in der Regel keine gute Performance. Durch die
'wiederholten Funktionsaufrufe wird immer wieder derselbe Prozedureintrittscode
'bearbeitet und jedes Mal Variablen auf dem Stapel (StacK) gesichert, was zu
'hohem Arbeitsspeicherverbrauch führt und zum Stapelüberlauf führen kann.
Print "Quersumme von " & i ;" ="; Quersum_r(i);" (Rekursive Programmierung)"
Print "Quersumme von " & -i ;" ="; Quersum_r(-i);" (Rekursive Programmierung)"
Print "Test (1000000 mal) in: ";
t = Timer
For j = 1 To 1000000
Quersum_r(i)
Quersum_r(-i)
Next
t = Timer-t
Print Left(Str(t),5);" Sekunden."
Sleep