Kirjoittaja: Antti Laaksonen (2003).
TI-89 on Texas Instrumentsin graafinen laskin. Tämän kolmiosaisen opassarjan aihe on pelien ohjelmoiminen käyttäen laskimen omaa Basic-kieltä. TI-92 (Plus)-laskimen käyttöjärjestelmä ja Basic-kieli on lähes samanlainen TI-89:n kanssa; tärkein ero on näytön suurempi koko ja qwerty-näppäimistö. Sen ansiosta suurimman osan oppaiden ohjelmista pitäisi (en ole kokeillut) toimia myös TI-92:lla.
Laskimen käyttöjärjestelmä on käännetty monille kielille, myös suomeksi, mikä sinänsä on ihan hyvä juttu. Valitettavasti suomennos on ulotettu myös Basiciin, minkä seurauksena suomenkielisen käyttöjärjestelmän alla tehdyt ohjelmat eivät toimi muunkielisissä laskimissa. Laskin sisältää kyllä jonkinlaisen automaattisen käännösmekanismin kielen vaihdon yhteydessä, mutta sen toiminta on kovin epävarmaa. Siksi olen itse päätynyt käyttämään laskinta pelkästään englanninkielisenä.
TI-89:n uumenissa sykkii MC68000-prosessori 10 megahertsin kellotaajuudella. Ohjelmien ja datan tallennukseen on käytettävissä 188 kilotavua muistia. Näyttö on kaksivärinen ja sen resoluutio on 160x100 pikseliä. Minkäänlaisia ääniominaisuuksia ei laskimessa ole.
Yksi pelintekoa huomattavasti helpottava piirre laskimesta kuitenkin löytyy: kaikkien laskinten prosessori on yhtä nopea ja käyttöjärjestelmät ovat samanlaiset. Joten kun peli toimii omalla laskimella oikein, se toimii oikein muillakin laskimilla. PC-maailmasta tuttuja yhteensopivuusongelmia ei ole.
Laskimen Basic-tulkki on melko hidas ja rajoittunut, ja parhaimmat pelit tehdäänkin konekielellä. Konekielellä ohjelmointi vaatii kuitenkin aina linkkikaapelin ja erillisen ohjelmointiympäristön. Virheellinen konekielinen ohjelma voi myös sekoittaa laskimen muistin. Totuuden nimissä tärkein syy Basicin valintaan tähän opassarjaan on kuitenkin se, että en itse ole tutustunut laskimen konekieleen lainkaan...
Joka tapauksessa TI-89 on kuitenkin vain kehittynyt laskin, pelintekoon ei kannata lähteä liian suurin odotuksin. Mutta riittävällä sinnikkyydellä voi hyvinkin saada aikaan pelejä, joista riittää ajanvietettä tylsille matikantunneille.
Helpoin tapa kirjoittaa ohjelma on käyttää laskimen omaa ohjelmaeditoria. Paina sinisellä pohjalla olevaa APPS-nappia, ja valitse valikosta kohta Program Editor. Current siirtyy viimeksi käsiteltyyn ohjelmaan, Open avaa tallennetun ohjelman, ja New aloittaa uuden ohjelman. Type on ohjelman tyyppi, joko Program (ohjelma) tai Function (funktio). Folder on kansio, johon ohjelma tallennetaan. Variable on ohjelman nimi, jolla sitä myöhemmin kutsutaan.
Ohjelmien kirjoittaminen laskimen näppäimistöllä on pidemmän päälle työlästä ja aikaavievää. Huomattavasti mukavampaa on kirjoittaa ohjelma tietokoneella ja lähettää se laskimelle linkkikaapelin ja TI-GRAPH LINK -ohjelman avulla. Tietokoneen sarjaporttiin kytkettävä linkkikaapeli tulee eräiden laskinpakettien mukana valmiina, ja sen voi myös tarvittaessa ostaa erikseen.
Ensimmäisen TI-89-ohjelmamme nimi on testi, ja se näyttää tältä:
testi() Prgm @tulostetaan tekstiä Disp "TI-89 Basic" EndPrgm
Kun olet kirjoittanut ohjelman laskimeen, paina HOME-nappia päästäksesi perusnäyttöön (ohjelma tallentuu automaattisesti). Kirjoita sitten komentoriville testi()
ja paina ENTER, niin ohjelma käynnistyy ja tulostaa rivin tekstiä ohjelmanäyttöön. Takaisin perusnäyttöön pääset taas HOME-nappia painamalla, ja ohjelman editointia voit jatkaa painamalla 2nd-nappia ja sen jälkeen APPS-nappia.
Ensimmäisellä koodirivillä on ohjelman nimi ja suluissa mahdolliset parametrit pilkuilla erotettuina. Varsinainen ohjelma kirjoitetaan Prgm
- ja EndPrgm
-lauseiden väliin. Tavallisesti jokainen lause kirjoitetaan omalle rivilleen, mutta useampia lauseita voi kirjoittaa samalle riville laittamalla niiden väliin :
-merkki.
@-merkki, jonka saa helpoiten kirjoitettua painamalla ensin vihreää vinoneliöllä varustettua nappia, ja sitten )-nappia, on kommentti, joka selvittää ohjelman toimintaa koodin lukijalle. Kommentteja ei kuitenkaan kannata kirjoittaa ylenpalttisia määriä, sillä muistia ei ole tuhlattavaksi.
Disp
-komento yksinkertaisesti tulostaa sen perässä olevan tekstin ohjelmanäyttöön.
Ohjelman voi aina lopettaa kesken ON-nappia painamalla.
Ohjelman poistaminen muistista onnistuu VAR-LINK-ikkunan kautta, jonne pääsee painamalla ensin 2nd-nappia ja sitten +-nappia. Näytölle avautuvassa listassa näkyy kaikki laskimeen tallennetut muuttujat (ohjelmat kuuluvat muuttujiin) tyyppeineen ja kokoineen. PRGM-tyyppiset muuttujat ovat ohjelmia. Muuttujan poistaminen tapahtuu Manage-valikon Delete-komennon avulla eli näppäinyhdistelmällä F1 + 1.
Muistin käyttöä voi tarkkailla myös MEMORY-ikkunassa, jonne pääsee näppäinyhdistelmällä 2nd + 6.
Muuttujaan sijoitetaan arvo →-merkin avulla, joka kirjoitetaan STO→-nappia painamalla. Seuraava lause sijoittaa vuosi-muuttujan arvoksi 2003.
2003→vuosi
Peliohjelmoinnissa tärkeimmät muuttujatyypit ovat Expression, String, List, Matrix ja Picture.
&
-merkin avulla.newList
-funktio luo uuden listan, parametrina listan alkioiden määrä.newMat
-funktio luo uuden matriisin, parametreina matriisin rivien ja sarakkeiden määrä.
Kansiomuuttujat tallentuvat pysyvästi senhetkiseen kansioon ja ovat käytettävissä kaikissa kansion ohjelmissa. Paikalliset muuttujat taas katoavat muistista heti, kun ohjelman suoritus loppuu. Yleensä omissa ohjelmissa kannattaa käyttää paikallisia muuttujia, mikä tapahtuu määrittelemällä muuttujat Local
-komennolla. Näin ohjelman käyttämät muuttujat pysyvät erillään kansiomuuttujista, eikä tarpeettomia muuttujia jää muistiin.
Local nimi, vuosi
Laskulauseke muutetaan merkkijonoksi string
-funktiolla. Merkkijono taas muutetaan laskulausekkeeksi expr
-funktiolla.
Jos muuttujan nimi on merkkijonossa, #
-merkki tekee merkkijonosta muuttujan. Seuraava esimerkki tulostaa vuosi-muuttujan arvon.
2003→vuosi "vuosi"→nimi Disp #nimi
Vertailun arvo on joko true
, tosi, tai false
, epätosi. Vertailuja käytetään mm. ehtolauseissa ja silmukoissa. Vertailuoperaattorit ovat =
, ≠
, >
, <
, ≥
ja ≤
. Lisäksi vertailuja voi yhdistää and
-, or
-, xor
- ja not
-operaattoreilla, jotka tarkoittavat "ja", "tai", "jompikumpi" ja "ei".
Esimerkiksi tosia vertailuja ovat 5=2+3, 8≤5 ja 7>3 or 5>8.
Yksinkertaisin If
-ehtolause näyttää seuraavalta:
If ehto lause1 lause2
Jos ehto on tosi, suoritetaan lause1. Ehto koskee vain seuraavaa riviä: lause2 suoritetaan aina.
Seuraava ehtolause keskeyttää ohjelman, jos pisteet-muuttujan arvo on 0.
If pisteet=0 Stop
Kehittyneempi If
-rakenne on:
If ehto1 Then lauseet1 [ElseIf ehto2 Then lauseet2] [ElseIf ehto3 Then lauseet3] . . . [Else lauseetx] EndIf
Jos ehto1 on tosi, suoritetaan lauseet1. Jos ehto2 on tosi, suoritetaan lauseet2, ja jos ehto3 on tosi, suoritetaan lauseet3. Jne. Jos mikään ehdoista ei ole tosi, suoritetaan lauseetx. Hakasuluilla merkityt osat eivät ole pakollisia.
Seuraava ohjelma tulostaa tekstin pistemäärän mukaan.
If pisteet>90 Then Disp "Erittäin hyvä" ElseIf pisteet>75 Then Disp "Hyvä" ElseIf pisteet>50 Then Disp "Keskinkertainen" Else Disp "Heikko" EndIf
For
-silmukka käy laskurin läpi tietyillä arvoilla, ja joka kerralla suoritetaan silmukan sisällä olevat lauseet. Muuttuja sisältää aina laskurin kulloisenkin arvon, alku on ensimmäinen arvo, loppu on viimeinen arvo, ja askel kertoo, kuinka paljon laskuria lisätään joka kierroksella. Oletuksena askel on 1.
For muuttuja,alku,loppu[,askel] lauseet EndFor
Seuraava ohjelma tulostaa ohjelmanäyttöön luvut yhdestä viiteen.
For i,1,5 Disp i EndFor
While
- ja Loop
-silmukat toistavat niiden sisällä olevat lauseet, kunnes tietty ehto toteutuu tai silmukka keskeytetään muuten.
While ehto lauseet EndWhile Loop lauseet EndLoop
Silmukan sisällä voi olla lisäksi Exit
- tai Cycle
-komento. Exit
poistuu silmukasta, ja se on lähes välttämätön Loop
-rakenteessa, joka ei muuten pääty koskaan. Cycle
jättää silmukan loppuosan väliin ja siirtyy suoraan seuraavalle kierrokselle. Nämä lauseet ovat käytössä myös For
-silmukassa.
Seuraava ohjelma tulostaa 2:n potensseja, kunnes potenssin arvo on 5000 tai suurempi. Ohjelma on toteutettu kummankin silmukkarakenteen avulla.
2→i While i<5000 Disp i i*2→i EndWhile 2→i Loop Disp i i*2→i If not i<5000 Exit EndLoop
Ohjelman sisäisten aliohjelmien ja funktioiden määrittäminen onnistuu Local
- ja Define
-komennoilla. Aliohjelmat ja funktiot täytyy määrittää ennen niiden käyttöä.
Seuraavan ohjelman tulosta3-aliohjelma tulostaa parametrina annetun tekstin kolmeen kertaan.
Local tulosta3 Define tulosta3(teksti)=Prgm Local i For i,1,3 Disp teksti EndFor EndPrgm tulosta3("Esimerkki")
Aliohjelmien ja funktioiden ero on siinä, että funktio palauttaa arvon Return
-komennolla. Lisäksi funktio ei voi käsitellä kansiomuuttujia, vaikuttaa laskimen asetuksiin, tulostaa tekstiä, piirtää grafiikkaa eikä lukea näppäimistöä.
Seuraavassa ohjelmassa oleva euro-funktio palauttaa annetun markkamäärän euroina.
Local euro Define euro(markka)=Func Return markka/5.94573 EndFunc Disp euro(12)
Ajon aikana syntyvien virheiden käsittely on mahdollista Try
-rakenteen avulla. Virheen numero löytyy errornum
-erikoismuuttujasta. ClrErr
-lause ohittaa virheen, ja PassErr
lähettää sen alempaan Try
-rakenteeseen. Jos sellaista ei ole, virheilmoitus näkyy tavanomaisena ja ohjelman ajo keskeytyy.
Seuraava ohjelma yrittää luoda olemattoman matriisin, mikä ei ole mahdollista. Siksi tapahtuu virhe 260, jonka ohjelma pystyy näyttämään virheenkäsittelyn ansiosta. Ohjelman ajo ei myöskään keskeydy.
Try newMat(0,0)→x Else Disp "Virhe "&string(errornum) ClrErr EndTry Disp "Ajo ei keskeytynyt!"
Opassarjan ensimmäinen osa alkaa olla tässä. Mainittakoon lopuksi, että kaikki laskimen tuntemat komennot ja funktiot on listattu CATALOG-ikkunassa, ja useimmille löytyy myös syntaksi samaisesta paikasta.
Tässä vielä pari hyödyllistä linkkiä:
Antti Laaksonen, 27.7.2003
En nyt jaksanut lukea opasta kokonaan, mutta mielenkiintoselta vaikuttaa.
Todella kiinnostava artikkeli. Pakko kyllä saada tuollainen laskin hommattua jostain...
Niin.. Pakko saada
Hyvä artikkeli. Lisätietoa TI-89 laskimesta ja muista malleista ja tarvikkeista löytyy http://www.ti.com/calc/suomi/tuotetietoa.htm
Laskinta omistamattomille: http://www.zophar.net/ti.html
Kiitos Blaze hyvästä linkistä :)
Virtual TI on paras emulaattori. Jos ei omista laskinta ja datakaapelia, niin siihen pitää vielä jostain löytää rom-piiri, jotta sillä voisi TI:n laskimia emuloida.
Olisit nyt tehnyt tämän oppaan TI-86, koska eihän nyt kenelläkään ole tuota TI-89, sillä se ei ole sallittu ylioppilaskirjoituksissa (olen kyllä monta kertaa unelmoinut TI-89:sta, mutta on vain pitänyt olla tyytyväinen tähän TI-86:een).
muute hyvä mut toi laskin o liian kallis
TI-86:lle olisi kyllä ihan kiva olla kanssa opas (tilauksessa, eli kohta omistan sellaisen). Tiedä sitten kuinka paljon koodi eroaa...
Lueskelinpa tämän oppaan sitten yhdessä TI-86:sen mukana tulleen ohjekirjan kanssa (jotenkin itse ohjekirja vaikutti aika kuivalta lukemiselta, muutenkin teki vähän mieli vertailla 86:sta ja 89:iä). Muutamia erojakin kyllä löytyi, ihan ärsyttävintä oli se kun joku käsky oli ihan yhden kirjaimen erolla samanlainen, esim. PxlOn 10,30 olikin PxOn 10,30.
Olen itsekin lueskellut TI-86:n manuaalia ja aionkin julkaista tässä joskus koodivinkin kyseiselle laskimelle. Eroja näiden laskinten välillä löytyy paljonkin, TI-86:ssa on paljon vähemmän ominaisuuksia (ei try:ta, silmukat loppuvat kaikki pelkkään endiin, requestia ei myöskään ole, etc..).
:O onpas kallis laskin laskimeksi, haluuko joku myydä mulle tollasen laskimen 10 eurolla :P
Itse ostin TI-89-laskimen heti ammattikorkeakoulun ensimmäisen vuoden alussa :) olihan sillä ihan kivasti hintaa. Pitäs varmaan alkaa koodailemaan jonkinlaista peliä siihen..
":O onpas kallis laskin laskimeksi, haluuko joku myydä mulle tollasen laskimen 10 eurolla :P"
Saattaa kohta mennä halvalla...
Kolmen vuoden viive, mutta menköön. Löytyi tänään verkkokauppa.com:in Helsingin myymälän palautustuotteena (169,00€). En tiedä, luinko huolimattomasti vai eikö paketin päällä olevassa listauksessa erikseen mainittu, ettei tuotetta saa käyttää yo-kirjoituksissa. Saa nähdä, meneekö toisen laskimen ostoksi. Ei tuon käyttistä saisi mitenkään tiputettua 84/86-tasolle, vaikka tuskin sekään riittäisi yo-hyväksyntään?
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.