TI-Basic: Programme und Tutorials: Quersumme und Querprodukt
Erstellt von: | Peter Riedel |
Schwierigkeitsgrad: | fortgeschritten |
Modell: | Voyage 200 |
Quersumme Bearbeiten
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
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