i i “966-Lokar-naslov” — 2009/6/3 — 9:42 — page 1 — #1 i i i i i i List za mlade matematike, fizike, astronome in računalnikarje ISSN 0351-6652 Letnik 17 (1989/1990) Številka 6 Strani 338–343 Matija Lokar: GRAFIKA IN DELO Z ZASLONOM V TURBO PA- SCALU Ključne besede: računalništvo. Elektronska verzija: http://www.presek.si/17/966-Lokar.pdf c© 1990 Društvo matematikov, fizikov in astronomov Slovenije c© 2009 DMFA – založništvo Vse pravice pridržane. Razmnoževanje ali reproduciranje celote ali posameznih delov brez poprejšnjega dovoljenja založnika ni dovo- ljeno. oQr-ll"\IOI NC 'l'n'" , _ _ III IL _, I v _ GRAFIKA IN DELO Z ZASLONOM V TURBO PASCALU Proizvajalka Turbo pascala, firma Borland, je s Turbo pascalom . verziji 4 in 5. vpeljala poleg obstoječih razširitev standardnega pascala, še vrsto novih posebnosti. Najpomembnejša je vpeljava modula. ali kot ga imenuje Turbo pascal. UNIT. nekakšne knjižnice podprogramov. Module lahko pišemo tudi sami. Vendar se bomo tu omejili na to. kako uporabljamo obstoječe. Skupaj s Turbo pascalom dobimo osem standardnih modulov. To so System, Overlay, Graph, Dos, Crt , Turbo3, Graph3 in Printer. Če želimo kak modul uporabljati . moramo to v programu tudi povedati. To storimo tako . da še pred vsemi ostalimi deklaracijami uporabimo novo rezervirano besedo uses in nato naštejemo uporabljene module. Kakor hitro je v našem programu ta deklaracija . že lahko uporabimo vse podprograme in funkcije. ki so napisani v posameznem modulu . kot bi bili del standardnega pascala. program izpis; uses Crt ; begin GotoXY(10,10) ; writeln(' Izpis na mestu 10,10 ' ) end. Podprograma GotoXY standardni Turbo pascal ne pozna. Če ne bi navedli uses Crt. bi prevajalnik javil. da procedure ne pozna. Z navedenim stavkom pa smo si omogočili uporabo vseh podprograrnov. ki so v modulu Crt. Seveda pa mora imeti Turbo pascal dostop do datotek. kjer ti moduli so . Če bo prevajalnik protestiral. češ .. da določenega modula ne najde. povprašajte kakega izkušenejšega kolega. kako pokažemo Turbo pascalu. kje moduli so. V nadaljevanju si bomo ogledali uporabo dveh modulov in sicer modula Crt , ki skrbi za delo z zaslonom in tipkovnico in modula Graph . ki nam nudi grafične podprograme. Našteli bomo le manjši del podprog ramov. ki so na voljo v obeh modulih. Spisek vseh si lahko ogledate s pomočjo v Turbo pascal vgrajene pomoči . Poglejmo. kako. Kjerkoli v Turbo pascalu pritisnimo na III]. Ne glede na izpisano informacijo pritisnimo še enkrat na III]. Na zaslonu bomo dobili glavni jedilnik pomoči. Z nekaj zapored nimi pritiski na puščice osvetlimo napis Units in pritisnimo IEnter I. V oknu pomoči bomo dobili izpisan seznam vseh osmih modulov. Osvetlimo ime modula o katerem želimo informacije in pritisnemo IEnter I. S tipkama IPgDn I in IPgUp I se premikamo po dobljenem besedilu gor in dol. Tekst je seveda v angleščini. 339 pa bo že šlo. Več o načinu uporabe pomoči si lahko ogledate v članku Turbo pascal na hitro v četrti številki Preseka . 1. Modul Crt S pomočjo tega modula opravljamo številne akcije v povezavi s tipkovnico in zaslonom . Lahko npr . zbrišemo zaslon. čakamo določen čas. se postavimo z utrlpa čern na poljubno mesto na zaslonu . .. . . Vsebuje številne podprograme. ki so bili standardni v verziji 3.0. Navedimo nekaj najpogosteje uporabljanih. Pri vsakem podprogramu bomo navedli kako je deklarira. tako da bomo videli. koliko in kakšne parametre potrebuje. Namesto tipovword in byte si mirno lahko mislite parameter tipa integer. le v pravih mejah mora biti. Več o tem si preberite v prejšnji številki Preseka. v članku Novi tipi v Turbo pascalu. ClrScr zbriše zaslon. procedure ClrScr; Delay procedure Del.ay Ims : wor d) : Prekine izvajanje programa za približno ms milisekund. GotoXY procedure GotoXY(X.Y : byte) ; Utripa č postavi v vrstico Y in stolpec X. Zgornji levi kot zaslona ima koordinati (1.1). koordinati spodnjega desnega kota pa sta odvisni od zaslona . Največkrat sta (80.25). Če sta kordinati napačni. utripa č ostane na svojem mestu . program pa teče dalje. KeyPressed vrne vrednost true. če je bila na tipkovnici pritisnjena tipka. sicer false. function KeyPressed : Boolean; Pritisnjena tipka ostane v vmesnem pomnilniku tipkovnice. Na to moramo paziti. saj če s tipkovnico ne počnemo ničesar. ostane vred- nost funkcije resnično . Npr. pogosto srečamo zanko oblike repeat until KeyPressed. Z zanko želimo doseči. da se izvajanje programa nadaljuje šele po pritisku na poljubno tipko . Vendar. če je ta zanka del neke druge zanke. v kateri ne beremo s tipkovnice. se bo izva- janje prekinilo le pri prvem prehodu zunanje zanke . Pri ostalih bo KeyPressed ostalo true in navedena zanka se bo takoj iztekla. Npr. 340 program a ; uses crt ; begin repeat wr i t e l n ( ' ============== ' ) ; repeat unti l KeyPr ess e d until f alse end. Progra m bo na pritisk na tipko čakal te po prvem izpisu . kasn eje pa ne več. Zato je varneje take prek init ve izpelj ati s funkcijo ReadKey. R eadKey preb ere zna k s t ipkov nice. function ReadKey : char; Pritisnjena tipka se ne poz na na za s lo nu. Ča ka nje na uporabnika izpel- jemo takol e program a ; uses crt ; var c : char ; begin repeat wri t eln ( '====== ====== ==' ) ; c : = ReadKey until false end. 2 . Modul Graph Modul Grap1J vsebu je kon sta nte . tipe in podprogra me za de lo z grafiko. Omogoča delo z veči n o naj bolj razši rje nih gra fič nih s ta nda rd ov za Pc. Sk up aj s Turbo pascalom do bimo go nilnike za na s led nje gra fič ne ada pte rje : CGA. EGA. Hercules . MCGA . VGA, AT&:T 400 . 3270 PC in IBM-8514. T i so na datotekah s pod alj škom EGI. Če bomo pro gr am izvaj ali na ra č u n a l n i ku z gra fič n o kartico Hercul es , mor amo im eti datoteko HERC , EGI. Pa poglejmo. kaj mora mo storiti. če želimo uporablj ati grafiko. Na čin . ki bo o pisan. morda res ni naje lege nt nejši. venda r je dokaj zanesljiv ne glede na 341 organizacijo našega diska . Okostje vsakega našega gra fi č n e g a programa bo približno takšno program grafika ; uses Graph; cons t Pot 'C:\TP'; var GD,GM int eger ; begin { kje so datoteke * .BGI } { zaeetek dela v grafienem naeinu} DeteetGraph(GD,GM) ; InitGraph(GD,GM,Pot) ; { delo .v grafienem naeinu} Readln; CloseGraph; {konec dela v grafienem naeinu} Kot vid imo . smo upora bili kon st anto Pot. s katero smo opisali. kje na disku so ustrezni go nilniki in dve s pre me nijivki. s kat erima se opiše g r afičn a kart ica in na čin del a . Nato smo s proceduro DeteetGraph ugotovili. katera gra fič n a kartica je v našem rač u na l n i k u in z InitGraph prešli v grafičn i način . Le-tega smo zapustili s pomočjo podprograma CloseGraph . Še prej pa smo uporabili trik s stavkom readln. ki prepre či . da bi rezu ltati prehit ro izginili iz zaslona . saj CloseGraph preklopi spet nazaj na tekstovni način in s tem grafična slika izgine z zaslona . Tako pa bo program čakal. dokler ne pritisnemo na IEnte r I· Koordinatno izhodišče (točka (0.0)) je v zgornjem levem kotu . Koordi- nata x narašča proti desn i. Vrednosti koordinate y naraščajo navzdol. Koor- dinati spodnj ega desnega kota sta odvis ni od g r a fi č n e kartice . ki jo uporabl- jamo. Pri nas je najbolj raz širjena karti ca Herc ules . Pri tej sta koordinati spodnj ega desne ga kota (719.347). Omeniti velja še to . da v gra fič ne m na činu ne mo remo uporabljati stan- dardnih podprogramov wr i t e in wr i t e l n . ampak si moramo pomagati s posebn imi podprogrami za izpis . ki so na voljo v modu lu Grapl!. Navedimo sedaj nekatere izm ed več kot 50 podprogramov in funkcij . Circle procedure Cirele(x ,y : integer ; Radius : wor d ) ; 342 Nariše krog s središčem v točki (x, y) in polmerom Radius. Line procedure Line(xl.yl.x2.y2: int eger) ; Nariše daljico z začetkom v točki (xl, yI) in koncem v točki (x2, y2) . LineItel procedure LineRel(Dx.Dy: integer) ; Nariše daljico z začetkom v točki, kjer je trenutno grafični kazalec (rec- imo (x, y)) in koncem v točki (x + Dx, y + Dy). Grafični kazalec je po tem podprogramu v končni točki. LineTo procedure LineTo(X.Y : integer); Nariše daljico z začetkom v točki, kjer je trenutno grafični kazalec. in koncem v točki (x, y) . Grafični kazalec je potem v končni točki . MoveTo premik grafičnega kazalca v določeno točko procedure MoveTo(X.Y: int eger) ; Premakne grafični kazalec v točko (X,Y). Grafični kazalec na zas lonu ni viden. OutTextXY na določenem mestu izpiše niz procedure OutTextXY(X.Y: integer; TextString : string); Izpiše niz TextString z začetkom na mestu (X,Y). teje niz predolg . se ne izpiše (pri standardni nastavitvi). Če želimo izpisati števila. jih moramo prej spremeniti v niz (npr. s podprogramom Str - glej članek v prejšnjem Preseku). PutPixel na določenem mestu nariše točko procedure PutPixel(X.Y: integer; Color: wor d) ; Na mestu (X ,Y) nariše točko v barvi Color (črna = O. bela = 15) . Nastete nlso Jtevllne procedure za razne nastavitve. izpopolnjevanje likov, Itd. Zdo pogosto vpraganje je tudl to, kako sltko 2 zaslona spraviti na paplr. ral ustreznega podprograma v modulu Graph ni. t e bo ra to vet! zanlmanja, bomo v Preseku objavlll ustrezen program, kl ga naldete tudl v knjlgi Matua Lob, n r b o psseal. Tam sl lahko preberete vel! o uporabl modutov In Turbo pascalu nasploh.