TI-Basic: Programme und Tutorials: Quersumme
Erstellt von: | Peter Riedel |
Schwierigkeitsgrad: | fortgeschritten |
Modell: | Voyage 200 |
Quersumme
BearbeitenBei 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
BearbeitenZiffern 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
BearbeitenZiffern 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: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
BearbeitenFunktion
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
BearbeitenLinksassoziativ
BearbeitenZiffern 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
BearbeitenRechtsassoziativ
BearbeitenZiffern 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
BearbeitenNichtalternierende t-Quersumme
BearbeitenNichtalternierende 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
BearbeitenNichtalternierende 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