TI-Basic: Programme und Tutorials: Querprodukt

Aus testwiki
Zur Navigation springen Zur Suche springen

Vorlage:Navigation hoch buch

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

Querprodukt

Vorlage:W

Linksassoziativ

k Ziffern der natürlichen Zahl n werden von links nach rechts ziffernweise multipliziert, sodass man das Querprodukt qp(n,k) von n erhält.

qp(n,k)=i=0k1nmod10kinmod10ki110ki1qp(n,k)=i=1knmod10ki+1nmod10ki10ki

Funktion

:qp(n)
:Func
:  Return Π((mod(n,10^(num(n,1)-i))-mod(n,10^(num(n,1)-i-1)))/10^(num(n,1)-i-1),i,0,num(n,1)-1)
:EndFunc

Programm

:qp(n)
:Prgm
:EndPrgm

Rechtsassoziativ

k Ziffern der natürlichen Zahl n werden von rechts nach links ziffernweise multipliziert, sodass man das Querprodukt qp(n,k) von n erhält.

qp(n,k)=i=0k1nmod10i+1nmod10i10i

Funktion

:digitpro(n)
:Func
:If n<0 or mod(n,1)≠0 Then
:  return undef
:Return Π((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,numdigit(n,1)-1)
:EndFunc
:numdigit(n,i)
:Func
:While 10^i≤n
:  i+1→i
:EndWhile
:Return i
:EndFunc

Programm

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

Iteratives Querprodukt

Vorlage:W

Rekursion

itqp(n,k)={qp(n,k),wenn 0qp(n,k)<10itqp(qp(n,k),num(qp(n,k),1)),wenn 10qp(n,k)<
num(n,i)={num(n,i+1),wenn nmod10i<ni,wenn nmod10i=n

Funktion

:muldigrt(n,k)
:Func
:If n<10 Then
:  Return n
:ElseIf Π((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,k-1)<10 Then
:  Return Π((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,k-1)
:ElseIf Π((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,k-1)≥10 Then
:  If (mod(Π((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,k-1),10^k)-mod(Π((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,k-1),10^(k-1)))/10^(k-1)≠0 Then
:    Return muldigrt(Π((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,k-1),k)
:  Else
:    Return muldigrt(Π((mod(n,10^(i+1))-mod(n,10^i))/10^i,i,0,k-1),k-1)
:  EndIf
:EndIf
:EndFunc

Programm

:muldigrt(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
:  1→i
:  While 10^i≤n
:    i+1→i
:  EndWhile
:  string(n)→n
:  1→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 "multiplicative digital root: "&n,"multiplicative persistence: "&k
:EndPrgm