TI-Basic: Programme und Tutorials: Quersumme

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.

 
:numdigit(n,i)
:Func
:While 10^i≤n
:©While mod(n,10^i)<n
:  i+1→i
:EndWhile
:Return i
:EndFunc
:numdigit(n,i)
:Func
:If 10^i≤n Then
:©If mod(n,10^i)<n Then
:  Return numdigit(n,i+1)
:Else
:  Return i
:EndIf
:EndFunc

Linksassoziativ

Bearbeiten

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

 
 

Funktion

Bearbeiten
:qs(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)-i-1)))/10^(numdigit(n,1)-i-1),i,0,numdigit(n,1)-1)
:©Return Σ((mod(n,10^(numdigit(n,1)-i+1))-mod(n,10^(numdigit(n,1)-i)))/10^(numdigit(n,1)-i),i,1,numdigit(n,1))
:EndFunc

Programm

Bearbeiten
:qs(n)
:Prgm
:ClrIO
:If n<0 or mod(n,1)≠0 Then
:  Disp "Fehler: 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 "Quersumme: "&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
:qs(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)
:©Return Σ((mod(n,10^i)-mod(n,10^(i-1)))/10^(i-1),i,1,numdigit(n,1))
:EndFunc

Programm

Bearbeiten
:qs(n)
:Prgm
:ClrIO
:If n<0 or mod(n,1)≠0 Then
:  Disp "Fehler: 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 "Quersumme: "&q
:EndPrgm

Iterative Quersumme

Bearbeiten

  Iterative Quersumme

 
:itqs(n,z)
:Func
:If mod(n,z)≠0 Then
:  Return mod(n,z)
:ElseIf mod(n,z)=0 and n≠0 Then
:  Return z
:Else
:  Return 0
:EndIf
:EndFunc

Rekursion

Bearbeiten
 
 

Funktion

Bearbeiten
:itqs(n)
:Func
:If qs(n)≥10 Then
:  Return itqs(qs(n))
:Else
:  Return 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

Alternierende Quersumme

Bearbeiten

  Alternierende Quersumme

Linksassoziativ

Bearbeiten

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

 
 

Funktion

Bearbeiten
:aqs(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)-i-1)))/10^(numdigit(n,1)-i-1)*(-1)^i,i,0,numdigit(n,1)-1)
:©Return Σ((mod(n,10^(numdigit(n,1)-i+1))-mod(n,10^(numdigit(n,1)-i)))/10^(numdigit(n,1)-i)*(-1)^(i-1),i,1,numdigit(n,1))
:EndFunc

Programm

Bearbeiten

Rechtsassoziativ

Bearbeiten

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

 
 

Funktion

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

Programm

Bearbeiten

Nichtalternierende t-Quersumme

Bearbeiten

  Nichtalternierende t-Quersumme

Zahlenblöcke mit   Ziffern der natürlichen Zahl   mit   Ziffern werden von rechts nach links blockweise addiert, sodass man die  -Quersumme   von   erhält.

 

Funktion

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

Alternierende t-Quersumme

Bearbeiten

  Nichtalternierende t-Quersumme

Zahlenblöcke mit   Ziffern der natürlichen Zahl   mit   Ziffern werden von rechts nach links blockweise abwechselnd addiert und subtrahiert, sodass man die  -Quersumme   von   erhält.

 

Funktion

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