TURBO PASCAL OHJELMA JAETAAN KŽSKYIHIN Koska PROSESSORI l. SUORITIN ei ymm„rr„ muuta kuin BINŽŽRI-muodossa olevaa koodia, joutuu KŽŽNTŽJŽ ensin k„„nt„m„„n ohjelman koneen ymm„r- t„m„„n muotoon. Koska k„„nt„minen on hankalaa (tai oikeastaan liian tarkkaa), on k„„nnett„v„ ohjelma jaettava KŽSKYIHIN, jotka k„„nnet„„n koneen ymm„rt„m„„n muotoon yksi kerrallaan. Koska kone ei itse osaa erottaa k„skyj„ toisistaan, k„ytt„j„ joutuu erottamaan k„skyt toisis- taan EROTTIMEN avulla. Erottimena Turbo Pascalissa k„ytet„„n puoli- pistett„ (;). K„skyjen kirjoittamistyylill„ ei ole mit„„n v„li„, koska Turbo Pascal ei havaitse k„skyjen kirjoittamisessa eroa ison ja pienen kirjaimen v„lill„. KŽSKYT L™YTYVŽT KIRJASTOISTA K„skyj„ s„ilytet„„n kirjastossa samasta syyst„ kuin oikeassakin el„m„ss„. Jos haluat tarkistaa jonkin matemaattisen kaavan, on helpompaa katsoa kirjasta kuin muistaa kaava ulkoa, puhumattakaan kokonaisien kirjojen muistamisesta ulkoa. K„„nt„j„n k„ytt„m„ kirjasto on siis kuin paikka mist„ haetaan tarkempaa tietoa. K„skyt tarkistetaan joko k„„nt„j„n nk. KIRJASTOSTA tai ulkoisesta TIEDOSTOSTA. Molemmat voivat olla ohjelman mukana tulleita tai k„ytt„- j„n itse tekemi„. N„in ohjelma on nopea k„„nt„m„„n ohjelmaa ja ohjelma on helposti laajennettavissa. K„„nt„j„ k„„nt„„ ohjelman konekielisen„ muistiin, jossa k„ytt„j„ voi helposti muutella ja korjata sit„. Koska ohjelmien k„ytt„mi„ kirjastoja on lukemattomia, niiden ainainen l„pik„yminen olisi turhaa ja hidasta. Niinp„ parempi ja nopeampi keino on antaa k„ytt„j„n m„„ritell„ mit„ kirjastoja ohjelman tulee lukea ja jos k„sky„ ei l”ydy kirjastosta, k„„nt„j„ antaa virheilmoituksen. MITŽ KŽSKYT OVAT K„skyt ovat kuin ylimalkaisia ohjeita jonkin asian tekemiseksi. K„ytt„j„ antaa vaikkapa k„skyn kirjoittaa ruudulle sanan, ja k„skyn teht„v„ on hoitaa asia. K„skyt ovat kuin tarkempia toimintaohjeita asian tekemiseksi. Jos sin„ antaisit toiselle henkil”lle ohjeen "Osta litra maitoa", t„m„ toinen henkil” osaisi varmasti tehd„ sen. Mutta koska tietokone on paljon tarkempi kuin ihminen (hyv„ ja huono asia), sille joutuisi joka kerta m„„ritell„ kaikki ostoon liittyv„t asiat alkaen kysymyksist„ mist„ l”yt„„ maitoa, kauppaan meno, rahank„sittely jne. Kirjastoissa olevissa k„skyiss„ n„m„ asiat ovat ik„„nkuin selitetty, jotta k„ytt„j„ voi keskitty„ oleelli- seen, eli k„skyjen k„ytt„miseen saadakseen ongelman ratkaistuksi. K„skyt ovat siis ohjeita asian suorittamiseksi ja k„skyt erottaa toisistaan puolipiste (;). OHJELMAN RAKENNE K„„nt„j„ ei itse osaa tunnistaa ohjelmasta, mik„ on k„sky, mik„ muuttuja tai mit„ pit„„ tehd„. Se vain osaa k„yd„ lause kerrallaan sanoja l„pi. Niinp„ k„ytt„j„n huoleksi j„„ jaotella ohjelmansa osiin, jotka k„„nt„j„ voi tunnistaa niin katsottujen VAKIOSANOJEN avulla. Vakiosanat ovat sanoja jotka k„„nt„j„ tunnistaa ja osaa sen perusteella lukea ohjelmaa eteenp„in ja osaa toisaalta erottaa mit„ k„ytt„j„n tarkoituksena k„sky„ annettaessa on ollut. Ohjelmassa on aina seuraavat vakiosanat (versio 6.0): PROGRAM ohjelman_nimi; (* ei pakollinen 6 versiossa! *) USES kirjasto1, kirjasto2; (* esitell„„n kirjastot *) BEGIN (* ohjelma alkaa *) k„sky1; (* k„sky tehd„ jotain, tarkistetaan yll„ *) k„sky2; (* ..olevista kirjastoista *) END. (* ohjelman loppu eli lopeta *) (* KOMMENTIT *) ovat ainoastaan k„ytt„j„„ varten, ne helpottavat ohjelman lukemista. K„„nt„j„ ei huomioi niit„ lainkaan. Kommentit laitetaan joko sulku-t„hti (* *) merkkien tai aaltosulkujen {} sis„„n. esim. {ohjelma alkaa} (* Ohjelma loppuu *) PROGRAM ilmoittaa ohjelman nimen k„ytt„j„lle, ohjelman toiminnan kannalta nimell„ ei ole YHTŽŽN MITŽŽN v„li„, kunhan se on alle 128 merkki„ pitk„ ja ei sis„ll„ muita kuin kirjaimia, numeroita ja alaviivoja (_). PROGRAM on kuin ohjelman otsikko ja sekin pit„„ olla erotettuna (puolipiste ;). esim. PROGRAM Minun_oma_ohjelma_numero_1; PROGRAM Kello; PROGRAM grafiikkaa; USES esittelee ohjelman k„ytt„m„t kirjastot k„„nt„j„lle, joka lukee ne muistiin ja vertaa BEGIN ja END sanojen v„liss„ olevia k„skyj„ kirjastoissa oleviin. Jos k„sky l”ytyy kirjasto(i)sta k„„nt„j„ suorittaa ne, jos se ei l”yd„ vastaavaa k„sky„ (joko k„sky on v„„rin kirjoitettu tai sit„ ei ole kyseisiss„ kirjastoissa) se tulostaa virheilmoituksen. Turbo Pascalin mukana tulee joukko kirjastoja, joista l”ytyy k„skyt useimpiin tarkoituk- siin. N„it„ kirjastoja ovat: CRT : k„sittelee ruudun tilaa, n„pp„imist”n erikoiskoodeja, tekstin v„ri„ ja taustaa ja „„ni„. Yleens„ aina k„yt”ss„. DOS : k„sittelee nimens„ mukaisesti k„ytt”j„rjestelm„n kutsuja ja my”s aivan alimmalla tasolla olevia k„skyj„ (kuten rekisterien k„sittely ja muutos). Kirjastolla voidaan siis k„sitell„ kaikkea mit„ DOS itsess„„nkin pystyy k„sittelem„„n (aika,tiedostot jne). GRAPH : k„sittelee kuvaruudulle tulevaa grafiikkaa, kuten viivojen piirt„mist„ ruudulle, ruudun tilan vaihtoa, v„rien vaihtoa ja k„sittely„. Turbo Pascalin omat grafiikkak„skyt ovat aika hitai- ta, joten Assemblerin osaaville suositellaan omien grafiikka- rutiinien tekoa! Grafiikasta enemm„n loppuosassa. PRINTER : k„sittelee ainoastaan yht„ tapahtumaa, nimitt„in tulostusta kirjoittimelle (printer). Eritt„in pieni kirjasto, jonka teht„v„ on ainoastaan yksinkertaistaa tulostusta. Voidaan tulostaa ai- noastaan LPT1 -portissa olevaan kirjoittimeen ja ainoastaan teksti„. Muitakin kirjastoja tulee TP:n mukana, mutta koska n„m„ ovat t„rkeimm„t, varsinkin kolme (3) ensimm„ist„, k„sittelemme ainoastaan n„it„. BEGIN ilmoittaa ohjelman niin sanotun k„skyosan alkavan. K„skyosa on paikka johon k„ytt„j„ kirjoittaa ohjelmansa k„ytt„m„t k„skyt. Minnek„„n muualle kuin BEGIN ja END sanojen v„liin ei voi kirjoittaa k„skyj„. END ilmoittaa ohjelman k„skyosan loppuvan. Piste end sanan j„lkeen tarkoittaa KOKO ohjelman suorittamisen loppuvan t„h„n. Aliohjelmien lopussa END sanan per„ss„ on puolipiste (aliohjelmat k„sitell„„n my”hemmin). HUOMIOITAVAA -K„„nt„j„ tulkitsee ts. k„„nt„„ ohjelman koneen ymm„rt„m„„n muotoon. -Ohjelma jaetaan KŽSKYIHIN -KŽSKYT erotetaan puolipisteell„ (;) -K„skyt ovat ohjeita ohjelmalle ja k„„nt„j„lle -Ohjelman suorittamista ohjataan VAKIOSANOIN -Ohjelman k„skyt suoritetaan BEGIN ja END VAKIOSANOJEN v„liss„. MIETI JA KERTAA JOS ET YMMŽRRŽ 1. Miten jakaisit naulaamisen osiin? (lopeta kymmenen k„skyn j„lkeen) 2. Mit„ k„skyj„ k„ytt„isit naulaamisessa? (vasaran nosto jne.) 3. Miksi tietokone ei ymm„rr„ sanaa LATAA PELI? (liittyy rakenteeseen) 4. Miksi k„skyt erotetaan puolipisteell„? 5. Mainitse kolme vakiosanaa 6. Mik„ on kirjasto? 7. Miksi kirjastoa k„ytet„„n? 8. Mainitse yksi kirjasto MUUTTUJAT Muuttujat ovat eritt„in t„rkeit„ ohjelman kannalta. Muuttuja on nimens„ mukaisesti ohjelman ajon aikana muuttuva tieto. Muuttuja on kuin yksi pelaaja j„„kiekkojoukkueessa; ilman sit„ ei ehk„ tulisi toimeen ja sit„ voidaan vaihtaa. Tietokone, joka ei edelleenk„„n ymm„rr„ k„skyn ja muuttu- jan eroa, vaatii k„ytt„j„„ m„„rittelem„„n eri muuttujat, joita h„n haluaa ohjelmassaan k„ytt„„. Lis„ksi Turbo Pascal vaatii k„ytt„j„„ m„„rittelem„„n mink„lainen muuttuja on (aivan kuin j„„kiekkojoukkueessa: kaikki eiv„t voi olla valmentajia tai maalivahteja). Muuttujat ovat yleens„ stabiileja eli ne viev„t m„„r„tyn m„„r„n tilaa muistissa. Jos esimerkiksi muuttuja nimelt„ MAALIVAHDIN_NIMI on m„„ritelty 15 merkin tekstiksi (nimess„ saa olla kor- keintaan 15 merkki„), vie muuttuja saman verran tilaa vaikka maalivahdin nimi olisi "O" tai ei olisi maalivahtia. Muuttuja m„„ritell„„n seuraavasti: PROGRAM muuttujien_esittely; {Kommentti aaltosulkuihin! Kai muistat?} USES CRT,DOS; {K„ytet„„n kahta peruskirjastoa} VAR muuttujan_nimi : muuttujatyyppi; {Muuttujien esittely} muuttuja2_nimi : muuttujatyyppi; BEGIN {Ohjelman alku} muuttujan_nimi := 'Ihra'; {Ohjelmassa annetaan muuttujalle arvo} END. {Ohjelman loppu} Miss„ VAR on VAKIOSANA, joka antaa k„„nt„j„lle k„skyn tulkita seuraavat sanat muuttujan nimiksi ja muuttujatyypeiksi. Muuttujan_nimi -kohta antaa k„„nt„j„lle ohjeen varata muistista muuttujatyypin viem„n tilan t„ll„ nimell„ (kuin varaisi hotellista huoneen). T„t„ nime„ voidaan k„skyosassa k„ytt„„ muuttujan m„„rittelemiseksi (katso esimerkki yll„). AINA kun esitell„ muuttuja, esittelyn tulee tapahtua VAR sanan j„lkeen! VAR sana sijaitsee USES ja BEGIN sanojen v„liss„ (katso yll„). MUUTTUJAN NIMI Turbo Pascalissa nimi saa olla mik„ tahansa merkkijono, jonka pituus ei ylit„ 64 merkki„, ja joka ei sis„ll„ varattuja sanoja (varatut sanat, katso OPI OIKEIN PASCAL LIITTEET 2-1 JA 2-2). Muuttujan nimell„ ei ohjelman kannalta ole mit„„n v„li„, ainoastaan kannattaa huomioida nimen selvyys (ilment„„ k„ytt”tarkoitusta), jotta my”hemmin ohjelmaa lukiessa (sin„ tai joku muu) muuttujan k„ytt”tarkoitus on mahdollisimman selke„. Lis„ksi kannattaa huomioida muuttujan nimen sopiva lyhyys, jos sit„ k„y- tet„„n ohjelmassa usein (pitk„ sana vie aikaa kirjoittaa vaikkapa 20 kertaa) tai ohjelma on muuten pitk„. Muuttujia kannattaa kierr„tt„„, eli k„ytt„„ uudestaan koska ne viev„t muistia, joten useiden muuttujien m„„ritteleminen vie muistia runsaasti. Esim. Jos m„„ritell„„n "turha", eli v„liaikaiseen s„ilytykseen tarkoitettu muuttuja, sit„ voidaan k„ytt„„ my”hemmin uudestaan eik„ n„in tarvitse m„„ritell„ kahta erillist„ muuttujaa. MUUTTUJATYYPPI Tarkoittaa muuttujan muotoa; onko se pelkki„ merkkej„ vai sis„lt„„k” se lukuja ja jos se si„lt„„ lukuja, mink„laisia n„m„ luvut ovat ovatko ne kokonais vai murtolukuja jne. Muuttujatyyppej„ voi itsekin m„„- ritell„, mutta perusmuuttujatyypit riitt„v„t yleens„ l„hes kaikkiin ohjel- mointi tarkoituksiin. Muuttujatyypeist„ t„rkeimm„t, joita mekin k„yt„mme ovat: INTEGER kokonaisluku v„lilt„ -32768 .. +32767. Ei hyv„ksy desimaali pistett„ tai pilkkua. Yleens„ k„ytetyin numero tyyppi REALin kanssa. Esim. VAR syntyma_vuosi : integer; kuusi : integer; palkka : integer; Kahden kokonaisluvun jakoj„„nn”s on yleens„ murtoluku, huomioi ohjelmaa tekiess„si. REAL murtoluku, joka ilmoittaa luvun perusosan, pilkun/pisteen ja eksponentin (E -kirjain). Pystyy ilmaisemaan lukuja v„lilt„ 2.9e-39..1.7e38 (0, desimaali ja korkeintaan 39 lukua nollan j„lkeen ja 1.7 plus 38 nollaa). HUOMAA ett„ kokonaisluvut kelpaavat murtoluvuiksikin (esim. 4 = 4.0 tai 4.00000000). Esim. VAR jakojaannos : real; markkakuusitoistapennia : real; BYTE kokonaisluku v„lilt„ 0..255 (2 potenssiin 8). Siis 8 bitti„ sis„lt„v„ luku, joka vie v„hemm„n kallista muistia kuin esim. INTEGER. N„pp„r„ pikku muuttujatyyppi. Esim. VAR ika : Byte; { Harvan ik„ on alle 0 tai yli 255 } Huippunopeus: byte; montakorvaa : Byte; { :) } CHAR mik„ tahansa ASCII-koodi (katso luettelo OPI OIKEIN PASCAL Liite 1-2). My”s numerot ja erikoismerkit. K„ytet„„n yleens„ lukemaan mit„ n„pp„int„ on painettu tai lukemaan tiedostoa merkki kerrallaan. Esim. VAR merkki : char; sukupuoli : char; lempimerkki : char; STRING k„yt„nn”ss„ tietue merkkej„. STRING vastaa useita per„kk„isi„ CHAR tyyppej„. String muuttuja voi olla korkeintaan 255 merkki„ pitk„. String muuttujan pituuden voi laittaa vakioksi laittamalla hakasulkeisiin pisimm„n mahdollisen muuttujan pituuden. Esim. VAR etunimi : string; {ei maksimipituutta!} sukunimi : string[15]; {korkeintaan 15 merkki„} asuinpaikka : string[25]; {korkeintaan 25 merkki„} BOOLEAN tietokonemaailman kyll„/ei. Saa ainoastaan arvon TRUE ja FALSE (totta/ei totta). Voidaan k„ytt„„ esimerkiksi toteamaan onko jokin tiedosto olemassa vai ei. Esim. VAR valot_palamassa : boolean; yli_sata : boolean; naimisissa : boolean; MUUTTUJIEN KŽYTT™ Miksi muuttujia k„ytet„„n? Eik” olisi helpompi m„„ritell„ valmiiksi esim. sukunimi on Virtanen. Aivan oikein, asiassa on vain yksi mutta: ent„ jos kysyt„„n k„ytt„j„n nime„? Onko se aina Virtanen? Onko ihmisell„ viisi peukaloa? Muodostuuko j„„kiekkojoukkue valmentajista? EI vaan muuttujia k„ytet„„n ilmaisemaan/lukemaan/muuttamaan ohjelman ajon aikana muuttuvaa asiaa! HUOMIOITAVAA: -muuttuja on asia joka muuttuu ohjelman k„yt”n/ajon aikana -muuttujasta pit„„ m„„ritell„ NIMI ja MUUTTUJATYYPPI -muuttujan nimi kannattaa pit„„ suht. lyhyen„ ja kuvaavana -muuttujat m„„ritell„„n ohjelman kirjastojen j„lkeen -muuttujien m„„rittely alkaa VAR (variables = muuttujat) -sanalla -muuttujatyyppej„ ovat INTEGER, REAL, CHAR, STRING. MIETI JA KERTAA JOS ET YMMŽRRŽ 1. Miksi ohjelmassa k„ytet„„n muuttujia? 2. Mieti sopivat muuttujat osoitetiedoille. 3. Luettele kaksi muuttujatyyppi„. 4. Selit„ yhden muuttujatyypin sis„lt”. 5. Kuinka pitk„n muuttujan tekisit etunimest„si? 6. Mahtuuko puhelinnumerosi INTEGER -muuttujatyyppiin? PERUSKŽSKYT Perusk„skyiksi luetellaan sellaiset k„skyt, joita tarvitaan l„hes aina. N„m„ on hyv„ osata ulkoa, koska l„hes kaikki teht„v„t asiat k„ytt„v„t ainakin joitakin n„ist„. Kaikki k„skyt kirjoitetaan k„skyosaan. WRITE('teksti'); Kirjoittaa ruudulle sanan teksti. Kaikki kirjoitettava pit„„ olla suluissa. Jos kirjoitettava asia on muuttuja, heittomerkkej„ ei tarvita vaan k„sky voidaan kirjoittaa WRITE(muuttuja); K„skyll„ voidaan kirjoittaa ŽŽKK™SIŽ ja erikoismerkkej„. Useammat kirjoitettavat muuttujat erotetaan pilkulla (,). Esim. WRITE(' Jussi '); Write(nimi); write('Nimesi on ',nimi); {huomaa pilkun j„lkeinen} {..osa = muuttuja} WRITELN('teksti); Kuten WRITE k„sky, mutta lis„„ per„„n rivinvaihdon (ENTER) (WRITE LINE = kirjoita rivi). Esim. WRITELN('Jussi'); WRITELN(sukunimi); writeln('Jussi ',sukunimi); READ(muuttuja); Lukee n„pp„imist”lt„ (oletus) muuttujatyypin ilmaiseman asian (luku, merkki merkkijono tms.) ja tallettaa sen muuttujaan. Useammat luettavat muuttujat erotetaan pilkulla. Esim. READ(nimi); Read(vuosiluku); READ(piin_arvo); READ(merkki); READLN(muuttuja); Kuten READ, mutta luettuaan merkin siirtyy seuraavalle riville (READ LINE = lue rivi) (kuin ENTER). K„ytt„j„ kirjoittaa halutun merkkijonon ja painaa [ENTER] jolloin ohjelma tallettaa muuttujan sille varattuun muistipaikkaan. Esim. READLN(sukunimi); REadLN(kuka_olet); READLN(yhteenlasku); READLN(kolme_lukua); HUOM! READ/WRITE k„skyt ovat alkuper„isen nk. Pascal standardin mukaisia, ts. ne toimivat KAIKISSA standardia tukevissa k„„nt„jiss„ (esim. Quick Pascalissa ((C) MicroSoft). CLRSCR; Tyhjent„„ kaiken tekstin ruudulta ja siirt„„ kursorin kuvaruudun vasempaan yl„laitaan. MUUTTUJIEN KŽSITTELY Muuttujien k„yt”ss„ niiden k„sittely on ehk„ yksi t„rkeimmist„ asioista osata. Kuten tied„mme edelt„lukemastamme, muuttujien sis„lt„m„t arvot muuttuvat (tai niit„ muutetaan) ohjelman ajon aikana. Miten t„m„ tapahtuu? Muuttujien k„sittelyss„ := -merkin vasemmalla puolella olevaan muuttujaan lis„t„„n merkin oikealla puolella oleva arvo (esim. luku tai merkki tai lasketaan arvoksi matemaattinen kaava tms.). Oikealla puolella olevat merkit s„ilyv„t muuttumattomina, ainoastaan VASEMMALLA puolella merkki„ olevat muuttujat muuttuvat. N„in muutetut muuttujien arvot ovat PYSYVIŽ, eli kun ohjelman ajossa niit„ kutsutaan seuraavan kerran, niiden arvot ovat ne, jotka niille viimeksi on m„„ritelty (eli kun t„ll„ tavalla muutat arvoja ne pysyv„t kunnes niille annetaan uusi arvo). Esimerkkej„: PROGRAM muuttujien_muuttelua; { Ohjelman nimi } USES Crt,Dos; { Kirjastot } VAR { Muuttujien esittely } Luku1 : Integer; { kokonaisluku, kuten muistat?} Luku2 : Integer; { kokonaisluku } Jakotulos : Real; { jakoj„„nn”s = murtoluku } BEGIN { Ohjelma alkaa } Luku1 := 90; { Annetaan l„ht”arvo } Luku2 := 2; { Annetaan l„ht”arvo } JakoTulos := 0; { Nollataan jakoj„„nn”s } Jakotulos := Luku1 / Luku2; { Jakoj„„nn”s on LUKU1 jaettuna LUKU2 } Writeln (Luku1,' jaettuna ',luku2,' on ',jakotulos); { Kirjoitus ja rivinvaihto } Readln; { Odotetaan kunnes k„ytt„j„ on lukenut } { ..viestin ja painaa ENTERi„ } END. { Lopetetaan ohjelma } Huomaa Writeln -kohdan pilkut! Ne ilmoittavat meid„n haluavan ensin tulostaa muuttuja, jonka j„lkeen teksti ' jaettuna ' jne. Jos muuttujan haluaa tulos- taa ruudulle WRITE/WRITELN -k„skyll„ muun tekstin joukossa, pit„„ muuttuja erottaa tekstijonosta pilkulla (,). WRITE/WRITELN on siis muotoa WRITELN (muuttuja,' teksti aina heittomerkkien sis„„n ',muuttuja2); Kun ohjelma ajetaan (Turbo Pascal 6.0:ssa painamalla: F10 (menuvalikko) R (Run -valikko) R (Run -komento) Tai painamalla CONTROL (CTRL) pohjaan ja painamalla F9 ) syntyy ruudulle seuraavanlainen tulostus: 90 jaettuna 2 on 4.5000000000E+1 joka tarkoittaa 45. Saadaksemme viestin tulemaan ruudulle paremmin ymm„rret- t„v„ss„ muodossa meid„n pit„„ hieman py”rist„„ ulkoasua. Meid„n tulee ik„„nkuin "katkaista" tuo merkitykset”n nollien jono pois tulostuksesta, joka tapahtuu seuraavasti: muuttujan (REAL -muuttujatyypit ainoastaan!) nimen j„lkeen ilmoitetaan montako lukua haluamme tulostuvan, ja montako tulostuvista luvuista pit„„ olla desimaaleja (montako lukua nollan j„lkeen). Muoto menee siis: MUUTTUJA : lukuja_yhteens„ : desimaaleja erotin-^ ^--erotin Esim. Lauseke tulostus PI 3.1415926536E+00 PI : 4 : 3 3.142 Yll„olevan ohjelman saa helpommin luettavaan muotoon lis„„m„ll„ jakoj„„nn”ksen loppuun n„m„ muotoilut: Writeln (Luku1,' jaettuna ',luku2,' on ',jakotulos : 4 : 2); ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | k„sky | erotin | muuttuja | | | | muuttuja teksti„ muuttuja | | kaksi (2) erotin | desimaalia yhteens„ nelj„ (4) lukua Jolloin ajon tulos on: 90 jaettuna 2 on 45.00 Jos k„sky laitettaisiin muotoon jakotulos : 4 : 0 olisi tulos seuraavanlai- nen: 90 jaettuna 2 on 45 ^---huomaa kaksi v„lily”nti„ koska lukuja on yhteens„ 4, joista kaksi tyhj„„. Oikea muoto loppujen lopuksi oli jakotulos : 2 : 0 jolloin tulos olisi: 90 jaettuna 2 on 45 Huomaa ett„ t„llaiset "katkaisut" eiv„t ole pysyvi„ (toimivat siis vain yhden k„skyn yhteydess„! Uuteen WRITELN/WRITE k„skyyn pit„„ laittaa uusi "katkaisu"). Ainoa vaikeus on p„„tt„„ etuk„teen montako lukua tai desimaalia tulisi tulostuksessa k„ytt„„, mutta koska kysymys on aika ymp„ripy”re„, kuten t„m„ tekstikin, j„t„n tuon huolen teid„n harteillenne; t„rkeint„h„n on ymm„rt„„ koko k„skyn olemus: miksi sit„ k„ytt„„ ja miten. Jos et ymm„rr„, lue uudestaan yl„puolella oleva teksti, kertaa, lue viel„ uudestaan, yrit„ kokeilla ohjelmointiymp„rist”ss„ asioiden toiminta ja jos viel„k„„n et ymm„rr„, pyyd„ opettajaa (huh?) tai vaikkapa kirjoittajaa selitt„m„„n aivan juurta jaksaen asia. Kaikki mukana? Jatketaan, eli matemaattiset kaavat ovat seuraavina vuorossa: MATEMAATTISET KAAVAT V„liotsikon tulisi kuulua: miten laskea Turbo Pascalissa, mutta eik”h„n tuo nimi ole paljon komeampi? Matemaattisia merkint”j„ ovat: INTEGER REAL STRING HUOMATTAVAA + Yhteenlasku Yhteenlasku Yhdist„minen kokonaisluku/murtoluku - V„hennys V„hennys --- kokonaisluku/murtoluku * Kertominen Kertominen --- My”s murtoluvut / --- Jako --- Tulos muotoa REAL DIV Kokonaislukujen jako --- --- kokonaisluvut ainoastaan MOD Kokonaislukujen --- --- kokonaisluvut ainoastaan kertominen N„it„ merkkej„ voidaan siis k„ytt„„ laskuihin, joita muuttujien k„sittelyss„ tarvitaan. Lis„ksi TP sis„lt„„ lukuisia k„skyj„ joilla voidaan k„sitell„ lukuja kuten kulmia, SINej„ ja erilaisia k„yri„, mutta koska t„ss„ pysytte- lemme aivan alkeissa, n„m„ nk. FUNKTIOT j„tet„„n pois. Huomaa ett„ STRING (merkkijono) tyyppisi„ muuttujia k„ytett„ess„ ainoa kaava jota voidaan k„ytt„„, on yhteenlasku, eli t„ss„ tapauksessa kahden merkkijonon yhdist„minen (esim. kokonimi := etunimi + sukunimi;). Character (CHAR) eli merkki tyyppist„ muuttujaa voidaan k„ytt„„, kuten edell„ mainittiin l„hinn„ merkin lukemiseen n„pp„imist”lt„. Koska se on vain yhden merkin pituinen, sit„ ei voida k„ytt„„ laskemiseen (1 merkki + 1 merkki = 2 merkki„ eli tulos on jo tyyppi„ STRING). DIV ja MOD kaavojen tulos on kokonaislukua, eli kun n„it„ k„ytet„„n, k„„nt„j„ "katkaisee" merkkijonon nollan j„lkeen, jolloin tulos on kokonaisluku (vaikkakaan ei kovin tarkka!). Esim. 99 DIV 8 = 12 (v„„rin koska 8 * 12 = 96) 99 / 8 = 12.37 (oikein, vaikkakin likiarvo. Tulos tyyppi„ REAL) 12 MOD 2 = 24 1 +1 = 2 (miss„s koulussa me olimmekaan...) 3 -2 = 1 (tarkista laskimella) 1 * 0 = 0 (yep!) KOULU = 'Kauppa'+'oppi'+'laitos' (KOULU=Kauppaoppilaitos) Huomaa yll„olevan tekstinyhdist„misen muoto; muuttuja on AINA vasemmalla!) Paras tapa oppia n„iden k„ytt” on ottaa kone siev„sti eteen ja alkaa laskea esim. tekem„ll„/tutkimalla seuraavanlaista ohjelmaa {kommentit eiv„t ole pakollisia} PROGRAM lukujen_laskua; { ja se otsikko } VAR luku : integer; { muuttujien esittely } luku2 : integer; etunimi:string; sukunimi :string; BEGIN writeln (' Esimerkki ohjelma luvuista '); {tuloste} write(' LUKU 1 : '); { huomaa: ei rivinvaihtoa } readln (luku); { lukeminen p„„ttyy ENTERiin } write(' LUKU 2 : '); { samat asiat toiselle muuttujalle } readln (luku2); { huomaa ett„ voit todellakin sy”tt„„ } { mitk„ luvut tahansa (-32000 - +32000)} Writeln (luku,' + ',luku2,' = ',luku+luku2); { ynn„ys } Writeln (luku,' - ',luku2,' = ',luku-luku2); { v„hennys } Writeln (luku,' * ',luku2,' = ',luku*luku2); { kertominen } Writeln (luku,' / ',luku2,' = ',luku/luku2); { jakaminen } Writeln (luku,' / ',luku2,' = ',luku/luku2:8:2); {..muotoiltuna} Writeln (luku,' DIV ',luku2,' = ',luku DIV luku2); { jakaminen } Writeln (luku,' MOD ',luku2,' = ',luku MOD luku2); { kertominen } writeln; { tyhj„ rivi } write ('Etunimi: '); readln(etunimi); write('Sukunimi: '); readln(sukunimi); writeln('Kokonimi: ',etunimi + ' ' + sukunimi); {yhdist„minen } {ja v„lily”nti} readln; { k„ytt„j„n kuittaus } END. { Loppu, finito, The End jne. } Muuttujille voidaan my”s antaa toisen muuttujan arvo, jos n„m„ kaksi ovat samaa muuttujatyyppi„. Esim. Luku1 := Luku2; Etunimi:=Nimi2; HUOMATTAVAA: -muuttuva muuttuja on AINA := -merkin vasemmalla puolen - := -merkin oikealle puolelle AINA luvut jotka antavat arvon muuttujalle -muutokset ovat pysyvi„, kunnes niit„ muutetaan uudestaan -muuttujan toisesta muuttujasta erottaa pilkku -muuttujan ja tekstin erottaa pilkku ja heittomerkki (kuten aina tekstiss„) -muuttuja 'katoaa' ohjelman p„„tytty„, jos sit„ ei ole talletettu esim. tiedostoon -desimaali- eli murtoluku voidaan katkaista py”rist„m„ll„ muuttuja : montako_lukua_yhteens„ : montako_desimaalia -normaalit laskumerkit: +,-,/,* -kokonaislukulaskut: +,-,DIV,MOD -tekstin yhdist„minen: tekstimuuttuja + tekstimuuttuja tekstimuuttuja + 'teksti„' MIETI JA KERTAA JOS ET YMMŽRRŽ 1. Miksi muuttujien pit„„ muuttua? 2. Kumpi saa kumman arvon: muuttujaA := MuuttujaB; ? 3. Onko sallittua laskea 100 * 100 * 100 ? (INTEGER) 4. Laske: 100 DIV 3 5. Vertaa: 100 DIV 3 ja 100 / 3 6. Yhdist„ kaksi merkkijonoa k„ytt„m„ll„ + (yhdist„) -merkki„ ENSIMMŽINEN OHJELMA Allaolevista ohjelmaesimerkeist„ voidaan huomata kaikki aiemmin k„sitellyt asiat, ja ohjelmaa ennen on tarkoituksena viel„ kerrata asiat. Miten tehd„ ohjelma, joka kysyy k„ytt„j„n nime„ ja tulostaa sen ruudulle? Ensinn„kin tarvitaan YKSI muuttuja, johon talletetaan k„ytt„j„n antama tieto eli t„ss„ tapauksessa nimi. Annetaan t„ll„ kertaa muuttujan nimeksi vaikkapa NIMI. Mit„ muuttujatyyppi„ arvelisit tuon muuttujan olevan? (vaihtoehdot: REAL INTEGER CHAR STRING, katso tarkemmin MUUTTUJATYYPIT koh- dasta) Mit„ tuon muuttujan tulee sis„lt„„? Desimaali lukuja (REAL) ? Vai kokonaislukuja (INTEGER)? Yhden merkin (CHAR)? Vai merkkijonon (STRING)? Tuleeko tuolla muuttujalla laskea matemaattisia kaavoja (INTEGER ja REAL)? Jos vertailet muuttujan sis„lt”„ yll„oleviin kysymyksiin, ei vaihtoehdoksi j„„ kuin yksi muuttuja tyyppi: (joka on?) NIMI on siis muuttuja joka sis„lt„„ teksti„, eli merkkijonon, eli muuttujatyypiksi laitamme STRING! Lis„ksi tarvitaan lauseet, joilla luetaan n„pp„imist”lt„ k„ytt„j„n antama nimi, ja toinen lause jolla kirjoitetaan tuo nimi ja muuta teksti„ ruudulle. Saadaksesi selville nuo lauseet, katso kohta PERUSKŽSKYT. Tarvitsemme siis seuraavat k„skyt: READLN, jolla luetaan muuttuja n„pp„i- mist”lt„; WRITELN, jolla kirjoitetaan muuttuja kuvaruudulle; sek„ tietysti tuo itse muuttuja. Voimme my”s nimet„ ohjelman, nimeksi voit antaa vaikkapa NIMEN_KYSYMINEN (huomaa alaviiva! ei v„lily”nti„, vaan alaviiva!) Kirjoita ohjelman runko seuraavasti {kommentteja ei tarvitse kirjoittaa!} PROGRAM nimen_kysyminen; { kirjainkoolla ei v„li„! Kai muistat? } USES Crt,Dos; { peruskirjastot, sis„lt„v„t k„skyt } VAR { muuttujan esittely } NIMI : String; { nimi sis„lt„„ teksti„ } BEGIN { ohjelma alkaa } WRITELN ('KIRJOITA NIMESI: '); { kirjoittaa ruudulle tekstin } READLN (NIMI); { lukee k„ytt„j„n vastauksen } WRITELN ('NIMESI ON ',nimi); {kirjoittaa teksti„ ja nimen } READLN; { odottaa k„ytt„j„n painallusta } END. { ohjelma on valmis! } Talleta ohjelma painamalla F2 ja antamalla nimi ohjelmalle (nimell„ ei ole v„li„, kunhan se on alle 8 merkki„ pitk„ (oletus p„„te on .PAS)). Aja ohjelma painamalla CTRL + F9. Ruudulle tulee seuraavat sanat: KIRJOITA NIMESI: _ kirjoita haluamasi nimi (nimi on muuttuja, eli voi saada mink„tahansa k„yt- t„j„n antaman arvon), esim. Risto. T„m„n j„lkeen paina ENTERi„, ja tulostus n„ytt„„ esimerkiksi seuraavalta (kaikki isolla olevat pit„isiv„t olla samoja sinunkin ruudulla, koska itse ohjelma kirjoittaa ne aina samalla tavalla): KIRJOITA NIMESI: jussi NIMESI ON jussi Jos ohjelma ei toiminut, vertaa sit„ yll„olevaan valmiiksi kirjoitettuun tekstiin ja katso ett„ kaikki puolipisteet (;), pilkut (,) ja k„skyt ovat kuten esimerkiss„. Muuten ensimm„inen ohjelmasi on valmis! Ei kai liian vaikeaa? (jos tuntuu vaikealta, lue uudestaan edellisi„ kappaleita) Toinen ohjelma: PROGRAM kaksi_lukua; { k„sitell„„n muuttujia } USES Crt, Dos; VAR Luku1,luku2 : Integer; { kaksi kokonaislukua } luku3 : real; { desimaaliluku } BEGIN WRITE(' KOKONAISLUKU 1 : '); READLN (luku1); WRITE(' KOKONAISLUKU 2 : '); READLN(luku2); LUKU3 := Luku1 / luku2; {luku3 on luku1 jaettuna luku2 } WRITELN(luku1,' jaettuna ',luku2,' on ',luku3 : 8 : 4); READLN; END. Aja ohjelma kuten ylempi ohjelmaesimerkki. Huomaa lukua numero 3 kirjoitettaessa muuttujan per„ss„ tulevat kaksi lukua, joilla muotoillaan tulostuksessa korkeintaan 8 lukua, joista 4 on pilkun j„lkeen (eli desimaaleja). Lue kohta MATEMAATTISET KAAVAT, ja vertaa yll„- olevaan esimerkkiin. UUSIA KŽSKYJŽ Kirjastoissa on useita todella hy”dyllisi„ k„skyj„ kohdassa PERUSKŽSKYT olevien lis„ksi. Seuraavaksi esitell„„n niist„ muutamia, aivan yksinkertai- simmasta p„„st„. Jokaisen k„skyn kohdalla lis„ksi esitell„„n kirjasto, josta k„sky l”ytyy ja mi(t)k„ kirjasto(t) pit„„ ohjelman USES -osassa esitell„. Lis„ksi k„skyn kohdalta l”ytyy muuttujat, jotka pit„„ antaa k„skylle, jos niit„ on. Esim WRITE(x : string) tarkoittaa ett„ write -k„skylle pit„„ antaa kirjoitettava asia, joko muuttuja tai teksti (tietysti lainausmerkeiss„: 'teksti'), ja ett„ muuttujan pit„„ olla tyyppi„ STRING eli merkkijono. GOTOXY (x,y : integer); USES CRT; Siirt„„ KURSORIN riville y, kohtaa x (aivan kuin koordinaatistossa: x on vaaka-akseli ja y on pystyakseli). Seuraava kirjoitettava teksti siirtyy t„h„n kohtaan. HUOM! Koska ruudulla on 80 x 25 merkki„, saa x olla korkein- taan 80 ja y korkeintaan 25. Esim. GOTOXY (40,12); { siirt„„ kursorin melko keskelle ruutua } GOTOXY (1,1); { siirt„„ kursorin vasempaan yl„kulmaan } GOTOXY (sarake,rivi); {siirtyy muuttujan SARAKE sis„lt„m„n luvun } { ..ilmoittamaan kohtaan riville RIVI } TEXTCOLOR (v„ri : integer); USES CRT; Vaihtaa kirjoitettavan tekstin v„ri„, v„ri voi olla joko numero, tai kir- joitettu VAKIONIMI, joita on (vain jompikumpi k„y, ei molemmat): Tummat v„rit º Vaaleat v„rit (tekstiv„ri & º Ainoastaan taustav„ri) º tekstiv„ri ÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍ Black ³ 0 º DarkGray ³ 8 Blue ³ 1 º LightBlue ³ 9 Green ³ 2 º LightGreen ³ 10 Cyan ³ 3 º LightCyan ³ 11 Red ³ 4 º LightRed ³ 12 Magenta ³ 5 º LightMagenta ³ 13 Brown ³ 6 º Yellow ³ 14 LightGray ³ 7 º White ³ 15 Huomaa ett„ jos haluat kirjoittaa v„rin nimen, joudut kirjoittamaan sen kuten yll„, eli englanninkielisen„. Voit antaa nimen siis joko kirjoittaen tai numerona. Oikeanpuolimmaisen sarakkeen tietoja voit k„ytt„„ ainoastaan edustan (tekstin-) v„rin valitsemiseen, vasemman tiedot k„y my”s taustan v„rin valitsemiseen (katso alta). Jos haluat tekstin vilkkuvan, lis„„ per„„n sana BLINK tai numero 128 (samaa muotoa kuin v„ri). Ohjelman suorittamisen ja k„„nn”ksen kannalta n„ill„ kirjoitustavoilla ei ole eroa, ohjelman lukemisen (toisen suorittama lukeminen tai tarkistaminen) kannalta v„rin kirjoittaminen on selke„mpi tapa, koska kaikkia v„rej„ ei t„ll”in tarvitse opetella ulkoa tai katsoa taulukoista (?). Esim. TEXTCOLOR (6); { Brown = ruskea tekstiv„ri } TEXTCOLOR (15); { White = valkoinen } TEXTCOLOR (BLUE); { 1 = sininen } TEXTCOLOR (LightRed); { 12 = vaalea(n) punainen } Vilkkuvat merkit: TEXTCOLOR (6 + 128); { ruskeat, vilkkuvat merkit } TEXTCOLOR (White + Blink); {valkoiset, vilkkuvat merkit } TEXTCOLOR (LightGray + BLINK); {vaaleanharmaat ja vilkkuvat } TEXTBACKGROUND (V„ri : integer); USES CRT; Kuten textcolor, mutta muuttaa tekstin taustan v„ri„, joka voi saada yll„ olevan taulukon vasemmanpuolimmaisesta sarakkeesta mink„tahansa arvon (eli arvot 0 - 7, Black .. LightGray). Huomaa ett„ tausta ei vaihdu ennen kuin kirjoitetaan ruudulle tai tyhj„t„„n ruutu (CLRSCR -k„sky). K„sky EI voi saada vilkkuvaa arvoa (BLINK tai 128). Esim. TEXTBACKGROUND (0); { musta (oletus) tausta } TEXTBACKGROUND (BLUE); { sininen tausta } SILMUKAT eli "LOOPIT" Tutki seuraavaa ohjelman p„tk„„: PROGRAM Luvut; { Ei pakollinen! } USES DOS; { K„yt„mme vain dos-kirjastoa } BEGIN { Ohjelma alkaa } Write('1 '); { Kirjoitamme ruudulle luvun 1 sek„ v„lily”nnin } Write('2 '); { Huomaa ett„ luvut tulevat per„kk„in, koska .. } Write('3 '); { emme k„yt„ WRITELN k„sky„ (joka kirjoittaa .. } Write('4 '); { ja siirt„„ kursorin seuraavan rivin alkuun! } Write('5 '); Write('6 '); Write('7 '); Write('8 '); Write('9 '); Write('10'); { Viimeinen! } Readln; { Odotamme k„ytt„j„n painavan ENTERi„.. } END. { Ohjelma loppuu } Ruudun pit„isi n„ytt„„ seuraavalta (Voit katsoa ohjelmasi aikaansaamaa ruutua painamalla ALT+F5 tai valitsemalla Debug valikosta kohdan User screen): 1 2 3 4 5 6 7 8 9 10 _ N„in ohjelma on viel„ jotenkuten kasassa ja kirjoitusvaivakaan ei ole mahdoton, mutta ent„ jos lukuja olisi sata tai tuhat tai ehk„p„ MILJOONA? Jaksaisitko kirjoittaa MILJOONA WRITE k„sky„? Tietokoneen tarkoitushan on helpottaa ihmisen ty”skentely„, joten annetaan koneen tehd„ vaikea ty”.. Seuraava ohjelma kirjoittaa FOR-k„sky„ k„ytt„en luvut yhdest„ tuhanteen (1-1,000): PROGRAM Nayta_Luvut; { Otsikko } USES Dos; { Kirjastot } VAR Luku:Integer; { Byte -muuttujatyyppi ei riit„! } BEGIN { Ohjelman alku } Luku:=0; { Ei pakollinen, varmuuden vuoksi nollataan! } FOR Luku:=1 TO 1000 DO Write(luku,' '); { Huomaa FOR k„skyn muoto} {Kirjoitamme luvun arvon ja v„lily”nnin! } Readln; { ENTERill„ jatkuu.. } END. { Ohjelman maailmankuulu loppu } FOR k„skyn muoto on siis FOR :=mist„ TO mihin DO mit„ tai jos halutaan tehd„ useampia k„skyj„ niin: FOR :=mist„ TO mihin DO BEGIN <.jne..> END; { HUOMAA PUOLIPILKKU ENDIN PERŽSSŽ!!! EI PISTETTŽ! } FOR k„skyn saa my”s laskemaan "v„„rinp„in" eli alasp„in, k„ytt„m„ll„ TO sanan sijasta sanaa DOWNTO (alasp„in). Esimerkiksi: FOR Ajan_Lasku:= 100 DOWNTO 1 do BEGIN write (' ',Ajan_Lasku); { Huomaa v„lily”nnin paikka! } END; Sama lyhyemmin esitettyn„ (ohjelmahan sis„lt„„ vain yhden k„skyn, joten se voidaan kirjoittaa kuten ylemp„n„ esitettiin ts. lyhyemmin): FOR Ajan_Lasku:= 100 DOWNTO 1 DO write (' ',Ajan_Lasku); T„rkeisiin looppeihin eli silmukoihin eli toistolausekkeisiin kuuluu my”s REPEAT-lause, joka toistaa kuten FOR -lausekkin samaa rutiinia, kunnes tietty ehto/tietyt ehdot t„yttyv„t. REPEAT lause voidaan laittaa loppumaan esim. sadannen kerran j„lkeen tai kunnes k„ytt„j„n sy”tt„m„ luku on nolla tai kunnes viisi minuuttia on kulunut. Kuten voit jo edellisest„ listasta voit arvata, seuraa per„ss„ hieman yksityiskohtaisempaa (ja pidemp„„..) tietoa REPEATin k„yt”st„. REPEAT on yksi ohjelmoijan ensimm„isi„ perus- vaatimuksia, sen hallinnalla p„„see jo ERITTŽIN pitk„lle (koulun l„pi ainakin ;) ). Miten REPEAT eroaa FOR lauseesta? REPEAT k„ytt„„ paljon "sumeampia" ehtoja lopettaakseen silmukan eli loopin (aina UNTIL jotakin). Toisinsanoen FOR lauseessa joudutaan m„„ritell„ tarkasti mist„ mihin asti silmukkaa suoritetaan. REPEAT lause on aina muotoa: REPEAT UNTIL ehto; Esimerkki 1 ( silmukka ): PROGRAM yksi_viiva_sata; { ei pakollinen! } USES DOS; { k„yt„mme ainoastaan DOS kirjastoa } VAR Luku:Byte; { s„„st„mme muistia (luku v„lilt„ 0..255)} BEGIN { ohjelma alkaa } Luku:=1; { aloitamme numerosta yksi } REPEAT { silmukan alku } Write (luku,' '); { kirjoitetaan luku ruudulle } Inc(Luku, 1); { t„ysin sama kuin LUKU:=LUKU+1 } UNTIL Luku>=100; { Lopetetaan silmukka sadannen kerran j„lkeen! } END. { ohjelman loppu } Edellinen esimerkki on itse asiassa HUONO esimerkki repeat lauseesta koska saman olisi voinut esitt„„ FOR lauseella muodossa: PROGRAM yksi_viiva_sata; USES DOS; VAR Luku:Byte; BEGIN FOR Luku:=1 TO 100 DO write(luku,' '); { luku ja v„lily”nti } END. Esimerkki 2 (kirjoitetaan k„ytt„j„n sy”tt„m„t luvut ruudulle, kunnes luku on nolla) PROGRAM Kaiku; USES DOS; VAR Luku:Integer; { emme voi tiet„„ mik„ luku on! } BEGIN Luku:=0; { alkuarvo on nolla, varmuuden vuoksi! } Writeln (' Kirjoita jokin luku (alle 32000!)'); { pieni apu! } Writeln (' Lopeta kirjoittamalla luvuksi nolla (0)'); REPEAT ReadLn (luku); WriteLn (Luku); UNTIL Luku=0; { Toistaa kunnes luku on nolla } END. REPEAT lauseelle kelpaa loppuehdoksi my”s BOOLEAN tyyppinen muuttuja. T„st„ on hy”ty„ halutessasi jatkaa silmukkaa vain tietyin ehdoin. HUOM! REPEAT lause eroaa FOR lauseessa my”s silmukan aloittamisen suhteen! REPEAT toistaa lausetta/lauseita kunnes LOPPUEHTO toteutuu, kun FOR taas ALOITTAA silmukan jos ehdot ovat voimassam, eroa kertyy siis YHDEN loopin eli toiston verran. WHILE lause on k„ytt”kelpoinen silmukka esim. levyn lukemisessa. WHILE silmukan k„ytt”„ selostaa seuraava esimerkki: PROGRAM YhteenLasku; { Tietty vastaus lopettaa } USES DOS; VAR Luku1, Luku2 : Integer; { Katso selostus alta } Vastaus : Integer; { Lukujen vastaus < 32000 } BEGIN { Ohjelma alkaa .. } Vastaus := 1; { Nollataan vastaus } WriteLn ('YHTEENLASKU'); { Ei unohdeta k„ytt„j„„..! } WriteLn ('LASKEE YHTEEN KAKSI LUKUA, KUNNES VASTAUS ON 0'); WHILE Vastaus<>0 do BEGIN Write ('LUKU 1: '); ReadLn (Luku1); Writeln(' +'); Write ('LUKU 2: '); ReadLn (Luku2); Vastaus:=Luku1+Luku2; Writeln(' ',vastaus); END; { Huomaa PuoliPiste, ei piste } END. { .. Ohjelma loppuu } TŽRKEITŽ SANOJA bin„„ri kaksikantainen (symbolit 1 ja 0) matemaattinen lukuj„rjestelm„, joka sopii tietokoneelle kaikista lukuj„rjestelmist„ parhaiten, koska tietokoneen muisti ja k„skyt toimivat s„hk”varauksilla, jotka voivat ilmaista kahta tilaa, eli 1 (s„hk”varaus) ja 0 (ei s„hk”varausta). Tietokoneen konekieli on bin„„ripohjaista, eli siin„ on vain nollia ja ykk”si„. suoritin (prosessori = processor) koneen keskusyksikk”, joka sis„lt„„ rekistereit„ ja aritmeettis -loogisen yksik”n sek„ 80486 -suorittimissa my”s matemaattisen suoritinyksik”n. k„sky (command) ohje, jolla ohjataan koneen toimintaa. TP:ssa k„sky on yleens„ alunperin tehty symbolisella konekielell„, ja TP:ssa on niinkatsottu k„sky rajapinta (command interface) eli TP:sta voidaan kutsua k„skyj„, riippumatta mill„ kielell„ se on tehty. K„skyn pit„„ t„ytt„„ tietyt ehdot, jotta sit„ voidaan k„ytt„„. k„„nt„j„ Ohjelma, joka tulkitsee (k„„nt„„) k„skyt koneen ymm„rt„m„„n muotoon. erotin k„skyjen erottimena k„ytet„„n TP:ssa puolipistett„ (;). kirjasto (library,unit = Turbo Pascal Unit (TPU)) kokoelma k„skyj„ joita voidaan ohjelmassa k„ytt„„. Turbo Pascalin mukana tulee joukko nk. peruskirjastoja, joita voidaan k„ytt„„ l„hes kaikkiin tarkoituksiin (tai niit„ yhdistelem„ll„ voidaan muodostaa lis„„ k„skyj„ tai kirjastoja). vakiosana Sana jonka k„„nt„j„ ymm„rt„„ "ohjauskoodiksi", ja ymm„rt„„ my”s ajaa ohjelmaa eteenp„in sen mukaan (vakiosanat l”ytyv„t (osaksi) OPI OIKEIN PASCAL LIITE 2-1). tiedosto levylle kirjoitettu tieto, joka muodostaa tiedoston. kommentti Ainoastaan ohjelman lukemisen ja tutkimisen helpottamiseksi k„skyjen joukkoon laitettu teksti, jonka erottaa (* *) merkeist„ tai hakasulkeista [ ]. muuttuja (variable) ohjelman ajon (k„yt”n) aikana muuttuva tieto, joka esitell„„n ohjelman alussa VAR osassa. muuttujatyyppi m„„rittelee muuttujan tyypin, onko se kokonaisluku, desi- maaliluku, merkki, merkkijono vai totuusarvo. matemaattiset symbolit eli matemaattiset kaavat joilla k„sitell„„n lukuja ja muuttujia. kursori (kehotin,cursor) kohta johon seuraava kirjoituslause kirjoittaa, paikka johon edellinen kirjoituslause on siirt„nyt kursorin (aivan kuin itse kirjoittaisit, kursori siirtyy eteenp„in, vaihtaa rivi„ jne.). Kursoria voidaan siirt„„ tiettyyn paikkaan ruudulla. looppi (toistolauseke,loop) toistaa ohjelman osaa kunnes tietty ehto t„yttyy (tai tieten tahtoen t„ytet„„n!). Ehdon on TŽYTYTTŽVŽ tai muuten loopista tulee p„„ttym„t”n (Turbo Pascalissa on onneksi olemassa CTRL+BREAK keskeytys, joka palauttaa k„ytt„j„n Turboon). TAULUKOT, JOTKA OVAT HY™DYLLISIŽ OLLA ESILLŽ (kannattaa tulostaa) Tummat v„rit º Vaaleat v„rit Uses CRT; (tekstiv„ri & º Ainoastaan taustav„ri) º tekstiv„ri Begin ÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍ TextColor (11); Black ³ 0 º DarkGray ³ 8 textCOLOR (Cyan); Blue ³ 1 º LightBlue ³ 9 TEXTCOLOR (black); Green ³ 2 º LightGreen ³ 10 textcolor(random(16)); { arpoo 0-15 } Cyan ³ 3 º LightCyan ³ 11 textcolor(11); Red ³ 4 º LightRed ³ 12 textcOLOr (white+blink); Magenta ³ 5 º LightMagenta ³ 13 teXTCoLOR (1+blink); Brown ³ 6 º Yellow ³ 14 TExTColoR(Brown+128); LightGray ³ 7 º White ³ 15 textbackground (black); º BLINK ³ 128 TEXtBAckGround(random(8)); End.