| Erstellt von:
|
Peter Riedel
|
| Schwierigkeitsgrad:
|
fortgeschritten
|
| Modell:
|
Voyage 200
|
Quersumme
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
Ziffern der natürlichen Zahl
werden von links nach rechts ziffernweise addiert, sodass man die Quersumme
von
erhält.


Funktion
: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
: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
Ziffern der natürlichen Zahl
werden von rechts nach links ziffernweise addiert, sodass man die Quersumme
von
erhält.


Funktion
: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
: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
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


Funktion
:itqs(n)
:Func
:If qs(n)≥10 Then
: Return itqs(qs(n))
:Else
: Return qs(n)
:EndIf
:EndFunc
Programm
: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
Alternierende Quersumme
Linksassoziativ
Ziffern der natürlichen Zahl
werden von links nach rechts ziffernweise abwechselnd addiert und subtrahiert, sodass man die alternierende Quersumme
von
erhält.


Funktion
: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
Rechtsassoziativ
Ziffern der natürlichen Zahl
werden von rechts nach links ziffernweise abwechselnd addiert und subtrahiert, sodass man die alternierende Quersumme
von
erhält.


Funktion
: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
Nichtalternierende t-Quersumme
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
: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
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
: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