Miniräknarprogrammering

AlefWiki
Version från den 4 oktober 2010 kl. 23.08 av WikiSysop (diskussion | bidrag) (7 versioner)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Den här artikeln är under konstruktion!
Har du något att bidra med så sätt igång!

Bakgrund

Miniräknarprogrammering är något av det mest klassiska mattenördar kan ägna sig åt, vilket självklart innebär att det förekommer bland mattemuppar, på fritid och raster samt ibland på lektion(!).

Relevanta miniräknare

Programmeringen jag kommer att ta upp här kommer endast att vara tillämpbar på några miniräknare konstruerade av Texas Instruments, närmare bestämt TI-83 (TI-Basic-delen),TI-83+,TI-83+ silver edition,TI-84+,TI-84+ silver edition.

TI-Basic

Basic är det enklare av språken som man kan använda sig av, men det är också långsammare och har mer begränsade användningsområden. En bra introduktionssajt för riktiga nybörjare är Basic Guru Online[1], som tyvärr är nedlagt men fortfarande har bra tutorials. Jag utgår från att de som nu läser detta kan grunderna i basic, och börjar därför med lite kod. Eftersom TI-Basic naturligtvis inte har någon inttostr-funktion (konvertering från heltal till sträng), tänkte jag först hjälpa er frustrerade TI-Basic-programmerare lite på traven.

PROGRAM:INTTOSTR

{X,0->A
{0,X->B
LinReg(a+bx) LA,LB,Y1
Equ>String(Y1,Str1
sub(Str1,1,length(Str1)-4->Str1
DelVar LADelVar LBDelVar Y1

(Funktionen kan också lämpligen användas med reella x, samt att få fler decimaler av π Efter körning hittar ni x-värdet i Str1.)

Exempelprogram

Nedräknare

En enkel counter som räknar ned sekunderna till ett visst klockslag. Användes ursprungligen för att räkna ned sekunderna till tråkiga lektionsslut. Den till synes onödiga komplexiteten är nödvändig för att motverka skärmflimmer, felformatering etc. Effektiv variabelhantering är för esteter.

PROGRAM:BINCLOCK
:Input D
:Input E
:D*60²+E*60->F
:ClrHome
:Output(1,1,"  :  :  ")
:Output(2,1,"SEKUNDER KVAR: ")
:Lbl 1
:getTime->L2
:L2(1)->A
:L2(2)->B
:L2(3)->C
:If A>9:Then
:Output(1,1,A)
:Else
:Output(1,1,"0")
:Output(1,2,A)
:End
:If B>9:Then
:Output(1,4,B)
:Else
:Output(1,4,"0")
:Output(1,5,B)
:End
:If C>9:Then
:Output(1,7,C)
:Else
:Output(1,7,"0")
:Output(1,8,C)
:End
:A*60²+B*60+C->S
:If F-S<1000:Then
:Output(3,4," ")
:End
:If F-S<100:Then
:Output(3,3," ")
:End
:If F-S<10: Then
:Output(3,2," ")
:End
:Output(3,1,F-S)
:Goto 1

Optimering av koden lämnas åt läsaren.

Analog klocka

Ett varnande exempel på vad som händer om man kombinerar trigonometri, svår influensa och en TI-84+.

PROGRAM:ANACLOCK
:AxesOff:GridOff
:ClrDraw
:Degree
:0->Xmin:94->Xmax
:0->Ymin:62->Xmax
:Circle(47,31,20)
:Line(47,51,47,48)
:Line(67,31,64,31)
:Line(47,11,47,14)
:Line(27,31,30,31)
:Lbl 1
:getTime->L2
:A->D
:B->E
:C->F
:L2(1)->A
:L2(2)->B
:L2(3)->C
:If A≠D:Then
:Goto 2:End
:Lbl 3
:If B≠E:Then
:Goto 4:End
:Lbl 5
:If C≠F:Then
:Goto 6:End
:Lbl 7
:Line(47,31,cos(360-(6C-90))*17+47,sin(360-(6C-90))*17+31)
:Line(47,31,cos(360-(30A-90))*10+47,sin(360-(30A-90))*10+31)
:Line(47,31,cos(360-(6B-90))*15+47,sin(360-(6B-90))*15+31)
:Goto 1
:Lbl 2
:Line(47,31,cos(360-(30D-90))*10+47,sin(360-(30D-90))*10+31,0)
:Goto 3
:Lbl 4
:Line(47,31,cos(360-(6E-90))*15+47,sin(360-(6E-90))*15+31,0)
:Goto 5
:Lbl 6
:Line(47,31,cos(360-(6F-90))*17+47,sin(360-(6F-90))*17+31,0)
:Goto 7

Sanity loss. Den ser inte så speciell ut på en datorskärm, men i en TI-84+, med en 16*8-skärm och live-redigering utan ångraknapp...