TI-Basic: Programme und Tutorials: Quersumme und Querprodukt

Erstellt von: Peter Riedel
Schwierigkeitsgrad: fortgeschritten
Modell: Voyage 200

Quersumme Bearbeiten

  Quersumme

Bei folgenden Funktionen und Programmen ist es nicht nötig die Ziffernanzahl   der natürlichen Zahl   als zweites Argument zu übergeben, sondern wird intern mithilfe der Funktion   in Abhängigkeit von   automatisch berechnet.   wird im Quelltext also durch   ersetzt. Allerdings kann das häufige Aufrufen von Funktionen bei Zahlen mit vielen Stellen die Geschwindigkeit der Ausführung deutlich verringern. Daher sollte man bei rechenintensiven Anwendungen   mitübergeben, auch wenn das weniger komfortabel ist als nur ein Argument übergeben zu müssen.

Linksassoziativ Bearbeiten

  Ziffern der natürlichen Zahl   werden von links nach rechts ziffernweise addiert, sodass man die Quersumme   von   erhält.

 

Funktion Bearbeiten

:digitsum(n)
:Func
:If n<0 or mod(n,1)≠0
:  Return undef
:Return Σ((mod(n,10^(numdigit(n,1)-i))-mod(n,10^(numdigit(n,1)-1-i)))/10^(numdigit(n,1)-1-i),i,0,numdigit(n,1)-1)
:EndFunc

Programm Bearbeiten

:digitsum(n)
:Prgm
:ClrIO
:If n<0 or mod(n,1)≠0 Then
:  Disp "Error: n ∈ N = {0,1,2,...,∞}"
:  Return
:EndIf
:numdigit(n,1)→i
:string(n)→n
:0→q
:0→k
:While k<i
:  k+1→k
:  expr(mid(n,k,1))→j
:  q+j→q
:EndWhile
:string(q)→q
:Disp "digit sum: "&q
:EndPrgm

Rechtsassoziativ Bearbeiten

  Ziffern der natürlichen Zahl   werden von rechts nach links ziffernweise addiert, sodass man die Quersumme   von   erhält.

 

Funktion Bearbeiten

:digitsum(n)
:Func
:If n<0 or mod(n,1)≠0
:  Return undef
:Return Σ((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,numdigit(n,1)-1)
:EndFunc

Programm Bearbeiten

:digitsum(n)
:Prgm
:ClrIO
:If n<0 or mod(n,1)≠0 Then
:  Disp "Error: n ∈ N = {0,1,2,...,∞}"
:  Return
:EndIf
:numdigit(n,1)→i
:string(n)→n
:0→q
:While i>0
:  expr(mid(n,i,1))→j
:  q+j→q
:  i-1→i
:EndWhile
:string(q)→q
:Disp "digit sum: "&q
:EndPrgm

Iterative Quersumme Bearbeiten

  Iterative Quersumme

Rekursion Bearbeiten

 
 

Funktion Bearbeiten

:itqs(n)
:Func
:If qs(n)<10 Then
:  Return qs(n)
:Else
:  Return itqs(qs(n))
:EndIf
:EndFunc

Programm Bearbeiten

:itqs(n)
:Prgm
:ClrIO
:If n<0 or mod(n,1)≠0 Then
:  Disp "Error: n ∈ N = {0,1,2,...,∞}"
:  Return
:EndIf
:0→k
:While n>9
:  num(n,1)→i
:  string(n)→n
:  0→q
:  While i>0
:    expr(mid(n,i,1))→j
:    q+j→q
:    i-1→i
:  EndWhile
:  k+1→k
:  q→n
:EndWhile
:string(n)→n
:string(k)→k
:Disp "additive digital root: "&n,"additive persistence: "&k
:EndPrgm