Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Quersumme einer positiven oder negativen Zahl

Uploader:RedakteurVolta
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