274

J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Embed Size (px)

Citation preview

Page 1: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 2: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 3: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

U D K 004.42(075.3) Bl-89

Lietuvos Respublikos švietimo ir mokslo ministerijos leista naudoti 2001 02 06 Nr. 75

Darbas atliktas Matematikos ir informatikos institute ir Kauno technologijos universitete

Recenzentai: Albertas Dinda, Arvydas Verseckas

Darbo vadovas Elmundas Žalys

Redaktorė Rita Julija Klimkienė

Programinė įranga: Tadeuš Seibak

Kompiuterinė grafika: Daiva Sniečkutė, Edita Tatarinavičiūtė

Tekstą kompiuteriu rinko ir maketavo Nijolė Pragarauskienė

Gamybos vadovas Algimantas Paškevičius

Kalbos konsultantė Diana Gustienė

Korektorė Birutė Laurinskienė

Leidyklos TEV internete svetainė www.tev.lt

ISBN 9955-491-01-9

© Leidykla TEV, Vilnius, 2001 © Jonas Blonskis. 2001 © Valentina Dagienė, 2001

Page 4: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Turinys Pratarmė 5

1. Programavimas Turbo Paskaliu 9 1.1. Paskalio programavimo kalba 9 1.2. Turbo Paskalio integruotoji terpė 10 1.3. Darbo su Turbo Paskalio terpe pradmenys 11 1.4. Programos sudarymas 12

2. Pagrindinės valdymo struktūros 14 2.1. Programos struktūra 14 2.2. Priskyrimo sakinys 16 2.3. Sąlyginis sakinys 17 2.4. Ciklas w h i l e 21 2.5. Ciklas f o r 24 2.6. Standartinės funkcijos ir procedūros 26 2.7. Kompiuterinis dialogas 21 2.8. Programavimo kultūra 28

3. Pagrindiniai duomenų tipai 37 3.1. Skaičiai 37 3.2. Simboliai 37 3.3. Loginės reikšmės 41 3.4. Duomenų grupavimas 44 3.5. Didžiausios (mažiausios) reikšmės paieška 47

4. Procedūros ir funkcijos 57 4.1. Procedūros ir parametrų sąvokos 57 4.2. Pradinių duomenų perdavimas 59 4.3. Rezultatų grąžinimas 62 4.4. Funkcijos sąvoka 67 4.5. Vardų galiojimo sritys 69

5. Masyvas ir simbolių eilutė 75 5.1. Masyvo sąvoka 75 5.2. Veiksmai su masyvo elementais 79 5.3. Simbolių masyvai 89 5.4. Simbolių eilutės 91 5.5. Duomenų struktūrų pasirinkimas 96

6. Tekstinės bylos 103 6.1. Bylų skaitymas ir rašymas 103 6.2. Duomenų skaitymas iš bylos į masyvą 109 6.3. Duomenų rašymas iš masyvo į bylą 112 6.4. Duomenų grupavimas skaitant iš bylos 113

Page 5: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

4 Turinys

7. Įrašas 118 7.1. Įrašo sąvoka 118 7.2. Įrašų masyvai 121 7.3. Veiksmai su įrašo tipo duomenimis 125 7.4. Duomenų rikiavimas 133

8. Programavimo technologijos pradmenys 138 8.1. Programos sudarymo etapai 138 8.2. Duomenų analizė 139 8.3. Programos modulinė schema 140 8.4. Modulių dokumentavimas 142 8.5. Programos rašymas, derinimas 142 8.6. Programos testavimas 143 8.7. Programos išbandymas 144 8.8. Programos ir vartotojo ryšys 144 8.9. Programos pavyzdys 145

9. Programos sudarymo pavyzdys 157 9.1. Užduotis: Zoologijos sodai 157 9.2. Užduoties analizė 158 9.3. Duomenų analizė 159 9.4. Pradinių duomenų įvedimas 160 9.5. Dialogo priemonės 161 9.6. Užklausų apdorojimo procedūros 166 9.7. Galutinė programa 173 9.8. Programos modifikacija 180 9.9. Pirmoji programos meniu modifikacija 189

9.10. Antroji programos meniu modifikacija 193 9.11. Trečioji programos meniu modifikacija 195

10. Kompiuterinė grafika 206 10.1. Ekrano paruošimas darbui 206 10.2. Darbo su grafika pabaiga 208 10.3. Koordinačių sistema 208 10.4. Veiksmai su ekranu 209 10.5. Taškai ekrane 209 10.6. Linijų brėžimas 212 10.7. Geometrinės figūros. Figūrų spalvinimo raštai 214 10.8. Teksto spausdinimas 220 10.9. Judesių programavimas 224

Priedai 235

1 priedas. Turbo Paskalio 7.0 integruotoji terpė 235

2 priedas. Svarbiausių Turbo Paskalio procedūrų ir funkcijų sąrašas 247

3 priedas. Pagrindinės Cit bibliotekos priemonės i 252

4 priedas. Pagrindinės Dos bibliotekos priemonės 255

5 priedas. Pagrindinės Graph bibliotekos priemonės .... 257

6 priedas. Turbo Paskalio 7.0 klaidų pranešimai 262

7 priedas. Simbolių lentelės 269

Page 6: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Yra tiktai vienas kelias į žmogų, ir tas kelias vadinasi Pareiga. Užtat aš ir sakau: pabandykime

suprasti gyvenimą kaip pareigą. Kaip žmogaus pareigą žmogui, kaip žmogaus pareigą visuomenei, o visuomenės - žmogui, kaip saulės pareigą žemei, kaip tėvų pareigą vaikams, kaip dirbančiojo pareigą darbui, kaip mūsų pareigą tiesai ir ištikimybei, kaip mokslininko pareigą mokslui <...>

Justinas Marcinkevičius

Pratarmė Šiame kurse mokysimės sudarinėti uždavinių algoritmus ir rašyti jų programas Paskalio programavimo kalba.

Neįmanoma išmokti rašyti, sudarinėti programas vien tik skaitant knygas - šitaip gali-ma tik susipažinti su programavimo elementais ir juos perprasti. Kurti programas galima išmokti tik rašant jas patiems. Kaip dailininkui nepakanka išmanyti spalvų savybes, jų poveikį žmogui, derinimo taisykles, mokėti tapybos techniką, taip ir programuotojui ne-pakanka žinoti vien tik programavimo kalbos konstrukcijas bei taisykles.

Programavimas - itin kūrybiška ir intelekto pastangų reikalinga veikla. Siame vado-vėlyje aiškinsimės, kaip sudaromos programos. Dažniausiai pateiksime visiškai paruoštas nedidelių uždavinių programas, o ne atskiras programavimo konstrukcijas, dažnai aprašo-mas daugelyje programavimo kalbas nagrinėjančių knygų.

Suprantama, iš karto pateikdami programas autoriai gana smarkiai rizikuoja - besi-mokantiems gali būti sunku aprėpti visumą, ypač kai dar netvirtai žinomos pagrindinės programavimo sąvokos. Tačiau tai geriausias kelias išmokti kurti programas. Priešingu atveju bus tik susipažįstama su kalbos konstrukcijų žymenimis ir liks nepatirtas tikrasis programavimo skonis.

Programavimą galėtume palyginti su užsienio kalbos mokymusi. Galima ilgai ir kruopš-čiai mokytis svetimos kalbos dalių, kartoti gramatikos taisykles, tačiau nuvažiavus į užsienį nesusikalbėti gatvėje. Kalba turi būti aktyviai vartojama. Taip ir programavimo kalba - ja reikia bandyti rašyti (žinoma, ir skaityti, nagrinėti kitų sudarytas programas). Iš pradžių tikriausiai nepavyks parašyti programos be klaidų, be užuolankų, - nesijaudinkite, tebū-nie jos ilgesnės, ne itin racionalios, tačiau nuolat bandykite kurti. Palaipsniui išsiugdys programuotojo nuojauta, tobulės algoritmavimo stilius.

Page 7: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pirmajame vadovėlio skyriuje aptariama, kaip pradėti darbą norint surinkti ir atlikti programą kompiuteriu - labai trumpai supažindinama su integruotąja Turbo Paskalio terpe. Išsamiau apie šios terpės galimybes galima pasiskaityti 1-ame priede.

Antrajame ir trečiajame skyriuose aptariamos pagrindinės programavimo valdymo struktūros ir duomenų tipai. Didesnė šių skyrių dalis bus žinoma iš pagrindinės mokyklos algoritmavimo kurso, čia tik pakartosite, prisiminsite.

Ketvirtajame skyriuje supažindinama su procedūros bei funkcijos sąvokomis. Tai vienos svarbiausių programavimo sąvokų, vartojamų norint sudaryti bent kiek didesnes programas (o realiai tik tokios ir būna). Todėl šio skyriaus medžiagą reikėtų nagrinėti itin susitelkus. Būtina atlikti kuo daugiau įvairių pratimų, panagrinėti programų, patiems parašyti bent po keletą procedūrų ir funkcijų.

Penktajame skyriuje aiškinama svarbiausia duomenų struktūra - masyvas bei jo atskiras, patogesnis atvejis darbui su tekstais - eilutė. Čia pateikta nemažai pavyzdžių, kuriuos reikėtų išnagrinėti norint gerai suvokti masyvo esmę.

Šeštajame skyriuje supažindinama su tekstinių bylų sąvoka. Šių bylų nereikėtų labai išsamiai nagrinėti - pakanka gebėti skaityti pradinius duomenis iš bylų bei rašyti rezultatus į bylas. Vėlgi dėmesys čia kreipiamas į programų sudarymą.

Septintajame skyriuje sužinosite apie įrašus. Medžiagos pateikta, sakytume, daugokai, tačiau čia nėra naujų sąvokų - tik mokoma praktiškai panaudoti įrašus, ypač kai tenka sudaryti didesnes programas.

Aštuntasis ir devintasis skyriai yra programavimo pradžiamokslio pabaiga ir kūrybos pradžia. Šiuos skyrius, ypač devintąjį, turėtumėte skaityti ne vieną kartą - apmąstydami, bandydami programuoti ir vėl grįždami į pradžią. Pirmą kartą perskaitę rasite tai, ko jums tuo metu labiausiai reikės. Pirmiausiai išsiaiškinsite, kaip rašyti didesnę programą nei anksčiau pateiktuose pratimuose.

Aštuntajame skyriuje aptariama programų kūrimo metodika, paskui nagrinėjamas nedidelis ir paprastas uždavinys.

Devintajame skyriuje programų kūrimo metodika pakartojama nagrinėjant gerokai didesnį ir sudėtingesnį pavyzdį. Čia laikomasi principo, kad programa „auginama" palaipsniui taip, kad kaskart po pamokos pakilus nuo kompiuterio programa būtų baigtinė ir veikianti. Tai reiškia, jog būtina planuoti darbą taip, kad programa kiekvieną kartą būtų papildoma baigtine veiksmų seka.

Vėliau grįždami prie šių skyrių, ypač devintojo, atrasite daugiau reikalingų dalykų, kurie pradžioje jums atrodė nereikalingi ar net beprasmiški. Suprasite grupinio programavimo jėgą ir žavesį.

Visuose šio vadovėlio skyriuose programų rezultatams įforminti naudojami dialogo ir kompiuterinės grafikos elementai. Paskutiniame dešimtajame skyriuje aprašoma daugiau kompiuterinės grafikos galimybių.

Visuose skyriuose pateikta nemažai pratimų, kuriuos reikėtų atidžiai išnagrinėti ir atlikti kompiuteriu. Dauguma pratimų aptarti, esminiai dalykai išaiškinti, - jums teks tik kai ką pakeisti, papildyti - šitaip geriau suprasite programas sudarančių elementų esmę. Visa tai taikydami savo programose, komponuodami, eksperimentuodami jūs žingsnis po žingsnio mokysitės programuoti. Teks ne kartą grįžti prie šių skyrių medžiagos, atrasti tai, kas pirmą kartą skaitant buvo praleista, nesuprasta ar tuo metu nepatraukė jūsų dėmesio. Jūsų programos tobulės, taps efektyvesnės, patrauklesnės.

Page 8: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Vadovėlis sudarytas taip, kad skaitytojo dėmesys būtų sutelktas į programavimą, uždavinių sprendimą kompiuteriu.

Susipažinus su pagrindinėmis teorijos sąvokomis, patartume iš karto imtis nagrinėti pateiktų pratimų programas. Jei kas nors neaišku, tuomet reikėtų grįžti ir vėl pasigilinti į teoriją. Naudinga atlikti keletą kiekvieno skyrelio pabaigoje pateiktų kontrolinių užduočių. Tačiau svarbiausia - spręsti kūrybines užduotis. Manome, kad tik tokiu atveju galėsite bent kiek pajusti programavimo skonį.

Mokantis šį kursą reikėtų sudaryti bent vieną išbaigtą kūrybinės užduoties programą. Labiau programavimu besidomintys mokiniai galėtų įveikti keletą ar bent vieną sunkesnę užduotį. Kūrybinių užduočių pavyzdžiai pateikti IX skyriuje, tačiau galima ir patiems susigalvoti uždavinį, aptarti su mokytoju ir spręsti.

Kūrybinės užduoties tikslas - patikrinti (gal net svarbiau - pasitikrinti), kaip gebama pritaikyti įgytas žinias. Užduočiai atlikti turėtų būti skiriama keletas pamokų. Užduotis reikėtų suformuluoti bei paskirstyti iš anksto, kad užtektų laiko joms apgalvoti, papildomai medžiagai susirasti. Būtų gerai, jei per kiekvieną naują pamoką galėtumėte skirti keletą minučių konsultacijoms. Ik i užduočiai atlikti skirtų pamokų kiekvienas mokinys turėtų išsiaiškinti ir suplanuoti, kaip ir ką darys, sudaryti savo programų eskizus (schemomis ar programavimo kalba).

Siūloma programavimo pradmenų mokymosi schema parodyta 1 lentelėje.

Šio vadovėlio visų pratimų programų tekstus galima rasti internete. Tinklapio adresas: f t p : / / a l d o n a . m i i . l t / p m s / m o k y k l a / P a s k a l i s /

Pasinaudokite jais - nerinkite pateiktų programos tekstų, jei norite išbandyti juos kompiuteriu ar nedaug modifikuoti. Taupykite laiką produktyvesniems darbams.

Vadovėlį daug kartų skaitė ir vertingų minčių išsakė Klaipėdos „Vėtrungės" gimnazijos informatikos mokytoja Aldona Butkienė. Autoriai nepaprastai dėkingi jai už įdėtą triūsą ir sugaištą laiką.

Page 9: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Taip pat autoriai nuoširdžiai dėkoja kolegai Aidui Žandariui, atidžiai perskaičiusiam rankraštį ir pateikusiam daugybę naudingų pastabų, recenzentams - Švenčionių Ž. Žemaičio gimnazijos mokytojui ekspertui Albertui Dindai ir Kuršėnų L. Ivinskio gimnazijos mokytojui metodininkui Arvydui Verseckui - už kruopštų darbą ir nuolatinį rūpinimąsi, Kauno „Ąžuolo" vidurinės mokyklos informatikos vyr. mokytojai Reginai Zlatkauskienei, pateikusiai įdomių uždavinių.

Laukiame jūsų pasiūlymų. Į autorius galite kreiptis patarimų ir pagalbos šiais adresais: Valentina Dagienė d a g i e n e @ k t l . m i i . l t Jonas Blonskis j onasb@sof t e n . k t u . l t

Autoriai

Page 10: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kur nutiesti keliai, aš pasiklystu. Vandenų platybėj ir dangaus žydrynėj nėra kelių nė pėdsako. Taką dengia paukščių sparnai, žvaigždžių liepsna ir besikeičiančių metų laikų gėlės. Aš klausiu savo širdį, ar mano kraujas žino savo nematomą kelią.

1. Programavimas Turbo Paskaliu Programos rašomos taip, kad būtų galima atlikti jas kompiuteriu ir gauti rezultatus.

Mokydamiesi programuoti turime mokytis dviejų esminių dalykų: sudaryti algoritmus, panaudoti algoritmines konstrukcijas ir atlikti sudarytas programas kompiuteriu. Šie darbai labai svarbūs, abu reikalauja tam tikrų įgūdžių. Šiame skyriuje trumpai aptarsime, kaip atlikti Paskaliu parašytą programą kompiuteriu, t. y. išsiaiškinsime darbo su Turbo Paskalio integruotąja terpe pagrindinius veiksmus. Išsamesni šios terpės veiksmai aprašyti 1-ame priede.

1.1. Paskalio programavimo kalba Algoritmus galima užrašyti įvairiomis programavimo kalbomis. Jų sukurta labai daug

ir vis randasi naujų. Tačiau daugelio jų pagrindinės konstrukcijos panašios. Tik užrašai paprastai šiek tiek skiriasi.

Programavimo kalba tarytum dvipusė: pirma - ji reikalinga žmogui, kad jis galėtų išreikšti uždavinio sprendimą aiškia, trumpa forma, antra - ji skiriama kompiuteriui, kuris turi įvykdyti užrašytas komandas ir gauti rezultatus. Abi pusės yra svarbios. Pradedant mokytis programuoti ypač svarbi pirmoji, nukreipta į žmogų, nes tenka daug kartų patiems skaityti sukurtas programas ir jas nuolatos taisyti. Todėl labai svarbu pasirinkti programavimo kalbą, turinčią aiškias ir patogias konstrukcijas.

Viena tokių yra Paskalio programavimo kalba. Paskalis tinka ir žmogui - algoritmams rašyti bei skaityti, ir kompiuteriui - programoms vykdyti. Todėl Paskalio kalba parašytus algoritmus galima vadinti ir algoritmais, ir programomis, o pačią kalbą - ir algoritmavimo, ir programavimo.

Su Paskalio programavimo kalba jau šiek tiek susipažinote pagrindinės mokyklos baigiamosiose klasėse mokydamiesi informatikos pradmenų kurso. Ten daugiausia dėmesio buvo skiriama algoritmams, o Paskalio kalba vartojama tik kaip viena iš algoritmų užrašymo priemonių. Dabar daugiau dėmesio skirsime pačios kalbos konstrukcijoms, tiksliau sakant - algoritmams užrašyti ir realizuoti Turbo Paskalio sistema.

Paskalio programavimo kalbą sukūrė Šveicarijos Federalinės aukštosios politechnikos mokyklos Informatikos instituto direktorius profesorius Niklausas Virtas (Niklaus Wirth)

Page 11: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

1968-1971 metais ir pavadino ją žinomo prancūzų matematiko ir filosofo Blezo Paskalio {Blaise Pascal, 1623-1662) garbei.

Paskalio kalbos pradžia reikėtų laikyti 1970 metus, kai buvo sukurtas pirmasis šios kalbos transliatorius CDC 6400 kompiuteriui. 1971 m. buvo paskelbtas pirmasis oficialus Paskalio programavimo kalbos aprašas, o po metų pasirodė jo pataisytas variantas.

Vos tik sukurta Paskalio kalba ėmė sparčiai plisti. Ji susilaukė visuotinio pripažinimo ir tapo pagrindine programų publikavimo ir programavimo disciplinos mokymo kalba.

1977 m. buvo sudaryta mokslininkų grupė Paskalio kalbos standartui parengti. Jai vadovavo A. Adimanas (A. M. Addyman). 1983 m. gruodžio 1 d. paskelbtas tarptautinis Paskalio kalbos standartas ISO 7185. Šiuo standartu iš esmės remiamasi kuriant transliatorius įvairių tipų kompiuteriams.

Lietuvoje Paskalio kalba pradėta praktiškai vartoti nuo 1977 m., kai Matematikos ir informatikos (tuometinis Matematikos ir kibernetikos) institutas įsigijo šios kalbos transliatorių kompiuteriui B3CM-6. Nuo 1979 m. Paskalio kalba vartojama neakivaizdinėje Jaunųjų programuotojų mokykloje.

Nors šiuo metu pasaulyje sukuriama vis naujesnių, atrodytų, vis tobulesnių, programavimo kalbų. Paskalis irgi nepraranda vertės - jis labai tinka pradedantiems mokytis programavimo. Daugelis šiuolaikinių modernių kalbų taip pat remiasi Paskaliu. Pavyzdžiui, šiuo metu populiarioje Delphi programavimo sistemoje vartojama Object Pascal

programavimo kalba - dauguma jos konstrukcijų tiesiog paimtos iš Paskalio. Taigi išmokus rašyti algoritmus Paskalio kalba, nesunku bus įvaldyti bet kurią kitą programavimo kalbą.

Paskalio kalba parašytiems algoritmams atlikti sukurta daug transliatorių. Vienas populiariausių Lietuvoje - Turbo Paskalis. Jį ir naudosime šioje knygoje pateiktoms programoms atlikti.

1.2. Turbo Paskalio integruotoji terpė Norint sudaryti programą kompiuteriui ir gauti rezultatus, būtina atlikti šiuos veiksmus:

surinkti programos tekstą ir jį ištaisyti, sukompiliuoti ir suderinti programą, parinkus įvairius kontrolinius duomenis. Šiems veiksmams atlikti vartojamos specialios priemonės: tekstui rinkti ir redaguoti - tekstų tvarkymo sistema, programai kompiliuoti - kompiliatorius, programai derinti, klaidoms ieškoti bei taisyti - derinimo sistema.

Visiems šiems veiksmams drauge atlikti sukurta Turbo Paskalio programavimo sistema, kuri paprastai vadinama integruojančiąja, nes sujungia anksčiau minėtus programai atlikti reikalingus veiksmus: tekstų redaktorių, kompiliatorių, derinimo sistemą, be to, padeda programuotojui atlikti dar kai kuriuos darbus.

Literatūroje Turbo Paskalio sistema dažnai vadinama integruotąja programavimo terpe (anglų k. santrumpa IDE - Integrated Development Environmenf).

Integruotoji programavimo terpė Turbo Paskalis (6.0 ir 7.0 versijos) turi šias galimybes: - persidengiančius langus darbui su programų tekstais bei rezultatais; - darbo su pele ir meniu priemones; - tekstų redaktorių, kuriuo galima tvarkyti bylas; - patogių derinimo priemonių; - terpės, kurioje buvo dirbama, įsiminimo ir dialogo reagavimo priemones.

Page 12: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Įdiegus Turbo Paskalio sistemą, jos pagrindiniame kataloge (pavyzdžiui, TP, jei sistema įdiegta kataloge C:\TP) randamos šios pagrindinės Turbo Paskalio bylos:

- t u r b o . exe - integruotoji programavimo terpė;

- turbo . h l p - kompiuterinis žinynas su bet kurios Paskalio kalbos ar sistemos sąvokos aiškinimu;

- turbo. t p - sistemos parametrų nustatymo byla;

- turbo. t p l - Turbo Paskalio standartinių modulių biblioteka.

Jums dar bus reikalingas katalogas \ B G I , kuriame laikomos bylos darbui su kompiuterine grafika: graph. tpu - modulis, kuriame yra Turbo Paskalio grafinės procedūros ir funkcijos, keletas bylų su prievardžiu . b g i - kompiuterio videosistemų tvarkyklės, keletas bylų su prievardžiu . chr - šriftams.

1.3. Darbo su Turbo Paskalio terpe pradmenys Jei norime sudaryti Paskalio kalba programą, pirmiausia turime išsikviesti Turbo Paska

lio integruotąją terpę (surinkę komandą t u r b o . exe arba susiradę šią bylą Turbo Paskalio aktyviame kataloge ir ją įvykdę). Jos langas parodytas 1 paveiksle.

Integruotosios Turbo Paskalio terpės redagavimo langą sudaro trys pagrindinės dalys: meniu juosta viršuje, programos rašymo langas, užimantis didžiausią ekrano dalį (dažniausiai vadinamas darbo langu), ir informacinė (arba būsenų) eilutė apačioje. Meniu juostoje galima rasti įvairių komandų, reikalingų atlikti veiksmus su programa. Išsamiau jos aprašytos 1-ame priede.

Page 13: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pati programa rašoma centriniame lange. Tekstas renkamas kaip įprasta bet kurioje redagavimo sistemoje. Kiekvienos eilutės pabaigoje paspaudžiamas Enter (įvesties) klavišas.

Baigus rinkti programos tekstą, ji kompiliuojama: tam pasirenkama atitinkama meniu komanda (esanti punkte Compile) arba spaudžiama klavišų Alt + F9 kombinacija.

Jei programa sėkmingai sukompiliuota, gausite pranešimą „Compile successful". Paspaudus bet kurį klavišą, galima vykdyti programą: tereikia meniu juostoje pasirinkti atitinkamą komandą (Run, esančią punkte Debug) arba paspausti klavišų Ctrl + F9 kombinaciją.

Programa pradės darbą. Jei reikės, ji ves dialogą su vartotoju (pavyzdžiui, lauks, kol bus surinkti pradiniai duomenys), po to pateiks rezultatus. Juos galima pamatyti pasirinkus meniu juostoje Window -» User Screen (arba paspaudus klavišus Alt + F5).

Rinkdami programos tekstą arba kompiliuodami programą galime bet kada kreiptis į kompiuterinį Turbo Paskalio žinyną ir pasiskaityti rūpimomis temomis. Žinyną išsikviečiame paspaudę Fl klavišą.

Prireikus informacijos apie kurią nors Turbo Paskalio konstrukciją ar priemonę, reikia perkelti žymeklį ant to žodžio ir paspausti klavišus Ctrl + F l .

Iškilus klausimų sudarant programas (tada reikės daugiau informacijos), apie Turbo Paskalio integruotąją terpę galite daugiau sužinoti panagrinėję 1-ame priede pateiktą medžiagą.

Rašant programas labai svarbu jas įsiminti (išsaugoti). Tam reikia paspausti F2 klavišą. Jeigu programa dar nebuvo įrašyta į bylą, tai bus prašoma nurodyti bylos vardą. Jei parašomas tik vardas, tuomet terpė pati pridės prievardį .pas.

Labai svarbu žinoti, kuriame kataloge bus įrašyta programos teksto byla. Jeigu nieko nenurodysime, byla bus rašoma Turbo Paskalio kataloge BFN. Jeigu į sisteminių programų diską (paprastai tai būna C) rašyti uždrausta, tuomet terpė praneš, kad bylos įrašyti negalima.

Programuotojui būtina sukurti savo vartotojo katalogą, kuriame būtų laikomos visos jo bylos. Rekomenduojame kiekvienai programai, ypač jeigu ją sudaro keletas bylų (programos, duomenų, rezultatų), sukurti atskirą katalogą.

Pradedant dirbti Turbo Paskalio terpėje, pirmiausia būtina nustatyti aktyvų katalogą - tą,

kuriame yra programų bylos (arba jos bus ten įrašomos). Tam reikia atlikti šiuos veiksmus:

1. pereiti į File meniu punktą (paspaudus F10 klavišą arba naudojantis pele);

2. pasirinkti punktą Change Dir;

3. nurodyti reikiamą katalogą;

4. paspausti meniu sąraše mygtuką OK.

Dabar visos programos bus įsimenamos ir randamos tik šiame kataloge. Taip bus patogiau ir greičiau dirbti.

Prireikus pasidaryti programos kopiją (įrašyti ją kitu vardu), reikia pasinaudoti komanda Save As, esančia meniu punkte File.

Programos vykdymo metu galima situacija, programuotojų dažnai vadinama taip: programa „pakibo". Dažniausiai tai būna amžinas ciklas. Esant tokiai situacijai, programos darbas nutraukiamas paspaudus Ctrl + Alt + Break.

Page 14: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

1.4. Programos sudarymas Pradėję spręsti uždavinį pirmiausia turime suvokti, ko iš mūsų norima. Tam reikia išsi

aiškinti uždavinio formuluotę ir nustatyti, kokie gali būti programos pradiniai duomenys. Tuomet prognozuojame, kokie turi būti rezultatai.

Programų sudarymas - kūrybinis procesas, reikalaujantis daug triūso ir nuovokos. Tam pačiam uždaviniui spręsti galima sudaryti daug ekvivalenčių programų. Nėra bendrų receptų, kaip sudaryti kiekvieno uždavinio programą. Tačiau galima suformuluoti bendras taisykles, kurios padėtų šį darbą paspartinti, geriau jį atlikti.

Beveik kiekvieną didesnį darbą lengviau įveikti išskaidžius jį į dalis - mažesnius darbus. Tai tinka ir programoms.

Programos sudarymą galima suskirstyti į šitokias dalis - etapus: 1) uždavinio formulavimas, 2) pradinių duomenų analizė, 3) sprendimo metodo (algoritmo) parinkimas ar sudarymas, 4) programos rašymas, 5) programos tikrinimas - elementarių klaidų paieška, 6) programos tobulinimas, 7) programos derinimas - kontrolinių duomenų išsamaus rinkinio sudarymas, 8) programos testavimas, 9) programos bandymas,

10) programos dokumentavimas ir diegimas. Vieniems uždaviniams svarbesni vieni etapai, kitiems - kit i, kartais kai kurie etapai

visai nereikalingi. Vadovėlyje pateikiamų programų sudarymo detaliai neaprašinėsime. Tai užimtų nemažai vietos ir būtų nuobodu skaityti pasikartojančius aiškinimus. Todėl dažniausiai pateiksime paruoštas programas, apibūdinsime kontrolinius duomenis, pavaizduosime rezultatus. O jums teks patiems nagrinėti ir suvokti, kaip ir kodėl šitaip rašoma.

Didelis uždavinys skaidomas į dalis, kurias galima programuoti atskirai. Dažnai didesnei daliai rašoma funkcija arba procedūra. Jei pastaroji vis dar sudėtinga, vėl skaidoma į dalis.

Sudėtingo uždavinio programavimo technologija skaidant jį į mažesnes dalis pademonstruota aštuntajame ir devintajame skyriuose. Mažų, pratimo pobūdžio uždavinių programų dažnai nebūtina skaidyti į dalis. Tačiau sudarant bet kurio uždavinio programą tenka apgalvoti duomenų įvedimą ir rezultatų išvedimą. Šios dalys būdingos kiekvienai programai (jei duomenų daug, tuomet duomenims įvesti ir išvesti geriausia parašyti atskiras procedūras).

Reikia pagalvoti apie programos vaizdumą, patogumą vartotojui, dialogą. Todėl kiekviena programa galėtų turėti savo darbo pradžią ir pabaigą.

Pradžioje būtų galima pristatyti, kokia ši programa, kam ji skirta, kas jos autorius. Ypač reikėtų atkreipti dėmesį į pradinių duomenų nusakymą - kokius reikalavimus jie turi tenkinti.

Programos pabaigoje galima nurodyti, kur ieškoti rezultatų (pavyzdžiui, jei jie pateikiami byloje). Ypač daug dėmesio reikėtų skirti rezultatų pateikimo aiškumui (kai duomenys rašomi ekrane). Programa gali pranešti, kada baigia darbą ir atsisveikina su vartotoju.

Vadovėlyje pateikiamų pratimų programose paprastai nėra pradžios ir pabaigos veiksmų, išskyrus pradinių duomenų įvedimą ir rezultatų įforminimą. Šie veiksmai programuojami nesunkiai, kiekvienas gali tai padaryti savaip.

Page 15: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Įvesti visuomenėje tvarką labai lengva: tereikia priversti, kad kiekvienas laikytųsi tvirtai nustatytų taisyklių. Labai lengva ugdyti neregius, kurie paklusniai vykdytų vedlio ar Korano nurodymus. Tačiau nepalyginamai sunkiau išlaisvinti žmogų -išmokyti jį valdyti save patį.

2. Pagrindinės valdymo struktūros Šis skyrius skirtas pakartoti ir įtvirtinti toms sąvokoms, su kuriomis susipažinote pagrin

dinės mokyklos informatikos pradmenų kurse mokydamiesi algoritmavimo dalies. Sužinosite ir keletą papildomų sąvokų, kurių prireiks atliekant programas kompiuteriu. Aptarsime pagrindines valdymo konstrukcijas: priskyrimo bei sąlyginį sakinį, ciklus. Vartosime tik dviejų tipų duomenis: sveikuosius ir realiuosius skaičius. Paskalio paprastieji duomenų tipai išsamiau aprašyti kitame skyriuje.

Pateiksime visų nagrinėjamų Paskalio konstrukcijų ne tik struktūrogramas, bet ir sintaksės diagramas. Jose vartojami paprasti žymenys, taigi galima tikėtis pakankamo vaizdumo. Stačiakampiuose rašomos tos konstrukcijos, kurios dar turės būti aiškinamos. Ovalo arba apskritimo kontūrais apibrėžti Paskalio kalbos baziniai žodžiai bei simboliai.

Paskalio kalba užrašytas baigtinis algoritmas, kurį atliekame kompiuteriu, vadinamas programa.

Bendru atveju programą sudaro antraštė, aprašai ir programos veiksmai. Antraštė pradedama žodžiu p r o g r a m , po kurio nurodomas programos vardas. Aprašų dalyje aprašomos konstantos, duomenų tipai, kintamieji, procedūros, funkcijos. Toliau pateikiami programos veiksmai - tarp žodžių b e g i n ir end. Programos pabaigoje dedamas taškas.

Programos struktūrą galime nusakyti struktūrograma (2 pav.) arba sintaksės diagrama (3 pav.).

Antuanas de Sent Egziuperi „Žemė žmonių planeta"

Žmogus turi išmokti būti pavaldus sau pačiam ir paklusnus savo paties sprendimams.

Ciceronas

2.1. Programos struktūra

Page 16: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

2 pav. Programos strukturograma

3 pav. Programos struktūros sintaksės diagrama

Turbo Paskalyje, skirtingai nuo standartinės Paskalio programavimo kalbos, aprašus galima pateikti laisviau. Patogiausia kintamuosius aprašyti prieš pat programos veiksmus, t. y. prieš programą pradedantį žodį b e g i n . Mes dažniausiai taip ir darysime.

Paskalio programų veiksmai užrašomi sakiniais. Sakiniu vadinama Paskalio kalbos konstrukcija, nusakanti išbaigtą veiksmą, kurį reikia atlikti. Sakiniai dėstomi nuosekliai, paskui vienas kitą. Vienas sakinys nuo kito atskiriamas kabliataškiu. Atkreipiame dėmesį į tai, kad pagal Paskalio kalbos standartą sakiniai atskiriami, o ne užbaigiami kabliataškiais, todėl prieš žodį end kabliataškis nereikalingas, nors nieko blogo nenutiks, jei jį parašysite - tuo atveju suprantama, kad tarp kabliataškio ir žodžio end atsiranda tuščias sakinys. (Tuščiu sakiniu laikomas tiesiog kabliataškis.)

Vadovėlyje pateikiamose programose dažniausiai kiekvieno sakinio gale rašome kabliataškį - taip patogiau.

Paskalio kalboje sakinių grupę, kurios pradžioje parašytas žodis b e g i n , o pabaigoje - end, vadiname sudėtiniu sakiniu. Todėl galima teigti, jog Paskalio programos visi veiksmai užrašomi vienu sudėtiniu sakiniu.

Sudėtinį sakinį sudarantys sakiniai atliekami paeiliui, kaip parašyti. Keli sakiniai jungiami į sudėtinį sakinį, kad būtų galima juos rašyti ten, kur pagal Paskalio kalbos taisykles

Po programos antraštės eina aprašų dalis. Priminsime, kaip reikia aprašyti kintamuosius: po žodžio v a r rašomas kintamojo vardas (arba vardai, jei norime aprašyti iš karto kelis kintamuosius) ir duomenų tinas, oavvzdžiui:

Programose neretai reikia vartoti pastovius, nekintančius duomenis. Konstantos aprašomos žodžiu c o n s t , po jo nurodomas konstantos vardas ir reikšmė (atskiriama nuo vardo lygybės ženklu), pavyzdžiui:

Page 17: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

leidžiamas tik vienas sakinys (pavyzdžiui, po žodžių then, else, do). Todėl galima sakyti, kad baziniai žodžiai begin ir end atlieka skliaustų vaidmenį.

Visi pradiniai duomenys programai pateikiami iš išorės, pavyzdžiui, surinkus juos kompiuterio klaviatūra. Klaviatūra renkamos tik pačios duomenų reikšmės, be jų vardų. Kintamųjų vardai yra programos vidaus reikalas. Kuriam kintamajam kurią reikšmę priskirt i , nurodoma duomenų skaitymo konstrukcija, tiksliau, standartine procedūra Read arba ReadLn.

Kompiuteris atlieka visus programos sakinius iš eilės, kol aptinka duomenų skaitymą. Tuomet jo veiksmai sustoja, kol žmogus surenka reikalingus duomenis klaviatūra bei praneša, kad jau baigė rinkti (tai nurodoma paspaudžiant įvesties klavišą Enter). Taip kompiuteris perskaito ir priskiria paeiliui visus surinktus duomenis skaitymo procedūroje išvardytiems kintamiesiems.

Panašiai rezultatai perduodami iš programos į išorę. Tam vartojama duomenų rašymo (spausdinimo) konstrukcija, tiksliau, standartinė procedūra (Write arba WriteLn), kurioje nurodytų kintamųjų reikšmės užrašomos ekrane, spausdinamos popieriuje arba įrašomos į rezultatų bylą.

2.2. Priskyrimo sakinys Viena svarbesnių ir dažniausiai vartojamų programavimo kalbos konstrukcijų yra pri

skyrimo sakinys. Jis nurodo, kad kintamajam reikia suteikti (priskirti) reiškinio reikšmę. Priskyrimo veiksmas žymimas dviem ženklais := (tai vadinama priskyrimo simboliu). Kairėje priskyrimo simbolio pusėje rašomas kintamojo, kuriam reikia suteikti reikšmę, vardas, o dešinėje - reiškinys, kurio reikšmę reikia apskaičiuoti ir suteikti kintamajam (4 pav.). Pavyzdžiui:

Kalbant apie reikšmių priskyrimą kintamiesiems, iškyla labai svarbus klausimas - kaip turi būti derinami dešiniosios ir kairiosios priskyrimo sakinio pusės duomenų tipai. Iš tikrųjų tai ganėtinai painus klausimas, tačiau dažniausiai vartotojui pakanka pasistengti, kad priskyrimo sakinio kairiosios pusės kintamojo ir dešiniosios pusės reiškinio tipai sutaptų, ir tuomet viskas bus gerai. Reikalinga viena logiška išimtis: realiojo tipo kintamajam gali būti priskirta sveikojo tipo reikšmė (ji automatiškai pakeičiama realiąja).

Page 18: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

2.3. Sąlyginis sakinys Sąlyginiu sakiniu keičiama nuosekli sakinių atlikimo tvarka. Sąlyginio sakinio atliekami

veiksmai priklauso nuo sąlygos: jei ji tenkinama, atliekamas sakinys, esantis po žodžio t h e n , jei netenkinama - atliekamas sakinys, einantis po žodžio e l s e (5, 6 pav.).

Sąlyga - tai loginis reiškinys: kai jo reikšmė yra True, tai sakome, kad sąlyga tenkinama ir tada atliekamas pirmasis sakinys, kai Falše, sakome, kad sąlyga netenkinama ir tada atliekamas antrasis sakinys.

6 pav. Sąlyginio sakinio sintaksės diagrama

Paskalio kalba sąlyginis sakinys užrašomas šitaip:

Page 19: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Galimas ir sutrumpintas sąlyginis sakinys, turintis tik vieną šaką ( t h e n ) , kuri atliekama tik tuomet, kai sąlyga tenkinama:

i f sąlyga then sakinys

Jeigu po žodžio t h e n arba e l s e reikia nurodyti kelis sakinius (paprastai taip ir būna), tuomet jie „apskliaudžiami", t. y. iš abiejų pusių apgaubiami žodžiais b e g i n ir end, kitaip sakant, rašomas sudėtinis sakinys.

Atkreipiame dėmesį, kad prieš žodį e l s e kabliataškio rašyti negalima - jei užrašytumėte, tai reikštų, kad e l s e pradeda naują sakinį - betgi tokio sakinio nėra!

Reikėtų atkreipti dėmesį į tokį atvejį, kai sąlyginiame sakinyje po žodžio t h e n vėl eina sąlyginis sakinys. Pavyzdžiui, konstrukcija

gali būti suprantama dvejopai: nesutrumpintame sąlyginiame sakinyje yra sutrumpintas sąlyginis sakinys, arba atvirkščiai - sutrumpintame sąlyginiame sakinyje yra nesutrumpintas sąlyginis sakinys. Paskalio kalboje priimta laikytis tokios taisyklės: vidiniai sakiniai laikomi (jei tik galima) nesutrumpintais. Vadinasi, anksčiau pateikta konstrukcija suprantama šitaip:

Kad neapsiriktumėte skaitydami sudėtingą sąlyginį sakinį, galėtume rekomenduoti paprastą taisyklę - kiek trūksta žodį i f atitinkančių žodžių e l s e , tiek jų reikia prirašyti sąlyginio sakinio gale. Tuomet nesunkiai rastume žodžių i f , t h e n ir e l s e trejetus, priklausančius tam pačiam sąlyginiam sakiniui.

Pavyzdžiui, sakinį

Primename, kad po žodžių t h e n ir e l s e galima rašyti tik vieną sakinį. Todėl, kai tenka atlikti keletą veiksmų (o taip dažniausiai ir būna), sakinius reikia jungti į sudėtinį sakinį apskliaudžiant juos žodžiais b e g i n ir end.

Page 20: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

6a pav. Taškų A, B, C padėtis koordinačių plokštumoje

Atstumas nuo bet kurio plokštumos taško, kurio koordinatės x ir y, ik i koordinačių pradžios apskaičiuojamas pagal formulę:

Pateikiame baigtinę programą:

Page 21: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Laipsniui kelti panaudojome standartinę funkciją Sqr, o šakniai traukti - S q r t (žr. 2.6 sk.).

Kontrolinių duomenų pavyzdys

Ką programa atspausdins, jeigu du arba visi trys taškai bus vienodai nutolę nuo koordinačių pradžios taško? Parinkite kontrolinius duomenis ir patikrinkite, ar teisingai numatėte rezultatus.

Page 22: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Programos darbo rezultatai (fragmentas)

2.4. Ciklas while Veiksmų kartojimą išreiškiame ciklo sakiniais, trumpiau juos vadiname tiesiog ciklais.

Paskaliui vartojami kelių rūšių ciklai. Dažniausiai sutinkami du: w h i l e ir f o r . Ciklas w h i l e atliekamas šitaip: sakinys, esantis šiame cikle, kartojamas tol, kol sąlygos

reikšmė tenkinama, t. y. kol lygi T r u e (7, 8 pav.). Jeigu sąlygos reikšmė iš karto yra F a l s e , tai ciklas neatliekamas nė karto. Sąlyga, kaip ir sąlyginiame sakinyje, yra loginis reiškinys.

8 pav. Ciklo w h i l e sintaksės diagrama

7pav. Ciklo w h i l e strukturograma

Page 23: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Jei cikle vartojami keli sakiniai (taip dažniausiai ir buna), tai jie apgaubiami žodžiais b e g i n ir end, t. y. vartojamas sudėtinis sakinys, pavyzdžiui:

Viena pavojingiausių ciklo w h i l e klaidų - amžinasis ciklas, t. y. kai ciklas atliekamas begalę kartų. Taip dažniausiai atsitinka tuomet, kai neteisingai suformuluojama ciklo kartojimo sąlyga. Cikle turi būti sakinys, kuris keistų sąlygą (išskyrus paprastą atvejį, kai sąlyga iš karto netenkinama ir ciklas neatliekamas nė karto), priešingu atveju sąlygos reikšmė bus pastovi ir ciklas tikrai nesibaigs.

Page 24: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 25: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

2.5. Ciklas f or Tokiam atvejui, kai ciklo kartojimų skaičius žinomas iš anksto, Paskalio kalba turi

patogesnį ciklą - vadinamąjį žinomo kartojimų skaičiaus ciklą arba tiesiog ciklą f or (9, 10 pav.).

9 pav. Ciklo f o r struktūrograma

10 pav. Ciklo f o r sintaksės diagrama

Paskalio kalba žinomo kartojimų skaičiaus ciklo užrašą sudaro antraštė ir sakinys, kuris turi būti kartojamas. Antraštė prasideda žodžiu f o r , po kurio rašomas kintamojo vardas. Šis kintamasis vadinamas ciklo kintamuoju. Tada nurodoma, su kuriomis šio kintamojo reikšmėmis turi būti atliekamas ciklas - užrašoma pradinė ir galutinė ciklo kintamojo reikšmės.

Pateiktoje struktūrogramoje (9 pav.) ciklo antraštė reiškia, kad veiksmai turi būti atliekami su visomis kintamojo i reikšmėmis nuo p iki g (pradinė ciklo kintamojo reikšmė lygi p, o galutinė lygi g). Ciklas f o r atliekamas tiek kartų, kiek skirtingų reikšmių yra intervale nuo p iki g imtinai. Pradžioje ciklo kintamojo reikšmė yra p, po to, kiekvieną kartą atlikus ciklą padidinama vienetu (jei yra žodelis t o , arba mažinama vienetu, jei yra žodelis downto), kol pasiekiama g reikšmė.

Pradinė ir galutinė ciklo kintamojo reikšmės gali būti ne tik skaičiai (konstantos), bet ir kintamieji arba reiškiniai. Pradinė ir galutinė reikšmės apskaičiuojamos tik vieną kartą, ciklo pradžioje. Jeigu atliekant ciklą jos būtų pakeistos, tai jau neturėtų įtakos ciklo kartojimų skaičiui.

Jeigu ciklo antraštėje yra žodelis t o , tai ciklo kintamojo reikšmė didinama vienetu, jeigu žodelis dovmto, - mažinama vienetu. Ciklo kintamojo reikšmė keičiama automatiškai, pats programuotojas jos keisti negali.

Jeigu antraštėje yra žodelis to ir pradinė reikšmė didesnė už galutinę, tai ciklas neatliekamas nė karto.

Page 26: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 27: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

2.6. Standartinės funkcijos ir procedūros Paskalio kalboje, kaip ir bet kurioje kitoje programavimo kalboje, yra daugybė stan

dartinių priemonių dažnai pasitaikantiems veiksmams užrašyti. Jos nepaprastai patogios, kadangi patiems nereikia sudaryti jų algoritmų, o tik mokėti tinkamai pritaikyti.

Funkcijos sąvoką jūs žinote iš matematikos, pavyzdžiui, vartojate s i n (x), lg (x) ir pan. Visiškai analogiškai naudojamasi ir standartinėmis Paskalio kalbos funkcijomis - parašomas jų vardas ir nurodomi parametrai, pavyzdžiui, Sin (x) - apskaičiuoja skaičiaus x

sinusą, Abs (x) - randa skaičiaus x modulį, Sqrt (x) - iš skaičiaus x ištraukia kvadratinę šaknį. Funkcijos paskirtis - atlikti tam tikrus veiksmus ir duoti vieną konkretų rezultatą, kurį būtina vartoti reiškinyje (arba atskiru atveju - tiesiog išspausdinti). Kvadrato kėlimo funkciją Sqr (x) ir šaknies traukimo funkciją Sqrt (x) jau vartojome šio skyriaus 2.1 pratime.

Paskalio kalba turi ir daugybę standartinių procedūrų. Nuo funkcijų jos skiriasi tuo, kad atlieka įvairius veiksmus ir duoda ne vieną konkretų rezultatą. Jūs jau esate susipažinę su keliomis standartinėmis procedūromis, kurias neretai vadinome skaitymo ir rašymo sakiniais - tai Read, ReadLn, Write, WriteLn.

Daugybę puikių standartinių funkcijų ir procedūrų turi Turbo Paskalis. Tačiau jo standartinės funkcijos ir procedūros išbarstytos po įvairius modulius - autonomiškus programos gabalus. Modulius galima kurti patiems, galima naudotis standartiniais esančiais Turbo Paskalyje.

Modulių šiame kurse nenagrinėsime, tačiau jų teikiamomis paslaugomis naudosimės. O tam tereikia labai nedaug žinoti: kokios standartinės funkcijos ir procedūros kuriam moduliui priklauso. Mums bus reikalingi tik keturi moduliai:

System - pagrindinis modulis, kuriame yra visos pagrindinės Paskalio standartinės funkcijos ir procedūros;

Crt - modulis, kuriame yra įvairios tekstinio ekrano, klaviatūros, garsų priemonės; Graph - modulis, reikalingas grafiniam ekrano vaizdui formuoti; Dos - modulis, leidžiantis naudotis įvairiomis DOS operacinės sistemos galimybėmis. Modulyje esančiomis funkcijomis ir procedūromis galima naudotis tada, kai tą modulį

įtraukiame į programą, t. y. programos pradžioje nurodome žodį uses ir parašome atitinkamo modulio vardą. System modulio nurodinėti nereikia: jis prieinamas visada, jame yra visos Paskalyje vartojamos standartinės funkcijos ir procedūros. Pagrindinės Paskalio ir Turbo Paskalio standartinės funkcijos ir procedūros pateiktos 2 priede (jos visos įeina į modulį System). Kitų modulių funkcijos ir procedūros pateiktos 3-5 prieduose.

2.7. Kompiuterinis dialogas Dauguma programų bendrauja su vartotoju, t. y. pateikia įvairius pranešimus. Bendravi

mo formų gali būti daug. Paprasčiausia yra tekstinių pranešimų ekrane seka: ką programa daro, kiek padarė, kokie gauti rezultatai, jeigu nesiseka dirbti, tai galimų priežasčių sąrašas ir pan. Pertraukose tarp pranešimų programa gali palinksminti vartotoją animacija, garsais ar net anekdotais. Šitai vadinama pasyviu programos bendravimu.

Programa gali ir aktyviai bendrauti su jos vartotoju. Tai klausimai ir atsakymai. Programa ekrane gali pateikti klausimą ir laukti atsakymo, nuo kurio priklausytų tolesni programos veiksmai. Atsakymai turi būti tikslūs, todėl daugumą klausimų lydi galimų atsakymų

Page 28: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

sąrašas (užuominos). Atsakymai gali būti pateikiami ne tik žodžiais ar raidėmis (renkant juos klavišais), bet ir paspaudžiant ekrane specialiai atsakymams nupieštus mygtukus (naudojantis pele).

Tokios ir panašios bendravimo formos įprastos visose šiuolaikinėse programose. Žmogus gyvena spalvų ir garsų pasaulyje. Programa vaizdesnė, jeigu panaudoja spalvas ir garsus. Kuriant dideles programas paprastai dalyvauja dailininkai, muzikai, psichologai. Programos efektyvumą lemia gebėjimas gauti teisingus žmogaus atsakymus, o tai reiškia, kad klausimų ir informacijos pateikimo ekrane forma, vieta, šriftas, spalvos, garsai turi didžiulę prasmę. Jūs dažnai matote, kaip su jumis bendrauja operacinės sistemos, įvairios taikomosios programos, žaidimai ir kt.

Toliau pateikiame keletą elementarių priemonių - funkcijų ir procedūrų pavyzdžių, kurios jūsų rašomas programas padarys įdomesnes ir patrauklesnes. Tai nėra programavimo mokymosi tikslas, tačiau šiuolaikinės programos turi pateikti rezultatus vaizdžia, aiškia forma, suprantamai bendrauti su vartotoju, aiškiai išdėstyti informaciją ekrane.

Paprasčiausios tekstinio ekrano tvarkymo funkcijos ir procedūros yra Turbo Paskalio modulyje Crt. Kad galėtume programoje naudotis šiuo moduliu, jį reikia nurodyti tuoj po programos antraštės:

uses Crt; Šiame modulyje yra daug funkcijų ir procedūrų. Daugumos jų trumpus aprašus rasite

3 priede. Išsamiau apie šiuos modulius galite pasiskaityti programavimo kalbai skirtoje literatūroje arba pasinaudoti Paskalio kompiuteriniu žinynu - čia rasite ir jų naudojimo pavyzdžių.

Pradžioje pateiksime keletą pagrindinių deramo apipavidalinimo pavyzdžių. Išvardysime dažniausiai tam vartojamas procedūras. Jų atliekamus veiksmus.užrašysime greta komentarais.

ClrScr; { Valo ekraną } Ši procedūra valo ekraną. Jame nelieka jokio teksto nei piešinių. Žymeklis atsiduria

pradinėje padėtyje - ekrano viršutiniame kairiajame kampe. Ekranas tampa tos spalvos, kuri Turbo Paskalio terpėje yra numatytoji (paprastai juoda) arba ta, kurią nurodo programuotojas. Numatytoji spalva bus vartojama tol, kol ji nebus pakeista.

Ekrano fono spalvą galima keisti, t. y. parinkti tokią, kokią norime. TextBackground (fonas : byte); { Nustato nurodytą fono spalvą } Pavyzdžiui, surinkę nurodymą: TextBackground (Green); ClrScr;

ekraną nudažysime žaliai. Jokio teksto neliks. Žymeklis bus ekrano viršutiniame kairiajame kampe.

Norėdami ne tik pakeisti fono spalvą, bet ir jame rašyti tekstą, nurodome: TextBackground (Red); Write ('Mano mokykla'); Pranešimas Mano mokykla bus rašomas raudoname fone. Teksto rašymo spalva bus

tokia, kokia yra numatytoji reikšmė - balta. Rašymo spalvą galima pakeisti. Ji tik neturi sutapti su fono spalva.

TextColor (spalva : byte); { Teksto rašymo spalva } Nurodoma spalva, kuria Write ir WriteLn procedūros rašys ekrane. Yra procedūra, kuri valdo žymeklį: GoToXY (x, y : integer); { Perkelia žymeklį į nurodytą vietą }

Page 29: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Ši procedūra perkelia žymeklį į koordinatėmis nurodytą ekrano vietą. Būtent nuo tos vietos ir bus spausdinama toliau pateikiama informacija.

Ekrano dydis Turbo Paskalio terpėje vartojant DOS operacinę sistemą yra 80 simbolių pločio (x koordinatė) ir 25 eilučių aukščio (y koordinatė). Koordinačių atskaitos taškas yra ekrano kairysis viršutinis kampas. Jo koordinatės yra (1,1).

Toliau vadovėlyje pateikiamas programas sudarysime taip, kad jos spausdinamus rezultatus dėstytų vaizdžiai ir patogiai. Tačiau nereikia persistengti - neperkrauti ekrano spalvų mišiniu.

2.8. Programavimo kultūra Nors gali atrodyti, kad programa skiriama tik kompiuteriui, tačiau neretai ją tenka

skaityti ir žmogui. Juk žmogus rašo programą, ją taiso, perdaro. Ir ne vieną, o daugelį kartų. Tad labai svarbu išdėstyti programos tekstą kuo vaizdžiau, kad būtų galima lengviau ir greičiau suprasti jos veiksmus.

Programos teksto suvokiamumui, jos veiksmų aiškumui įvertinti vartojama programavimo kultūros sąvoka.

Page 30: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Programavimo kultūra apima: 1) tinkamą, racionalų algoritmo parinkimą ar sudarymą - paprastai tai vadinama algorit-

mavimo stiliumi; jam priskiriamas apgalvotas valdymo konstrukcijų (sakinių) bei duomenų tipų parinkimas, jų tarpusavio suderinamumas, tinkamumas duotam uždaviniui spręsti;

2) programos skaidymą į dalis, kuriomis išreiškiami logiškai atskiri ar nedaug susiję veiksmai;

3) prasmingų vardų (kintamųjų, konstantų, tipų, procedūrų, funkcijų) parinkimą;

4) taiklų programos aprašų ir veiksmų komentavimą;

5) vaizdų programos teksto išdėstymą.

Viso to laikysimės pateikdami programas vadovėlyje. Todėl reikia stengtis matyti ir įsidėmėti tai, kas pateikiama. O jeigu norima daryti savaip, reikia galvoti, lyginti, ar tikrai šitaip bus geriau.

Toliau išsamiau aptarsime programos teksto išdėstymo pagrindinius principus. Kadangi programą tenka daug kartų skaityti žmogui, jos tekstas turi būti išdėstomas kuo

vaizdžiau, kad lengviau ir greičiau būtų suvokiami programos atliekami veiksmai. Todėl rašant programos tekstą laikomasi tam tikrų taisyklių. Svarbiausios yra šios:

1. Atskiros algoritmo dalys (sakinių grupės, procedūros funkcijos) turi būti aiškiai išskiriamos: tuščiomis eilutėmis, komentarais ir pan.

2. Kiekviena konstrukcija (antraštė, aprašas, sakinys, procedūra, funkcija) turi būti pradedama rašyti iš naujos eilutės. Tik trumpi, logiškai susiję priskyrimo sakiniai gali būti rašomi toje pačioje eilutėje.

3. Vienodo prasminio lygio konstrukcijos (konstantų, tipų, kintamųjų aprašai, procedūros, funkcijos, sakiniai) turi būti lygiuojamos vertikaliai (t. y. vienodai atitraukiamos nuo kairiojo krašto).

4. Konstrukcijos (sakiniai, procedūros, funkcijos), įeinančios į kitas konstrukcijas, turi būti pastumtos į dešinę per keletą simbolių (vienodai visoje programoje, geriausiai per du arba tris).

5. Jei kuri nors konstrukcija netelpa vienoje eilutėje (o taip neretai būna), tai kelti reikia toje vietoje, kur natūraliai susidaro pauzė. Perkeltoji eilutė turi būti šiek tiek pastumta į dešinę ankstesnės eilutės atžvilgiu, kadangi ji nėra atskira, lygiavertė konstrukcija.

6. Eilutės ilgis neturi viršyti ekrano pločio; Turbo Paskalyje tai sudaro 80 simbolių. Toliau būtų galima aptarti atskirų programavimo konstrukcijų išdėstymą. Jų pateikimas

įvairiose knygose gali šiek tiek skirtis, tačiau svarbiausia, kad skaitančiajam būtų vaizdu.

Daugiausiai dėmesio reikėtų skirti sąlyginio sakinio išdėstymui. Jį iš tikrųjų sunku pateikti vaizdžiai. Atkreipkite dėmesį, kaip jį dėstome šio vadovėlio pratimuose. Kai kur pateikiame šiek tiek skirtingą išdėstymą, priklausomai nuo to, kokio ilgio sakiniai ir kaip jie telpa į eilutę. Jūs galite dėstyti ir kitaip, svarbu, kad būtų kuo vaizdžiau.

Programų tekstuose, ypač reiškiniuose, dažniausiai neaišku, kur palikinėti tarpus. Kai kas sutampa su įprastais teksto reikalavimais ir yra griežtai nusistovėję, pavyzdžiui, tarpas būtinas po kablelio (prieš kablelį tarpo neturi būti). Daugelį kitų skyrybos dėstymo būdų pasirenka patys programų autoriai.

Paskalio programose didžiosios ir mažosios raidės traktuojamos vienodai. Mes didžiąsias raides naudosime programos teksto skaitymui pagerinti: jomis pradėsime stambesnių vienetų - programų, konstantų, funkcijų, procedūrų, modulių vardus. Visa kita rašysime

Pagrindinės valdymo struktūros 29

Page 31: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

mažosiomis raidėmis. Stengsimės laikytis Turbo Paskalio terpėje priimtų vardų rašymo taisyklių.

Rašant programas ir atliekant jas Turbo Paskaliu susiduriama su lietuviams kol kas itin opia problema. Tai lietuvių kalbos vartojimas. Žinome, kad Turbo Paskalis yra senokas kompiliatorius, skirtas DOS operacinei sistemai. Todėl programų tekstuose negalima vartoti lietuviškų raidžių, kurių nėra lotynų kalbos abėcėlėje. Žinoma, išskyrus komentarus. Komentarų transliatorius neskaito, tad juos galima ir būtina rašyti taisyklinga lietuvių kalba.

Vengdami rašyti vardus „šveplai", turėtume stengtis parinkti tokius žodžius vardams žymėti, kurie neturi lietuviškų raidžių arba, pavyzdžiui, angliškus. Galima parinkti ir žmonių vardus, gyvūnų pavadinimus, pavyzdžiui, Rita, Ignas, Uosis, Bebras, Morka, nors jie toli gražu neatitinka uždavinyje esančios kintamojo ar kito pavadinimo prasmės, tačiau kartais suteikia vaizdumo ir padeda įsiminti (juk žmonės ir viesulus ar kitokius gamtos reiškinius pavadina įvairiais vardais). Kai kuriems uždaviniams labai tinka abstraktūs vardai, kaip tai įprasta matematikoje: al, x2, y3.

Kontroliniai pratimai

1. Duoti kintamųjų a, b ir c reikšmių variantai:

Apskaičiuokite x reikšmę kiekvienam duomenų variantui su šio pratimo 1-8 programų fragmentais.

Page 32: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

2. Duoti kintamųjų a, b k c reikšmių variantai:

Su kiekvienu duomenų variantu atlikite šio pratimo 1-5 programų fragmentuose pateikiamus veiksmus ir nustatykite, kokios yra reikšmės ir kaip jos turėtų būti spausdinamos.

Kokioms pradinėms reikšmėms esant ciklai pratimuose tampa amžinaisiais? Pateikite bent vieną tokį duomenų rinkinį.

Page 33: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

3. Duoti kintamųjų a, b ir c reikšmių variantai:

Su kiekvienu duomenų variantu atlikite šio pratimo 1-5 programų fragmentuose patei

kiamus veiksmus ir nustatykite, kokios reikšmės ir kaip jos turėtų būti spausdinamos.

Kokioms pradinėms reikšmėms esant ciklai pratimuose tampa amžinaisiais? Pateikite bent vieną tokį duomenų rinkinį.

Page 34: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Atidžiai išnagrinėkite 2.4 pratimo pateiktą patobulintos programos fragmentą, įterpkite jį į programą ir išbandykite su įvairiais kontroliniais duomenimis.

2. Išnagrinėkite 2.5 pratimo programą ir ištaisykite joje esančią klaidą - kad nebūtų amžinojo ciklo. Išbandykite programą su įvairiais kontroliniais duomenimis.

3. Kaip reikėtų pakeisti 2.7 pratimo programą, kad ji tiktų skaičiuoti sumą bendresniu

atveju:

Page 35: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

4. Labai dažnai uždaviniuose tenka skaičiuoti sumas. Tarkime, kad iš klaviatūros įvedame n skaičių ir norime susumuoti tik teigiamus. Pateikiame šio uždavinio sprendimo struktūrogramą:

11 pav. Sumos skaičiavimo struktūrogramą

Pagal šią struktūrogramą sudarykite programą ir atlikite ją kompiuteriu.

5. Analogiškai galima sudaryti struktūrogramą klaviatūra įvedamų skaičių sandaugai skaičiuoti (12 pav.). Sudarykite šitokio uždavinio programą. Jei jau esate sudarę sumavimo programą, pasinaudokite ja - mažai ką tereikės pakeisti.

12 pav. Sandaugos skaičiavimo struktūrogramą

6. 2.9 pratimo programą papildykite sakiniais, kuriais butų randama duotojo skaičiaus skaitmenų suma ir spausdinamas pranešimas, koks gaunamas rezultatas.

Page 36: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

17. Parduotuvė pirmą dieną pardavė prekių už p litų. Ji prekiavo kasdien vis sėkmingiau ir parduodavo prekių kiekvieną sekančią dieną už 3% daugiau negu ankstesnę. Sudarykite programą, kuri apskaičiuotų, kiek dienų turi prekiauti parduotuvė, kol jos vienos dienos parduotų prekių suma taps didesnė už skaičių M (p > M ) .

18. Petro Kindziulio svoris P kilogramų per metus kito taip: pavasarį Kindziulis a procentais sublogo, per vasarą pasitaisė b procentų, rudenį vėl c procentų sublogo ir žiemą d procentų pasitaisė. Parašykite programą, kuri apskaičiuotų, ar sublogo, ar pasitaisė Kindziulis per metus. Koks Kindziulio svoris bus vienuoliktų Naujųjų metų išvakarėse, jeigu kiekvienais Naujaisiais metais jo svoris padidėjo n procentų?

7. Ką reikėtų pakeisti 2.9 pratimo pabaigoje, kad ji tiktų didesniems sveikiesiems skaičiams skaičiuoti (naudojant l o n g i n t tipą)? Parenkite kontrolinių duomenų rinkinį šiai programai išbandyti.

8. Sudarykite programą duoto spindulio skritulio plotui ir to paties spindulio rutulio tūriui rasti.

9. Duotos trikampio trijų viršūnių koordinatės. Sudarykite programą jo plotui ir perimetrui rasti.

10. Sudarykite programą tiesinei lygčiai išspręsti.

11. Sudarykite programą bikvadratinei lygčiai išspręsti.

12. Sudarykite programą tiesinių lygčių sistemai

išspręsti. Vaizdžiai apiforminkite pradinius duomenis ir rezultatus.

13. Teniso klube „Poilsis" metinis mokestis yra y litų, o vietos mokestis už valandą - v litų. „Energijos" klube metinis mokestis yra yl litų, o vietos mokestis už vieną valandą - vl litų. Parašykite programą, kuri nustatytų pigesnį klubą, jei žadama žaisti c valandų per savaitę.

14. Prie kasos langelio stovi n žmonių. Kasininkė i-ajam žmogui skiria f,- laiko. Sudarykite programą, kuri apskaičiuotų kiekvieno kliento kliento sugaištą laiką šioje įstaigoje. Pradiniai duomenys įvedami iš klaviatūros. Pagalvokite apie vaizdų rezultatų apipavidalinimą.

15. Apskaičiuokite sumą:

Skaičiavimus nutraukite, kai skaičius Z viršys duotą skaičių A.

16. Duotam skaičiui x apskaičiuokite skaičių seką

Skaičiavimus baikite, kai rastasis narys tampa moduliu mažesnis už 0,01.

Page 37: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

19. Rimas su Rita pradėjo prekiauti ledais. Jie išsinuomojo kioską už Y litų per savaitę. Rimas ir Rita perka ledus iš UAB „Šerkšnas" po a Lt už porciją ir parduoda po b Lt. „Šerkšnas" jiems gali teikti ne daugiau kaip m porcijų per savaitę. Prekyba sekėsi. Pirmąją savaitę jie pardavė tik ml porcijų, tačiau kiekvieną kitą savaitę parduodavo po p procentų procijų daugiau, kol pasiekė maksimalų skaičių m. Parašykite programą, kuri apskaičiuotų, po kiek porcijų ledų jiems būtina parduoti per savaitę, kad atsipirktų išlaidos. Koks bus metinis pelnas (gal nuostolis)?

20. Vasaros atostogų metu Linas dirbo paštininku. Už pirmą atlyginimą jis nusipirko dviratį. Ši žinia pasklido labai greitai. Vos spėjęs grįžti namo, jis pasigyrė dviem draugams, kurių kiekvienas po 30 minučių pasakė žinią dviem kitiems draugams. Dar po 30 minučių kiekvienas iš šių keturių persakė žinią dar dviem kitiems draugams. Ir taip kas 30 minučių kiekvienas išgirdęs naujieną perpasakodavo viską dviem dar nieko nežinantiems. Parašykite algoritmą, kuris nustatytų, kiek žmonių sužinojo naujieną po y valandų.

21. Ežere pražydo viena vandens lelija. Kiekvieną dieną žiedų skaičius patrigubėdavo. Parašyti programą, kuri apskaičiuotų:

a) kiek žiedų ežere buvo po n dienų; b) kelintą dieną žiedai užklojo pusę ežero, jeigu visame ežere gali tilpti m žiedų?

22. Iš programavimo uždavinyno rekomenduojame išspręsti 1-ojo skyriaus „Pagrindiniai valdymo sakiniai" pratimus ir uždavinius. Pateiktų uždavinių programas papildykite rezultatų apipavidalinimo veiksmais.

23. Mergaitė nori pasisiūti prijuostę, kurios iškarpa parodyta žemiau brėžinyje (skylė viduryje skirta galvai iškišti). Kad medžiaga nebrigztų, reikia vidinius ir išorinius prijuostės kraštus apsiūti juostele. Parašykite programą, kuri apskaičiuotų, kiek metrų juostelės prireiks. Kiek metrų juostelės prireiks visos klasės mergaičių prijuostėms apsiūti (a, b ir c

kiekvienai prijuostei skirtingi).

Page 38: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pro debesų bangas mėnulio rudas diskas Iš lėto atplaukia, ir ima keistis viskas:

Sidabro upėmis sužybčioja rugiai, Ir skraido sidabre pilki nakties drugiai.

3. Pagrindiniai duomenų tipai Programos atlieka veiksmus su įvairių rūšių duomenimis. Jūs žinote sveikuosius ir

realiuosius skaičius, mokate atlikti veiksmus su jais. Siame skyriuje trumpai aprašysime dar keletą kitų Paskalio kalboje vartojamų paprastųjų duomenų, tiksliau - duomenų tipų. Tai loginiai bei simboliniai duomenys. Jie bus reikalingi vėliau uždavinių programoms sudaryti.

3.1. Skaičiai Turbo Paskalyje vartojami dviejų rūšių skaičiai - sveikieji ir realieji. Sveikasis skaičius -

tai skaičius, neturintis trupmeninės dalies, pavyzdžiui: 0 - 5 10 13 Visi ki t i skaičiai laikomi realiaisiais, pavyzdžiui: 5.5 20.3 0.2 5.0 0.0 -10.0 1E5 Kintamieji, įgyjantys sveikųjų skaičių reikšmes, vadinami sveikojo tipo kintamaisiais,

o įgyjantys realiųjų skaičių reikšmes - realiojo tipo kintamaisiais. Sveikojo tipo kintamiesiems žymėti Paskalyje vartojamas žodis i n t e g e r , o realiojo

tipo kintamiesiems - r e a l . Turbo Paskalyje yra ir kitokių sveikųjų bei realiųjų tipų, pavyzdžiui, b y t e , w o r d , l o n g i n t . Pastarasis ypač vertingas, nes jis leidžia aprašyti didesnius sveikuosius skaičius negu i n t e g e r tipo.

Pateikiame sveikojo ir realiojo tipo aprašų pavyzdžių:

Su skaičiais atliekamos įprastos aritmetinės operacijos: sudėtis, atimtis, daugyba, dalyba bei palyginimas. Dalybos operacijos yra net trijų rūšių. Jos žymimos d i v , mod ir /. Pirmosios dvi atliekamos tik su sveikaisiais skaičiais: operaciją d i v vartojame, kai norime

Page 39: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

gauti dalmenį, operaciją mod - kai norime gauti dalybos liekaną. Įstrižu brūkšniu žymime realiųjų skaičių dalybą, t. y. jos rezultatas visuomet bus realusis skaičius, netgi tuomet, kai abu operandai sveikieji skaičiai ir dalijasi be liekanos, pavyzdžiui, padaliję 4/2 gausime 2.0 (o ne 2).

Jei aritmetinių operacijų abu operandai yra sveikojo tipo, tuomet ir rezultatas bus sveikojo tipo (išskyrus realiųjų skaičių dalybą / ) . Jei bent vienas iš operandų yra realiojo tipo, tai rezultatas visuomet bus realiojo tipo.

Jei vienas iš palyginimo operacijos operandų yra realiojo tipo, tai kitas keičiamas realiuoju. Realieji skaičiai kompiuteryje įsimenami tam tikru tikslumu. Todėl nelabai prasminga lyginti realiojo tipo kintamųjų reikšmes (vartojant lygybės operaciją). Paprastai du realiojo tipo skaičiai laikomi lygiais, jeigu jie vienas nuo kito skiriasi nedaug, t. y. lyginama duotuoju tikslumu. Tam skaičiuojamas absoliutus skaičių skirtumas ir gauta reikšmė palyginama su nurodytu tikslumu. Pavyzdžiui, jeigu a ir b yra realiojo tipo kintamieji, tai jie laikomi lygiais tuomet, kai |a — b| < e, čia e - nurodytas tikslumas (pvz., e = 0,001).

Priskyrimo sakinio rezultatas visuomet bus realiojo tipo, jei priskyrimo ženklo kairėje pusėje yra realiojo tipo kintamasis.

Šiek tiek panagrinėkime pradinių duomenų įvedimą bei rezultatų pateikimą, kitaip sakant, žmogaus bendravimą su kompiuteriu.

Programa gali turiningiau bendrauti su žmogumi, jei ekranas padalijamas į skirtingų spalvų sritis. Primename, kad kompiuterio ekranas yra stačiakampis langas, kurio kairiojo viršutinio kampo koordinatės (1, 1), o dešiniojo apatinio kampo (80, 25). Tai pagrindinis langas, kuriame galima nubraižyti daug kitų langų (net persidengiančių). Langui nubrėžti vartoiama procedūra:

Čia koordinatės ( x l , y l ) yra kairiojo viršutinio kampo, o (x2, y2) - dešiniojo apatinio kampo. Jos visuomet nurodomos ekrano taško ( 1 , 1) atžvilgiu. Jei koordinatės bus nurodytos už ekrano ribų, tuomet langu taps visas kompiuterio ekranas. Procedūra perkelia žymeklį į naujai sukurto lango kairįjį viršutinį kampą.

Paskutinis sukurtas langas laikomas aktyviu, t. y. jame bus atliekami visi tolesni veiksmai. Programos pradiniai duomenys ir rezultatai bus rašomi šiame lange. Užrašius Window (1, 1, 80, 25), aktyviuoju langu tampa visas ekranas. Aktyviojo lango viduje koordinatės skaičiuojamos lango kairiojo viršutinio kampo atžvilgiu. Pavyzdžiui, procedūra GoToXY (x, y) joje nurodytas koordinates laiko aktyviojo lango koordinatėmis. Ką tik sukurtas langas ekrane nematomas, t. y. jis yra tokios pat spalvos, kaip ir visas ekranas. Jei norime pamatyti jį, turime nuspalvinti kitokia spalva negu aplinkiniai langai.

Page 40: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 41: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Deja, ši programa ne visiškai užbaigta - nerodomas galutinis rezultatas, t. y. bendras lygiašonių trikampių skaičius. Be to, šiam uždaviniui pradinius duomenis reikia parinkti labai kruopščiai, kad iš tikrųjų būtų pateiktos trikampio viršūnių koordinatės. Kitaip galime gauti kuriozišką pranešimą, pavyzdžiui, kai visų viršūnių koordinatės lygios, t. y. duotas tik vienas taškas, vis tiek bus pranešama: „Trikampis nelygiašonis". Visus šiuos trūkumus jūs galite pašalinti ir ištaisyti programą.

3.2pratimas. Iš Vilniaus į Klaipėdą išvažiavo du automobiliai. Pirmojo automobilio greitis vl km/val. Antrasis išvažiavo viena valanda vėliau v 2 km/val. greičiu. Automobiliai visą kelią važiuoja pastoviu greičiu. Ar antrasis automobilis pasivys pirmąjį? Jeigu pasivys, programa turi pranešti, kad pavijo, ir nurodyti, kelintame kilometre tai įvyko. Jei nepavys, tuomet programa turi pranešti, kad nepavijo, ir išspausdinti, kiek antrajam automobiliui dar liko kilometrų ik i Klaipėdos.

Atstumas tarp miestų yra km kilometrų. Skaičiavimus reikia atlikti kilometrų tikslumu.

Page 42: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinių duomenų pavyzdys

Testo Atstumas I greitis II greitis Rezultatas numeris (km) v l v l

1 250 25 50 Pavijo, kai buvo nuvažiuota 50 kilometrų. 2 250 50 25 Nepavijo. Liko 150 kilometrų.

Kontrolinės užduotys 1. Parinkite kitas spalvas 3.1 pratimo programos pranešimams rašyti.

2. Papildykite 3.1 pratimo programą taip, kad rezultatui - rastų lygiašonių trikampių skaičiui - spausdinti būtų sukurtas naujas langas ekrane.

3. Pateiktoje 3.1 pratimo programoje lygiakraščiai trikampiai priskiriami prie lygiašonių. Programą papildykite taip, kad būtų atskirai spausdinama, kiek rasta lygiašonių ir kiek lygiakraščių trikampių.

4. Automobilių vijimosi programą (3.2 pratimas) išbandykite su įvairiais kontroliniais duomenimis. Aprėpkite visus galimus atvejus: kai pasivejama, kai nepasivejama ir kai abu automobiliai atvyksta kartu.

5. Automobilių vijimosi programą papildykite taip, kad rezultatų pranešimas būtų spausdinamas atskirame lange.

6. Sudarykite programą, kuri paprašytų surinkti du natūraliuosius skaičius ir išspausdintų jų sumą, išskleistą sudėties eilute. Pavyzdžiui:

25 + 10 = 35

Papildykite programą, kad tai būtų daroma su visomis aritmetinėmis operacijomis.

3.2. Simboliai Kompiuterio klaviatūroje yra daug klavišų. Kiekvienas jų turi savo paskirtį. Tekstui

rinkti naudojami klavišai atitinka tekste vartojamus simbolius. Valdymo klavišai taip pat atitinka tam tikrus kompiuteryje vartojamus simbolius. Visi simboliai aprašomi kodavimo lentelėmis (žr. 6-tą priedą). Simbolius lentelėje atitinka jų eilės numeris. Simbolį galima nurodyti jo numeriu arba jo vaizdu (pavyzdžiui, raidę A galima nurodyti numeriu 65, o raidę a numeriu 9 7 ) .

Page 43: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Galima aprašyti kintamuosius, kurie įgytų simbolines reikšmes. Kintamieji, kurių tipas nurodomas žodžiu char, vadinami simboliniais. Juos. kaip ir kitus kintamuosius, galima naudoti priskyrimo sakiniuose, pavyzdžiui,

Simboliai rašomi tarp apostrofų. Lyginimo operacijose simbolių kodai palyginami pagal kodavimo lentelę. Didesnis

simbolis bus tas, kurio numeris didesnis. Pavyzdžiui, atlikus sakinį

rezultatas bus Falše, nes raidės 'A' numeris yra mažesnis. Kintamojo reikšmę galima nurodyti ir simbolio numeriu: x := #65 arba naudojant

standartinę funkciją Chr, kurios rezultatas yra argumentu nurodyto numerio simbolis:

Simbolio numerį galima sužinoti panaudojus standartinę funkciją Ord, pvz., Čia kintamasis nr turi būti sveikojo tipo.

Simbolinio tipo reikšmes galima įvesti klaviatūra bei išvesti ekrane.

3.3 pratimas. Sudarysime programą šitokiam žaidimui. Klaviatūra įvedamas bet koks simbolis. Programa turi išspausdinti šį simbolį ekrane, pateikdama jį atsitiktinėse vietose atsitiktine spalva.

Naudojamas atsitiktinių skaičių generatorius Randomize. Atsitiktinis skaičius generuojamas funkcija Random, kurios argumentas yra sveikasis skaičius, o rezultatas - skaičius, ne didesnis už argumento reikšmę. Tikslesnę informaciją ir daugiau galimybių sužinosite pasiskaitę Paskalio kalbos žinyną.

Kompiuteris veiksmus atlieka labai greitai. Norėdami stebėti darbą, turime „pristabdyti" kompiutero darbą. Tam galima panaudoti procedūrą:

Page 44: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Išbandykite žaidimo programą (3.3 pratimas), parinkdami įvairius simbolius. Keiskite pauzės trukmę, simbolių skaičių ekrane.

2. Pakeiskite kintamojo tipą char eilutės tipu s t r i n g . Tuomet galėsite pateikti ne vieną simbolį, bet visą žodį. Atlikite programą, klaviatūra surinkę žodį, pavyzdžiui, rasa. Pabandykite su kitais žodžiais.

3.3. Loginės reikšmės

Palyginimo ir loginių operacijų rezultatas yra loginė reikšmė True (tiesa) arba Falše (netiesa, melas). Loginiams duomenims vaizduoti vartojamos dvi loginės reikšmės - True ir Falše. Kintamieji, kurių tipas nurodomas žodžiu boolean, vadinami loginiais kintamaisiais:

Jiems galima priskirti logines reikšmes, pavyzdžiui:

Procedūra Write išspausdina loginių kintamųjų reikšmes: žodžius True ar False.

Loginiams kintamiesiems galioja lyginimo ir loginės operacijos (or, and, not).

3.4pratimas. Ankstesnio skyrelio 3.3 pratimo programa būtų praktiškesnė, jeigu jos darbo pabaigą galėtų nurodyti vartotojas. Tai galima padaryti šitaip papildžius programą:

Page 45: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

- aprašomi papildomi kintamieji: v a r t a i p : b o o l e a n ; - programa papildoma nauju ciklu, gaubiančiu programoje buvusius veiksmus:

Standartinė funkcija U p C a s e mažąsias raides pakeičia didžiosiomis. Todėl vartotojas gali atsakyti spausdamas arba mažąją raidę t , arba didžiąją T. Tuomet kintamasis t a i p įgys reikšmę T r u e . Visais kitais atvejais (paspaudus bet kurią raidę ar kitą simbolį) kintamojo t a i p reikšmė bus F a l š e .

Kontrolinės užduotys 1. Perkopijuokite 3.3 pratimo programą nauju vardu. Tai galite padaryti ir Turbo Paskalio

terpėje meniu komanda F i l e —» S a v e as .

2. Papildykite 3.3 pratimo programą šiame skyrelyje aprašytais sakiniais. Išbandykite programą su įvairiais kontroliniais duomenimis.

3. Jeigu ekrano valymo veiksmus iškelsite prieš šiame skyrelyje pateiktą naują ciklą, tuomet naujai nurodomi simboliai bus išvedami ankstesniųjų fone. Išbandykite.

3.4. Duomenų grupavimas Dažnai iš pateiktų duomenų tenka atsirinkti tinkamus arba suskirstyti juos pagal nu

rodytus požymius į grupes. Pavyzdžiui, sudarant krepšinio rinktinę, iš kandidatų sąrašo atrenkami įvykdę nustatytus minimalius reikalavimus. Arba mokiniai suskirstomi į pogrupius pagal tai, kurią užsienio kalbą mokosi ir pan.

Taigi visuose uždaviniuose turi būti žinomi požymiai, pagal kuriuos atrenkami duomenys arba jie gali būti skirstomi į grupes. Juos ir vadinsime atrankos požymiais.

Grupavimo operacijos rezultatai naudojami toliau apdorojant duomenis. Tai reiškia, kad sugrupuotus duomenis būtina išsaugoti. Kol kas to dar nemokame daryti, todėl pamėginsime tik sugrupuoti duomenis.

3.5 pratimas. Nuimtas arbūzų derlius. Reikia juos surūšiuoti į dvi kategorijas: į vieną krūvą sudėti lengvesnius kaip al kg, į kitą - visus kitus. Žinoma, kad lengvesniųjų kaina yra kl Lt/kg, o visų kitų - k2 Lt/kg. Reikia parašyti programą, kuri suskaičiuotų, kiek arbūzų yra kiekvienoje krūvoje, koks jų bendras svoris ir kokia kiekvienos krūvos piniginė vertė litais.

Arbūzų svorius įvesime klaviatūra. Įvedimo pabaigą žymėsime nuliu arba neigiamu skaičiumi (tokio arbūzo svorio negali būti). Rezultatus pateiksime taip, kaip parodyta 13 paveiksle.

Page 46: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

13 pav. Arbūzų rūšiavimo programos rezultatų lango eskizas

Du viršutiniai langai skirti informacijai apie arbūzų krūvas. Žemiau esančiuose dviejuose languose bus grupuojami arbūzų svoriai. Apatinis langas skirtas arbūzų svoriams įvesti. Galima vienoje eilutėje rašyti kelių arbūzų svorius. Tuomet skaičiai turi būti atskirti bent vienu tarpo simboliu.

Čia pateikiama programa atlieka reikiamus skaičiavimus tik su pirmosios krūvos duomenimis. Paliekame patiems papildyti programą.

Page 47: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Papildykite programą, kad ji apskaičiuotų antrosios arbūzų krūvos rezultatus ir atvaizduotų juos ekrane.

2. Papildomai ekrane parodykite atrankos požymio reikšmę.

Page 48: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

3. Programą papildykite taip, kad būtų spausdinami matavimo vienetai: pinigų - Lt, svorio - kg.

3.5. Didžiausios (mažiausios) reikšmės paieška Tai tradiciniai programavimo uždaviniai. Populiariausias jų sprendimo būdas yra toks.

Aprašomi kintamieji įvedamai (x) ir didžiausiai (d) reikšmėms. Įvedant pirmąją reikšmę, daroma prielaida, kad ši yra didžiausia (kai ieškoma didžiausios reikšmės):

Po to paeiliui skaitomos kitos reikšmės ir lyginamos su d. Jei randama didesnė, kintamojo d reikšmė pakeičiama kita, didesniąją:

Taip patikrinus visą Įvedamą duomenų srautą, kintamojo d reikšmė bus didžiausia įvesta reikšmė. Pateikiame šitokių uždavinių sprendimo struktūrogramas (14 pav.).

Page 49: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 50: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontroliniai pratimai

1. Parašykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus šių programų fragmentuose.

Pradinių duomenų rinkiniai:

Page 51: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 52: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

3. Parašykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus šių programų fragmentuose.

Pradinių duomenų rinkiniai tokie:

Pratimuose kintamieji aprašyti taip:

Page 53: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 54: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

4. Parašykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus šių programų fragmentuose.

Pradinių duomenų rinkiniai tokie:

Page 55: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Sudarykite ir patikrinkite didžiausios reikšmės radimo iš klaviatūra įvedamų duomenų programą pagal 14 paveiksle pateiktą struktūrogramą.

2. Pertvarkykite didžiausios reikšmės nustatymo programą taip, kad ji ieškotų mažiausios reikšmės.

Page 56: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Savarankiško darbo užduotys 1. Krepšinio kamuolio skersmuo D. Turime dėžę, kurios vidaus aukštis, plotis ir ilgis -

žinomi dydžiai. Reikia nustatyti, ar visas kamuolys tikrai telpa dėžėje.

2. Koordinačių plokštumoje nubrėžtas spindulio R apskritimas. Apskritimo centras yra taške (xc, yc). Reikia nustatyti, ar taškas, kurio koordinatės (xt, y t ) , yra turimo apskritimo viduje.

3. Koordinačių plokštumoje yra taškas, kurio koordinatės (x, y). Reikia nustatyti taško padėtį: koordinačių plokštumos ketvirtį arba koordinačių ašį (jei taškas yra joje).

4. Ūkininkas nukasė bulves ir supylė jas į B maišų. Reikia rasti, kiek kartų teks ūkininkui važiuoti į lauką norint parvežti visą derlių, jeigu vežime telpa ne daugiau kaip N maišų.

5. Pastatyto naujo tilto keliamoji galia T tonų. Tilto ilgis L metrų. Yra dvi eismo juostos. Ar tilto maksimali apkrova neviršys keliamosios galios? Trumpiausios mašinos ilgis rt metrų i r svoris st tonų. Ilgiausia mašina yra rl metrų ilgio i r sveria sl tonų. Bandymai vykdomi sustatant mašinas vieną prie kitos be tarpo.

6. Stačiakampė dėžė, kurios pagrindas yra A x B, o aukštis C, ik i pusės pripilta vandens. Kiek galima į dėžę priberti vyšnių (kaip žinome, jos skęsta), jeigu vyšnios skersmuo R mm ir vanduo neturi išbėgti? A, B ir c reikšmės ne mažesnės kaip 50 cm.

7. Vaikai iki 5 metų amžiaus kasdien suvalgo Dl gramų duonos, vyresni (iki 10 metų) - D 2 gramų duonos, vyresni kaip 10 metų ir suaugę iki 75 metų vidutiniškai suvalgo po D3 gramų duonos kasdien. Dar vyresni tenkinasi D4 gramų duonos per dieną. Kiek reikia duonos kasdien jūsų miestui (miesteliui, kaimui), jeigu žinote, kiek kokio amžiaus gyventojų yra?

8. Du kaimynai nutarė pasidalyti salą ežere pusiau. Kiek jiems reikia pasigaminti stulpelių tvorai, jeigu jos ilgis bus L metrų, o stulpeliai turi būti kasami kas N metrų?

9. Petriukas sapnuoja, kad jį vejasi 5 tigrai, 8 liūtai ir 9 mokytojai. Sapno pradžioje Petriukas bėgo labai greitai ir persekiotojus paliko labai toli: liūtai atsiliko L km, tigrai - T km, o mokytojai M km. Vėliau Petriukas taip pavargo, kad nebegalėjo bėgti greičiau kaip 1 km/val. greičiu. Kas Petriuką pavys, o kas ne, jeigu jį laikrodis pažadins po 8 vai. nuo to momento, kai jis pradėjo bėgti lėtai? Tigrai vijosi Tg km/val. greičiu, liūtai - Lg km/val., o mokytojai - Mg km/val. greičiu.

10. Petriukas spalio 12 d. 11 vai. 30 min. nusipirko slides ir ėmė laukti sniego. Snigti pradėjo sausio 25 d. 9 vai. 14 min. Kiek minučių Petriukas laukė sniego?

11. Gyveno kartą išradingas žmogus. Jis nutarė viename savo buto kambarių įsirengti garažą. Įvažiavimui reikia pagaminti ir sumontuoti nuožulnią platformą. Platforma gaminama iš 4 cm storio lentų. Vienos lentos plotis P cm, o ilgis L m. Kampas, kurį platforma sudaro su šaligatviu, yra K laipsnių. Buto grindų aukštis nuo šaligatvio yra B m. Kiek reikia pirkti lentų platformai pagaminti, jeigu garažo durų plotis yra 3 m?

12. Krepšinio kamuolio skersmuo D. Turime daug dėžių, kurių vidaus aukštis, plotis ir ilgis žinomi. Reikia nustatyti, keliose iš dėžių telpa tas kamuolys.

13. Koordinačių plokštumoje nubrėžtas apskritimas, kurio spindulys R. Apskritimo centras taške (xc, yc). Reikia nustatyti, kiek taškų, kurių koordinatės (xt, y t ) žinomos, yra turimo apskritimo viduje.

Page 57: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

14. Daug ūkininkų nukasė bulves ir supylė į maišus. Žinome, kiek kuris ūkininkas turi maišų su bulvėmis. Reikia rasti, kiek kartų teks važiuoti į laukus norint parvežti visą derlių kiekvienam ūkininkui atskirai, jeigu vežime telpa ne daugiau kaip N maišų. Per kiek dienų bus suvežtas derlius, jeigu vežėjas vienas ir per dieną jis pajėgia nuvažiuoti į laukus ne daugiau kaip K k a r t ų .

15. Pastatyto naujo tilto keliamoji galia T tonų. Tilto ilgis L metrų. Yra dvi eismo juostos. Ar tilto maksimali apkrova neviršys keliamosios galios? Trumpiausios mašinos ilgis Rt metrų ir sveria St tonų. Ilgiausia mašina yra Rl metrų ir svoris SI tonų. Bandymai vykdomi sustatant mašinas vieną prie kitos be tarpo. Parašykite programą, kuri analizuotų N tiltų galią.

16. Turime N skirtingų stačiakampių dėžių. Kiekvienos dėžės pagrindas A x B ir aukštis C žinomi. Visos dėžės ik i pusės pripiltos vandens. Kiek galima į kiekvieną dėžę priberti vyšnių (kaip žinome, jos skęsta), jeigu vyšnios skersmuo R mm ir vanduo neturi išbėgti? A, B ir c reikšmės ne mažesnės kaip 50 cm. Koks derlius bus supiltas?

17. Vaikai ik i 5 metų kasdien suvalgo Dl gramų duonos, vyresni (iki 10 metų) - D2 gramų duonos, vyresni kaip 10 metų ir suaugę iki 75 metų vidutiniškai suvalgo po D3 gramų duonos kasdien. Dar vyresni tenkinasi D4 gramų duonos per dieną. Kiek duonos suvalgoma kasdien didžiuosiuose Lietuvos miestuose? Duomenys apie kiekvieną iš jų atskirai žinomi.

18. Katino šeima vakarienei nutarė pasigauti žuvelių. Meškerioja senis katinas, bet ne visas žuveles deda į krepšį. Ima tik tas, kurios didelės ir skanios. Sudarykite programą, kuri suskaičiuotų, kiek katinas parnešė žuvelių į namus ir koks jų bendras svoris, jeigu apie kiekvieną sugautą žuvelę turime tokius duomenis: svoris ir skani arba neskani. Duomenys įvedami klaviatūra apie kiekvieną žuvelę atskirai: surenkamas skaičius, reiškiantis svorį, ir skanumo požymis 1, kai skani, ir - 1 , kai neskani. Duomenų įvedimo pabaiga nurodoma surinkus du nulius. Turi būti išspausdinta, kiek žuvelių parnešė katinas, koks jų bendras svoris. Įdomu, kiek buvo tinkamų žuvelių, bet neskanių? Papildykite sudarytą programą šiais skaičiavimais.

Page 58: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Žmonės sugeba išmokti, kaip ir žiurkės išmoksta rasti kelią labirinte. Bet šis procesas lėtas ir primityvus. Sąmoningai valdydami mokymosi procesą, apibūdindami ir analizuodami savo elgesį, galime išmokti daugiau ir greičiau.

Seimūras Papertas „Minčių audros"

4. Procedūros ir funkcijos Dažnai uždavinį lengviau programuoti išskaidžius jį į dalis. Kuo savarankiškesnės dalys

ir kuo mažiau tarp jų ryšių, tuo lengviau sudaryti ir nagrinėti programą. Pageidautina, kad programoje aiškiai matytųsi tų dalių ribos ir būtų nurodyti jų ryšiai. Atskiros programos dalys, galinčios turėti savus pradinius duomenis, vadinamos procedūromis ir funkcijomis.

Jose vartojami duomenys ir veiksmai aprašomi atskirai, jos įvardijamos ir įforminamos savitais būdais. Priėjus programos vietą, kurioje reikia atlikti procedūros ar funkcijos veiksmus, pakanka parašyti kreipinį į tą procedūrą ar funkciją.

Į vieną kartą aprašytą procedūrą ar funkciją galima kreiptis daug kartų, vadinasi, ir daug kartų atlikti jų veiksmus. Vienoje programoje gali būti daug procedūrų ir funkcijų.

Informacija tarp procedūrų, funkcijų ir pagrindinės programos dalies gali būti persiunčiama šiais būdais:

1) parametrais - perduodamos kintamųjų reikšmės ir vardai; 2) funkcijų vardais - perduodamos tik rezultatų reikšmės;

3) išoriniais (globaliaisiais) vardais. Visos programoje vartojamos procedūros ir funkcijos (išskyrus standartines) turi būti

aprašytos. Procedūros yra bendresnis atvejis negu funkcijos. Pirmiausia aptarsime, kaip aprašyti

procedūras.

4.1. Procedūros ir parametrų sąvokos Procedūra pradedama antrašte. Pirmasis antraštės žodis - p r o c e d u r e . Po jo rašomas

procedūros pavadinimas (vardas), o tada skliaustuose išvardijami pradiniai ir galutiniai duomenys, nurodomi kintamųjų vardais (15 pav.). Procedūros veiksmai nurodomi visiškai taip pat, kaip ir rašant programą.

Page 59: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

15 pav. Procedūros aprašo sintaksė

Procedūros antraštėje esančius kintamųjų vardus priimta vadinti formaliaisiais parametrais.

Kiekvienas antraštėje esantis parametras turi būti aprašytas, t. y. nurodytas jo tipas. Parametrai aprašomi taip, kaip ir visi programos kintamieji: po parametro vardo (ar vardų, jei yra keletas vienodo tipo parametrų) rašomas dvitaškis, po jo - tipo vardas.

Procedūros v i d u r k i s antraštėje pirmieji du parametrai skirti pradiniams duomenims (du realieji skaičiai), trečiasis parametras - rezultatui grąžinti (realusis skaičius). Antroji procedūra turi keturis sveikojo tipo parametrus: du pradiniams duomenims perduoti ir du rezultatams grąžinti. Trečioji procedūra turi parametrus tik pradiniams duomenims perduoti, jos rezultatai, matyt, tiesiog spausdinami. Ketvirtoji procedūra turi tik vieną parametrą, kuriuo grąžinamas rezultatas (toliau sužinosite, kad šitokiu parametru galima perduoti ir pradinius duomenis, ir rezultatus).

Atkreipkite dėmesį į skyrybą. To paties tipo kintamųjų vardai skiriami kableliais, prieš tipo pavadinimą rašomas dvitaškis, o po jo, jei dar yra kitų parametrų, - kabliataškis. Procedūros antraštės gale visuomet dedamas kabliataškis.

Po procedūros antraštės toliau viskas rašoma taip pat, kaip ir programoje: gali būti konstantų, kintamųjų vardų, tipų aprašai, taip pat - kitos procedūros bei funkcijos, ir pagaliau - pagrindiniai procedūros veiksmai.

Procedūros veiksmų pradžia žymima, kaip įprasta - b e g i n , pabaiga - end. Tarp šių žodžių surašomi procedūros veiksmus reiškiantys sakiniai.

Taigi procedūros aprašas analogiškas visos programos aprašui: jis gali turėti savo aprašytus objektus (kintamuosius, konstantas, procedūras, funkcijas). Tie objektai galioja tik toje procedūroje ir vadinami vidiniais.

Procedūros aprašą kompiuteris įsimena, bet jame užrašytų veiksmų neatlieka.

Procedūra atliekama tada, kai į ją kreipiamasi - užrašomas kreipimosi sakinys, kuris paprastai vadinamas tiesiog kreipiniu.

Kreipinį sudaro procedūros, į kurią kreipiamasi, vardas ir po jo skliaustuose išvardyti parametrai, kurie vadinami faktiniais.

Kreipinyje parametrų turi būti tiek, kiek jų yra procedūros antraštėje. Pirmasis parametras kreipinyje atitinka pirmąjį parametrą procedūros antraštėje, antrasis parametras kreipinyje - antrąjį procedūros antraštėje esantį parametrą ir 1.1.

Taigi atliekant procedūrą, tiksliau - atliekant kreipinį į tą procedūrą, kreipinyje esantys parametrai susiejami su antraštės parametrais ir taip jais persiuntinėjama informacija tarp

Page 60: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

16 pav. Kreipinio ir procedūros antraštės parametrų atitikimas

programos ir procedūros. Kreipinyje esantys parametrai siejami su antraštės parametrais iš eilės, kaip jie parašyti kreipinyje ir antraštėje (16 pav.). Jų skaičius turi būti vienodas.

Kontrolinės užduotys 1. Tarp žemiau pateiktų procedūrų antraščių viena neteisinga. Nurodykite, kuri, ir paaiš

kinkite, kodėl neteisinga.

4.2. Pradinių duomenų perdavimas Procedūrai būtinas ryšys su programa - reikia mokėti perduoti procedūrai pradinius

duomenis. Tarkime, turime procedūrą, kurios antraštė tokia:

procedure Lapas (x, y : r e a l ; a, b, d : integer); Transliatorius, perskaitęs procedūros antraštę, jos parametrams paskiria vietą kompiute

rio atmintinėje. Stačiakampiais langeliais (17 pav.) pavaizduota parametrams skirta vieta kompiuterio atmintyje.

Page 61: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kreipiantis į šią procedūrą, jos parametrams priskiriamos kreipinyje nurodytos reikšmės, pavyzdžiui, jei kreipsimės:

Lapas (1, 12, 3, -4, 5), tuomet parametrams x, y, a, b, d bus suteiktos reikšmės tokia tvarka, kaip surašyta. Vaizduojamame paveiksle tai reikštų, kad langeliuose atsiras tų skaičių reikšmės. Tai tarsi būtume atlikę priskyrimo sakinius:

x := 1; y := 12; a := 3; b := -4; d := 5; Perduoti galima ne tik konstantas, bet ir reiškinius ar kintamųjų reikšmes. Taigi kreipi

nyje galima rašyti kintamojo vardą ar reiškinį - svarbu tik, kad šis kintamasis arba reiškinys turėtų reikšmę - būtų ją įgijęs anksčiau, dar prieš kreipiantis. Pavyzdžiui, galima rašyti:

k := 11; z := 22; Lapas (k + z, k - z, k, z, k d i v z);

Įsidėmėkite, kad atlikus kreipinį, kreipinyje įrašytų kintamųjų reikšmės nepakinta, t. y. k reikšmė liks lygi 11, o z - lygi 22.

Page 62: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pastaba. Nerašykite simbolių, kurie neturi grafinio vaizdo. Pavyzdžiui, 7-ojo, kuris reiškia garsą, arba 10-ojo - eilutės pabaigos žymės, 27-ojo - klavišo Esc kodo.

4.2 pratimas. Ekrane turi būti atsitiktine tvarka dėliojami stačiakampiai, nuspalvinti atsitiktinai parinkta spalva. Vienam stačiakampiui nupiešti sudaroma procedūra Langas. Jos parametrai - stačiakampio kairiojo viršutinio ir dešiniojo apatinio kampo koordinatės bei fono spalva. Stačiakampiams dėlioti ekrane sudarysime procedūrą Kiek. Ji nedaug kuo skirsis nuo ankstesnio pratimo. Tik jos parametrai du - stačiakampio plotis ir aukštis (matuojama simbolių skaičiumi). Procedūra turi generuoti atsitiktinę stačiakampio vietą ekrane (kairiojo viršutinio kampo koordinates) ir spalvą. Generuojant lango koordinates, reikia stengtis, kad jos neišeitų už ekrano ribų. Priešingu atveju galima gauti kitokį, negu planavome, vaizdą. (Galite pabandyti.)

Page 63: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys 1. Išbandykite 4.1 pratimo programą - užrašykite daugiau kreipinių su kitokiais simboliais.

2. Papildykite procedūrą Kiek ekrano valymu (ClrScr). Tuomet bus gražiau - neliks

senųjų simbolių.

3. Pakeiskite 4.2 pratimo programoje vartojamą ekrano fono spalvą.

4. Pakeiskite 4.2 pratimo programą taip, kad ji stačiakampyje parašytų nurodytą simbolį. Simbolis turėtų būti perduodamas procedūrai Kiek, kuri jį parašytų sukurtame lange (procedūra Langas).

5. Pakeiskite procedūrą Kiek (4.2 pratimas) taip, kad ji nurodytą simbolį užrašytų lango centre.

6. Ekrane rašomą simbolį pakeiskite savo ar draugo vardu (arba kitokiu žodžiu). Pamėginkite tai padaryti duotuose pratimuose. Tam tereikia duomenų tipą char pakeisti tipu s t r i n g .

4.3. Rezultatų grąžinimas Jau mokame perduoti procedūrai pradinius duomenis. O kaip sužinoti rezultatus? Tai

paprasta: prieš tuos kintamuosius, kurie reikš rezultatus, tereikia parašyti žodelį var. Procedūros antraštėje esantiems parametrams, turintiems žodelį var, vieta atmintinėje

neskiriama. Jais įvardijamos tos atmintinės vietos, kurios skirtos kreipinyje esantiems kintamiesiems (18 pav.).

Taigi rezultatams skirtos vietos turi dvigubus vardus: vieną gauna iš programos, kitą -iš procedūros.

Dažnai šie rezultatus perduodantys parametrai vadinami kintamųjų parametrais, o ankstesniame skyrelyje nagrinėti pradinių duomenų perdavimo parametrai - reikšmių parametrais.

Kintamųjų parametrai pakeičiami kreipinyje nurodytais pagrindinės programos kintamaisiais. Tokie parametrai naudingi tada, kai pageidaujama, kad procedūra pakeistų pagrindinės programos kintamųjų reikšmes. Sakoma, kad grąžinamas veiksmų rezultatas (18 a pav.).

Page 64: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pavyzdžiui:

Kreipinio pavyzdys:

Antraštėje esančių parametrų ir kreipinio parametrų vardai gali sutapti, kaip kad daugelio žmonių vardai sutampa. Žmonės turi pavardes, - parametrų pavardę atitinka procedūros arba funkcijos vardas.

4.3pratimas. Klaviatūra įvedamas skaičius. Reikia sudaryti programą šiam skaičiui pakelti kvadratu.

Programoje galima išskirti tris dalis: skaičiaus įvedimą, skaičiaus kėlimą kvadratu ir vartotojo apklausą, ar jis dar nori dirbti su kitais skaičiais. Kiekvienam iš tų veiksmų padaroma procedūra. Iš ankstesnės programos atkeliama lango piešimo procedūra. Ji reikalinga tam, kad tris skirtingus veiksmus atliktume skirtinguose ekrano languose. Galima atidaryti vieną langą skaičiui įvesti, kitą - rezultatui ir trečią - apklausai, ar dar tęsti darbą. Pagrindinė programa valdo visus veiksmus. Skaičiaus įvedimo procedūra I m t i grąžina įvestą kintamojo reikšmę, todėl vartojame rezultatų parametrą (su žodžiu v a r ) .

Page 65: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Atkreipkite dėmesį, kad šioje programoje kintamuosius aprašėme ne programos pradžioje, kaip ik i šiol darydavome, o prieš pat programos veiksmus. Kai programoje esama procedūrų, taip daryti patogiau: kintamųjų vardų aprašai būna arčiau tos dalies, kur jie naudojami. Be to, išvengiama programos kintamųjų panaudojimo tiesiogiai procedūrose. Tai leistina, bet nerekomenduojama. Todėl ir toliau taip darysime.

Duomenims perduoti procedūrai, kaip ir rezultatams gauti, gali būti vartojami kintamojo tipo parametrai. Taip reikės daryti tais atvejais, kai programos kintamojo reikšmė turės būti pakeista procedūroje. Tuomet šitokiu kintamuoju perduodame pradinę reikšmę ir, atlikę procedūrą, gauname pakeistą reikšmę - rezultatą.

Kontroliniai pratimai

Parašykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus duotose programose. Pradinių duomenų eilutė surenkama klaviatūra (pabaigoje paspaudžiamas klavišas E n t e r ) .

Page 66: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 67: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 68: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys 1. Pateikta 4.3 pratimo programa duos teisingus rezultatus, jeigu pradiniai duomenys bus

teisingai parinkti. Papildykite programą komentarais, kad ji nurodytų vartotojui, kokie turi būti pradiniai duomenys.

2. Papildykite 4.3 pratimo programą taip, kad iš pradinio duomens būtų ištraukiama kvadratinė šaknis ir gautas rezultatas būtų spausdinamas kitoje eilutėje negu skaičiaus kvadratas.

4.4. Funkcijos sąvoka Jau vartojome Turbo Paskalio bibliotekose esančias standartines funkcijas, pavyzdžiui,

Sin (x), Sqrt (x), Abs (x), Round (x). Kaip pastebėjote, jų gautas rezultatas panaudojamas vietoj kreipinio reiškiniuose (atskiru atveju - tiesiog priskiriamas kuriam nors kintamajam).

Funkcijas, kaip ir procedūras, gali aprašyti pats vartotojas. Jos iš esmės panašios į procedūras, tik gali turėti vieną rezultatą ir jis priskiriamas funkcijos vardui.

Funkcija pradedama antrašte, po kurios gali būti nurodomi aprašai (konstantų, kintamųjų, tipų) ir funkcijos veiksmai, išreikšti vienu sudėtiniu sakiniu (19 pav.).

Funkcijos darbo rezultatas grąžinamas funkcijos vardu. Rezultatas turi būti tik viena reikšmė.

Funkcijos pagrindiniai veiksmai rašomi taip pat, kaip procedūros. Yra tik vienas papildomas reikalavimas: būtinai turi būti bent vienas priskyrimo sakinys, kuriuo funkcijos vardui priskiriama reikšmė.

Į funkciją kreipiamasi jos vardu nurodant pradinių duomenų parametrus, kurie turi atitikti antraštėje esančius parametrus taip pat, kaip ir procedūrose. Kreipinys į funkciją rašomas priskyrimo sakinyje arba reiškinyje, - ten, kur turi būti panaudota funkcijos reikšmė.

4.4pratimas. Parašysime programą apskaičiuoti reiškiniui:

Čia kėlimą laipsniu atliks funkcija Laipsnis.

Page 69: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

4.5 pratimas. Superpirminiu skaičiumi vadinamas toks pirminis skaičius, kurį per

rašius atbulai vėl gaunamas pirminis skaičius. Pavyzdžiui, superpirminis skaičius yra 13, nes 31 irgi yra pirminis.

Sudarysime programą superpirminiams skaičiams intervale [2; 1000] rasti.

Apgalvodami šios programos sprendimą nesunkiai suvoksime, kad čia galima išskirti du atskirus veiksmų fragmentus: pirminiam skaičiui nustatyti ir skaičiui perrašyti atbulai. Kadangi abiem atvejais gaunamas vienas rezultatas, vadinasi, kiekvieną iš šių fragmentų galima apiforminti funkcija.

Page 70: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

4.5. Vardų galiojimo sritys

Jau žinome, kad sudarydami programas, turime jų veiksmus išskaidyti į atskiras dalis, fas geriausia įforminti procedūromis ir funkcijomis. Čia kyla vienas svarbus klausimas - apie vardų (kintamųjų, konstantų, tipų, tai pat pačių procedūrų ir funkcijų) galiojimo sritis. Pavyzdžiui, ar vienos procedūros viduje aprašytą vardą „matys" kita procedūra? Panagrinėkime pavyzdį.

Page 71: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Procedūrose Pl ir P2 tuo pačiu vardu A aprašyti kintamieji yra visiškai skirtingi, tarp jų nėra nieko bendra.

įsidėmėkite logišką taisyklę: kiekvienoje procedūroje arba funkcijoje aprašyti vardai, taip pat jų antraštėje esantys parametrai galioja tik toje procedūroje ar funkcijoje, kurioje jie aprašyti. Jos išorėje jų vartoti negalima; sakoma, jie nematomi.

Ši savybė, kad procedūroje ar funkcijoje aprašyti vardai galioja tik jos viduje, labai praverčia: rašant procedūras ar funkcijas, kiekvienoje jų galima vartoti tuos pačius vardus - j ie nesusipainios.

Programoje aprašyti vardai galioja ir visose joje esančiose procedūrose bei funkcijose. Tačiau jų vartoti ten nederėtų - toks programavimo stilius blogesnis (tokias programas sunkiau skaityti, nes tenka ieškoti, kur aprašyti vardai).

Procedūroje arba funkcijoje aprašyti kintamieji vadinami vidiniais (kartais dar lokaliaisiais) kintamaisiais. Programoje aprašyti kintamieji vadinami išoriniais (arba globaliaisiais) kintamaisiais.

Pateiksime vardų galiojimo sričių pavyzdį (20 pav.). Jame galiojimo sritys dar paryškintos rėmeliais, o dešinėje linijomis parodytos atskirų kintamųjų ir procedūrų vardų galiojimo sritys. Žvaigždute pažymėtas nagrinėjamo kintamojo aprašas. Apskritimuose ant vertikalių linijų pažymėtos kintamiesiems suteikiamos reikšmės, o taškais - kintamieji, kurių reikšmės spausdinamos. Spausdinama reikšmė nurodoma rodykle: rodyklės pradžia nusako spausdinamąją reikšmę (apskritime), galas - spausdinimo momentą. Skaičiais prie kontūro pažymėta sakinių atlikimo eilė. Pagal pateiktą programą spausdinami šitokie rezultatai:

Page 72: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontroliniai pratimai

1. Parašykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus

duotose programose. Duomenų eilutė surenkama klaviatūra (pabaigoje paspaudžiamas

klavišas E n t e r ) .

Page 73: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

2. Parašykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus

duotoje programoje. Duomenų eilutė surenkama klaviatūra (pabaigoje paspaudžiamas kla

višas E n t e r ) .

Page 74: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

3. Parašykite, ką ir kaip matysite kompiuterio ekrane, jeigu atliksite nurodytus veiksmus duotoje programoje. Duomenų eilutė surenkama klaviatūra (pabaigoje paspaudžiamas klavišas Enter).

Page 75: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys 1. Sudarykite procedūras visų jums žinomų geometrinių figūrų plotams skaičiuoti. Šias

procedūras įjunkite į programą ir pagalvokite apie jų rezultatų įforminimą.

2. Sudarykite procedūras visų jums žinomų geometrinių figūrų tūriams apskaičiuoti. Įforminkite dialogo veiksmus su vartotoju.

Page 76: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kuo daugiau protas prikuria daiktų, tuo labiau skiria vieną civilizaciją nuo kitos ir vieną žmogų nuo kito, kartais pastatydamas tarp jų nebeįveikiamas užtvaras. Siųsdami savo atliekamus daiktus Afrikos gentims, mes nė per nago juodymą nepriartiname jų prie savęs. Atvirkščiai, mes tik parodome, kaip toli ir kitur esame. O ir patys, gamindami ir pirkdami galybes daiktų, turinčių palengvinti mūsų gyvenimą, mes iš tikrųjų tik krauname juos vienus ant kitų ir iš jų kaip iš plytų mūrijame aukštas ir tvirtas tvoras, kurių patys nebeįstengiame perlipti; artimo link, jo dvasios link, su kuria norėtume ir turėtume bendrauti. Jeigu pavyktų perlipti, atsitrenktume dar į vieną, gal dar aukštesnę sieną, kurią tos kitos bus išmūriję aplink save. Todėl vis toliau esame priversti gyventi tarytum garduose.

Romualdas Granauskas Žodžio agonija"

5. Masyvas ir simbolių eilutė Spręsdami uždavinius iki šiol vartojome tik paprastuosius duomenis su pavienėmis reikš

mėmis. Programose dažnai prireikia ne tik pavienių reikšmių, bet ir vienaip ar kitaip susietų duomenų rinkinių. Tokie duomenų rinkiniai vadinami duomenų struktūromis arba struktūriniais duomenimis. Viena dažniausiai vartojamų duomenų struktūrų yra masyvas,

kurį ir panagrinėsime šiame skyriuje. Taip pat supažindinsime su eilutėmis - jas galima laikyti atskiru masyvo atveju, kurio elementai - simboliai.

5.1. Masyvo sąvoka Masyvu vadinamas vienodo tipo duomenų rinkinys, kuriame elementai išdėstyti tam

tikra tvarka. Masyvą paprasčiausiu atveju galime įsivaizduoti kaip paeiliui sunumeruotų dydžių seką. Dažniausiai numeracija pradedama nuo vieneto. Tie numeriai vadinami indeksais. Matematikoje indeksai rašomi prie simbolio apačioje. Programavimo kalbose taip rašyti negalima, todėl indeksai rašomi šalia vardo laužtiniuose skliaustuose.

Page 77: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kadangi masyvo elementų išdėstymas nurodomas indeksais, tai patys masyvų elementą: vadinami indeksuotaisiais kintamaisiais. Elemento indeksas gali būti sveikasis skaičius arba sveikojo tipo kintamasis, arba net reiškinys, kurio rezultatas yra sveikasis skaičius Elementus galima numeruoti ir raidėmis. Tuomet indekso kintamasis turi būti simbolinio ( c h a r ) tipo.

Masyvo elementai gali būti bet kurio anksčiau aprašyto duomenų tipo. Svarbu tik, kad vieną masyvą sudarytų būtinai to paties tipo elementai.

Paskalio kalboje masyvas aprašomas nurodant jo elementų indeksų tipą (21 pav.)

Dažniausiai pasirenkamas sveikasis indekso tipas. Kadangi jis gana didelis (turi daug reikšmių), būtina nurodyti ne patį tipo vardą (kaip galima daryti esant loginiam ar simboliniam tipams), o jo atkarpą - mažiausią ir didžiausią leistinąją reikšmę.

Masyvo duomenų tipo Turbo Paskalyje nėra. Programuotojas turi pats susikurti reikiamą masyvo tipą pagal nurodytas taisykles (21 pav.). Po to galima aprašyti sukurto masyvo tipo kintamuosius. Masyvo tipų ir kintamųjų aprašų pavyzdžiai:

Čia pavartota dar viena aprašų rūšis - duomenų tipas, kuris pradedamas nurodžius žodį t y p e . Sudarant tipo aprašą kairėje lygybės pusėje nurodomas naujasis tipo vardas, dešinėje - pats tipas.

Jeigu masyvo elemento tipas bus vėl masyvas, tai susidarys struktūra, vadinama daugia

mačiu masyvu. Paprasčiausia masyvo matavimą atskirti pagal vienam elementui nurodyti reikalingą indeksų skaičių: jei elementai nurodomi vienu indeksu, tai toks masyvas vadinamas vienmačiu, jeigu dviem - dvimačiu ir 1.1. Dažniausiai vartojami dvimačiai masyvai, kurie dar kartais vadinami lentelėmis (jų elementų išdėstymą patogu pavaizduoti lentele). Dvimačių masyvų pavyzdžiai:

Galimi ir kitokie užrašų variantai. Mes į tai nesigilinsime, visuomet galima žvilgtelėti į Paskalio kalbos žinynus.

Page 78: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Masyvų elementai vartojami reiškiniuose bei kitose konstrukcijose taip pat, kaip ir paprasti kintamieji. Visam masyvui iš karto galima taikyti tiktai priskyrimo operaciją, tačiau tokiu atveju būtina, kad abu operacijoje nurodomi masyvai būtų aprašyti vienodai (tuo pačiu masyvo tipu):

Programose masyvai yra patogūs sisteminti vardams ir grupuoti duomenims. Ypač paranku juos naudoti tada, kai programoje tenka keletą kartų peržiūrėti tą patį duomenų rinkinį arba kai sudaromi ir apdorojami tarpusavyje susijusių dydžių rinkiniai.

Masyve galima laikyti ne daugiau reikšmių negu nurodyta jo apraše. Sakydami, kad masyve yra, pavyzdžiui, 10 skaičių, turime galvoje, kad pirmasis iš jų yra pirmoje vietoje, antrasis - antroje ir 1.1. Programose labai svarbu stebėti, kad indekso reikšmė visuomet būtų iš aprašyto intervalo.

Jeigu pirmojo elemento indeksas yra vienetas (taip patogiausia, nes ir matematikoje taip priimta), tuomet elementų skaičius ir paskutinės įrašytos reikšmės indeksas sutampa. Sakydami, kad masyve yra 10 skaičių, turime galvoje, kad paskutinis 10-asis skaičius yra dešimtoje vietoje.

Įvedant duomenis tikslinga patikrinti, ar tiek elementų tilps masyve. Jei ne, tuomet reikėtų numatyti galimus tolesnius veiksmus: nutraukti programos darbą, pasirinkti maksimaliai leistiną reikšmių skaičių, pasiūlyti vartotojui iš naujo nurodyti masyvo reikšmių skaičių ir pan.

5.1 pratimas. Tarkime, turime daug apskritimų. Jų spinduliai žinomo ilgio. Reikia rasti didžiausią apskritimą ir nustatyti, kiek iš viso yra tokių didžiausių apskritimų. Duomenys įvedami klaviatūra ir iš karto surašomi į masyvą.

Apskritimų ilgių skaičiuoti nereikia. Taigi pakanka nustatyti, kurio apskritimo spindulys ilgiausias.

Page 79: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 80: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys 1. Papildykite 5.1 pratimo programą taip, kad ji papildomai spausdintų nustatyto didžiausio

apskritimo ilgį.

2. Ši programa (5.1 pratimas) masyve išlaiko ne daugiau kaip 50 skaičių (žr. masyvo tipo aprašą). Kaip reikėtų pakeisti programą, kad ji tikrintų, ar įvedamas apskritimų skaičius nėra didesnis? Sugalvokite, ką daryti, jei taip atsitiktų, ir papildykite programą.

3. Papildykite programą, kad ji turėtų antraštinį puslapį - užsklandą. Tai būtų programos pristatymas. Galite sugalvoti žaismingus vaizdelius ekrane: programa galėtų pasisveikinti su vartotoju ir parašyti, kas numatoma daryti, kas jos autorius. Tam paprastai daromos atskiros procedūros.

5.2. Veiksmai su masyvo elementais Su masyvo elementais galima atlikti įvairius veiksmus, tokius pat kaip ir su paprastaisiais

kintamaisiais. Pavyzdžiui, masyvo elementus (indeksuotus kintamuosius) galima vartoti reiškiniuose, ciklų sąlygose, skaitymo ir rašymo sakiniuose ir pan.

Panagrinėkime keletą masyvams būdingų situacijų. Pirmiausia aprašykime reikalingus kintamuosius:

Dažniausiai reikalingas veiksmas - užpildyti masyvą pradinėmis reikšmėmis. Tam vartojame ciklą:

Paskalio kalboje nėra priemonių visam masyvui iš karto perskaityti bei išspausdinti. Šiems veiksmams atlikti reikia vartoti ciklus:

Visiškai analogiškai galima išspausdinti masyvus - vartojamos procedūros Write arba WriteLn.

Neretai tenka vieno masyvo elementams priskirti kito masyvo elementus. Šitoks veiksmas vadinamas masyvą kopijavimu. Jeigu kopijuojami masyvai aprašyti to paties tipo, tuomet galime vartoti tiesioginį priskyrimą:

Tai vienintelis galimas veiksmas su visu masyvu. Tačiau galima (dažnai ir būtina, jei masyvai aprašyti ne to paties tipo) kopijuoti po vieną

elementą:

Dažnai reikia rasti masyve elementus, tenkinančius kokias nors sąlygas. Pavyzdžiui, reikia suskaičiuoti, kiek masyve A yra lygių nuliui elementų:

Page 81: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Sudarant uždavinių programas labai svarbu tinkamai parinkti duomenų struktūras. Nuo to priklauso ne tik būsimos programos sudėtingumas, bet ir apimtis, galimybės modifikuoti programą, pritaikyti ją kitoms reikmėms. Vienas svarbiausių programavimo etapų ir yra parinkti bei sudaryti duomenų struktūras.

Jei skaičiavimų rezultatus reikia surašyti į masyvą, tai daroma taip pat, kaip ir įvedant

duomenis (žr. 5.1 pratimą).

).J pratimas. Koordinačių plokštumoje duota n taškų. Reikia sudaryti programą, kuri nustatytų, ar yra bent vienas taškas duoto apskritimo viduje. Apskritimo centro koordinatės a, b ir jo spindulys r žinomi.

Čia rezultatų skaičius žinomas iš anksto. Kai nežinome, kiek bus rezultatų, būtina tikrinti, ar kartais nebandoma rašyti duomenų į masyvą su neleistinu, t. y. išeinančiu už masyvo ribų indeksu.

5.2 pratimas. Koordinačių plokštumoje duota daug taškų. Jų koordinatės surašytos į

masyvus X ir Y taip, kad pirmajame masyve yra visų duotų tasKų x Koordinates, antrajame - šių taškų y koordinatės, pateiktos atitinkama tvarka. Reikia sudaryti programą, kuri suskaičiuotų atstumą nuo kiekvieno taško iki koordinačių pradžios ir gautus rezultatus surašytų į masyvą A (22 pav.).

Page 82: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 83: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinių duomenų pavyzdys

5.4pratimas. Ūkininkas parsivežė nuimtą arbūzų derlių. Juos reikia surūšiuoti pagal svorį į dvi kategorijas: ik i 1 kg svorio ir sunkesnius.

Toks pratimas buvo trečiame skyriuje. Buvo skirstoma kompiuterio ekrane ir arbūzų svorių reikšmės nebuvo įsimenamos. Dabar duomenis ir gautus rezultatus įrašysime į masyvus. Tada galėsime ne tik papildyti programą naujais veiksmais, bet prireikus išsaugoti byloje, išspausdinti popieriuje ir pan. Tai aptarsime tolesniuose skyriuose.

Čia tik parodysime, kaip arbūzai skirstomi į dvi krūvas. Programoje reikalingos tokios procedūros:

Duomenų grupavimo pagal nurodytus požymius uždavinio pavyzdžiu gali būti toks pratimas.

Page 84: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 85: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

5.5 pratimas. Masyvo reikšmių rikiavimas, t. y. jo reikšmių išdėstymas didėjančia (nemažėjančia) arba mažėjančia (nedidėjančia) tvarka, yra klasikinis programavimo uždavinys. Galite rasti daug rikiavimo metodų. Keletas jų aprašyta ir „Programavimo uždavinyne". Pateiksime patį paprasčiausią. Pasinaudokime didžiausios reikšmės radimo algoritmu. Algoritmą šiek tiek pakeiskime. Ieškosime didžiausios reikšmės ne visame masyve, bet nurodytame masyvo elementų intervale. Algoritmas būtų toks:

1. Randame didžiausią elementą visame masyve, t. y. nuo 1-ojo ik i n-ojo elementų. Sukeičiame vietomis rastojo elemento ir 1-ojo elemento reikšmes.

2. Randame didžiausią elementą masyvo intervale nuo 2-ojo iki «-ojo elementų. Sukeičiame vietomis rastojo elemento ir 2-ojo elemento reikšmes.

3. Randame didžiausią elementą masyvo intervale nuo 3-iojo iki n-ojo elementų. Sukeičiame vietomis rastojo elemento ir 3-iojo elemento reikšmes.

Taip darome tol, kol intervale lieka tik vienas elementas. Masyve skaičiai bus išdėstyti

mažėjimo tvarka.

Jei norime gauti skaičius išdėstytus didėjimo tvarka, turime daryti taip pat, tik šiuo atveju nurodytame intervale ieškosime mažiausios reikšmės.

Page 86: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 87: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinių duomenų pavyzdys

Kontroliniai pratimai

1. a) Ką ir kaip parodys ekrane žemiau pateikta programa, jeigu ją vykdydami surinksite klaviatūra tokias skaičių eilutes:

Page 88: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 89: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Atlikite žodžiu „Programavimo pradmenų" uždavinyno 5.1-5.4 pratimus. Tada sudarykite programėles gautiems rezultatams patikrinti.

2. Sudarykite programą 5.9 pratimui iš „Programavimo pradmenų"uždavinyno (97 psl.) atlikti - kintamoms masyvo reikšmėms stebėti.

3. Rezultatų surašymo į masyvą algoritmą (5.2 pratimas), pavaizduotą struktūrograma (22 pav.), užrašykite programa. Išbandykite ją su skirtingais duomenimis.

4. Arbūzų rūšiavimo programą išbandykite su įvairiais duomenimis.

5. Moksleivio kiekvienos mėnesio dienos išlaidos litais įrašytos į masyvą. Sudarykite programą, kuri apskaičiuotų moksleivio išlaidas per k dienų. Nustatykite, kiek jis vidutiniškai išleidžia per vieną dieną.

6. Sudarykite programą ligonio temperatūrai analizuoti per parą. Nustatykite didžiausią ir mažiausią temperatūros reikšmę. Sutarkite temperatūrą matuoti kas valandą, jos reikšmes klaviatūra įveskite į masyvą.

7. Kai kuriose sporto varžybose sportininko pasirodymą vertina keletas teisėjų. Iš gautų įverčių (balų) atmetamas pats aukščiausias ir pats žemiausias įvertis ir tada randamas likusių balų vidurkis. Jei aukščiausiąjį balų skaičių skyrė keli teisėjai, tai atmetamas tik vienas iš tų įverčių. Analogiškai pasielgiama ir kai keletas teisėjų skiria žemiausiąjį įvertį. Į masyvą įvedami aštuonių teisėjų pateikti sportininko pasirodymo įverčiai balais. Parašykite programą sportininko pasirodymo galutiniam įvertinimui rasti.

Savarankiško darbo užduotys

1. Turguje ant prekystalio šalia vienas kito eilute sudėti arbūzai, t. y. juos galime sunumeruoti nuo 1 ik i n. Kiekvieno iš jų svoris žinomas. Pirkėjas prašo vidutinio arbūzo. Kuris tai bus?

2. Koordinačių plokštumoje duota daug taškų, kurių koordinatės (x, y) žinomos. Apie toliausiai nuo koordinačių pradžios nutolusį tašką apibrėžtas spindulio R apskritimas. Kiek duotų taškų patenka į apskritimo vidų?

3. Yra daug cilindro formos statinių, kurių aukštis ir skersmuo žinomi. Reikia rasti aukščiausios statinės tūrį ir nustatyti, kiek tokio tūrio statinių yra iš viso.

Page 90: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

5.6 pratimas. Klaviatūra surenkama bet kokių simbolių eilutė. Reikia rasti, kiek toje eilutėje buvo skaitmenų ir parodyti juos ekrane.

Programa gana paprasta. Kaip ir anksčiau, reikia pagalvoti, kokia bus programos struktūra: aišku, kad reikės ekraną apipavidalinančios ir simbolius įvedančios procedūrų.

Procedūrą L a n g a s perkeliame iš ankstesnių programų. Simbolių eilutei įvesti sudarome procedūrą S i m b o l i a i . Čia galima įvedimą programuoti taip pat, kaip ir esant skaičių masyvui: pirmiausia paklausti, kiek iš viso bus simbolių, po to naudojant ciklą f o r įvesti nurodytą simbolių skaičių. Tačiau tai nėra patogu, nes reikės suskaičiuoti, kiek bus simbolių. Patogiau įvedinėti visus iš eilės renkamus simbolius, kol bus nurodyta, kad įvedimas baigtas. Tai galima padaryti įvairiai. Patogiausia pasinaudoti Turbo Paskalio funkcija E o l n , kuri nurodo, ar aptikta eilutės pabaiga (tuomet jos reikšmė lygi T r u e ) , ar dar ne (tuomet jos reikšmė bus F a l š e ) .

Eilutė gali būti gana ilga ir jos visi simboliai gali netilpti į masyvą. Tai reiškia, kad reikia tikrinti, ar skaitomas simbolis dar telpa į masyvą, ar ne. Jeigu jau netelpa, tai toliau skaityti nėra prasmės.

Skaitmenų paieškai įvestame simbolių masyve sudarykime procedūrą S k a i t m u o . Reikia paeiliui peržiūrėti visus masyve esančius simbolius ir patikrinti, ar tai skaitmuo. Tam

4. Kuris moksleivis iš klasės pirmasis švęs savo gimtadienį nurodytą mėnesį? Jeigu tokio moksleivio nėra, programa turėtų pasiūlyti pasirinkti kitą mėnesį.

5. Plokštumoje yra nubrėžta n trikampių. Viršūnių koordinatės (x, y) žinomos. Jos surašytos į masyvus XI ( n ) , Yl ( n ) , X2 ( n ) , Y2 ( n ) , X3 ( n ) , Y3 ( n ) . Čia pirmieji skaičiai visuose masyvuose reiškia pirmojo trikampio viršūnių koordinates, antrieji -antrojo ir 1.1. Apie kiekvieną trikampį brėžiami apskritimai, kurių centrai yra trečios viršūnės taške, o spinduliai lygūs kraštinės ilgiui tarp pirmos ir antros viršūnių. Reikia atrinkti trikampius (nurodyti jų indeksus duomenų masyvuose), kurie visiškai telpa į savo apskritimą.

6. Turime traukinio judėjimo grafiką, t. y. žinome atstumą nuo pradinės stoties ik i tarpinės stotelės ir laiką, per kurį traukinys atvažiuoja į tą stotelę. Reikia rasti, tarp kurių stotelių atstumas mažiausias ir kurią atkarpą traukinys pravažiuos greičiausiai.

7. Cilindro formos statinės, kurios aukštis H ir skersmuo D, šone išgręžtos labai mažos skylutės, kurių kiekvienos skersmuo d. Žinomas kievienos skylutės atstumas nuo statinės viršaus. Statinė ik i viršaus pripilta vandens. Per kiek laiko išbėgs vanduo iki apatinės skylutės? Vandens tekėjimo greitis pro skylutę, esančią aukštyje h, lygus S q r t ( 2 * g * h ) .

5.3. Simbolių masyvai Masyve galima saugoti ne tik skaičius, bet ir simbolius. Iš simbolių sudaromas tekstas.

Yra daug uždavinių, kuriuose reikia apdoroti tekstą. Pavyzdžiui, galima atlikti teksto statistinę analizę: suskaičiuoti, kiek skirtingų raidžių yra tekste, kuri raidė dažniausiai vartojama, kurios raidės iš viso nepavartotos ir 1.1. Tiesa, rimtai analizei reikalingi didelės apimties tekstai. Simbolių masyvą aprašome taip pat, kaip ir skaičių, tik elementų tipas nurodomas simbolinis - c h a r .

Page 91: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

reikia kiekvieną masyvo simbolį palyginti su simboliais ' 0 ' , ' 1 ' , ' 2 ' , . . . , ' 9 ' . Šitaip programuodami gautume sudėtingą sąlyginio sakinio konstrukciją (arba dešimt paprastų sąlyginių sakinių i f . . . t h e n ) .

Siūlome trumpesnį sprendimą. Prisiminkime, kad lyginant simbolius j ie pakeičiami atitinkamais kodais pagal kodų lentelę. Pasiremkime tuo faktu, kad skaitmenys lentelėje surašyti eilės tvarka (žr. 8 priedą). Tuomet pakanka patikrinti, kurioje lentelės vietoje yra nagrinėjamas simbolis.

Page 92: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys 1. Procedūroje Skaitmuo sąlyginio sakinio lyginimo sąlygą pakeiskite šitokia:

A[i] i r i ['0' . . '9']. Įsitikinkite, kad gausite tą patį rezultatą. Šitaip rašome, kai norime nustatyti, ar elemento A [ i ] reikšmė yra iš intervalo ' 0' . . ' 9 '. Jei taip, tai atsakymas bus True, kitaip - Falše. Iš tikrųjų užrašas [' 0 ' . . ' 9 ' ] reiškia skaitmenų aibę, o operacija in patikrina, ar kairėje pusėje parašyta reikšmė priklauso dešinėje pusėje nurodytai aibei.

2. Lotynų abėcėlės didžiosios raidės kodų lentelėje yra surašytos iš eilės. Programoje skaitmenų atpažinimo sąlygoje '0' pakeiskite į 'A', o '9' į 'Z'. Dabar programa turėtų ekrane parodyti visos surinktos eilutės didžiąsias raides.

3. Ką reikėtų pakeisti programoje, kad ji tiktų surinktos eilutės lotynų abėcėlės mažosioms raidėms parodyti ekrane?

5.4. Simbolių eilutės Turbo Paskalyje simbolių eilutei įsiminti yra labai patogus duomenų tipas - eilutė. Jis

žymimas žodžiu s t r i n g . Šį tipą galima laikyti aprašytu šitaip: type s t r i n g = array [0..255] o f char; Matome, kad eilutė - tai tam tikras simbolių masyvas. Darbui su tokio tipo duomenimis

(eilutėmis) yra sudaryta nemažai standartinių procedūrų ir funkcijų, todėl programuotojui labai patogu jomis pakeisti daugelį veiksmų, užuot pačiam vėl programavus.

Eilutės tipo duomenys turi įdomią savybę: nulinio indekso elementas nurodo, kiek eilutėje iš viso yra simbolių. Tik tas kiekis rašomas ne skaičiumi, bet jį atitinkančiu simboliu kodų lentelėje. Pavyzdžiui:

Eilutėje A saugoma 10 simbolių. Nuliniu indeksu eilutėje bus užrašytas dešimtas (10) simbolis pagal kodų lentelę.

Patys simboliai eilutėje rašomi nuo pirmos vietos. Tikrinti, ar ne per daug simbolių, nereikia. Netelpantys simboliai bus paprasčiausiai atmetami.

Jeigu eilutės simbolius reikia nagrinėti atskirai, tai vartojame ciklus, kaip ir prieš tai nagrinėtame pratime. Tuomet būtina žinoti, kiek simbolių yra toje eilutėje. Tam vartojama standartinė funkcija Length, pavyzdžiui:

Page 93: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Su eilutėmis galima atlikti įvairiausius veiksmus, tačiau čia to nenagrinėsime. Eilutę vartosime žodžiams (arba žodžių sekai, pvz., pavardei ir vardui) įsiminti.

Labai naudinga programose vartoti sutrumpintas eilutes. Jos aprašomos šalia laužtiniuose skliaustuose nurodant jų ilgį, pavyzdžiui:

v a r A : s t r i n g [ 1 5 ] ; Tokia eilutė gali turėti tik iki 15 simbolių. Jeigu įvedant klaviatūra bus surinkta ilgesnė

eilutė, tai perskaičius 15-ąjį simbolį eilutė bus baigta skaityti. Jeigu įvedant bus surinkta mažiau simbolių, tuomet eilutė bus trumpesnė. Daugiau simbolių nebus reikalaujama.

Jeigu reikia keliose aprašų vietose panaudoti tą patį eilutės tipą, tai pirmiausia aprašome įos tipą, pavyzdžiui:

Page 94: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Daugumoje uždavinių tekstine ir skaitmenine mrormacija neatskiriamos. Veiksmuose vienodai traktuojami ir simboliniai duomenys, ir skaičiai. Panagrinėkime paprastą uždavinį.

5.7 pratimas. Tarkime turime klasės mokinių sąrašą, kuriame nurodyta kiekvieno moksleivio pavardė ir ugis. Kurie moksleiviai gali buti kandidatai j mokyklos krepšinio komandą? Tarkime, kad pretenduoti gali ne žemesni kaip 170 cm ūgio moksleiviai.

Page 95: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinių duomenų pavyzdys

5.8 pratimas. Žinome mokinio pavardę, vardą, mokomąjį dalyką ir to dalyko pažymius. Reikia suskaičiuoti mokinio to dalyko aritmetinį vidurkį ir jo įvertinimą pažymiu (suapvalintą sveikųjų skaičių tikslumu).

Duomenys įvedami klaviatūra. Tam programoje numatomas dialogas: programa pati paprašo, kada ką įvesti. Žodžiams įsiminti bus vartojamas eilutės tipas s t r i n g . Mokinio pavardė, vardas ir dalyko pavadinimas bus įvedami klaviatūra atskiromis eilutėmis. Pažymiai bus pateikiami vienoje eilutėje, atskiriant juos bent vienu tarpu.

Skaičiuojant vidurkį, reikia nepamiršti įvertinti ir tokio atvejo, kai mokinys negavo nė vieno pažymio. Tuo atveju vidurkis turi būti nulis.

Page 96: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 97: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys 1. Parašykite programą, kuri paprašytų surinkti jūsų vardą, o surinkus pasisveikintų.

Pavyzdžiui, jeigu jūsų vardas Julius, tai programa ekrane turėtų parašyti: S v e i k a s , J u l i a u !

2. 5.8 pratimo eilutę s t r i n g pakeiskite sutrumpinta. Išbandykite programą surinkdami trumpesnį, po to - ilgesnį tekstą.

3. 5.8 pratimo programoje nėra apsaugos įvedant pažymius. Tikimasi, kad mokinys tikrai negali gauti daugiau kaip 25 pažymius per trimestrą. Papildykite pažymių įvedimą apsauga.

4. 5.8 pratimo programa dirba tik su vieno mokinio duomenimis. Pertvarkykite programą taip, kad j i , apdorojusi vieno mokinio duomenis, paklaustų vartotojo, ar norima apdoroti kito mokinio duomenis. Jeigu taip, tai reikia kartoti visus veiksmus.

5. N moksleivių komandų dalyvavavo bėgimo estafetės varžybose. Žinomi kiekvienos komandos surinkti taškai. Nustatykite, kuri komanda laimėjo pirmąją ir kuri antrąją vietą.

6. Vieno masyvo elementus perrašykite į kitą, išdėstydami elementus atvirkščia tvarka.

7. Duotame skaičių masyve sukeiskite vietomis didžiausią ir mažiausią elementą.

8. Vaikų darželyje yra N sviedinių, kurių kiekvieno skersmuo žinomas. Nustatykite, kiek sviedinių pralįs pro tvoros plyšį, kurio aukštis Ta, o plotis Tp. Duomenys pateikiami centimetrais. Kokio didžiausio skersmens sviedinys gali pralįsti per tvoros plyšį ir kiek tokio skersmens sviedinių yra?

9. Turime vieno mėnesio kiekvienos dienos oro temperatūros vidurdienį duomenis. Reikia išdėstyti dienas pradedant nuo šalčiausių.

10. Žinomi klasės mokinių ūgiai. Reikia apskaičiuoti vidutinį moksleivio ūgį, taip pat nustatyti, kelių moksleivių ūgis didesnis ir kelių mažesnis už vidutinį ūgį.

5.5. Duomenų struktūrų pasirinkimas Masyvas yra labai populiari duomenų struktūra, tačiau jį būtina kūrybiškai taikyti kon

krečiuose uždaviniuose. Programos apimtis ir sudėtingumas priklauso ne tik nuo pasirinkto masyvo tipo, bet ir nuo duomenų interpretacijos tame masyve, jų atvaizdavimo būdo masyve. Nėra bendrų ir universalių nurodymų. Kaip kiekvienas uždavinys turi savo skirtingus spredimo būdus (ir ne vieną), taip ir kiekvienas programuotojas savaip parašo programą konkrečiam uždaviniui spręsti. Kartais net neįmanoma pasakyti, kuri iš tokių programų yra geresnė (būtini griežti programų vertinimo kriterijai, kuriuos universalius sukurti taip pat neįmanoma).

Pateikiame vieno uždavinio keletą sprendimo variantų. Išvadas padarykite patys. Programose daroma prielaida, kad duomenys bus įvesti teisingai ir kad bus įvestas bent

vienas skaičius.

5.9pratimas. Klaviatūra įvedami sveikieji teigiami skaičiai. Reika pasakyti, kuris iš jų turi daugiausiai skirtingų skaitmenų. Skaičių įvedimo pabaiga bus tuomet, kai įvesime nulį (0) arba neigiamą skaičių.

Page 98: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pirmas variantas. Nenaudojami masyvai. Norint rasti, kiek kokių skaitmenų yra skaičiuje, reikia 10 kintamųjų.

Page 99: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Antras variantas. Naudojami masyvai. Skaitmenims suskaičiuoti vartojamas masyvas. Patogu susitarti, kad masyve nuliniu indeksu būtų įsiminta, kiek skaičiuje yra skaitmenų lygių nuliui (0), pirmu indeksu - kiek lygių vienetui, antru - kiek dvejetui ir 1.1.

Page 100: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Trečias variantas. Naudojami masyvai. Ankstesnis variantas nepatogus tuo, kad galime įvesti tik nedidelius skaičius ( i n t e g e r nėra didelis). Pasinaudosime tuo, kad klaviatūra įvedami duomenys yra simbolių seka. Procedūros Read ir ReadLn tą simbolių seką, jeigu ji atitinka duomenų skaičiaus užrašymo reikalavimus, paverčia reikiamu skaičiumi.

Ankstesniuose programos variantuose gautą skaičių skaidėme į atskirus skaitmenis. Šiame variante surinktai klaviatūra eilutei saugoti aprašysime s t r i n g tipo kintamąjį. Tada galėsime įvesti labai ilgą sveikąjį skaičių.

Kiekvienas skaitmuo bus atskiras masyvo elementas. Tolesniems skaičiavimams simbolius būtų galima paversti skaitmenimis; šioje programoje to dar nedarėme.

Page 101: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontroliniai pratimai

1. Ar visi sakiniai žemiau pateiktuose pratimuose teisingi? Jeigu ne, tai kurie neteisingi ir kodėl?

Visų pratimų tipų ir kintamųjų aprašymai tokie:

Page 102: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pradinės reikšmės masyvuose tokios:

2. Atlikite žemiau pateiktus pratimus ir parašykite, kokie skaičiai bus masyvuose A ir B. Visų pratimų tipų ir kintamųjų aprašymai tokie:

Page 103: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pradinės reikšmės masyvuose tokios:

3. Atlikite žemiau pateiktus pratimus ir parašykite, kokia bus S reikšmė. Visų pratimų tipų ir kintamųjų aprašymai tokie:

Page 104: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Volfgangas Gėtė

Savo gyvenime aš nieko kitko taip nesu bodėjęsis, kaip tuščių žodžių, ir frazė be minties bei jausmo, kuri kitiems atrodė nepakeičiama, man buvo neįmanoma.

6. Tekstinės bylos Iki šiol spręsdami uždavinius visus pradinius duomenis įvesdavome naudodamiesi kla

viatūra. Tačiau tai nėra patogu, jei duomenų bent kiek daugiau - programa turi laukti, kol surinksime duomenis, be to, lengvai galime suklysti, o pastebėjus klaidą dažnai jau neįmanoma ištaisyti.

Todėl būtų kur kas geriau reikalingus programai duomenis paruošti iš anksto, patikrinti ir įsitikinti, kad jie teisingi, ir tik tada pateikti duomenų rinkinį programai atlikti. Tokie duomenų rinkiniai vadinami duomenų bylomis.

Paskalio kalboje yra keletas duomenų bylų rūšių. Nagrinėsime tik pačias paprasčiausias - tekstines bylas - ir tik tam, kad išmoktume skaityti byloje esančius pradinius duomenis bei surašyti gautus rezultatus į bylą.

6.1. Bylų skaitymas ir rašymas Byla vadinamas duomenų rinkinys, laikomas išorinėje kompiuterio atmintinėje. By

lai suteikiamas vardas, kuriuo duomenys nurodomi kompiuterio programoms. Byla dar vadinama rinkmena arba failu.

Sprendžiant uždavinius dažnai paranku atskirti pradinių duomenų parengimo, jų apdoroj imo ir rezultatų analizės procesus. Tai galima padaryti šitaip: surašyti pradinius duomenis į bylas ir parengti tų bylų apdorojimo programas, o rezultatus vėl įrašyti į bylas.

Pradiniams duomenims ir rezultatams saugoti vartojamos tekstinio tipo bylos. Programos aprašų dalyje darbui su tokiomis bylomis aprašomi bylos kintamieji, kurių tipas nurodomas žodžiu t e x t . Tekstinėse bylose duomenys pateikiami suskirstyti į eilutes. Eilučių pabaigos žymimos specialiais simboliais. Bylos pabaigą žymi bylos pabaigos simbolis, kuris įrašomas automatiškai. Ekrane eilučių ir bylos pabaigos simboliai nerodomi.

Programos pagrindinėje dalyje kiekvienas bylos kintamasis turi būti susietas su konkrečia operacinės sistemos byla. Tai nurodoma standartine procedūra, kreipinys į kurią šitoks:

Page 105: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Čia BylosVardas nurodomas eilute (rašoma tarp apostrofų kaip įprasta simbolių eilutė) arba aprašant konstanta:

Bylos vardas sudaromas pagal tam tikras operacinių sistemų taisykles. Programoje bylos vardas tiesiogiai nurodomas tik procedūroje Assign, visur kitur bylą nurodo jos kintamasis.

Skaitymas iš bylos Jei norime skaityti byloje esančius duomenis, pirmiausia turime paruošti bylą skaitymui.

Tam yra standartinė procedūra Reset, į kurią turime kreiptis šitaip:

čia Bk - tekstinės bylos kintamasis. Duomenys iš bylos skaitomi panašiai kaip ir įvedant klaviatūra, pavyzdžiui:

Duomenys, perskaityti naudojant procedūras Read ir ReadLn, priskiriami kintamiesiems k l , k2 ir 1.1.

Tekstinėse bylose esantys skaičiai turi būti atskirti tarpais arba eilutės pabaigos simboliais. Procedūra Read iš tekstinės bylos visuomet skaito tiek reikšmių, kiek jos antraštėje esama kintamųjų. Procedūra ReadLn skiriasi tuo, kad ji iš pradžių perskaito visą eilutę ir tik po to skirsto duomenis kintamiesiems. Jei eilutėje duomenų būna per daug, pertekliniai duomenys atmetami. Jei jų trūksta, skaitoma kita bylos eilutė ir tik tuomet jų reikšmės skirstomos kintamiesiems.

Baigus darbą su bylomis, jas būtina uždaryti. Tam yra standartinė procedūra, į kurią kreipiamės šitaip:

Dar mums bus labai reikalingos dvi loginės funkcijos - bylą sudarančių eilučių pabaigai atpažinti bei visos bylos pabaigai nustatyti:

Šių funkcijų reikšmė lygi True, kai atitinkamoje eilutėje arba byloje perskaitomas paskutinis duomenų elementas, kitais atvejais reikšmė bus Falše.

Kiekviena vartotojo programa, parašyta Turbo Paskaliu ir įrašyta į kompiuterio atmintinę, yra tekstinė byla. Panašiai sukuriama ir duomenų byla. Skirtumas tik tas, kad čia duomenys programai surašomi tokia seka, kokia juos įvedame klaviatūra. Paskalio programos bylos privalo turėti prievardį pas. Duomenų byloms galima duoti bet kokius prievardžius, tačiau nepatariama duoti tokius, kokius priimta vartoti kitose gerai žinomose programose (pvz., pas, ppt, com, asm, doc, exe, bat, cpp ir pan.). Galima sutart i , kad pradinių duomenų bylos turės prievardį dat, o rezultatų bylos, į kurias programa surašys skaičiavimų duomenis, prievardį rez.

Page 106: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

6.1 pratimas. Reikia susumuoti tekstinėje byloje ' P 6 _ l . d a t ' surašytus skaičius,

ir gautą rezultatą parodyti ekrane

Prieš pradėdami vykdyti programą turime sukurti pradinių duomenų bylą. Tam pato

giausia vartoti Turbo Paskalio terpės redaktorių, o sudarytą bylą įrašyti į darbinį katalogą.

Pradinių duomenų bylos P 6 _ l . d a t pavyzdys

Page 107: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Ekrane bus išspausdinta:

Atsiminkite, kad pradinių duomenų byla turi būti tame pačiame kataloge, kaip ir ją apdorojanti programa. Kitaip sakinyje A s s i g n reikės nurodyti kelią, nurodantį katalogą, kuriame yra byla.

6.2 pratimas. Reikia susumuoti duotos tekstinės bylos kiekvienos atskiros eilutės

skaičius ir gautus rezultatus parodyti ekrane. Duomenų byla bus ta pati kaip ir ankstesniame pratime.

Page 108: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Ekrane matysime tokius rezultatus:

Rašymas į bylą Dabar panagrinėsime, kaip surašyti rezultatus (duomenis) į bylą. Byla rašymui paren

giama naudojant standartinę procedūrą Rewrite, į kurią galima kreiptis taip: Rewrite (Bk);

Jeigu sakinyje Assign nurodytu vardu bylos nebuvo, tuomet bus sukurta nauja byla tokiu vardu. Jeigu jau yra byla tokiu vardu, tai joje esantys duomenys bus sunaikinti.

Rezultatai į bylas surašomi naudojant standartines procedūras, į kurias galima kreiptis taip:

Jų savybės analogiškos atitinkamoms išvedimo į ekraną procedūroms. Procedūra WriteLn nuo Write skiriasi tuo, kad ji sugrupuoja išvedamus duomenis eilutėmis, t. y. įterpia eilučių pabaigos simbolius.

6.3 pratimas. Reikia susumuoti duotos tekstinės bylos kiekvienos atskiros eilutės

skaičius, o gautus rezultatus ne tik parodyti ekrane, bet ir surašyti Į tekstinę bylą. Papildome ankstesnio pratimo programą reikalingais sakiniais.

Page 109: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Rezultatų byloje rasime:

Rezultatų bylos duomenis galima pamatyti po to, kai programa baigia darbą.

Kontrolinės užduotys

1. Pakeiskite 6.1 pratimo programą taip, kad ji atskirai susumuotų teigiamus ir atskirai neigiamus skaičius.

2. Sudarykite programą, kuri suskaičiuotų, kiek duotoje pradinių duomenų byloje yra lyginių ir kiek nelyginių skaičių.

3. Pakeiskite 6.2 pratimo programą taip, kad ji kiekvienoje eilutėje atskirai susumuotų teigiamus ir neigiamus skaičius.

4. Kaip reikėtų papildyti 6.3 pratimo programą, kad ji gale pateiktų ir visų duotos pradinės

bylos skaičių sumą?

5. Sudarykite programą, kuri iš duotos pradinių duomenų bylos (sveikųjų skaičių) išrinktų tuos skaičius, kurie yra pirminiai, ir surašytų juos į rezultatų bylą.

6. Gerai išnagrinėkite trupmeninių skaičių skaitymo procedūrą iš „Programavimo pradmenų uždavinyno" (174 psl.). Įtraukite šią procedūrą į programą ir išbandykite. Parenkite pradinių duomenų bylų pavyzdžių.

Page 110: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

6.2. Duomenų skaitymas iš bylos į masyvą Turėjote pastebėti, kad pradinių duomenų išdėstymas byloje ir skaitymo veiksmai tarpu

savyje susieti. Vadinasi, jei duomenų byla paruošta anksčiau negu buvo rašoma programa, tai reikia programoje įvertinti duomenų surašymo į bylą struktūrą ir nuoseklumą. Jeigu pradinių duomenų byla sudaroma jau parašius programą, tuomet būtina duomenis surašyti taip, kad programa juos teisingai perskaitytų. Parašius programą parengiamas dokumentas (instrukcija vartotojui), kuriame būtina nurodyti ne tik vartotojui reikalingas žinias apie programą, bet ir pamokyti, kaip paruošti pradinius duomenis.

Ankstesnio skyriaus pratimuose skaitėme skaičius iš duotos duomenų bylos. Pabandėme tai daryti ir atskiromis eilutėmis. Dabar pasimokykime surašyti skaitomus skaičius į masyvą. Galimi du būdai.

/ būdas. Pirmoje bylos eilutėje nurodoma, kiek joje bus skaičių. Pavyzdžiui, galima sutarti, kad byloje pirmasis skaičius reiškia, kiek ūkininkas parsivežė arbūzų, o toliau pateikiami tų arbūzų svoriai. Tuomet surašymo į masyvą programos fragmentas mažai kuo skirsis nuo skaitvmo iš klaviatūros:

II būdas. Paprastai bylose saugoma daug duomenų. Kartais būna keblu suskaičiuoti, kiek ir kokių duomenų yra. Tačiau visuomet galima parašyti programas, kurios pačios suskaičiuotų, kiek yra duomenų. Rašant duomenis iš bylos į masyvą, kai duomenų skaičius iš anksto nežinomas, būtina kiekvieną kartą patikrinti, ar masyve dar yra vietos naujam skaitomam skaičiui. Jeigu paaiškės, kad pradinių duomenų yra daugiau negu telpa į masyvą, tai likusių duomenų galima nebeskaityti ir veiksmus atlikti tik su perskaitytais. Aišku, programa turėtų apie tai informuoti vartotoją. Masyvo dydžio labai smarkiai didinti negalime, nes kompiuterio atmintinė ribota. Bylos apimtį riboja tik fizinės disko galimybės. Kai duomenų daug, galima juos apdoroti dalimis. Tai sudėtingesnis procesas. Visuose šios knygos pratimuose apdorosime tiek duomenų, kiek jų tilps į nurodyto dydžio masyvą. Skaitymo į masyvą programos fragmentas atrodytų šitaip:

Čia maksimalus galimas duomenų skaičius 100 įrašytas tiesiog į ciklo sakinį. Paprastai :aip nedaroma. Geriau tą skaičių aprašyti programos pradžioje panaudojus konstantos /ardą ir toliau vartoti šį vardą. Taip patogiau, kai norime pakeisti masyvo-dydį (nereikia eškoti visų vietų, kur buvo vartojamas šis skaičius).

6.4 pratimas. Tarkime, ūkininko arbūzų derlius surašytas tekstinėje byloie P e t r a s . d a t . Pirmoje bylos pirmoje eilutėje parašyta ūkininko pavardė, vardas ir derliaus nuėmimo data. Antroje eilutėje pateiktas skaičius - arbūzų kritinis svoris. Už jį lengvesni arbūzai netinkami prekybai, didesni arba lygūs - tinkami. Kitose eilutėse surašyti arbūzų

Page 111: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

svoriai. Reikia sudaryti programą, kuri pateiktų ekrane arbūzų rūšiavimo į dvi krūvas rezultatus. Turi būti nurodoma, kiek kiekvienoje krūvoje yra arbūzų ir koks jų bendras svoris.

Pateikiame vieną iš daugelio galimų šio uždavinio sprendimo būdų. Visus pradinėje byloje pateiktus duomenis surašome į masyvą. Ekrane viename lange parodome pirmosiom krūvos duomenis ir rezultatus, kitame - antrosios. Sudarome procedūras: duomenims skaityti iš bylos, duomenims skirstyti į du masyvus, masyvo duomenims apdoroti (svorių sumai rasti) ir rezultatams išvesti į ekraną.

Pradinių duomenų bylos pavyzdys:

Programa rašoma kaip nurodyta 5.3 pratime, tik šiek tiek ją pakeitus. Svarbiausi pakeitimai paryškinti. Atkreipkite dėmesį, kad procedūros antraštėje esantis bylos parametras turi būti kintamojo tipo.

Page 112: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 113: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Atidžiai palyginkite 5.3 ir 6.4 pratimų programas. Kuri procedūra iš esmės skiriasi ir kodėl?

2. Arbūzų rūšiavimo programai parenkite didelę pradinių duomenų bylą (turinčią ne mažiau kaip 100 arbūzų svorių). Išbandykite programą su šia byla.

6.3. Duomenų rašymas iš masyvo į bylą Rezultatus į bylą rašyti jau pabandėme. Masyvo duomenis išvesti į ekraną irgi moka

me. Duomenų surašymas iš masyvo į bylą analogiškas 6.4 pratime parodytam duomenų surašymui iš bylos į masyvą.

6.5 pratimas. Nukopijuokite (užrašykite) 6.4 pratimo programą kitu vardu. Pakeiskite duomenų išvedimo procedūrą R o d y t i šitaip:

Dabar paruoškite rezultatams rašyti naują bylą. Programos teksto pradžioje aprašykite konstantą:

Pagrindinėje programos dalyje prieš rezultatų išvedimą parašykite sakinius: A s s i g n (Byla, R e z u l t a t a i ) ; Reset (Byla);

Bylos kintamasis B y l a gali būti panaudotas dar kartą, nes ankstesnė jo reikšmė (duomenų byla) nebereikalinga (byla jau uždaryta). Tačiau, jei norite, galite aprašyti naują bylos

Page 114: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

procedūrą taip, kad ji iš pradinių duomenų bylos išrinktų tik tuos arbūzus, kurių svoris yra iš duotojo intervalo. Tegu bus tai pirmajai krūvai intervalas [0; s-0 . 01), o antrajai -[s; 100]. Čia arbūzą, kurio svoris šiek tiek mažesnis už s, laikome netinkamu. Antrojo intervalo riba parenkama teigiant, kad sunkesnio kaip 100 kg arbūzo tikrai nebus. Intervalų reikšmes galima įrašyti į antrą bylos eilutę (kaip ir s reikšmę), o programą papildyti naujais kintamaisiais intervalo rėžiams įsiminti.

6.6 pratimas. Perrašykite 6.4 pratimo programą kitu vardu. Pakeiskite skaitymo

6.4. Duomenų grupavimas skaitant iš bylos Skaičiavimams dažnai reikalingi ne visi iš karto byloje esantys duomenys, o tik jų dalis.

Tuomet netikslinga visus duomenis skaityti į masyvą, ir tada atsirinkinėti tinkamus. Tai galima padaryti skaitant: perskaityta reikšmė analizuojama ir, jeigu ji tinkama, rašoma į masyvą. Duomenis skaitančiai procedūrai būtina pateikti duomenų atrinkimo požymį. Tai viena ar keletas reikšmių, kurias tenkinantys duomenys turi būti perkelti į masyvą.

Turbo Paskalyje yra tekstinės bylos kintamasis Output. Jis saugo informaciją apie bylą, kurios vieta yra kompiuterio ekranas. Tai reiškia, kad vietoj kintamojo Byla parašę vardą Output, rezultatus matysime ekrane. Bylai Output negalima vartoti procedūrų Assign, C los e ir kitų, skirtų darbui su bylomis..

Tai labai patogu, nes naudojant tą pačią procedūrą Rodyti galima surašyti rezultatus į reikalingą bylą diske ir ekrane.

Programa pateiks rezultatus ne tik ekrane, bet ir byloje, kurią rasite aktyviajame kataloge. Nepamirškite uždaryti bylą. Priešingu atveju dalies rezultatų galite nerasti. Jei procedūros sudaromos drauge ir byloms, ir ekranui, ir jose nurodomos spalvos, tai bylų rezultatams šios spalvos jokio poveikio nedarys, nes tas nurodymas galioja tik ekranui.

Pagrindinėje programoje turėtų būti šitokie papildymai:

kintamąjį. Turbo Paskalyje nėra pasakyta, kiek vienu metu galima turėti tokių kintamųjų. Jų skaičių riboja turima kompiuterio atmintinės talpa.

Programą papildykite naujais kreipiniais į masyvo išvedimo procedūrą:

Page 115: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pertvarkius skaitymą akivaizdu, kad norint gauti tuos pačius rezultatus, reikės du kartus skaityti bylą. Procedūra Reset paruoš bylą skaityti. Reikia nepamiršti, kad pradinių duomenų bylos pirmosiose dviejose eilutėse yra papildoma informacija. Reikės arba dar kartą skaityti bylą, arba praleisti tas eilutes: masyvo skaitymo procedūrai visuomet būtina pateikti bylą, paruoštą skaityti duomenis nuo reikalingos vietos.

Page 116: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 117: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Reikia išvesti ekrane ir byloje mokinio metinius rezultatus pagal dalykus ir galutinį įvertinimą. Nurodyti ne tik išvestus pažymius, bet suskaičiuotus vidurkius. Pavyzdžiui:

Kontrolinės užduotys

1. Parenkite keletą pradinių duomenų bylų 6.4 pratimo programai išbandyti. Kurioje vietoje pradinių duomenų byla skaitoma antrą kartą?

2. Duotoje pradinių duomenų byloje surašyti sveikieji skaičiai. Parašykite programą, kuri perskaitytų tuos skaičius ir sugrupuotų juos į du masyvus: atskirai teigiamus ir atskirai I neigiamus. Surikiuokite masyvuose esančius skaičius mažėjančiai. Rezultatus įrašykite į dvi atskiras bylas.

Savarankiško darbo užduotys Visi iki šiol duoti uždaviniai pritaikomi atvejui, kai duomenys yra tekstinėje byloje

ir rezultatus reikia pateikti ne tik ekrane, bet ir byloje. Čia yra keletas sudėtingesnių uždavinių.

1. Tekstinėje byloje eilutėmis surašytos geometrinių figūrų viršūnių koordinatės (.v, y). Jeigu eilutėje yra du skaičiai, tai jais apibrėžtas taškas, jeigu keturi skaičiai, - tai tiesės atkarpa, jeigu šeši, - tai trikampis ir 1.1. Reikia rasti, kiek byloje yra eilučių, skirtų trikampiams; taip pat rasti, kuris tų trikampių yra didžiausio ploto: ekrane išspausdinti to trikampio viršūnių koordinates, kraštinių ilgius, plotą ir eilutės numerį byloje, kur yra to trikampio duomenys.

2. Mokinio metų mokymosi rezultatai surašyti tekstinėje byloje. Pirmoje eilutėje parašytas mokinio vardas, pavardė ir kasė. Toliau surašyti dalykų gauti pažymiai per metus. Vienam dalykui skirtos dvi eilutės, pirmoje iš jų parašytas dalyko pavadinimas. Antrojoje to dalyko gauti įvertinimai. Pavyzdžiui:

Page 118: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

3. Lietuvoje keleiviai vežiojami mažais automobiliais (juose ne daugiau kaip N vietų) ir dideliais (vietų skaičius didesnis kaip N). Palangos autobusų stotyje kontrolieriai visą parą registravo, kiek kokiu maršrutu išvažiavo keleivių. Tai surašė į tekstinę bylą. Kiekvienam automobiliui skyrė dvi eilutes. Pirmoje parašė automobilio numerį ir maršrutą. Antroje sužymėjo, kurios vietos užimtos, kurios liko laisvos: raide K žymėjo keleivį, raide L - neužimtą vietą. Taip buvo gauta simbolių eilutė, sudaryta tik iš raidžių K ir L. Eilutės ilgis reiškia vietų skaičių automobilyje. Visose bylos eilutėse tekstas pradedamas rašyti nuo eilutės pradžios. Pavyzdžiui:

Automobilio efektyvumą galima išreikšti keleivių skaičiaus ir automobilio vietų skaičiaus santykio reikšme (užpildymo koeficientas).

Reikia nustatyti:

a) kuris automobilis efektyviausias;

b) kurie automobiliai (dideli ar maži) efektyvesni;

c) visų automobilių paros efektyvumą.

Ribinis vietų skaičius N, pagal kurį galima nustatyti, koks yra automobilis (mažas ar didelis), įvedamas klaviatūra.

Page 119: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Įsižiūrėk atidžiai, - pamatysi, kad didžiausia gyvenimo dalis praeina mums darant klaidas, didelė dalis - nieko neveikiant, o visas gyvenimas - veikiant ne taip, kaip reikia.

7. Įrašas Šiame skyriuje susipažinsime su dar viena duomenų struktūra - įrašu. Įrašas skirtas su

jungti į visumą skirtingo tipo duomenis. Kam nors gal ir atrodo, kad ši duomenų struktūra nėra labai svarbi - juk ir be jos galima rašyti programas, tačiau ji labai pagerina programavimo stilių, susistemina duomenis, padeda išvengti klaidų, padaro programą vaizdžią ir lengvai skaitomą. Todėl labai svarbu suvokti įrašo prasmę ir mokėti naudotis juo sudarant programas.

7.1. Įrašo sąvoka Bent kiek didesnėse programose dažnai prireikia įvairių tarpusavyje susijusių duomenų.

Kadangi jie paprastai skirtingo tipo, tai masyvu jų neaprašysi. Tektų aprašinėti kiekvieną duomenį atskirai, ką jau esame išmokę. Pavyzdžiui, duomenis apie asmenį galima aprašyti šitaip:

Seneka

Įvesti šitokių kintamųjų reikšmes, jas išvesti, atlikti leistinus veiksmus su kiekvieno iš jų reikšmėmis jau mokame. Tai nėra sudėtinga.

Tačiau ką daryti, norint įvesti dviejų asmenų duomenis? Reikėtų dvigubai daugiau kintamųjų. O jeigu prireiktų turėti duomenis apie visus mokyklos mokinius ir mokytojus? Aišku, tektų vartoti masyvą, o kadangi jame duomenys turi būti vienodo tipo, tai reikėtų aprašyti daug masyvų. Vieno masyvo reikėtų pavardėms, kito - vardams, dar vieno -gimimo datai ir 1.1. Reikėtų susitarti, kad visuose masyvuose pirmieji elementai nusakytų

Page 120: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

pirmojo žmogaus duomenis, antrieji - antrojo ir 1.1. Tokia duomenų struktūra nepatogi dėl didelio kintamųjų skaičiaus, galimų klaidų įvedant, išvedant, atliekant veiksmus.

Žinome, kad asmeniui skiriamas vienas pasas, kuriame surašyti visi duomenys apie j į (o ne daug pasų su atskirais duomenimis).

Be abejonės, kur kas patogiau būtų visus duomenis aprašyti viena struktūra. Tokias galimybes turi visos programavimo kalbos. Paskalyje tam skirta struktūra vadinama įrašu.

Bendra įrašo tipo schema parodyta 23 pav.

Įrašo aprašas pradedamas žodžiu record ir baigiamas žodžiu end. Tarp jų išvardijamos įrašo sudedamosios dalys, vadinamos laukais. Nurodomas kiekvieno lauko vardas ir tipas. Įrašo laukų tipai gali būti įvairūs - vieno vienoks, kito kitoks.

Taigi anksčiau pateiktus duomenis apie asmenį galėtume nusakyti šitokia struktūra:

Dabar pakanka turėti tik vieną kintamąjį, pavyzdžiui: var Alma : Asmuo; Kreipiantis į tokio kintamojo laukus, naudojami sudėtiniai vardai, sudaryti iš dviejų

dalių: kintamojo vardo ir lauko vardo, atskirtų tašku, pavyzdžiui:

7.1 nratimąs. Turime šitokius duomenis anie mokini: pavardė, vardas, gimimo data, klasė. Reikia nustatyti, kelerių metų amžiaus būdamas mokinys pradėjo lankyti mokyklą. Žinoma, kad nė vienoje klasėje nebuvo antramečių. Duomenys įvedami klaviatūra.

Norint sužinoti, kelerių metų mokinys pirmą kartą įžengė klasėn, reikia žinoti dabartinius metus. Tai galima padaryti dviem būdais. Paprasčiausia paprašyti, kad programos vartotojas įvestų metus klaviatūra. Kitas būdas racionalesnis - paimti kompiuteryje esančią datą. Pratime parodyta, kaip tai daroma naudojant procedūrą GetDate, kuri yra Dos modulyje ir kreipinys į kurią šitoks:

Page 121: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Jūs žinote, kad priskyrimo operacija teisinga, jeigu kairėje ir dešinėje operacijos ženklo pusėse yra to paties tipo arba tapatūs pagal tipą užrašai. Tai reiškia, kad jeigu turime du kintamuosius Ml ir M2 ir abiejų duomenų tipai yra M o k i n y s , tai bus teisingas sakinys: Ml := M2. Sis užrašas reiškia, kad dešinėje pusėje esančio kintamojo reikšmės kopijuojamos į kairėje pusėje nurodytą kintamąjį.

Čia parametrų tipas turi būti word.

Dos modulyje rasite dar vieną labai naudingą procedūrą, kuri pateikia kompiuterio laikrodžio laiką:

Parametrai kreipinyje turi buti w o r d tipo.

Dauguma realių programų savo darbo rezultatus surašo į bylas, kurių sukūrimo data ir net laikas nurodomi. Pasinaudokite tomis procedūromis. Dos modulyje rasite ir daugiau jums naudingų priemonių.

Page 122: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Atkreipkite dėmesį, kad tai galioja tik priskyrimo operacijai. Jokie kiti veiksmai su viso įrašo tipo duomenimis negalimi.

Jeigu su to paties įrašo laukais atliekama keletas veiksmų, tai įrašo vardą, papildytą jungtuku w i t h , galima iškelti prieš veiksmus aprašančius sakinius, būtent taip, kaip matematiniuose reiškiniuose bendrus daugiklius prieš skliaustus. Jungtuko w i t h galiojimo sritis nurodoma skliaustais b e g i n ir end. Nerašant skliaustų, jungtukas galioja tik vienam po jo einančiam sakiniui.

Pratimo programoje galėjome parašyti trumpiau:

Tai daryti nebūtina, bet naudinga. Išbandykite. Pritaikykite jungtuką duomenų įvedimo sakinių grupei.

Jungtuką w i t h vartokite atsargiai tik nedideliems užrašams trumpinti. Jeigu didelės naudos iš jungtuko negaunate, geriau jo atsisakyti, nes naudojant jungtuką nukenčia programos vaizdumas, sunkiau suprasti programą, didesnė galimybė suklysti.

Kontrolinės užduotys

1. Išnagrinėkite 6.1-6.4 pratimus iš „Programavimo pradmenų uždavinyno" (123-124 psl.). Jei abejojate savo atsakymais, patikrinkite kompiuteriu.

2. Vadovėlyje pateiktą 7.1 pratimo programą išbandykite kompiuteriu su įvairiais pradiniais duomenimis. Ar rezultatai spausdinami pakankamai vaizdžiai? Jei ne, papildykite programą.

3. Modifikuokite 7.1 pratimo programą - aprašykite antrąjį kintamąjį kito mokinio duomenims laikyti. Įveskite šiuos duomenis. Duomenis apie mokinius išveskite į ekraną. Tam panaudokite procedūrą.

4. Toliau modifikuokite 7.1 pratimo programą. Papildykite sakiniais, kad būtų galima nustatyti, kuris iš mokinių yra vyresnis. Vyresniojo mokinio duomenis spausdinkite ekrane.

7.2. Įrašų masyvai

Daugumoje programų tenka apdoroti duomenis. Itin svarbu, kad tie duomenys būtų surašyti tiksliai pagal sutartas taisykles, nes priešingu atveju programa neveiks, arba dar blogiau - duos klaidingus rezultatus. Duomenų teisingumo tikrinimo problemos nesprę-sime. Duomenis paprastai tikrina specialios tam sudarytos programos. Siame vadovėlyje laikysimės nuostatos, kad pateikiami duomenys paruošti tinkamai, kaip to reikalauja programa.

Įrašo tipo duomenys paprastai skaitomi iš bylų ir saugomi įrašų masyvuose. Tokių masyvo tipo aprašas niekuo nesiskiria nuo anksčiau nagrinėtų. Masyvo apraše po žodelio of parašomas duomenų tipas, taigi šiuo atveju rašysime įrašo tipo vardą, pavyzdžiui:

Page 123: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Sudėtingiausias veiksmas yra duomenų įvedimas. Jį komplikuoja ne programavimo, o duomenų rengimo sunkumai, kadangi būtina tvarkingai surašyti juos į bylą ir suderinti su įvedimo sakiniais.

Klaviatūra įvedant įrašo tipo duomenis didelių sunkumų nekyla, nes programuojamas dialogas ir įvedama kiekvieno lauko reikšmė atskirai.

Byloje rašyti kiekvieno lauko reikšmę į atskirą eilutę ne tik nepatogu ir nevaizdu, bet ir neefektyvu. Todėl duomenys rašomi eilutėmis.

Simboliai ir simbolių eilutės ( c h a r ir s t r i n g tipo duomenys) skaitomi iš eilės, kaip pateikti. Kiek kitaip yra su skaičiais. Skaitant skaičių, iki jo pradžios esantys tarpai praleidžiami, o skaitymo pabaigą nurodo pirmasis sutiktas tarpas po skaičiaus (arba eilutės pabaigos simbolis). Toliau skaityti vėl pradedama ties ta vieta, kurioje buvo nutrauktas ankstesnis skaitymas, t. y. nuo tarpo simbolio.

Skaitant eilutės ( s t r i n g ) tipo duomenis, imami visi bylos eilutėje nurodyti simboliai eilės tvarka nuo tos vietos, ties kuria buvo baigtas ankstesnis skaitymas. Skaitymas baigiamas, kai sutinkama eilutės pabaiga arba kai perskaityta tiek simbolių, kiek jo tipo aprašyme nurodyta. Pavyzdžiui, jeigu turime kintamąjį A, kurio tipas s t r i n g į l O ] , tai:

- kai yra daugiau kaip 10 simbolių, skaityti baigiama perskaičius dešimtąjį simbolį;

- kai yra mažiau kaip 10 simbolių, skaityti baigiama tada, kai visi jie perskaityti. Įrašo tipo duomenų skaitymas paprastas, kai eilutėje yra tik skaičiai. Skaičius skiriame

bent vienu tarpo simboliu. Jeigu po skaičiaus seka simboliai ( s t r i n g arba c h a r tipo duomenys), tai jų negalima pradėti rašyti tuoj po skaičiaus. Būtinas bent vienas tarpo simbolis, kuris nurodytų skaičiaus pabaigą. Tas tarpo simbolis nepriskiriamas prie tolesnių duomenų. Todėl reikia mokėti juo atsikratyti. Įsidėmėkite tai.

Taigi turint pradinius duomenis, reikia gerai apgalvoti, kaip juos tinkamai surašyti byloje. Pirmiausia būtina parinkti vaizdžią ir patogią žmogui formą, nes duomenis parašytai programai rengs jos vartotojas. Jeigu duomenis byloje bus patogu ir lengva surašyti, tai bus paliekama mažiau klaidų. Toliau reikia pasistengti, kad duomenų skaitymas iš bylos būtų kaip galint paprastesnis. Tada ir duomenų įvedimo procedūra bus paprastesnė. Toliau pabandysime iliustruoti tai pavyzdžiais, tačiau tik rašant programas galima pajusti, kada ką galima padaryti geriau.

Po to galima aprašyti kintamuosius, pavyzdžiui:

Indeksuotas kintamasis M [ i ] nurodys i-ojo mokinio duomenis, esančius sąraše M. Šiuos duomenis galima priskyrimo veiksmu kopijuoti: A := M [ i ] ;

Užrašas M [ i ] . v a r d rodys i-ojo mokinio vardą. Kaip ir anksčiau, nurodant konkrečius duomenis vartojami sudėtiniai vardai. Galima taikyti jungtuką w i t h :

Page 124: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

7.2pratimas. Turime mokinių sąrašą: pavardė, vardas, klasė ir dalykų metinių pažymių aritmetinis vidurkis. Reikia rasti, kiek mokinių mokosi puikiai (t. y. kurių suapvalintas mokymosi vidurkis lygus 10).

Duomenys surašyti byloje eilutėmis. Kiekvienam mokiniui skirta viena eilutė. Duomenys rašomi tokia tvarka: pavardė, vardas, klasė ir vidurkis. Pavardei ir vardui skiriame po 15 simbolių (tikimės, kad tokio ilgio pakaks). Pavardė bus pradedama rašyti nuo eilutės pradžios, o vardas - pradedant nuo šešioliktos pozicijos (vieta eilutėje). Vardo užrašo pabaiga yra 30-a pozicija, taigi skaičius, kurie reiškia klasę ir mokymosi vidurkį, rašome toliau. Duomenų surašymą galime atvaizduoti tokia schema:

Čia antroje eilutėje taškais pažymėtos 1-a, 10-a, 20-a, 30-a ir 1.1, pozicijos eilutėje, o stačiakampėliais kitos pozicijos. Naudojantis pirmoje eilutėje parašytais skaičiais lengviau atskaičiuoti poziciją nuo eilutės pradžios.

Duomenų surašymo tvarka pasirinkta. Rašant duomenų įvedimo programą būtinai reikės į šią tvarką atsižvelgti.

Programoje numatomos dvi procedūros:

- procedūra duomenims skaityti iš bylos į masyvą; byla skaitymui paruošiama procedūros viduje;

- procedūra, skirta puikiai besimokančių mokinių skaičiui nustatyti.

Pradinių duomenų bylos pavyzdys:

Page 125: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Pratimo 7.2 programoje puikiai besimokantys buvo tie, kurių vidurkis didesnis arba lygus 9,5. Yra funkcija Round, kuri randa artimiausią duotam realiajam skaičiui sveikąjį skaičių. Pakeiskite procedūroje R a s t i lyginimo sakinio sąlygą į tokią:

Round ( A[i"|.vid) = 10

Patikrinkite, ar nepasikeitė rezultatas.

2. Pratimo 7.2 programą papildykite taip, kad programa išspausdintų puikiai besimokančių mokinių duomenis.

Page 126: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

3. Tarkime, žinomas kiekvieno klasės mokinio ūgis. Papildykite ankstesnio pratimo duomenų struktūrą nauju lauku ūgio reikšmei saugoti, o duomenų bylą - kiekvieno mokinio ūgio reikšme. Pakeiskite programą taip, kad ji rastų:

- aukščiausią mokinį (arba mokinius);

- mokinių, kurių ūgis didesnis kaip 170 cm, skaičių;

- puikiai besimokančių mokinių ūgio aritmetinį vidurkį.

4. Pertvarkykite 7.2 pratimo procedūrą Rasti taip, kad parametrais būtų galima nurodyti mokymosi vidurkių intervalą. Procedūra turi grąžinti skaičių mokinių, kurių mokymosi vidurkis būtų iš nurodyto intervalo. Išbandykite programą su įvairiais kontroliniais duomenimis.

7.3. Veiksmai su įrašo tipo duomenimis Užuot taikius priskyrimo operaciją kiekvienam įrašo laukui atskirai, galima parašyti

vieną priskyrimo sakinį visam įrašui. Pavyzdžiui, ankstesnio skyrelio programą (7.2 pratimas) papildykime veiksmais atrinkti mokiniams, kurių mokymosi vidurkis yra iš nurodyto intervalo. Procedūra gali būti tokia:

Pateiksime keletą patarimų, kaip galima efektyviau ir suprantamiau rašyti programas. 1. Labai svarbu procedūrose parametrų pateikimo seka. Parametrai turi būti išdėstomi

atsižvelgiant į pradinius duomenis ir rezultatus. Gali būti, kad tie patys parametrai yra ir pradiniai duomenys, ir rezultatai. Toliau parametrai grupuojami pagal jų paskirtį (pvz., masyvas ir jo elementų skaičius).

2. Parametrais, kuriems nurodomas žodelis var, ne tik perduodami rezultatai. Jie sėkmingai naudojami ir pradiniams duomenims perduoti. Tai itin efektyvu masyvams, kai reikia perduoti daug duomenų. Jei masyvas aprašytas reikšmės tipo parametru, kreipiantis bus daroma to masyvo kopija. Kompiuteris sugaiš nedaug laiko, tačiau esant didelės apimties masyvams reikės daugiau atminties. Jei masyvo elementai sudėtingos įrašo struktūros (užima kelis šimtus baitų), tai masyvui reikia tikrai daug atminties. Todėl procedūroje R i n k t i masyvo parametras A nurodytas kintamuoju.

Page 127: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

3. Sąlyginiuose sakiniuose sąlygos sudaromos kaip galint suprantamiau. Pavyzdžiui, ieškant didžiausios reikšmės skaičių masyve A yra teisingi tokie užrašai:

Profesionalai vartos tik pirmąjį, nes jis turi ženklą > (daugiau), - antrasis gali klaidinti. 4. Procedūroje R i n k t i galima keliais būdais teisingai parašyti sąlygą; čia pasirinkome

dažniausiai vartojamą: V I < = M [ i ] . v i d < = V2. 5. Masyvo elemento viso įrašo priskyrimas R [ k ] := A [ i ] yra teisingesnis vartojimo

požiūriu negu priskyrimas atskirais laukais. Šitaip trumpiau bei lengviau suvokti.

Labai svarbu yra duomenų išvedimo ekrane ar byloje forma. Nuo jos priklauso, kaip greitai ir teisingai suprasime rezultatus ir, svarbiausia, ar suvoksime jų teisingumą, išbaigtumą. Įrašo tipo duomenis patogu išvesti eilutėmis laukų reikšmes lygiuojant pagal stulpelius. Lygiavimą galima atlikti naudojantis išvedimo formatais, kurie turi būti parenkami tokie, kad duomenys gražiai atrodytų ir informacija būtų aiškiai suvokiama.

Išvedant eilutės tipo duomenis, galima vartoti formatą (sveikąjį skaičių, nurodantį, kiek vietos skiriama išvedamai eilutei). Turbo Paskalyje išvedimo formatas ignoruojamas, jeigu jis yra per mažas išvedamai reikšmei. Jeigu jis yra didesnis, tuomet reikšmė išvedama lygiuojant iš dešinės: nepanaudota vieta paliekama kaip tarpai prieš reikšmę. Geriau yra visų išvedamų eilučių ilgius suvienodinti, jas papildant tarpo simboliais gale. Pavyzdžiui, turime:

Jeigu klaviatūra surinkome žodį R a s a ir paspaudėme Enter klavišą, tuomet kintamasis A turės tik 4 simbolius. Norint papildyti iki šešių simbolių, galima parašyti:

f o r i := L e n g t h (A) + 1 to 10 do A := A + ' ';

Norint užpildyti eilutę ik i galo, nebūtina vartoti ciklą. Galima parašyti priskyrimo sakinį: A := A + ' '; { 10 tarpo simbolių. }

Čia pasinaudojama savybe, kad pertekliniai simboliai atmetami. Įrašo tipo masyvo duomenims surašyti į bylą galima sudaryti tokią procedūrą.

Kasdieniniame gyvenime informacija beveik visuomet papildoma paaiškinimais. Štai kad ir jūsų pasas. Yra paaiškinimas, kuris žodis reiškia pavardę, kuris vardą (beje, ar be paaiškinimo atskirtumėte, kad Rimas Jonas yra žmogus pavarde Rimas ir vardu Jonas, o ne atvirkščiai?), kuris skaičius yra asmens kodas, kuris paso numeris, ir 1.1.

Page 128: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Taigi ir programos išvedami duomenys turėtų būti paaiškinti, t. y. dokumentuoti. Pabandysime suformuluoti populiariausią dokumento dalį - lentelę.

Visoms lentelėms būtinos antraštės, paaiškinančios pateikiamus duomenis. Antraštę sudaro keletas eilučių. Papildykite procedūrą R o d y t i taip, kad ji sudarytų lentelę:

Paaiškinimus tikslinga atskirti nuo informacinių eilučių. Tam galima panaudoti linijas, sudarytas iš vienodų simbolių, kaip parodyta pavyzdyje. Tokia linija galima užbaigti lentelę. Brūkšniui formuoti galima parašyti universalią procedūrą, pvz.:

Lentelės vaizdumui padeda vertikalios linijos. Jas galima sudaryti iš simbolių I, *, : ir pan. Simbolius reikėtų parinkti tokius, kad jie netrukdytų skaityti dokumentą, palengvintų suprasti išvedamus duomenis, kad lentelė būtų graži. Vertikalių linijų elementai įterpiami kaip išvedami teksto, užrašyto tarp apostrofų, fragmentai. Tai padaroma antraštės sakiniuose ir duomenų išvedimo sakiniuose. Procedūra R o d y t i galėtų būti tokia:

Page 129: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Lentelei reikalingi papildomi paaiškinimai. Mūsų pavyzdyje tai gali būti eilutė su

pranešimu, kokio vidurkio intervalo mokinių sąrašas arba kad tai visų mokinių sąrašas.

Tai gali būti padaryta procedūroje, jeigu pranešimui reikalingi duomenys (tekstas, skaičiai)

perduodami per parametrus, arba išvesti prieš kreipinį programoje.

Verta nurodyti lentelės suformavimo datą (gal ir laiką). Tikslinga parašyti, kokios

mokyklos tas mokinių sąrašas. Lentelės pabaigoje paprastai parašomas autorius (programos

pavadinimas, arba programuotojo pavardė ir vardas, adresas konsultacijai).

7.3 pratimas. Duoti įvairių dalykų mokinių trimestro pažymiai. Reikia sudaryti

sąrašą mokinių, kurių pažymių aritmetinis vidurkis ne mažesnis kaip 9. Duomenys byloje

surašyti eilutėmis. Vienoje eilutėje pateikiama: mokinio pavardė ir vardas (1-25 pozicijos),

klasė (25-30 pozicijos), pažymiai (sveikieji skaičiai) ik i eilutės galo skiriant juos bent vienu

tarpu.

Mokykloje mokinių daug. Netikslinga visų duomenis, pateiktus pradinėje duomenų by

loje, skaityti į masyvą, o po to atrinkti reikalingus į atskirą masyvą. Duomenis grupuosime

skaitymo metu: tinkamus rašysime į masyvą, netinkamus - praleisime.

Programa pradedama sukuriant reikalingas duomenų struktūras. Skaitydami duomenis

iš karto nustatinėsime, ar reikia jį saugoti masyve, ar ne. Tam reikės rasti mokinių pažymių

aritmetinį vidurkį. Kadangi baigus programos darbą nereikalaujama parodyti pažymių, tai

nereikia jų ir saugoti. Pakaks vidurkio. Duomenų struktūra gali būti šitokia.

Programoje aiškiai išsiskiria dvi dalys: duomenų skaitymas atrenkant tinkamus ir re

zultatų išvedimas. Tam atliksime dvi procedūras. Programos struktūrograma parodyta

24 pav.

Duomenų skaitymo procedūra S k a i t y t i tampa sudėtinga: skaityti mokinio duome

nis, skaičiuoti pažymių aritmetinį vidurkį, analizuoti jį, formuoti naują masyvą. Būtina

supaprastinti. Tam atskirsime veiksmus (įvesime tam reikalingas priemones), o procedūrai

paliksime darbo organizavimo funkcijas. Algoritmas parodytas 25 pav. Čia procedūra

V i e n a s skaito duomenų bylos vienos eilutės duomenis. Tai nesudėtinga, todėl nedetali

zuosime. Vidurkio skaičiavimo funkciją jau aptarėme anksčiau.

Page 130: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 131: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 132: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Mokinio pavardei ir vardui skirtos pirmosios 25 eilutės pozicijos. Klasės šifrui skirtos sekančios 5 pozicijos. Pažymius galima pradėti rašyti nuo 31 pozicijos. Duomenis reikia ruošti itin kruopščiai. Byloje negali būti tuščių eilučių. Labai svarbu patikrinti, ar po paskutinės duomenų eilutės nėra tuščių eilučių.

Pradinių duomenų bylos pavyzdys:

Page 133: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Papildykite 7.2 pratimo programą šio skyrelio pradžioje pateikta procedūra R i n k t i ir patikrinkite programos darbą. Tam reikia parašyti masyvo duomenų išvedimo procedūrą arba keletą laikinai tam skirtų sakinių programoje.

2. Papildykite 7.2 pratimo programą procedūra R o d y t i ir ja naudodamiesi išveskite duomenų ir rezultatų masyvus į ekraną ir į bylą. Jei abu sąrašai ekrane netelpa (per daug eilučių), tuomet po kiekvieno išvedimo ekrane parašykite ReadLn. Programa bus stabdoma tol, kol pasigėrėję duomenimis paspausite klavišą Enter.

132 7 skyrius

Rezultatų bylos pavyzdys:

Atrinktų mokinių sąrašas:

Gauta programa yra gerokai sudėtingesnė už ankstesnes. Atkreipkite dėmesį, kad norint supaprastinti atskiras priemones, buvo įdiegta keletas papildomų priemonių, susietų tarpusavyje laikantis tam tikros hierarchijos. Ją galima pavaizduoti schema, kuri vadinama moduline. Stačiakampiu vaizduojamas programinis modulis (pagrindinė programa, funkcija, procedūra), kurio viduje užrašomas pavadinimas. Galima parašyti paaiškinimus kita eilute. Stačiakampius jungia linijos. Jos gali prasidėti tik apatinėje stačiakampio kraštinėje ir baigtis tik viršutinėje kito stačiakampio kraštinėje. Linija modeliuoja duomenų srautą tarp modulių. Jeigu linijos turi galuose (ar tik viename) rodykles, tai jos nurodo duomenų srauto kryptį. Rodyklės naudojamos retai.

Stačiakampiai schemoje braižomi hierarchiškai. Modulinė schema patogi pirmai pažinčiai su programa, ypač kai programa didoka. Naudinga tuo, kad matomi ryšiai tarp atskirų programos elementų. Modifikuojant, keičiant, papildant, pritaikant naujiems poreikiams programą, modulinė schema yra tarsi gidas, žemėlapis, kuris leidžia greitai ir sėkmingai orientuotis programoje. Pratimo modulinė schema parodyta 26 pav.

Page 134: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

7.4. Duomenų rikiavimas Duomenų rikiavimas norima tvarka yra viena iš pagrindinių darbo su duomenimis ope

racijų. Netvarkinguose duomenų rinkiniuose rasti dominančią informaciją yra keblu ir reikalauja daug pastangų, ypač kai duomenų labai daug. Pavyzdžiui, telefonų abonentų knyga yra netvarkinga adreso požiūriu. Žinant tik dominančio žmogaus adresą (telefonas registruotas ne jo pavarde), rasti telefono numerį mažai kam užteks kantrybės bandyti. Tačiau surikiavus tokį sąrašą pagal adresą, paieška tampa greita ir patogi.

Rikiavimo algoritmų yra daug. Kiekvienas jų turi savo trūkumų ir privalumų. Vienas paprasčiausių ir populiariausių algoritmų yra rikiavimas išrinkimo metodu. Yra

keletas jo modifikacijų. Viena jų buvo parodyta 5.5 pratime. Štai dar viena, rikiuojanti masyvą A(n) mažėjimo tvarka:

Išrinkimo algoritmo aprašymas:

- Masyve A tarp elementų a\, a^, «3, ŪĄ, ..., an ieškoma didesnio už a\ ir radus jis sukeičiamas vietomis su pirmuoju a\.

- Toliau masyve A tarp elementų ai, «3, « 4 , • •., an ieškoma didesnio už ai ir jis sukeičiamas vietomis su antruoju ai (pirmuoju paieškos intervale).

- Toliau masyve A tarp elementų 03, ŪĄ, ... an ieškoma didesnio už 03 ir jis sukeičiamas vietomis su trečiuoju a^ (pirmuoju paieškos intervale).

- Veiksmai kartojami tol, kol intervale liks vienas elementas. Intervalo pradžią nusako pirmojo ciklo parametras i .

Jeigu didžiausios reikšmės paieškos veiksme pakeisime ženklą > (daugiau) į < (mažiau), gausime mažiausios reikšmės paiešką. Tada duomenų masyvas bus rikiuojamas didėjimo tvarka. Loginis reiškinys (A[j]>A[i]) vadinamas rikiavimo raktu. Nuo jo priklauso duomenų sutvarkymo pobūdis. Sudėtingose duomenų struktūrose šis reiškinys gali būti sudėtingas.

Page 135: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys 1. Papildykite 7.3 pratimo programą procedūra, kuri surikiuotų masyvą mokinio pažymių,

gautų už įvairius dalykus, vidurkių mažėjimo tvarka.

Paskui įterpkite pagrindinėje programoje kreipinį į šią procedūrą, kad rezultatų masyvas būtų surikiuotas. Įvykdykitc programą. Dabar rezultatų lentelėje duomenys turės būti surikiuoti pažymių vidurkių atžvilgiu.

2. Pakeiskite rikiavimo požymį šitokiu:

Dabar, esant vienodiems vidurkiams, duomenys bus dėstomi pagal klases jų numerio didėjimo tvarka. Galutinis rezultatas bus duomenys, surikiuoti pagal du požymius: vidurkių mažėjimo ir klasės didėjimo tvarka. Antrasis požymis galioja kiekvienai lygių vidurkių grupei.

3. Struktūros požiūriu programa efektyvesnė, jeigu rikiavimo požymis įforminamas funkcija. Ką tik aptartam požymiui gali būti parašyta tokia funkcija:

Patikrinkite pertvarkytą 7.3 pratimo programą su naujai parašyta funkcija.

Kontroliniai pratimai

1. Parašykite kintamojo A reikšmių įvedimo iš bylos programos fragmentą. Turime tokius aprašus:

Page 136: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Surašykite tekstinėje byloje duomenis apie asmenį taip, kad ką tik pateiktas programos fragmentas juos tinkamai perskaitytų. Duomenų pavyzdys:

Pavardė: Petrauskas

Vardas: Algis

Turimi pinigai: 125,25

Dalis pinigų yra banknotais: 15.

4. Parašykite procedūrą kintamojo A visiems laukams užpildyti, kai duomenų byloje in

formacija pateikta dviem eilutėmis: pirmoje įrašyta pavardė ir vardas, o antroje - dalyko

pažymiai. Mokymosi aritmetiniam vidurkiui skaičiuoti parašykite funkciją ir ją panaudo

kite.

Page 137: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

5. Parašykite procedūrą masyvui B užpildyti naudojant ankstesnio pratimo duomenis be: parašytas procedūras. Duomenų aprašai lieka tie patys.

Užduotys savarankiškam darbui

1. Bibliotekos lankytojų sąrašo tekstinę bylą sudaro: pavardė, vardas, skaitytojo bilie

to numeris, knygą paėmimo data, paimtų knygų skaičius, kiek dienų leistina skaityti.

Reikia sudaryti skaitytojų, kurie vėluoja grąžinti knygas, sąrašą: pavardė, vardas, skai

tytojo bilieto numeris, vėluojamas dienų skaičius, knygų skaičius. Taip pat reikia išvest: dvi lenteles: duomenų ir skaičiavimų rezultatų.

2. Viešbučio gyventojų sąrašo tekstinę bylą sudaro: pavardė, vardas, atvykimo data, iš

vykimo data, kaina už parą. Reikia sudaryti sąrašą: pavardė, vardas, atvykimo data.

išvykimo data, mokestis. Duomenis ir rezultatus norima sutvarkyti pagal atvykimo datą. Reikia išvesti dvi lenteles: duomenų ir skaičiavimų rezultatų.

3. Knygų sąrašą sudaro: autorius, pavadinimas, išleidimo metai, tiražas, kaina. Reikia sudaryti sąrašą: autorius, pavadinimas, išleidimo metai, tiražo piniginė vertė; sutvarkyt: sąrašą pagal išleidimo datą. Reikia išvesti lenteles: duomenų ir skaičiavimų rezultatų.

4. Turime sąrašą: prekė, atvežimo į parduotuvę data, pardavimo data. Reikia sudaryt: sąrašą prekių, kurios buvo parduotos per ilgesnį laiką nei 5 dienos. Sąrašą reikia sutvarkyti pagal prekių pavadinimą. Reikia išvesti dvi lenteles: duomenų ir skaičiavimų rezultatų.

5. Turistinės grupės sąrašas toks: pavardė, vardas, amžius, profesija, lytis. Reikia sudary:: nurodyto amžiaus moterų ir vyrų sąrašus: pavardė, vardas, amžius, profesija ir sutvarkyti juos pagal pavardes ir vardus. Reikia išvesti tris lenteles: duomenų ir skaičiavimu rezultatų.

6. Turime gyventojų sąrašą: pavardė, vardas, adresas, gimimo metai. Reikia sudaryt nurodyto amžiaus gyventojų sąrašą ir surikiuoti abėcėlės tvarka. Reikia išvesti lenteles: duomenų ir skaičiavimų rezultatų.

Page 138: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

7. Automatinis finišo registratorius sudarė sąrašą: starto numeris, finišo laikas {valandos,

minutės, sekundės). Reikia sudaryti finišo protokolą: sportininko vardas ir pavardė,

starto numeris, laikas (valandos, minutės, sekundės). Starto protokolas žinomas: sportininko pavardė ir vardas, starto numeris, starto laikas (valandos, minutės, sekundės).

Gautą sąrašą reikia sutvarkyti rezultatų mažėjimo tvarka. Išvesti lentelėmis duomenis ir rezultatus.

8. Turime krepšininkų aktyvumo duomenis: pavardė, vardas, taškų skaičius, tritaškių

skaičius, varžybų skaičius, įmestų baudų skaičius, neįmestų baudų skaičius. Reikia sudaryti sąrašą: pavardė, vardas, naudingumo koeficientas. Koeficientui skaičiuoti sugalvokite formulę, kurioje būtų panaudoti visi duomenys apie sportininką. Sąrašą reikia surikiuoti koeficiento mažėjimo tvarka. Išvesti lenteles: duomenų ir skaičiavimų rezultatų.

Page 139: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Vaikinas vis dar dvejoja, - jam sunku apsispręsti. Dabar jis supranta vieną svarbią tiesą: sprendimas tėra tik ko nors pradžia. Darydamas sprendimą, žmogus iš tikrųjų pasineria veržlion srovėn, kuri jį nuneša ten, kur sprendimo akimirką jis net nenujautė atsidursiąs.

Šiame skyriuje vaizdžiai pateiktas programos kūrimas naudojant struktūrinio projektavimo metodą (vadinamąjį „iš viršaus žemyn"). Programa dialoginė, sudaryta iš nepriklausomų dalių, kurias lygiagrečiai gali kurti keli savarankiški programuotojai.

Pateiktą medžiagą gali nagrinėti skirtingą programavimo patirtį turintys mokiniai. Susipažinti su čia pateikta medžiaga gali ir tik perskaitę pirmuosius knygos skyrius, ir, žinoma, kitokiu lygiu - tie, kas „perkrimto" visą knygą. Dar kitaip skaitys ir supras sukūrę bent keletą savų programų. Šio skyriaus medžiaga turėtų būti naudinga pradedantiems rašyti programas savarankiškai arba su darbo grupe.

Šiaip ar taip, šiame skyriuje pateikta medžiaga teks naudotis ne kartą, ir nebūtina stengtis viską iš pat pradžių suvokti.

Programa paprastai suprantama kaip uždavinio sprendimo algoritmo pateikimas programavimo kalba. Vartotojui programa yra kompiuterių valdymo priemonė, įgalinanti panaudoti universalų įrankį - kompiuterį - konkretiems praktiniams darbams. Vartotojo nedomina, kaip parengiamos programos, o svarbu tik programų teikiamos paslaugos -darbai, kuriuos galima atlikti vienomis ar kitomis programomis.

Mokantis programuoti iš pradžių rašomos nedidelės programėlės, paprasčiausi pratimai, kuriais aiškinamos programavimo kalbos konstrukcijos bei elementarūs algoritmai. Kartu reikia susipažinti su pagalbinėmis programų rengimo priemonėmis (programavimo terpe) ir pagrindiniais programų rengimo technologijos elementais: pirminio programos teksto paruošimu, išsaugojimu, redagavimu, transliavimu į kompiuterio kalbą, vykdymu, testavimu. Išsiaiškinę svarbiausias programavimo kalbos konstrukcijas ir įgiję bent nedidelę programavimo patirtį, galėsite imtis sudėtingesnių praktinių programų projektavimo.

Paulo Coelho „Alchemikas"

8. Programavimo technologijos pradmenys

8.1. Programos sudarymo etapai

Page 140: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Projektuojant sudėtingas programas, kaip ir dirbant bet kurį kitą didesnį darbą, tenka ieškoti atsakymų į daugelį su darbo organizavimo būdu susijusių klausimų: kaip sudėtingą uždavinį suskaidyti į smulkesnes dalis, kokia tvarka tas dalis rengti, kaip jas sujungti į vientisą programą, kaip paskirstyti darbus keliems vykdytojams, kokių pagalbinių priemonių reikia ir kaip jas naudoti. Kad galėtumėte atsakyti į šiuos klausimus, turite iš anksto susiplanuoti darbą, naudoti įvairius formalius darbo planavimo ir programos struktūros projektavimo metodus.

Paskalio kalba pritaikyta struktūriniam programų projektavimui, kai sudėtinga užduotis nuosekliai skaidoma į smulkesnes dalis, kol gaunami paprasti, lengvai suvokiami ir aprašomi struktūriniai elementai. Dažnai vartojamų universalios paskirties struktūrinių elementų aprašai laikomi standartinėse programavimo aplinkų bibliotekose, vadinamosiose parankinėse (toolbox). Jei jose turimų priemonių nepakanka, vartotojas gali susidaryti savo sukurtų pagalbinių priemonių bibliotekas. Sprendžiamo uždavinio algoritmas aprašomas aukštesniu loginiu lygiu: aprašomi veiksmai atitinka jau ne paprastas kalbos konstrukcijas, o gerokai sudėtingesnes vartotojo parinktas pagalbines priemones.

Siūloma tokia supaprastinta struktūrinio projektavimo tvarka:

- Užduoties analizė. Detalus užduoties nagrinėjimas siekiant išsiaiškinti programos argumentų (pirminių duomenų) ir rezultatų prasmę bei savybes ir parinkti arba sugalvoti uždavinio sprendimo algoritmą.

- Duomenų analizė ir struktūrų parinkimas. Kadangi kiekvienam duomenų tipui paprastai esti numatytas tik jam skirtas operacijų rinkinys, tai nuo duomenų vaizdavimo būdo parinkimo labai priklauso ir visos programos struktūra. Taigi šis etapas yra labai glaudžiai susijęs su uždavinio sprendimo algoritmo aprašymu. Nežinant algoritmo (taikomų veiksmų), negalima parinkti duomenų struktūrų, o nežinant struktūrų, - neįmanoma sudaryti algoritmo.

- Programavimo priemonių parinkimas. Visas projektuojamai programai reikalingas priemones iš anksto numatyti sunku, todėl iš pradžių dažniausiai tik daugmaž numatomas pagrindinių priemonių sąrašas, vėliau nuolat papildomas ir tikslinamas. Čia reikėtų bent apytiksliai numatyti programai reikalingus modulius (procedūras, funkcijas), jų ryšius.

- Programos rašymas ir derinimas. Tai visos programos teksto rašymas, modulių jungimas. Sintaksės ir logikos klaidų paieška ir taisymas.

- Programos testavimas, jos praktinio veikimo bandymas. Siame etape ieškoma programoje esančių netikslumų, neatitikimų užduočiai, ir jie ištaisomi. Tikrinama, ar rašant programą įvertinti visi galimi duomenų variantai, ar rezultatai visais atvejais tenkina programos vartotoją. Dažniausiai tai daroma tikrinant programos darbą, pateikiant įvairius argumentų reikšmių rinkinius.

- Programos diegimas. Šioje dalyje kreipiamas dėmesys į programos ir vartotojo ryšių patogumą. Ruošiama dokumentacija (nurodymai) vartotojui. Apmokomi darbuotojai. Programa bandoma su realiais duomenimis ir realiomis darbo sąlygomis.

8.2. Duomenų analizė Pradedant kurti programą būtina išsiaiškinti, kokie yra duomenys, kokia jų pateikimo

forma ir apimtis. Duomenų įvedimo paprogramių sudėtingumas priklauso nuo duomenų vaizdavimo būdo: kiek ir kokiose bylose jų saugoma, kokia duomenų pateikimo struktūra

Page 141: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

bei nuoseklumas. Jeigu programos užsakovas dar nežino, kaip jam saugoti bylose duomenų rinkinius, tai programuotojas turi suprojektuoti ir pasiūlyti ne tik būsimai programai patogią formą, bet ir duomenis rengiantiems programą. Kuo lengviau ir patogiau surašyti duomenis į bylas, tuo mažiau jose lieka klaidų.

Kompiuteryje duomenys gali būti saugomi kitokia nei buvo įvesti forma. Jei juos numatoma saugoti tekstinėse bylose, tai reikšmes reikia surašyti taip, kad būtų lengva rasti, atpažinti ir suprasti duomenis. Jeigu numatomos kokios nors savitos struktūros bylos, tuomet būtina numatyti tam tikras programines priemones tokių duomenų rinkiniams peržiūrėti, papildyti bei koreguoti.

Programuotojas privalo išsiaiškinti su užsakovu apie norimus rezultatus, jų struktūrą, vaizdavimo būdus bei kur ir kaip tie rezultatai turi būti pateikiami. Tai būsimos programos darbo rezultatų pavidalas.

Programos darbo rezultatai užsakovui pateikiami sutartu pavidalu. Rezultatų įforminimo programinės priemonės naudoja pradinių duomenų rinkinius. Turint galimybę, tikslinga duomenų struktūras parinkti tokias, kad jose būtų galima laikyti ir pradinius duomenis, ir rezultatus. Tuomet turėsite vienoje vietoje visą informaciją galutiniam rezultatų pateikimui ir bus paprastesni programos elementai.

Išsiaiškinus, kas yra duomenys ir rezultatai, kaip jie vaizduojami, galima skaičiavimams parinkti patogias duomenų struktūras ir jas aprašyti: sukurti duomenų tipus.

Paskalio kalboje yra keletas standartinių duomenų tipų ( r e a l , i n t e g e r , char , b o o l e a n ir 1.1.), kurie toliau naudojami naujiems duomenų tipams kurti. Nauji tipai kuriami naudojant jau esamus duomenų tipus ir taikant Paskalio kalboje numatytus struktūrinius būdus ( a r r a y , s e t , f i l e , r e c o r d ir pan.). Duomenų tipų tarpusavio ryšiai parodyti 28 paveiksle. Ši schema skaitoma taip pat kaip ir sintaksės diagramos. Jei reikia sukurti naujus tipus, galima pagal tą schemą apžvelgti, kokie ir kaip gali būti vartojami kit i duomenų tipai. Pavyzdžiui, atkarpos tipas gali būti sudaromas iš vienos kurios nors diskretinio tipo atkarpos (sveikojo, loginio, simbolinio, vardinio); įrašo tipas gali apimti visų tipų laukus, įskaitant ir įrašus (išskyrus bylos tipą).

Didesnės apimties programose duomenų paruošimo ir dokumentų įforminimo programinės priemonės atskiriamos nuo skaičiavimų ir pertvarkomos į savarankiškas programas arba sujungiamos į dialoginę programinę sistemą. Tuomet skaičiavimus atliekanti programa turi tik reikalingų duomenų įvedimo ir rezultatų išvedimo priemones. Galima programos struktūra parodyta 29 paveiksle.

8.3. Programos modulinė schema Programos modulis - tai programos elementas, atliekantis tam tikrą savarankišką funk

ciją: jis įveda duomenis, įformina rezultatus, atlieka kokius nors konkrečius veiksmus ir pan. Modulis gali būti sudarytas kaip pagrindinė programa, procedūra, funkcija, sudėtinis sakinys ir pan. Kiekvienam moduliui būtinas savas vardas, kuriuo jis pažymimas schemoje.

Schema braižoma pagal hierarchiją - nulinį (viršutinį) lygį paprastai sudaro pagrindinės programos modulis. Pirmajame lygyje braižomi moduliai, kuriuos naudoja tik pagrindinė programa (nulinis lygis), antrajame - moduliai, naudojami nuliniame ir pirmajame lygyje. Zemiausiajame lygyje gali būti moduliai, naudojami aukščiau esančių modulių. Patys jie

Page 142: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 143: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

gali naudoti tik standartinius kalbos modulius. Programuotojas paprastai turi savo standartinių modulių biblioteką, kurios sudėtį aprašo atskirai. Tuomet tie moduliai taikomosios programos modulinėje schemoje gali būti praleisti. Procedūrų (funkcijų) viduje aprašytu kitų procedūrų ar funkcijų schemoje galima nepateikti. Didelių programų modulines schemas tikslinga braižyti atskirais paveikslais, atskirai detalizuojant sudėtingesnius modulius. Schemą reikia taip išskaidyti, kad kuo mažiau būtų ryšių tarp atskirų dalių (kuo mažiau modulių pakartojimų įvairiose dalyse).

Programos modulinė schema padeda susivokti sudėtingoje programoje, nustatyti modulių tarpusavio ryšius, išskirti mažiausiai tarpusavyje susijusias dalis ir pavesti jas sudaryti atskiriems programuotojams. Modifikuojant modulius pagal schemą lengva rasti programos vietas, kur naudojami tie moduliai, ir reikiamai pakoreguoti programą. Baigiant derinti programą testuojami ryšiai tarp modulių. Schema padeda sudaryti testus.

8.4. Modulių dokumentavimas Kiekvieną modulį (paprastai tai būna funkcija arba procedūra) apibūdina jo antraštė ir

parametrų sąrašas. Tai formalioji dalis, kuri yra būtinas modulio atributas. Toliau turi būti parametrų paskirties aprašymas. Jei parametrai yra nestandartinio tipo, j ie pateikiami tuoj pat po oficialiosios modulio antraštės. Paskui surašomas modulio paskirtį aiškinantis tekstas: ką ji daro, kaip daro (metodas, būdas), duomenų ribojimai, avarinės situacijos. Jei modulio programinis tekstas yra ne pagrindinėje programoje (galbūt kito modulio viduje arba išorinėje bibliotekoje), tuomet būtina nurodyti, kur jis yra. Visą modulio aprašą sudaro algoritmas, naudojimo pavyzdys, duomenų ir rezultatų pavyzdys. Modulio apraše yra labai svarbi informacija apie autorių, paskutinės modifikacijos data, konsultavimo priemonės ir būdai. Jeigu modulis skirtas konkrečiai programai, tuomet jo apraše tikslinga surašyti modulius, kuriuos jis naudoja, ir modulius, kurie jį naudoja. Asmeninė ar organizacijai priklausanti modulių kartoteka papildoma kiekvieno iš jų programos tekstu bei diskeliu arba nuoroda į diskelį ar bylą, kur tekstas laikomas.

8.5. Programos rašymas, derinimas Nesvarbu, kaip (individualiai, kolektyviai) kuriama programa, jos rašymo, derinimo ir

testavimo etapai yra tarpusavyje glaudžiai susiję. Parašyta programa, kol ji derinama, dar gali kisti. Nerekomenduojama parašyti visą programą ir tik tada derinti, nes bus sugaištama daugiau laiko.

Programa kuriama dalimis. Parašius vieną ar keletą modulių, reikia juos suderinti ir testuoti. Testui parengiami duomenų rinkiniai bei programinė terpė moduliams vykdyti. Kuriant programą „iš apačios", pirmiausia parašomi tie moduliai, kurie yra modulinės schemos žemiausiajame lygyje. Kiekvienas jų derinamas atskirai. Paskui rašomi aukštesniojo lygio moduliai (ne visi iš karto) ir derinami, atskirai testuojami ne tik jų veikimą aprašantys veiksmai, bet ir tikrinami ryšiai su kitais naudojamais moduliais. Tikslinga pirmiausiai patikrinti, ar teisingi ryšiai, po to - kaip veikia pats modulis. Jeigu derinant paaiškėja, kad būtina koreguoti žemesniojo lygio modulį, tuomet derinimo bei testavimo procesas pakartojamas iš naujo, pradedant nuo pakoreguoto modulio. Taip programa surenkama pagal modulinę schemą „iš apačios".

Page 144: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Dažnai naudojamas ir programos kūrimo „iš viršaus" būdas, kai pirmiausiai parašoma pagrindinė programa, paskui pagal modulinę schemą rašomi joje naudojami moduliai. Derinant ir testuojant dar neparašyti moduliai keičiami jų darbo imitatoriais. Jie turi modulio antraštę, tačiau pateikia ne skaičiavimų rezultatus, bet iš anksto numatytas konkrečias reikšmes, tinkamas derinti. Sis būdas turi daug privalumų. Vienas iš jų yra toks: žingsnis po žingsnio detalizuojant programą, anksčiau paaiškėja smulkesnių modulių trūkumai, jų struktūra, reikalingumas. Kitas privalumas, kad pirmiausia įsitikiname modulių ryšių teisingumu. Sužinome, ar suplanuotos paprogramių antraštės mus tenkina, ar tinkama paprogramių paskirtis, ką reikia keisti ar modifikuoti.

Prieš pradedant rašyti programą būtina atidžiai peržvelgti būsimų modulių sąrašą: gal rasime jau sudarytų ir esamų bibliotekoje, gal galime kiek papildę ar modifikavę turimus modulius gauti naujus arba gal nedideli naujos programos projekto pakeitimai leis daugiau ir efektyviau panaudoti bibliotekos modulius.

8.6. Programos testavimas Testavimas - tai programos vykdymas siekiant nustatyti, ar programa tinkamai veikia. Derinimas - tai klaidų paieška ir taisymas. Testas - tai kontrolinių duomenų rinkinys.

Modulio testavimas - tai autonominis modulio programos vykdymas, sukuriant jam informacinę aplinką.

Ryšių testavimas - tai ryšių tarp modulių tikrinimas, sukuriant programinę ir informacinę aplinką.

Kompleksinis testavimas - tai visos sistemos vykdymas su iš anksto paruoštais testais ir palyginimas su numatomais rezultatais.

Testavimo procesą sudaro tokie žingsniai:

- testo tikslo formulavimas, - testo projektavimas, - testo tikrinimas, - testo vykdymas,

- rezultatų analizė. Pradžioje visas dėmesys sukoncentruojamas į vieną modulį. Paruošiami jo testai ir

vykdomi. Jeigu testas rodo klaidą, tai modulis derinamas, t. y. išbandomas su skirtingais duomenimis, kol įsitikinama, kad modulio programa veikia teisingai. Kai visi moduliai jau ištestuoti ir gerai veikia, tada visas dėmesys sukoncentruojamas į pačią sistemos programą. Paruošiami testai ir atliekamas kompleksinis testavimas.

Testų paruošimas - tai kūrybinis procesas, reikalaujantis kruopštaus triūso ir išmanymo. Vis dėlto galima rekomenduoti keletą paprastų taisyklių. Iš pradžių į modulį patartina žiūrėti kaip į „juodąją dėžę", o paskui ištirti jo vidų pagal šiuos požymius:

1) pagal išorines modulio specifikacijas parengti testą kiekvienai situacijai, kiekvienai galimybei, kiekvienai duomenų ribinei reikšmei, kiekvienai neleistinai sąlygai patikrinti;

2) pagal programos (arba algoritmo) vidų paruošti testus kiekvienos sąlygos visiems atvejams patikrinti;

3) pagal programos tekstą (arba algoritmą) patikrinti, ar sudaryti testai patikrina visus galimus kelius; pavyzdžiui, kiekvienam ciklui turi būti trys testai:

Page 145: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

- kai ciklas visai nevykdomas, - kai ciklas vykdomas tik vieną kartą, - kai ciklas kartojamas daug kartų;

4) pagal programos tekstą (arba algoritmą) nustatyti, kurie duomenys trikdo programą, pavyzdžiui, ar įmanoma situacija, kai gali būti bandoma dalyti iš nulio, ar pošaknio reiškinys netaps neigiamu ir pan.

Jeigu pradinių duomenų nedaug, bet yra didelė reikšmių sklaida, tai reikia paruošti testus, kurie patikrintų, kaip modulis veikia, esant leistinoms duomenų reikšmėms. Pavyzdžiui, jei argumentas gali kisti kito nuo —1 iki 1, tai reikia paruošti tris testus reikšmėms: -1, 0, +1.

Kai kurie duomenys turi tam tikras ribas. Pavyzdžiui, jei testuojamas modulis rikiuoja įrašų sąrašą, tai funkcinės ribos bus, kai sąrašas:

- tuščias, - turi tik vieną įrašą, - jau yra surikiuotas, - turi vienodas reikšmes.

8.7. Programos išbandymas Programa testuojama siekiant užtikrinti jos patikimumą, rasti ir pašalinti algoritmo ir

programavimo netikslumus ir klaidas, išsiaiškinti programos taikymo ribojimus. Bandymas yra programos patikrinimas su galimais realiais duomenimis. Bandymui imami realūs duomenys arba ruošiami (generuojami) panašūs į realius, kurie bus apdorojami su programa. Rezultatai turi būti žinomi iš anksto. Jei programos darbo rezultatai sutaps su jau žinomais, tuomet galima teigti, kad programa tinkama naudoti, nors visiškai garantuoti, kad rezultatai visuomet bus teisingi, negalima. Programos patikimumas padidėja, jeigu bandymams naudojami įvairūs duomenys ir jų būna kuo daugiau.

Bandymais išsiaiškinama, ar vartotojui patogu naudotis programa, ar programa tikrai tenkina jai keliamus reikalavimus. Nereikia užmiršti, kad programos testavimas galėjo būti dalinis.

Bandymas - tai programos patikrinimas, ar ji vartotojui tinkama.

8.8. Programos ir vartotojo ryšys Vykdymo metu programa bendrauja su vartotoju pasyviai (tik pranešimais apie dar

bo eigą: vartotojas stebi pranešimus, laukia rezultatų) arba aktyviai (vartotojas dirba su programa dialogo režimu). Galima skirti tokius programos ir vartotojo ryšio lygius:

1) programa praneša, kiek ir ką yra padariusi; tai būtina, jei programos dirba ilgiau nei kelias minutes. Programa turi pranešti apie sėkmingą ar nesėkmingą darbo pabaigą;

2) programa informuoja apie galimybę valdyti sprendimo eigą atitinkamais klavišais, parodo ekrane kontrolinius tarpinius sprendimo rezultatus;

3) programa dirba dialogo režimu, t. y. klausia ir vykdo vartotojo nurodymus (komandas);

4) programos sprendimo eigą valdo vartotojas: nurodo duomenis, veiksmų seką, rezultatų formą ir apimtį, sprendimo būdus ir 1.1.

Page 146: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Vartotojas, galintis proceso metu operatyviai spręsti apie apdorojamų duomenų korektiškumą, išsamumą, juos taisyti bei papildyti, išvengia daugelio avarinių situacijų. Tarp vartotojo ir programos nėra tarpininko. Kiekvienas kreipinys į programą ir atsakymas (reakcija) turi būti gerai apgalvoti, kad vartotojas, nemokantis programuoti, galėtų naudotis programos paslaugomis ir jo netrikdytų šokiruojantys atsakymai.

Šiuolaikinės programos kuriamos dialoginės. Naujausios programavimo priemonės (pavyzdžiui, Delphi, C++ Builder) siūlo daug paruoštų komponentų, kuriuos įterpus į programą greitai gaunama langų tipo programa.

Turbo Paskalis turi keletą priemonių tokiems komponentams kurti. Nors jų nedaug, tačiau ir jomis galima sukurti pakankamai patogias programas.

Toliau pateikiamas dialoginės programos kūrimo pavyzdys, kurį panagrinėję matysite, kad loginiai ryšiai tarp programos elementų yra paprastesni, negu nuosekliai vykdomoje programoje. Vartotojas pats sprendžia, kada kokius veiksmus ir kokia tvarka atlikti. Be to, tokią programą lengva išsidalijus kurti grupei žmonių. Svarbiausias ir sudėtingiausias etapas - parinkti ir suprojektuoti duomenų struktūras. Gerai parinkus duomenų struktūras gaunama paprastesnė programa, jai lengviau suteikti naujas savybes.

8.9. Programos pavyzdys Užduotis. Koordinačių plokštumoje duota daug taškų, kurių koordinatės (x, y) poromis

surašytos tekstinėje byloje. Reikia rasti, kuriuos taškus sujungę tiesių atkarpomis, gausime stačiuosius trikampius. Šią savybę tenkinančias taškų koordinates, apskaičiuotus trikampių kraštinių ilgius bei trikampių plotus reikia surašyti į tekstinę bylą.

Užduoties analizė. Trikampį nusako trys viršūnės. Teks patikrinti visus galimus trikampius. Tai reiškia, kad iš duoto taškų sąrašo reikia paimti po tris taškus. Tam, kad visi galimi trikampiai būtų nagrinėjami tik po vieną kartą, reikia juos apgalvotai parinkti. Programiškai tai galima gauti naudojant tris ciklus cikle:

Čia i, j ir k yra taškų numeriai (nagrinėjamo trikampio viršūnės) iš duoto sąrašo. Vienam trikampiui analizuoti reikia atlikti tokius veiksmus.

Page 147: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Visi šie skaičiavimai atliekami su realiaisiais skaičiais, todėl skaičių palyginimo veiksmuose turi būti laikomasi tam tikro tikslumo: skaičiai lygūs, jeigu jų skirtumas absoliutiniu didumu neviršija nurodyto tikslumo, pavyzdžiui, 0,01.

Skaičiavimuose reikia įvertinti situaciją, kai trys nagrinėjami taškai yra vienoje tiesėje ir negali sudaryti trikampio. Trikampis nesusidarys, jei keli taškai bus vienoje plokštumos vietoje (tai vartotojo klaida, kai tas pats taškas duomenų byloje parašytas du ir daugiau kartų). Trikampis nesusidarys, jei atstumas tarp taškų mažesnis už nurodytą skaičiavimų tikslumą.

Kuriant programą buvo daroma prielaida, kad vartotojas duomenis teisingai surašys byloje ir atstumai tarp taškų bus didesni už nurodytą tikslumą.

Duomenų analizė ir struktūrų parinkimas. Taško koordinates (JC, y) nusako du realūs skaičiai. Byloje visų taškų koordinates patogiausia surašyti dviem stulpeliais. Pirmajame būtų x koordinatės, antrajame - y. Taip rašant, vienam taškui bus skiriama viena eilutė - tada bus aiškiau ir lengviau išvengti klaidų. Bus nesunku pastebėti, jeigu eilutėje per mažai arba per daug skaičių. Rašant skaičius būtina juos lygiuoti.

Jeigu taškų daug, tuomet patogiau būtų eilutėje rašyti ne vieno taško koordinates. Taip rašydami gautume lyginį stulpelių skaičių. Stulpelių poras reikia atskirti didesniu intervalu. Pavyzdžiui:

Nustatome, ar tos kraštinės sudaro statųjį trikampį. Statusis trikampis bus tada, jei bus teisinga bent viena iš tokių lygybių:

2. Trikampio ploto skaičiavimas

Stačiojo trikampio plotui skaičiuoti yra paprasta formulė, tačiau reikia žinoti, kurios kraštinės yra statiniai. Galima pasinaudoti bet kokio trikampio ploto skaičiavimo formule:

čia p yra pusė trikampio perimetro:

Uždavinyje pradiniai duomenys yra taškai, o analizuojama geometrinė figūra - trikampis. Juos aprašanti įrašo struktūra bus tokia.

Page 148: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Programos rašymas ir derinimas. Neracionalu būtų parašyti visą programos tekstą, o po to ieškoti klaidų ir jas taisyti. Reikia rašyti ir derinti programą dalimis. Padarius dalį programos, randamos ir ištaisomos klaidos, įsitikinama, kad programa jau daro tai, ką reikia. Taip gauta programa nėra išbaigta, tačiau veikianti. Tai pirmoji programos versija.

Padaroma ankstesnės programos versijos kopija ir papildoma naujais veiksmais. Ištaisius klaidas ir įsitikinus, kad programa veikia teisingai, gaunama tolesnė programos versija.

Visas ankstesnes programos versijas reikia saugoti tol, kol gausime galutinę teisingą programos versiją. Tai būtina, nes jei kuriame nors programos rašymo etape paaiškėtų, kad reikia iš esmės keisti dalį programos, būtų galima darbus pradėti su viena iš ankstesnių versijų.

Programavimo priemonių parinkimas. Programai rašyti reikalingos tokios priemonės (procedūros, funkcijos):

a) atstumui tarp dviejų taškų skaičiuoti:

Čia A ir B taškų koordinatės (x, y). Rezultatas yra atstumas tarp tų taškų,

b) nustatyti, ar trikampis statusis:

Cia Tr yra vieno trikampio duomenys. Rezultatas True, jeigu trikampis status, ir Falše priešingu atveju.

c) trikampio plotui skaičiuoti:

Čia Tr yra trikampio duomenys. Skaičiuojamas trikampio plotas, kuris įrašomas į Tr. S

[auką.

Page 149: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Programos testavimas. Ištaisę programos sintaksės klaidas, patikriname, kaip programa veikia su byloje esančiais duomenimis. Jeigu duomenys skaitomi ir teisingai rodomi ekrane, reikia patikrinti, kaip programa elgiasi tais atvejais, kai byloje nėra skaičių ir kai byloje yra daugiau skaičių, nei įmanoma sutalpinti masyve. Dažniausiai pasitaikanti klaida yra tokia: kai neparašomas žodelis v a r prieš procedūros formaliuosius parametrus, skirtus rezultatams grąžinti. Rašant sudėtingesnes programas, visų pirma įsitikinama, kad parametrų sąrašai yra teisingi. Tam nebūtina parašyti visą procedūrą. Reikalingas veiksmų imitatorius. Vienas tokių variantų gali būti, kai rezultatus grąžinantiems parametrams priskiriamos fiksuotos reikšmės. Pavyzdžiui, šioje programoje tai gali būti toks duomenų skaitymo procedūros imitatorius.

Page 150: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Parašome svarbiausią programos dalį - taškų grupavimo po tris. Jei teisingai rasime visus galimus trikampius, tuomet bus galima pradėti skaičiuoti. Papildymus ir pakeitimus pateikiame pusjuodžiu šriftu.

Page 151: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Užrašoma atstumo tarp dviejų taškų skaičiavimo iunkcija. Jeigu tokia jau buvo naudojama kitose programose, tai reikia perkelti ją į šią programą. Parašytą funkciją galimą patikrinti atskirai, bet turint daugiau patirties, ją galima tikrinti skaičiuojant trikampių kraštines. Taškų koordinates byloje surašome tokias, kad nesunku būtų patiems iš anksto apskaičiuoti numatomus rezultatus. Tam daug duomenų nereikia. Papildome programą:

Page 152: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Parašoma procedūra trikampio plotui skaičiuoti. Derinimo veiksmai analogiški ankstesnei versijai.

Parašoma funkcija, skirta nustatyti, ar trikampis statusis. Į masyvą T įrašomi tik stačiųjų trikampių duomenys. Programa derinama su duomenimis, kai stačiųjų trikampių tikrai yra. Po to reikia patikrinti su duomenimis, kai stačiųjų trikampių nėra, ir su duomenimis, kai visi trikampiai statieji.

Parašoma procedūra gautiems rezultatams surašyti lentele į bylą. Atkreipkite dėmesį į tai, kad ekranas taip pat yra tekstinė byla, todėl kreipinyje nurodant ekrano bylos vardą O u t p u t , parašyta procedūra parodys rezultatus ekrane. Programos sakiniai, kurie buvo reikalingi programai derinti, pašalinami. Programos komentarai rašomi ne visi iš karto. Tikslinga dalį komentarų parašyti rašant pirminį programos teksto variantą, o kitą dalį -suderinus programą. Komentarai iš esmės sutvarkomi (papildomi, patikslinami) po to, kai gaunama galutinė programa. Komentarų turi būti tiek ir tokių, kad skaitant programos tėkštąjį būtų lengva suprasti. Gauname tokią programą:

Page 153: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 154: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 155: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Programos aprašas. Tai dokumentas, skirtas programuotojui. Jeigu norėsime kada nors keisti programą, vien jos teksto nepakaks. Komentarais visko neišaiškinsi. Reikalavimai programos aprašui įvairiose organizacijose skirtingi, daug priklauso nuo programos sudėtingumo ir paskirties. Gali būti labai detalūs ir tikslūs, gali būti tik esminius dalykus komentuojantys tekstai. Minimalų aparšymą iliustruosime pavyzdžio programai. Kas buvo aprašyta kuriant programą, čia nekartosime. Pažymėsime, kas ir kokia seka turi būti pateikiama.

1. Užduotis. Surašoma detali uždavinio sąlyga.

Gauti rezultatai:

Programos diegimas. Parašoma instrukcija vartotojui apie darbą su programa. Vartotojui pateikiama programa ir vartojimo instrukcija. Jeigu vartotojas be niekieno pagalbos sugeba teisingai pasinaudoti programa, vadinasi, dokumentas parašytas teisingai. Jeigu ne, tai kartu su vartotoju tikslinama ir papildoma instrukcija. Instrukcijoje labai svarbu teisingai ir aiškiai nusakyti, kas yra duomenys, kaip jie surašomi byloje, kas yra rezultatai ir kaip juos surasti bei suprasti. Pateikiama keletas pavyzdžių. Jeigu programa sudėtinga, tuomet būtina išmokyti vartotoją naudotis programa. Prie programos pridedamas kontrolinis testas.

Programos StatusisTrikampis testas. Duomenų byla:

Page 156: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

5. Programos teksto aprašymas.

Pirmiausia pateikiamas pagrindinės programos aprašymas. Tai kintamieji ir jų paskirtis. Trumpai aptariami programos veiksmai. Po to pateikiami visų modulinėje schemoje parodytų procedūrų ir funkcijų aprašymai. Paprogramės minimalų aprašą sudaro antraštė, parametrų paskirties išaiškinimas ir trumpas atliekamų veiksmų aprašymas. Nurodoma, kokie taikomi matematiniai metodai. Toliau pateikiamas programai vykdyti naudojamų priemonių, kurios aprašytos kituose dokumentuose (nurodoma), sąrašas.

Pavyzdžiui:

• Pagrindinė programa A : Mas; Taškų koordinačių masyvas. Pradiniai duomenys,

n : integer; Taškų skaičius.

T : Sar; Stačiųjų trikampių sąrašas. Rezultatai, m : integer; Stačiųjų trikampių skaičius. F : t e x t ; Bylos kintamasis. Naudojamas darbui su rezultatų byla.

Programa nuskaito duomenis į masyvą A(n); tai atliekama procedūra SkaitytiDuo-menis. Po to atliekami veiksmai - procedūra Veiksmai. Gautieji rezultatai surašomi į rezultatų bylą, kurios vardas nurodytas konstanta R e z u l t a t a i . Paruošiama byla rezultatams rašyti. Rezultatus byloje ir ekrane surašo procedūra Rezultatas.

• procedure SkaitytiDuomenis (var A : Mas; var n : integer); A - taškų koordinačių sąrašas, n - taškų skaičius.

2. Duomenys programai. Nurodoma, kokie duomenys reikalingi programai, pateikiama duomenų surašymo byloje

strukcija, pavyzdys.

3. Konstantos ir duomenų tipai. Programos konstantų sąrašas su paaiškinimais. Sukurtų duomenų tipų pristatymas su paaiškinimais.

4. Programos modulinė schema. Pavyzdžio programos modulinė schema tokia:

Page 157: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

uuomenys procedural: A - taškų sąrašas, n - taškų skaičius; Rezultatas: T - galimų stačiųjų trikampių sąrašas, m - stačiųjų trikampių skaičius. Patikrinami visi galimi trikampių sudarymo pagal duotą taškų sąrašą A ( n ) variantai.

Skaičiuojamos trikampių kraštinės ir plotai. Gautų stačiųjų trikampių duomenys kaupiami masyve T (m).

• p r o c e d u r e R e z u l t a t a s ( v a r F : t e x t ;

v a r T : s a r ; m : i n t e g e r ) ;

F - bylos kintamasis. Į juo nurodomą bylą lentele surašomi rezultatai; T - stačiųjų trikampių sąrašas; m - stačiųjų trikampių skaičius.

• f u n c t i o n A t s t u m a s (A, B : V i e n a s ) : r e a l ;

A, B - taškų koordinatės. Suskaičiuojamas ir grąžinamas atstumas tarp tų taškų koordinačių plokštumoje.

• p r o c e d u r e P l o t a s ( v a r T r : T r i k a m p i s ) ;

Tr - trikampio duomenys: viršūnių koordinatės ir kraštinės. Suskaičiuojamas trikampio plotas.

• f u n c t i o n S t a t u s i s ( T r : T r i k a m p i s ) : b o o l e a n ;

Tr - trikampio duomenys: viršūnių koordinatės ir kraštinės ir plotas. Nustatoma, ar trikampis status. Jeigu status, tai rezultatas yra loginė reikšmė T r u e .

Priešingu atveju - F a l s e .

6. Programos tekstas. Pateikiamas programos tekstas su komentarais.

7. Rezultatai. Pateikiamas rezultatų pavyzdys ir reikalingi paaiškinimai, norint teisingai suprasti.

Iš duomenų bylos, kurios vardą saugo konstanta Duomenys, skaitomi skaičiai ir surašomi į masyvą A(n). Jeigu taškų yra daugiau nei telpa masyve, tai skaitymas nutraukiamas perskaičius tiek taškų koordinačių, kiek telpa į masyvą.

Page 158: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Ar tu gali įsivaizduoti, kiek daug gyvenimų turėjome pragyventi, kol pagaliau mumyse gimė miglotas supratimas, kad gyvenimo prasmė - ne vien tik valgyti, peštis ar siekti valdžios Būryje. Tūkstantį gyvenimų, Džonai, dešimt tūkstančių. O po to dar šimtą gyvenimų, kol supratome, kad yra toks dalykas, kaip tobulėjimas, ir dar kitą šimtą gyvenimų, kol paaiškėjo, kad gyvenimo tikslas yra pasiekti tobulumą ir jį skleisti. Žinoma, tie patys dėsniai mums ir dabar galioja: mūsų būsimasis pasaulis priklauso nuo to, ką esame išmokę šiame. Jei nieko neišmoksi, kitas pasaulis bus toks pat kaip ir šis, į jį atsineši tuos pačius savo trūkumus, kurie ribos tavo galias ir slėgs kaip švinas tol, kol juos pagaliau nugalėsi.

9. Programos sudarymo pavyzdys Praeitame skyriuje aptarėme programos sudarymo etapus. Dabar tai pritaikysime prak

tiškai konkrečiam nesudėtingam uždaviniui spręsti.

Tekstinėje byloje Zoo . t x t turime informaciją apie garsiausius pasaulio zoologijos sodus. Visa informacija apie kiekvieną zoologijos sodą surašyta laikantis tokių taisyklių:

1) pirmoje eilutėje nurodytas zoologijos sodo pavadinimas (1-20 pozicijos) bei skirtingų tame sode įkurdintų gyvūnų skaičius.

2) tolesnėse eilutėse pateikiama informacija apie kiekvieną to sodo gyvūną (vienoje eilutėje aprašomas vienas gyvūnas):

- gyvūno vardas (1-20 pozicijos); - tos rūšies suaugusių gyvūnų skaičius; - tos rūšies jauniklių skaičius.

3) aprašius vieno zoologijos sodo gyvūnus, toliau naujoje eilutėje pateikiama informacija apie kitus zoologijos sodus (pagal 1-2 punktus)

Pavyzdžiui, informacija apie tris (Kauno, Rygos ir Berlyno) zoologijos sodus gali būti pateikta šitaip:

Ričardas Bachas "Džonatanas Livingstonas žuvėdra"

9.1. Užduotis: Zoologijos sodai

Page 159: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Reikia parašyti dialoginę programą, kuri pateiktų tokią informaciją:

}) apie gyvūnus:

a) kiek skirtingų pavadinimų gyvūnų yra zoologijos soduose;

b) kiek iš viso gyvūnų yra zoologijos soduose;

c) kiek suaugusių gyvūnų ir kiek jauniklių yra zoologijos soduose;

d) kokiuose zoologijos soduose yra mus dominantis gyvūnas ir kiek jų ten;

e) kiek ir kokių gyvūnų yra zoologijos soduose (programa turi pateikti gyvūnų pavadinimus be pasikartojimų, suaugusių bei jauniklių skaičių).

2) apie zoologijos sodus:

a) apie kokį zoologijos sodų skaičių yra duomenų;

b) kuris zoologijos sodas turi daugiausiai gyvūnų ir kiek;

c) kuris zoologijos sodas turi daugiausiai skirtingų gyvūnų ir kiek;

d) kuriame zoologijos sode yra daugiausiai jauniklių ir kiek;

c) kokie gyvūnai yra mus dominančiame zoologijos sode.

9.2. Užduoties analizė

Užduotyje pakankamai išsamiai pasakyta, kokias paslaugas turi teikti programa. Atidžiau peržvelgę pageidaujamų paslaugų sąrašą matome, kad daugelis veiksmų - nesudėtingi skaičiavimai. Kiekvieną iš jų galima užrašyti atskira procedūra. Sudėtingesnis darbas yra pasirinkti dialogo organizavimo būdą. Siūlome pasirinkti paprasčiausią variantą: ekrane parodyti numeruotą paslaugų sąrašą, o vartotojas turės nurodyti paslaugos numerį. Įvykdžius užsakymą, ekrane vėl rodoma pradinė situacija. Taip kartojama, kol vartotojas nurodys pabaigos veiksmą.

Užduoties sprendimo algoritmas nesudėtingas - visi veiksmai gana paprastai suskaidomi į kelias savarankiškas dalis (žr. 30 pav.). Toliau išsamiau panagrinėkime kiekvieną algoritmo dalį ir galėsime rašyti programą.

Page 160: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

9.3. Duomenų analizė Pirmiausia reikia nuspręsti, kur ir kokiu pavidalu laikysime visą informaciją apie gy

vūnus. Vienas paprasčiausių būdų - kol vykdoma programa visus duomenis laikyti kompiuterio atmintinėje. Taip laikant duomenis, paprasčiau atlikti veiksmus su jais: nereikia skaityti duomenų, iš anksto žinoma, kiek ir ko yra, nesudėtinga atsakymų į užklausas paieška. Tiesa, verta žinoti ir silpnąsias tokio pasirinkimo puses - kompiuterio operatyviojoje atmintyje patartina laikyti nedidelį kiekį duomenų, priešingu atveju tai bus tik teorinis algoritmas, kurį atlikti galės tik didžiulės talpos atmintinę turintis kompiuteris.

Iš uždavinio formuluotės matyti, kad zoologijos sodo gyventojus apibūdina trys komponentai: vardas (20 simbolių eilutė) ir du sveikieji skaičiai (kiek yra suaugusių gyvūnų ir kiek jauniklių). Taigi gyvūną galime aprašyti taip:

Dabar jau galima parinkti duomenų struktūrą visai informacijai apie zoologijos sodo gyventojus laikyti Tam geriausiai tinka įrašas. Tiesa, patogu numatyti papildomus elementus tarpiniams skaičiavimams laikyti - kintamuosius bendram suaugusių gyvūnų ir

Page 161: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

9.4. Pradinių duomenų įvedimas

Žinodami, kaip pradinių duomenų byloje surašyta informacija apie zoologijos sodus be atsižvelgdami į pasirinktas duomenų vaizdavimo struktūras, parašome skaitymo procedūrą S k a i t y t i ir pagrindinės programos dalį, kurioje parašome kreipinį į tą procedūra Pirmasis programos variantas būtų toks.

jauniklių skaičiui. Tada bus lengiau ieškoti atsakymų į kai kuriuos klausimus - nereikė;

skaičiuoti kiek ir kokių gyvūnų yra:

Visų zoologijos sodų duomenims įsiminti geriausiai tinka masyvas:

Page 162: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Jei norime įsitikinti, ar duomenys gerai skaitomi, turime sukurti ir atlikti duomenų spausdinimo ekrane procedūrą. Toliau ji nebus reikalinga, todėl teks pašalinti.

Sudėtingesnėse programose tai padaryti būtina. Galima tokios procedūros ir nerašyti -pradžioje pakaks pasiekti, kad programa su šia procedūra dirbtų, t. y. nebūtų avarinių situacijų. Reikia patikrinti, ar nėra padaryta klaidų ruošiant duomenų bylą. Duomenis reikia surašyti labai atidžiai. Žodžiai turi būti rašomi pagal duomenų tipų aprašymus (mūsų atveju tam skirta 20 pozicijų). Būtina patikrinti, ar skaičiai teisingi ir ar j ie nepatenka į žodžiui skirtas pozicijas. Dažniausiai pasitaikanti klaida yra tuščios eilutės bylos gale. Jų neturi būti!

Programuojant paslaugų veiksmus, teks grįžti prie duomenų skaitymo procedūros, jeigu negausime norimo rezultato. Juk neįsitikinome, kad visi duomenys skaitomi taip, kaip norime.

Duomenų skaitymo veiksmuose nėra apsaugos. Procedūra parašyta tikintis, jog visi duomenys tikrai tilps masyve. Masyvų apimtys nurodytos konstantomis N1 (gyvūnų rūšių skaičius kiekviename zoologijos sode) ir N2 (zoologijos sodų skaičius). Vėliau, kai programa jau gerai dirbs, papildykite skaitymo veiksmus apsauga nuo per didelio duomenų skaičiaus. Pirmiausia reikėtų tikrinti zoologijos sodų skaičių.

9.5. Dialogo priemonės Dabar galima pereiti prie dialogo priemonių. Tai bus programos griaučiai, kuriuos vėliau

užpildysime. Dialogui vesti reikės lango piešimo, paslaugų sąrašo išvedimo ekrane, var-

Page 163: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

totojo apklausos, ką daryti, ir darbo su rezultato langu procedūrų. Pirmiausiai pateiksime tų procedūrų antraštes bei aptarsime, kokius veiksmus jos turi atlikti.

Tai jau ankstesniuose pratimuose vartota procedūra. Ji nupiešia ekrane nurodytom koordinatėmis langą ir nuspalvina nurodyta fono spalva.

procedure Paslaugos;

Ji taip pat sukuria langą, kuriame išveda numeruotą paslaugų sąrašą. Čia reikia susitarti,

kaip parinkti trumpus meniu punktų pavadinimus. Siūlome vartoti šitokius meniu punktus.

Visus meniu punktus galima išvesti tokiais sakiniais:

Tai paprasta. Galima padaryti racionaliau. Visus paslaugų pavadinimus iš anksto surašyti į masyvą, pavyzdžiui, A, o procedūroje parašyti ciklą:

Tokiam masyvui sudaryti reikalingos duomenų struktūros gali buti tokios:

Page 164: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Vienmačio konstantų masyvo aprašymo sintaksė, kaip matote pavyzdyje, paprasta. Aprašomas kintamasis, po to dedamas lygybės ženklas ir skliaustuose paeiliui išvardijamos reikšmės. Reikšmių, šiuo atveju žodžių, turi būti tiek, kiek nurodyta masyvo tipo apraše.

procedure Pasirinkimas (var k : integer); čia k - pasirinktos sąrašo paslaugos numeris.

Procedūroje gali būti tik trys sakiniai: lango piešimas, pranešimas „Įveskite pasirinktos paslaugos numerį" ir ReadLn (k). Tačiau žinoma, kad žmogus gali klysti. Reikėtų patikrinti, ar nurodytas skaičius atitinka nors vieną paslaugą iš nurodytų sąraše. Jeigu ne, tai reikėtų pasiūlyti pakartoti veiksmą

procedure V a l y t i ;

Rezultatams parodyti ekrane reikalingas atskiras langas. Tam bus panaudota procedūra Langas. Pranešimai tame lange bus skirtingi kiekvienai paslaugai, todėl juos šiai procedūrai perduoti netikslinga (nors ir nesudėtinga). Belieka viena bendra sakinių grupė visoms paslaugoms. Tai lango panaikinimo ir perėjimo į pasirinkimo langą veiksmai. Juos šioje procedūroje ir laikysime.

Dabar galime papildyti pagrindinę programą sakiniais, kurie modeliuotų paslaugas, bet dar jų nedarytų. Tai galima realizuoti sakinių grupe, kur k - pasirinkimo numeris.

Patogiau ir vaizdžiau naudoti 'išrinkimo pagal požymį operaciją case:

Išsamiau apie case sakinį rasite kompiuteriniame Turbo Paskalio žinyne arba bet kurioje kalbą aprašančioje literatūroje.

Parašę visas minėtas procedūras ir papildę programą naujais sakiniais, gauname antrąjį programos variatą. Programa atlieka visus parengiamuosius darbus, nors jokios informacijos apie zoologijos sodus dar neteikia - į visas užklausas atsako „Dar nepadaryti darbai".

Page 165: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 166: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 167: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

9.6. Užklausų apdorojimo procedūros Šiame skyrelyje sukursime procedūras, atsakančias į pateiktus klausimus pagal anks

čiau pateiktoje lentelėje numatytus meniu punktus (31 pav.). Kiekvieną naujai sukurtą procedūrą įterpsime į ką tik parašytą programą Z o o l o g i j o s S o d a i _ V 2 bei pagrindinės programos dalies variantiniame sakinyje ( c a s e ) atitinkamoje eilutėje vietoj sakinio W r i t e L n ( ' D a r n e p a d a r y t i d a r b a i ' ) įrašysime kreipinį į šią procedūrą. Pavyzdžiui, parašius procedūrą, atsakančią į pirmąjį klausimą, programos pakeitimai turėtų būti įterpti taip:

Page 168: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Programą po kiekvieno naujo papildymo būtina derinti ir testuoti. Ištaisius klaidas

reikia įsitikinti, ar įvairiems duomenų rinkiniams gaunami teisingi rezultatai. Tam būtina

paruošti reikalingą bylų su pradiniais testavimo duomenimis rinkinį. Kiekvienam testui

paruošiami laukiami rezultatai. Testiniai duomenys turi būti tokie, kad numatytuosius

rezultatus būtų galima nesunkiai suskaičiuoti. Be to, duomenys turi būti parenkami taip,

kad jeigu programos darbo rezultatai nesutaptų su numatytaisiais, tai pagal juos būtų galima

sužinoti, kuri programos vieta neteisinga. Testai ruošiami pagal tam tikrus formalius

metodus, tačiau jie ne visuomet veiksmingi dėl didelio testų skaičiaus ir didelės darbų

apimties. Paprastesnėms programoms testai dažnai sudaromi intuityviai, parenkant artimus

realiems. Su jais patikrinamas programos darbas, tačiau teigti, kad programa visiškai

teisinga, negalima.

Po kiekvieno papildymo gautą programos variantą būtina išsaugoti. Nauji papildymai

atliekami programos kopijoje. Taip daryti būtina, nes paaiškėjus, kad papildymai netinka

mi, tuomet būtų galima pradėti darbą iš naujo. Be to, turimą programos variantą, nors ir

nepilną, galima atiduoti naudotis vartotojui. Tik visiškai įsitikinus, kad nauji papildymai

tinkami ir nebus keičiami, ankstenį programos variantą galima pašalinti.

Testas kuriamai programai ZoologijosSodai yra pateikiamas byloje 'Zoo.txt'.

Laukiami rezultatai paruošiami kiekvienam meniu veiksmui. Galima rezultatus paruošti

ir iš karto visiems veiksmams, kiekvienam naujam veiksmui papildyti. Pateiksime šiai

kuriamai programai numatomų rezultatų pavyzdį.

Page 169: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Dabar aptarsime visus meniu punktus. Kuriant programą nebūtina visus suplanuotus veiksmus programuoti tokia eilės tvarka, kokia jie surašyti. Galima pradėti nuo trumpiausių ir lengviausiai padaromų. Tai aktualu, kai programos užsakovui atiduodamas naudotis dar neišbaigtas programos variantas: kuo daugiau programa daro, tuo vartotojas linksmesnis (ir naudingesnis programuotojui). Pabaigai galima pasilikti sunkiausią veiksmą. Jeigu programą kuria ne vienas žmogus, tuomet, nori ar nenori, veiksmai programuojami ne iš eilės.

Čia meniu punktai aptariami paeiliui kaip surašyta.

Skirtingi gyvūnai

Ši procedūra turi nustatyti, kiek skirtingų pavadinimų gyvūnų yra zoologijos soduose. Tai reiškia, kad reikia peržiūrėti visus sodus ir suskaičiuoti, kiek skirtingų gyvūnų pavadinimų yra. Tai ir bus atsakymas. Procedūrai parametrais turi būti perduodamas visų zoologijos sodų gyvūnų sąrašas (pažymėkime jį kintamuoju A), zoologijos sodų skaičius (kintamasis n) bei rezultatas - bendras gyvūnų skaičius (kintamasis g).

Page 170: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Iš viso gyvūnų

Suskaičiuoti, kiek zoologijos soduose iš viso yra gyvūnų (bendras suaugusių ir jauniklių skaičius), yra labai paprasta - kaip pamename iš duomenų struktūrų aprašų, informacija apie kiekvienos rūšies gyvūnų suaugusius ir jauniklius laikoma įrašo Sodas laukuose sg ir j m. Tad tereikia susumuoti juos visus.

Procedūrai parametrais turi būti perduodamas visų zoologijos sodų gyvūnų sąrašas (masyvas A), zoologijos sodų skaičius (kintamasis n) bei rezultatas - bendras gyvūnų skaičius (kintamasis k).

Page 171: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Suaugusieji ir jaunikliai

Parašysime procedūrą, skirtą suskaičiuoti, kiek zoologijos soduose yra suaugusių gyvūnų ir kiek jauniklių (prieauglio). Reikia susumuoti A masyvo sg ir j g laukų skaičius atskirai. Procedūra labai panaši į KiekGyvena:

Kur rasti?

Parašysime procedūrą, skirtą nustatyti, kuriuose zoologijos soduose yra mus dominantis gyvūnas, ir kiek tokių gyvūnų tuose soduose yra.

Šį kartą užduotis truputį sunkesnė negu buvo ik i šiol. Pirmiausia turime paprašyti, kad būtų įvestas ieškomo gyvūno pavadinimas (tai padaryti nesunku). Kebliausia yra tai, kad nežinome, kiek rezultatų bus. Čia siūlome paprasčiausią variantą - informaciją apie sodą išspausdinti pačioje procedūroje, t. y. neperduoti rezultatų į pagrindinę programą.

Gyvūno paieška soduose nesunki - kiekvieno sodo sąraše G ieškoma įvesto gyvūno pavadinimo. Radus jį - išvedamas sodo pavadinimas ir kiek yra tos rūšies suaugusių gyvūnų bei jauniklių. Neradus nė vieno ieškomo gyvūno, turi būti išvedamas pranešimas, kad tokio gyvūno nė viename sode nėra.

Page 172: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Visi gyvūnai Parašysime procedūrą, pateikiančią ekrane zoologijos soduose esančių gyvūnų sąrašą.

Lengviausia pasikartojančių gyvūnų pavadinimų išvengti sudarius papildomą masyvą, kuriame būtų saugomas suvestinis gyvūnų sąrašas. Gyvūnų pavadinimams laikyti galime panaudoti masyvą, kurio tipas - forma - ir kurio elementai - g y v i s - yra įrašai. Gyvūnų pavadinimus į naująjį masyvą surašysime taip: imsime kiekvieno zoologijos sodo gyvūnų sąrašus (įrašo Sodas laukas G) ir iš jų į naująjį masyvą įrašysime tik tuos gyvūnų pavadinimus, kurių jame dar nėra (pavyzdžiui, jei tigras yra ne viename sode, tai į naująjį masyvą tigrą įtrauksime tik pirmą kartą; radus tigrų kituose soduose, padidinsime tik suaugusių bei jauniklių skaičių). Gautus rezultatus taip pat išspausdinsime ir jų į pagrindinę programos dalį neperduosime.

Kiek sodų? Zoologijos sodų skaičių nustatyti labai paprasta - jau skaitant iš pradinių duomenų

bylos suskaičiuojama, kiek jų yra. Tad mums net nereikalinga papildoma procedūra. Pakanka išspausdinti, kiek elementų turi masyvas B (taip pavadintas kintamasis pagrindinėje programoje). Tai kintamojo n reikšmė.

Page 173: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Jaunikliai Nustatyti, kuriame zoologijos sode daugiausia jauniklių, galima taip: kaip jau minė

ta anksčiau, zoologijos sodą aprašančiame įraše yra sg ir j g laukai (suaugusių gyvūnų ir jauniklių tame sode skaičiai). Mums tereikia surasti įrašą, kurio j g lauko reikšmė didžiausia.

procedure J a u n i k l i a i (var A : Vis iSodai; n : integer; var g : integer);

var i : integer; begin

g := i ;

Daugiausiai gyvūnų Nustatyti, kuriame zoologijos sode daugiausiai gyvūnų nesunku - zoologijos sodą ap

rašančiame įraše yra sg ir j g laukai (suaugusių gyvūnų ir jauniklių tame sode skaičiai Mums tereikia rasti įrašą, kurio minėtų laukų suma didžiausia.

Šioje procedūroje neatsižvelgta į tai, kad duomenų sąrašas gali būti tuščias. Tai turėtų būti padaryta pagrindinėje programoje. Jeigu duomenų masyve nėra, tai reikia visai neatlikinėti skaičiavimų, tik pranešti, kad jokių duomenų apie zoologijos sodus nėra.

Daugiausiai skirtingų Nustatyti, kuris sodas turi daugiausiai skirtingų gyvūnų, taip pat nesunku - reikia per

žiūrėti sodų sąrašą ir surasti, kurio sodo gyvūnų sąrašo masyvas turi daugiausiai elementų. Tai ir bus atsakymas.

Page 174: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Sodo gyventojai

Parašysime procedūrą, pateikiančią ekrane vieno zoologijos sodo gyvūnų sąrašą. Pirmiausia turime paprašyti įvesti zoologijos sodo pavadinimą. Toliau reikia patikrinti, ar toks sodas yra (palyginti įvestą pavadinimą su zoologijos sodų masyvo elementų laukais Zoo). Neradus ieškomo sodo pavadinimo, pranešti, kad tokio sodo nėra, radus - išvesti rasto įrašo lauko G duomenis.

9.7. Galutinė programa

Pagaliau sukurta viskas, ko užduotyje reikalaujama. Kaip pastebėjote, programą kūrėme pažingsniui: po kiekvieno žingsnio (t. y. sukūrus naują procedūrą) turėdavome nors ir ne viską, kas numatyta užduotyje, atliekančią, bet veikiančią programos versiją. Iš pradžių ji neteikė jokios informacijos (tik dialogas buvo), vėliau po truputį teikiamų paslaugų daugėjo. Bet kuriuo metu turimą versiją buvo galima atiduoti vartotojui.

Atskirų programos dalių - funkcijų ir procedūrų - tarpusavio ryšiai pavaizduoti 31 paveiksle pateiktoje schemoje. Joje akivaizdžiai matyti, ką galima programuoti lygiagrečiai (t. y. vienu metu atskiriems programuotojams), kurias dalis pakeitus ką būtina taip pat atitinkamai pakeisti. Tai patogus programų kūrimo būdas.

Page 175: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Programa nėra tobula. Panagrinėję rasite daug vietų, kurias galima parašyti tobuliau. Nenusiminkite, jeigu ne iš karto tai pamatysite. Įgavę daugiau patirties, nesunkiai tai pastebėsite. Jei ne viską iš karto suprasite, praleiskite. Juk paslaugų skaičius ir jų sudėtingumas priklauso nuo jūsų. Svarbu, kad suprastumėte dialogo sukūrimo principą. Tai ypač svarbu kuriant šiuolaikines programas.

Pateikiame galutinį visos programos tekstą (t. y. surenkame iš visur į vieną vietą viską, kas reikalinga zoologijos sodų programai).

Page 176: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 177: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 178: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 179: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 180: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 181: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

9.8. Programos modifikacija Parašyta programa jau turi daugiau kaip 300 eilučių. Tokią ilgą programos bylą tvarkyti

nepatogu. Daug patogiau dirbti su mažesnės apimties programų tekstais. Programuojant Turbo Paskaliu galima saugoti programą keliose bylose. Tai vartotojo moduliai. Jų struktūra ir panaudojimas yra toks pat kaip ir Crt, Dos ir kt. Programa skaidoma į modulius ne tik patogumui: labai ilgų programos tekstų kompiliatorius nepajėgia tvarkyti. Moduliai naudingi, kai programą kuria ne vienas žmogus.

Kuriant programas pastebima, kad dalis paprogramių pradeda kartotis. Jas nesunku perkelti iš vienos programos į kitą, tačiau tai papildomas darbas. Geriau sukaupti jas atskirose bylose ir kuriamoje programoje tik nurodyti tas bylas. Labai patogu ne tik ku-

Page 182: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

riamos programos tekstą saugoti keliose bylose, bet ir dažniausiai vartojamas priemones

(ne tik procedūras ir funkcijas) saugoti atskirose bylose, grupuojant pagal paskirtį ar kito

kius programuotojo pasirinktus požymius. Visos bylos užrašomos su priedėliu pas, tačiau

tik pagrindinės programos tekstas pradedamas žodžiu p r o g r a m . Kitose bylose tekstas

pradedamas žodžiu u n i t .

Programinio modulio struktūra tokia:

Modulio vardas. Tai kartu ir bylos vardas Rasa.pas

Ryšio dalies su kitomis programomis aprašymo pradžia. Čia surašomi duomenų tipai, kintamieji, paprogramių antraštės, t. y. visa, kas bus reikalinga kitoms programoms.

Ryšio dalies pabaiga. Modulio priemonių realizacija.

Čia surašomi paprogramių tekstai, kurių antraštės buvo surašytos ryšio dalyje. Pilnų antraščių kartoti nebūtina. Jeigu reikia, tai surašomi duomenų tipai, kintamieji ir kitos paprogramės, kurias vartoja ryšio dalyje nurodytos paprogramės. Reikia žinoti, kad čia naujos surašytos priemonės gali būti naudojamos tik šioje dalyje (yra lokalios modulyje) ir jomis negalės pasinaudoti kitos programos.

Čia gali būti rašomas programos tekstas. Juo nurodyti veiksmai atliekami prieš pagrindinės programos darbo pradžią. Jeigu programa vartoja daug modulių, tomet čia rašomi tekstai vykdomi modulių prie programos prijungimo seka. Jeigu šioje dalyje nieko nerašoma, tuomet žodį b e g i n galima praleisti.

Modulio byla prijungiama prie programos sakinyje uses užrašant bylos vardą taip pat,

kaip ir standartinių modulių vardus.

Dirbant su Turbo Paskaliu, nebūtina atskirai kompiliuoti modulio teksto. Paleidus vyk

dyti pagrindinę programą, Turbo Paskalio terpė pati tai padarys ir sukurs modulį, paruoštą

vartoti su priedėliu t p u .

Page 183: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 184: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 185: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 186: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 187: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 188: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 189: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pagrindinėje programoje belieka tik organizuoti veiksmus. Čia taip pat galima kai ką pakeisti, pavyzdžiui, veiksmus cikle įforminti atskira procedūra. Gauta programa yra patogesnė, nes jos tekstas labiau struktūrizuotas, lengviau rasti reikiamas vietas, patogiau papildyti programą naujomis savybėmis.

Page 190: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

9.9. Pirmoji programos meniu modifikacija Programoje dialogas organizuotas vartotojui nepatogiai - reikia pasirinkto veiksmo nu

merį teisingai surinkti klaviatūra. Geriau būtų žymekliu pasirinkti (nurodyti) norimą veiksmą. Tam reikia mokėti klavia

tūra valdyti žymeklio padėtį ekrane. Patogiausia naudoti krypčių klavišus •<—, f, - > , į

(nors galima susitarti naudoti bet kuriuos kitus). Klavišai koduojami vieno arba dviejų baitų skaičiais. Informaciniai klavišai (raidės,

skaitmenys, ženklai) ir kai kurie kit i (pvz., Esc, Enter) koduojami vienu baitu. Valdymo klavišai dažniausiai koduojami dviem baitais, kurių pirmojo reikšmė yra nulis. Paaiškinsime, kas vyksta įvedant duomenis klaviatūra. Paspaudus klavišą generuojamas jo kodas, kuris įrašomas į įvedimo buferį (t. y. į specialiai įvedimui skirtą atmintinės vietą). Reikšmes iš buferio galima skaityti standartine Read (ReadLn) procedūra 'arba CRT modulio ReadKey funkcija. ReadKey skaito tik vieno baito reikšmę ir neparodo jos ekrane (Read procedūra parodo ekrane perskaitytą reikšmę). Perskaitytos reikšmės iš buferio pašalinamos.

Page 191: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Žymekliui valdyti turime GoToXY procedūrą. Panaudosime šias priemones naujam dialogui sukurti.

Žymeklis ekrane matomas neaiškiai. Reikėtų žymekliu rodomą vietą išskirti kokia nors kita spalva. Taip žymeklio buvimo vieta bus labiau pastebima.

Mūsų programos dialogo dalį teks truputį pakeisti - reikės pertvarkyti procedūrą P a s i r i n k i m a s .

Page 192: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pagrindinėje programoje reikia atlikti keletą pakeitimų. Vienas jų - nurodyti pradinio pasirinkto meniu punktą. Ankstesnėje programos versijoje reikšmę klaviatūra nurodydavo vartotojas. Šioje versijoje programuotojas nurodys žymekliu. Pradinė jo padėtis turi būti apibrėžta programoje.

Procedūrą Darbas galima truputį pakeisti, atsisakant loginio kintamojo Pabaiga .

Page 193: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 194: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

9.10. Antroji programos meniu modifikacija Žaismingesnis ir vaizdesnis meniu bus naudojant langelius, t. y. išskiriant kiekvieną

meniu punktą spalvotu langu. Pasirenkant metu punktą, keičiamas to lango fonas. Tai reiškia, kad langas su jame esančiu pranešimu bus kuriamas iš naujo (kaip ir anksčiau naujai perrašoma).

Langų koordinates fiksuoti programos tekste nepatogu, juoba kad jos reikalingos ne vienoje vietoje (pradinio vaizdo piešimas ir pasirinkimas). Patogiausia jas laikyti masyve. Masyvui formuoti yra daug būdų (iš bylos, priskyrimo veiksmais, konstantų masyvas).

Patogiausias yra konstantų masyvas. Reikia sukurti masyvų tipus, tinkamus langų charakteristikoms surašyti. Langą nusako penki parametrai: vietos ekrane koordinatės (keturi skaičiai) ir fono spalva. Tai bus masyvas.

Langų bus daug. Galima sukurti langų masyvą, t. y. masyvą, kurio elementai bus masyvai. Tai rasite programos pavyzdyje. Vartojant tokį masyvą bus naudojami du indeksai, atskirti kableliu. Pirmasis nurodys langą, o antrasis to lango konkrečią koordinatę ar spalvą.

Meniu organizavimo priemonės pakinta, bet pagrindinė programa lieka nepakitusi. Pakeitimai paryškinti.

Page 195: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 196: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kaip pastebite, dialogo priemonės nedaug tepasikeitė, tačiau vaizdas ekrane visai kitoks. Dabar, kai principas aiškus, galite sukurti kitokio vaizdo meniu struktūras. Galima kurti

horizontalias langų eilutes, kitaip komponuoti. Analogiškai galima padaryti keleto pakopų meniu struktūras.

9.11. Trečioji programos meniu modifikacija Visos šiuolaikinės programos pateikia į ekraną grafiniu režimu. Tai daug naujų galimy

bių, nes programuotojas gali dirbti ekrane su kiekvienu tašku atskirai. Tekstiniame ekrane mažiausias programuotojui prieinamas ekrano elementas buvo simbolis.

Siame skyrelyje pateikiama programos apie zoologijos sodus modifikacija su grafiniu ekranu. Prieš tai būtinai perskaitykite 10 skyrių.

Pristatome modulius, kuriuose buvo daryti pakeitimai.

Norint grafiniame ekrane rašyti lietuviškai, reikia turėti šriftų bylą (su priedėliu c h a r ) , kuriai įdiegti konkrečiai programai grafiniu režimu yra speciali procedūra. Galima pasidaryti savo priemones iš taškų, piešiančias simbolių sulietuvinimo elementus: varneles, nosines, brūkšnelius ir kt. Čia pateikiame programų tekstus be lietuviškų simbolių. Nestandartinės dalys paryškintos.

Page 197: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 198: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 199: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 200: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 201: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 202: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 203: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 204: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kontrolinės užduotys

1. Mūsų sukurtoje programoje dar trūksta keleto formalių, tačiau būtinų dalykų - darbo pradžioje ji savęs nepristato, pabaigoje - neatsisveikina. Parašykite tam skirtas procedūras ir papildykite programą jomis.

2. Labai lengva suklysti kuriant pradinių duomenų bylą Zoo. t x t , nes jos duomenys yra susiję vieni su kitais - po zoologijos sodo pavadinimo nurodoma, kiek skirtingų gyvūnų yra tame sode ir po to tiek eilučių privalo būti apie gyvūnus. Praleidus bent vieną gyvūną ar neteisingai nurodžius skirtingų gyvūnų skaičių, informacija apie visus tolesnius zoologijos sodus bus neteisinga (iš tikrųjų netgi gali būti nutrauktas programos vykdymas). Atsisakykime skaičiaus, nurodančio, kiek skirtingų gyvūnų yra zoologijos sode ir vieno sodo informaciją nuo kito sodo informacijos atskirkime tuščia eilute. Kitos informacijos nekeiskime. Tuomet užduoties apie zoologijos sodus formuluotėje pateiktas pradinių duomenų pavyzdys turėtų būti toks:

Tokiam atsakymui išvesti parašykite atskirą procedūrą, įterpkite ją į programą, suderinkite programą ir papildykite 31 pav. pateiktą schemą.

4. Meniu punktai, kuriais teikiama informacija apie konkretų gyvūną bei zoologijos sodą, būtų efektyvesni, jeigu pasufleruotų, kokie gyvūnai ir kokie zoologijos sodai yra duotame sąraše. Tada programos vartotojui nereikėtų spėlioti. Reikėtų sukurti suflerio langą ir keletą naujų procedūrų duomenims gauti. Padarykite tuos pakeitimus.

Parašykite naują duomenų įvedimo procedūrą, kuri skaitytų taip sutvarkytos pradinių duomenų bylos informaciją.

3. Pakeiskite visų rezultatų išvedimą taip, kad skaitvardžių ir greta parašytų žodžių junginių linksniai būtų suderinti. Pavyzdžiui, atitinkamai gyvūnų skaičiui atsakymas į pirmąjį klausimą turėtų būti pateikiamas taip:

Page 205: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

5. Sugalvokite naujų paslaugų, kurių neteikia parašytoji programa. Sukurkite procedūras, teikiančias šias paslaugas. Galite pakeisti (papildyti) turimas duomenų struktūras (pavyzdžiui, papildyti naujais laukais).

Savarankiško darbo užduotys 1. Kauno mieste yra daug troleibusų maršrutų ir daug stotelių, kuriose jie sustoja. Duo

menys surašyti tekstinėje byloje, nurodant kurioje stotelėje kokio maršruto troleibusai sustoja. Vienos stotelės duomenys vienoje eilutėje: stotelės pavadinimas ir toliau iki eilutės galo maršrutų numeriai (sveiki skaičiai). Reikia sukurti dialoginę programą, kuri:

- pateiktų ekrane duomenis apie miesto transporto sistemą:

- kiek mieste yra stotelių;

- kiek mieste yra maršrutų;

- nurodytos stotelės duomenis (maršrutų numerius);

- nurodyto maršruto duomenis (kokiose stotelėse sustoja);

- stotelės, kurioje daugiausiai skirtingų maršrutų troleibusų sustoja, pavadinimą;

- ilgiausio maršruto numerį (aptarnaujama daugiausiai stotelių); jeigu tokių yra keletas, tai išvardyti visus;

- pasakytų, ar visos stotelės sudaro vieningą transporto schemą, t. y. ar yra galimybė su persėdimais arba tiesiogiai patekti iš bet kurios stotelės į bet kurią kitą. Jeigu taip nėra, tai suskirstytų stoteles į nepersidengiančias grupes pagal priklausomybę atskiroms transporto zonoms.

- Patartų keleiviui, kaip nuvažiuoti iš stotelės SI į stotelę S2 (pavadinimai nurodomi klaviatūra). Jeigu negalima, praneštų „NEGALIMA", kitaip reikia nurodyti kelionę su persėdimais arba be jų:

- jeigu yra keletas variantų, tai nurodomas tik vienas;

- jeigu yra keletas variantų, tai pateikiami visi;

- pateikiamas vienas tik be persėdimų maršrutas;

- pateikiami visi be persėdimo maršrutai;

- nurodomas „pigiausias maršrutas" (minimalus persėdimų skaičius).

2. Pirmąjį uždavinį papildykite duomenimis, nurodančiais, kiek kokiu maršrutu vienu metu kursuoja troleibusų. Sugalvokite, kokius papildomus duomenis apie transporto sistemą būtų galima pasiūlyti programos vartotojui. Sukurkite naują programos versiją.

3. Turime firmos „Uosis" automobilių parko sąrašą. Apie kiekvieną automobilį yra tokie duomenys: markė, rida ik i kapitalinio remonto, svoris, gabaritai, variklio galia, 100 km suvartojamo kuro kiekio, maksimalus greitis, vietų skaičius, pagaminimo data, koks atstumas nuvažiuotas. Sukurti dialoginę programą informacijai apie turimus automobilius gauti.

4. Žinome Lietuvos tarpmiestinių autobusų tarp įvairių miestų maršrutus. Duomenys apie maršrutus surašyti tekstinėje byloje ' M i e s t a i . d a t ' struktūrizuotomis eilutėmis.

Page 206: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kiekvienam maršrutui skiriama viena eilutė: maršruto kodas (bet koks sveikasis teigiamas skaičius, užrašytas pirmosiose 5-iose eilutės pozicijose), toliau miestų pavadinimai (kiekvienam iš jų skiriama po 15 eilutės pozicijų). Vardai rašomi iš didžiosios raidės. Pavyzdžiui:

Reikia parašyti dialoginę programą, kuri pateiktų keleiviui reikalingus duomenis apie galimas keliones.

Page 207: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Realistai tapė pasaulį tokį, koks jis yra, impresionistai kokį jie matė, aš vaizduoju jį taip, kaip suprantu.

10. Kompiuterinė grafika Klaviatūra ir ekranas nėra pagrindinės priemonės, kuriomis programos vartotojas per

duoda pradinius duomenis ir gauna rezultatus; tam skirtos bylos. Tačiau ekranas ir klaviatūra yra žmogaus bendravimo su programa priemonės. Žmogus klaviatūra surenka programai nurodymus ir pageidavimus, programa ekrane pateikia reikalingą informaciją. Programos bendravimas su vartotoju yra efektyvesnis, kai naudojamos spalvos ir garsai, duomenys išdėstomi ekrane ne nuosekliai eilutėmis, bet įvairiose ekrano vietose ir pan.

Tekstiniame ekrane mažiausia vaizdo kuriamoji dalelė yra simbolis. Kur kas daugiau galimybių teikia grafinis ekranas. Čia mažiausia kuriamoji dalelė yra taškas (žinomos jo koordinatės ekrane ir spalva).

Šiame skyriuje bus supažindinama su darbu grafiniame ekrane. Pateiksime programų pavyzdžių, iliustruojančių kai kuriuos darbo su grafika veiksmus. 5-ame priede rasite modulio Graph. tpu pagrindinių priemonių sąrašą.

10.1. Ekrano paruošimas darbui Norint dirbti grafiniu režimu, pirmiausia reikia paruošti kompiuterio ekraną. Tam yra

specialios priemonės. Ekrano grafinio darbo režimą nusakantys parametrai laikomi specialiose * . b g i tipo bylose. Grafinių priemonių biblioteka saugoma Graph. tpu byloje. Kompiuterio ekraną darbui grafiniu režimu paruošia procedūra InitGraph, kurios antraštė tokia:

procedure InitGraph (var GraphDriver : integer; var GraphMode : integer; DriverPath : string);

Kintamojo GraphDriver reikšmė nurodo procedūrai, koks bus ekrano grafinės tvarkyklės numeris. Standartinį tvarkyklės numerį nusako konstanta Detect = 0.

Kintamasis GraphMode nusako ekrano formatą: taškų skaičių, spalvas ir jų skaičių, grafinių puslapių skaičių. Jei reikšmė nenurodyta, tai parenkama standartinė numatytoji reikšmė.

Pablas Pikase

Page 208: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

DriverPath nurodo katalogą (t. y. kelią ik i to katalogo), kuriame saugoma tvarkyklės byla.

Standartinės konstantos GrOK reikšmė nurodo, ar tinkamai paruoštas sutvarkytas grafinis ekranas.

Ar tinkamai ir sėkmingai paruoštas kompiuterio ekranas darbui su grafika, galima patikrinti funkcija GraphResult, kurios rezultatas yra reikšmė, rodanti, ar sėkmingai buvo suaktyvintas grafinis ekrano darbo režimas. Iš reikšmės (sveikasis skaičius) nustatoma galimos nesėkmės priežastis (žr. 6-ą priedą).

Ekrano atskaitos tašku laikomas kairysis viršutinis ekrano kampas, kurio koordinatės yra (0,0). Ekrano galimybes riboja aktyvaus ekrano taškų skaičius horizontalia ir vertikalia kryptimis. Tai galimos didžiausios X ir Y koordinačių reikšmės. Jų reikšmes pateikia funkcijos GetMaxX ir GetMaxY.

Ekrano aktyviąją spalvą nurodo procedūra: procedure SetBkColor (spalva : word); Ekraną valo (iš tikrųjų spalvina nurodyta spalva) procedūra ClearDevice. Numatytoji

standartinė fono spalva yra juoda. Visoms programoms, dirbančioms grafiniame ekrane, reikia jį paruošti. Geriausia vi

sus tuos veiksmus įforminti procedūra. Sio skyriaus pratimuose bus vartojama procedūra Ekranas. Jos tekstas įrašytas modulyje Grafika. Si procedūra paruošia kompiuterio ekraną darbui su grafika bei pateikia didžiausią galimą taškų skaičių: dx horizontalia kryptimi ir dy - vertikalia kryptimi. Ekrano grafinis režimas parenkamas automatiškai. Grafinių tvarkyklių katalogas nurodomas konstanta Vieta. Jei dėl kokių nors priežasčių nepavyko paruošti ekrano darbui, tai tekstiniame ekrane spausdinamas pranešimas ir tolesnis programos darbas nutraukiamas. Kreipinio į procedūrą pavyzdys:

Ekranas (didX, didY). Ekrano spalva juoda, žymeklis - viršutiniame kairiajame ekrano kampe, jo koordinatės

(0, 0), jis nerodomas (paslėptas).

Page 209: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Šis modulis įrašytas byloje Grafika.pas, kuri turi būti programuotojo aktyviajame kataloge (kartu su rašoma programa). Byla prijungiama prie programos sakiniu uses. nurodant bylos vardą taip pat, kaip ir standartinių modulių vardus.

Dirbant su Turbo Paskaliu, atskirai kompiliuoti modulio teksto nebūtina. Paleidus vykdyti pagrindinę programą, Turbo Paskalio terpė pati sukompiliuos modulius ir sukurs paruoštą vartoti modulį (Grafika, tpu).

Pastaba. Turbo Paskalis sukurtas dirbti su diskine operacine sistema DOS. Kitose operacinėse sistemose gali būti nepatogu dirbti su šia DOS grafika (dažnai vadinama dar b g i grafika). Siūlome perkelti iš Turbo Paskalio BGI katalogo reikalingas tvarkykles (* .bgi) ir šriftus (*.chr) į savo programos aktyvųjį katalogą. Iš pradžių pakanka standartinės tvarkyklės EgaVga.bgi.

10.2. Darbo su grafika pabaiga Baigus darbą su grafika, būtina išeiti iš grafinio režimo. Tai daroma su neturinčia

parametrų procedūra CloseGraph. Vykdant šią procedūrą išlaisvinama atmintinė, skirta grafinėms tvarkyklėms, šriftų byloms, tarpiniams duomenims, taip pat atstatomas toks vaizdo plokštės režimas, koks buvo prieš pradedant darbą su grafika.

10.3. Koordinačių sistema Vaizdams kurti ekrane naudojama koordinačių sistema. Skaičiuoti pradedama nuo vir

šutinio kairiojo ekrano kampo, kurio koordinatės (0, 0). X reikšmė (stulpelis) didėja iš kairės į dešinę, Y reikšmė (eilutė) didėja iš viršaus į apačią. Piešiant vaizdus ekrane būtina sekti, kad piešinio taškai būtų ekrane, t. y. būtina tikrinti, ar koordinačių reikšmės neviršija galimų didžiausių X ir Y koordinačių.

Norint piešti vaizdą, būtina nurodyti bent jau pradinį tašką. Tekstiniu režimu šį tašką nurodo ekrane esantis žymeklis (jei jo nebuvome tyčia pašalinę). Grafiniame ekrane žymeklis nerodomas.

Žymekliui perkelti grafiniame ekrane naudojamos kelios procedūros ir funkcijos. Pačios būtiniausios - MoveTo ir MoveRel.

Procedūra MoveTo (X, Y) perkelia aktyvųjį žymeklį į tašką (X, Y). Pavyzdžiui, įvykdžius procedūrą MoveTo (200, 100), žymeklis bus perkeltas į tašką (2 00, 100).

Procedūra MoveRel (dX, dY : integer) perkels žymeklį per dX taškų horizontalia kryptimi ir per dY taškų vertikalia kryptimi. Taigi įvykdžius procedūrą MoveRel (5, 10)

žymeklis bus perkeltas iš taško (2 0 0, 100) į tašką (205, 110). Dažnai būtina nustatyti žymeklio koordinates ekrane. Tam naudojamos funkcijos Getx

ir GetY, kurios nurodo žymeklio X ir Y koordinates, pavyzdžiui:

Page 210: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.4. Veiksmai su ekranu Ekrane gali būti kuriami langai. Tai analogija langams tekstiniame ekrane. Primename,

kad langas - tai stačiakampė ekrano sritis, atliekanti visas ekranui būdingas funkcijas. Nustačius langą, visa likusioji ekrano sritis tarsi nebeegzistuoja ir visi veiksmai su ekranu vyksta tik tame lange. Kiekvienu konkrečiu momentu gali būti aktyvus tik vienas langas. Jeigu yra keletas langų, tai jų aktyvumą tvarko programuotojas.

Kol kitaip nenurodyta, langas užima visą ekraną. Tai automatiškai padaro pradžioje panaudota procedūra InitGraph.

Norint ištrinti visus vaizdus ekrane, t. y. išvalyti ekraną, naudojama procedūra C l e a r D e v i c e , kuri yra be parametrų. Ją įvykdžius panaikinamos visos spalvos, fono ir langų parinktys, o žymeklis atsiranda taške (0, 0).

Laneui sukurti naudoiama procedūra:

čia ( x l , y l ) - kairiojo viršutinio taško koordinatės, o (x2, y 2 ) - dešiniojo apatinio taško koordinatės. Kintamasis C l i p nurodo, ar piešinėlis bus nukerpamas, kai išeinama už lango ribų ( C l i p := True), ar ne ( C l i p := Falše). Sukūrus langą atskaitos tašku imamas viršutinis kairysis lango kampas, kurio vidinės koordinatės (0, 0).

Koordinačių sistemą visame ekrane galima nustatyti naudojant p r o c e d ū r ą C l e a r D e v i c e arba lango kūrimo procedūroje užrašius didžiausias galimas reikšmes:

SetViewPort (0, 0, GetMaxX, GetMaxY, True);

Aktyvaus lango atributus galima gauti procedūra GetViewSettings (var Vp : ViewPortType).

Kintamasis Vp yra standartinio tipo ViewPortType:

Reikėtų priminti, kad panaudojus fono nustatymo procedūrą SetBkColor bei ištrynimo procedūrą ClearViewPort, grafinių langų, skirtingai nuo tekstinių, fonas pasikeičia (kartu su bendru ekrano fonu). Todėl grafiniam lango fonui nustatyti geriau pasirinkti procedūras S e t F i l l S t y l e i r S e t F i l l P a t e r n .

10.5. Taškai ekrane Visi ekrane pateikiami vaizdai sudaryti iš taškų. Taigi iš taškų galime sudaryti bet

cokias figūras, net paveikslus. Taškui ekrane pateikti vartojama procedūra:

čia X ir Y — taško padėties ekrane koordinatės, Spalva - taško spalva. Spalvų kodai (arba pavadinimai) yra tokie pat kaip ir tekstiniame ekrane.

Kai norime sužinoti konkretaus taško spalvą, kreipiamės į funkciją:

Page 211: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.1 pratimas. Kompiuterio ekrane dėliojami taškai. Taškų koordinatės ir spalva parenkami atsitiktinių skaičių generatoriumi. Taškai turi būti ne tolygiai dėliojami visame ekrane, o koncentruojami ekrano centre, todėl koordinatės sutankinamos. Kiekvienas taškas atsiranda ekrane padaugintas simetriškai keturis kartus. Ekrane gauto spalvoto vaizdo nespalvotas paveikslas parodytas 32 pav.

Page 212: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.2 pratimas. Reikia iš taškų sukurti įvairias geometrines figūras. Atsitiktinių

skaičių generatoriumi generuojamos taškų koordinatės. Jeigu jos yra nurodyto apskritimo viduje, tai taškas dedamas, kitaip - nededamas. Spalva vienoda. Pirmiausia sukuriamas spalvotas skritulys. Po to analogiškai piešiamas stačiakampis. Kad vaizdas būtų gražesnis ir spalva intensyvesnė, figūros centro atžvilgiu dedamas ne vienas, o keturi simetriški taškai (33 pav.).

Page 213: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.6. Linijų brėžimas Liniją ekrane atitinka tiesės atkarpa. Ją nusako galų taškų koordinatės (x, y ) . Brėžiamą

liniją apibūdina tokie parametrai: spalva, tipas ir storis. Šie parametrai nurodomi atskirai

Page 214: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

ir galioja visoms brėžiamoms atkarpoms tol, kol jų nepakeisime naujais. Linijų spalvą nustato procedūra S e t C o l o r , kur spalva nurodoma jos kodu 0. . 15 arba konstantos pavadinimu.

p r o c e d u r e S e t C o l o r ( s p a l v a : word);

Linijos tipas ir storis nurodomas procedūra S e t L i n e S t y l e :

S e t L i n e S t y l e ( t i p a s , kodas, s t o r i s : word) ;

Linijos t i p a s nurodomas linijos tipo numeriu 0 . . 3 arba konstantos vardu, kuris atitinka tą numerį. Parametro kodas reikšmė paprastai rašoma 0, nes standartiniam linijos tipui kodas nereikalingas. Parametro s t o r i s reikšmė gali atitikti vieno taško (rašome 1) arba trijų taškų (stora linija; rašome 3) užimamą vietą.

Jeigu programuotojas linijos formą sukūrė pats, tuomet parametro t i p a s reikšmė nurodoma numeriu 4. Būtina nurodyti sukurtos linijos formą įvedus parametrą kodas. Jį sudaro atkarpos fragmentas, kuris telpa 16 bitų žodyje. Jeigu bito reikšmė lygi 1, tuomet naudojama taško spalva, o jeigu 0, tuomet lieka fono spalva (tokia, kokia buvo). Pavyzdžiui:

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 $ F F F F

1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 $AAAA

1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 $ F 2 4 9

K o d a s užrašomas šešioliktainiu skaičiumi.

Linijoms brėžti yra keletas procedūrų. Pagrindinė yra L i n e :

L i n e ( X I , Y l , X2, Y2 : i n t e g e r ) ;

čia ( X I , Y l ) - linijos pradžios koordinatės, o (X2, Y2) - pabaigos koordinatės.

10.3 pratimas. Kompiuterio ekrane brėžiamos linijos. Jos atitinka programuotojo sukurtą linijos tipą (34 pav.).

Page 215: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.7. Geometrinės figūros. Figūrų spalvinimo raštai GRAPH bibliotekoje yra daug procedūrų, kuriančių įvairiausias figūras pagal nurodytus

parametrus. Geometrinėms figūroms - stačiakampiui, apskritimui bei jo lankui, elipsei bei jos lankui - piešti pateiktos procedūros. Linijų, kurios apibrėžia figūrą, spalva nurodoma procedūra SetColor. Linija būna ištisinė. Stačiakampiui galima nurodyti linijos tipą naudojantis procedūra SetLineStyle. Gauto uždaro kontūro figūra gali būti užpildyta pasirinktu raštu, kurio spalva ir raštas nurodomi atskirai. Pilnavidurėms figūroms -stačiakampiams bei stačiakampiams gretasieniams - piešti yra dvi procedūros:

Page 216: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pirmoji procedūra piešia stačiakampius be kontūrų, užpildytus aktyvia spalva. Antroji procedūra piešia gretasienį, kurio trečioji koordinatė yra z (brėžiama linija 45° kampu). Jeigu kintamojo viršus reikšmė yra Falše, tuomet gretasienio viršaus stačiakampis nebus nubrėžtas, jeigu True - bus nubrėžtas. Priekinė figūros dalis bus nuspalvinta (pilnavidurė), o kitos dalys tuščiavidurės. Linijų spalvos nurodomos naudojant procedūrą SetColor, forma - naudojant SetLineStyle.

35 pav.

10.4 pratimas. Kompiuterio ekrane piešiamos įvairios geometrinės figūros. Demonstruojamas geometrinių figūrų piešimo procedūrų darbas (35 pav.).

Page 217: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Nubraižytą uždarą kontūrą (sudarytą iš linijų) galima užpildyti tam tikros spalvos raštu. Užpildo parametrai nurodomi atskirai procedūra S e t F i l l S t y l e :

SetFillStyle (raštas, spalva : word); Raštas nurodomas jo numeriu: nuo 0 i k i 11. Jeigu norime naudoti savo sukurtą raš

tą, tuomet nurodome 12. Figūrai užpildyti nurodytu raštu ir nurodyta spalva naudojama procedūra F l o o d F i l l , kurioje parašomos bet kurio taško, esančio figūros viduje, koordinatės.

FloodFill (x, y : integer; KontūroSpalva : word); Užpildymas plinta nuo nurodyto taško į visas puses bangos sklidimo principu. Procesas

stabdomas sutikus kliūtį, kuri nurodyta parametru KontūroSpalva. Bus užpildomas visas plotas nuo nurodyto taško i k i nurodytos spalvos linijos (kontūro). Bangos sklidimo kelyje viskas naikinama, išskyrus nurodytos KontūroSpalvos kliūtis, - jos apeinamos. Jei figūra bus atvira, tai bus užpildytas plotas ir išorėje. Jei taškas bus uždaros figūros išorėje, tai raštu bus padengta išorinė figūros dalis neliečiant vidaus.

36 pav.

10.5pratimas. Kompiuterio ekrane nurodytoje vietoje skirtingomis spalvomis reikia nupiešti koncetriškus apskritimus. Tam skirta procedūra Fig. Apskritimų centro koordinatės (x, y) nurodomos procedūros kreipinyje. Kiekvienas apskritimas brėžiamas vis mažesniu spinduliu. Kiekvieno apskritimo vidus užpildomas vis kitu raštu (36 pav.).

Page 218: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Norint savo raštu užpildyti figūrą, pirmiausia reikia sukurti tą raštą. Tam naudojama procedūra:

S e t F i l l P a t t e r n (SavoRaštas : Fi l lPatternType; Spalva : word); čia S a v o R a š t a s - programuotojo sukurtas užpildymo raštas, o S p a l v a - jo pasirinkta spalva. Vartotojo raštas užima 8 x 8 dydžio matricą (8 baitai arba 64 bitai), kur kiekvienas bitas parodo arba paslepia atitinkamą tašką matricoje. Tam reikalui dažniausiai naudojamas iš anksto nustatytas 8 baitų masyvas, kurio tipas toks:

type Fi l lPatternType = array [1..8] of byte; Ši procedūra daro tą patį, ką ir S e t F i l l S t y l e . Norint savo raštu užpildyti figūrą, pakanka naudojant šią procedūrą nurodyti pageidavimus. Procedūroje S e t F i l l S t y l e galime nurodyti kodą 12, jeigu anksčiau buvo panaudota procedūra S e t F i l l P a t t e r n ir norime vėl tuo savo sukurtu raštu pasinaudoti. Jeigu savo raštas nebuvo sukurtas, tuomet naudoti rašto kodo 12 negalima.

Savo rašto paveikslą galime aprašyti tipizuota konstanta, pvz.: const Savo : F i l lPatternType = ($AA, $55, $AA, $55, $AA, $55, $AA, $55);

Tai stačiakampis 8 x 8 taškų plotas, kuriame bito reikšmė 1 rodo, kad šioje vietoje bus piešiamas taškas, reikšmė 0 - kad taško nebus. Rašte surašomos bitų reikšmės kaip baitai su šešioliktainio skaičiaus reikšme. Pateikiame porą pavyzdžių:

Page 219: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

37 pav.

10.6pratimas. Kompiuterio ekrane reikia nupiešti stačiakampius ir juos užpildyti standartiniais skirtingais raštais. Tų stačiakampių viduje nubrėžti apskritimus ir užpildyti juos kitokiu raštu. Tam skirta procedūra F i g . Reikia naudotis programuotojo sukurtu raštu (37 pav.).

Page 220: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.7pratimas. Kompiuterio ekrane piešiamas stačiakampis, kuris užpildomas atsitiktiniu raštu ir spalva (38 pav.). Veiksmai palydimi garsais.

Page 221: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Pirmoji procedūra pradeda spausdinti tekstą nuo tos vietos, kur yra žymeklis, antroji - nuo taško, kurio koordinatės (x, y) . Tekstas bus rašomas menamame stačiakampyje, kurio viršutinis kairysis kampas ir yra nurodytasis taškas (x, y) .

Rašomo teksto spalva nurodoma procedūra SetColor (Spalva : word). Spausdinamo teksto charakteristikos nurodomos atskira procedūra SetTextStyle (šriftas, kryptis, dydis : word);

Pagrindinio šrifto dydis yra 8 x 8 taškų kvadratas. Tie šriftai saugomi matricoje. Jie dar vadinami taškiniais simboliais, nes simbolio vaizdas sudaromas iš taškų. Taškiniai simboliai yra tam tikro dydžio ir išdėstyti tam tikru būdu. Fono ir šrifto taškai susieti spalva. Pagrindinio šrifto dydis gali būti nurodomas skaičiumi iš intervalo [0..10].

Kitų šriftų simboliai saugomi vektoriniu (atkarpų) principu. Jų piešimo programos yra bylose * . chr. Simboliai aprašomi tiesių atkarpomis arba vektoriais. Tokių šriftų dydis lengvai keičiamas: galima didinti ik i norimo dydžio arba mažinti net i k i nematomo dydžio. Simboliai nesusiję su stačiakampės srities, kurioje j ie piešiami, fonu. Vektorinių simbolių

10.8. Teksto spausdinimas Spausdinamus ekrane vaizdus dažniausiai lydi rašytinis tekstas. Tam dirbant su grafiniu

režimu naudojamos dvi procedūros:

Page 222: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

39 pav. Vektorinio ir taškinio šriftų simbolio pavyzdys

Jeigu šrifto numeris procedūroje nurodomas didesnis už nulį. tuomet surandama atitinkamo šrifto programa ir įkeliama į kompiuterio atmintį. Jei bylos nerandama, tuomet naudojamas pagrindinis šriftas.

Kiekvienas vektorinio šrifto simbolis turi savo bazinį plotį ir aukštį. Juos keičiant, gaunami norimo dydžio simboliai. Tam skirta procedūra:

40 pav.

aprašymas nesusietas su fonu. Jie gali turėti kintamą spalvinimą, je i tai leidžia turimos spausdinimo priemonės (39 pav.).

10.8 pratimas. Įvairus teksto pavyzdžiai (40 pav.).

Page 223: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.9pratimas. Ekrane rašomi žodžiai. Kiekviena žodžio raidė atbėga ekranu i k i jai

skirtos vietos. Raidės judesys imituojamas jos perpiešimu naujoje vietoje (41 pav.).

Page 224: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 225: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.9. Judesių programavimas

Perpiešiant figūrą naujoje vietoje, galima sukelti judėjimo įspūdį. Jei norime gauti natūraliai atrodantį judesį, turime greitai perpiešti figūros pokyčius. GRAPH bibliotekoje esančiomis Turbo Paskalio priemonėmis galima programuoti nesudėtingų figūrų judėjimą ekrane. Sudėtingesnių figūrų judesių šiomis priemonėmis vaizduoti neverta, nes gaunamas trūkčiojantis judesys.

Jei norime gauti natūralesnį judesį, pirma turime vieną kartą nupiešti figūrą, po to ją dėlioti tam tikru dėsningumu skirtingose ekrano vietose. Tam reikia sukurtą atskirą figūros vaizdą išsaugoti kompiuterio atmintyje. Reikiamos paprogramės aprašytos 10.1 lentelėje. Veiksmų seka gali būti tokia. Sukuriamas figūros vaizdas ekrane ir naudojantis funkcija ImageSize sužinomas figūrą apibrėžiančios stačiakampės srities dydis baitais. Procedūrą GetMem naudojame reikiamai atminčiai išskirti dinaminėje atmintyje (tam tikra atmintinės sritis). Procedūra Getlmage išsaugomas figūros vaizdas tam tikslui išskirtoje atmintinės vietoje.

Figūras ekrane galima piešti nurodant, kaip elgtis su ekrano ir figūros taškais. Galima ekrane esančius taškus pakeisti figūros taškais. Galima figūros ir ekrano taškus sudėti operacijomis Or, Xor, And. Galimi figūros piešimo režimai parodyti 10.2 lentelėje.

Vienas figūros žingsnis atliekamas šiais veiksmais: nupiešiama figūra režimu XorPut, parodomas žiūrovui vaizdas (naudojama procedūra Delay), vėl atstatomas ekrano vaizdas, t. y. perpiešiama figūra naudojant XorPut.

Pagal tam tikrą dėsnį keičiant figūros koordinates ekrane, gaunamas judesio vaizdas. Programuojant judesį įdomiausias figūros piešimo ekrane režimas XorPut, nes figūra tampa permatoma, po ja esančių ekrano taškų spalva pakinta, tačiau vaizdas išlieka. Antrą kartą toje pačioje vietoje piešiant figūrą tuo pačiu XorPut režimu, figūra išnyksta ir ekrano vaizdas atsistato.

Page 226: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

42 pav.

Page 227: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 228: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Sudėtingesnėms figūroms perpiešti ekrane reikia daug laiko. Dažnai nėra reikalo stebėti piešimo procesą. Kur kas patogiau yra iš karto parodyti ekrane visą paveikslą. Kompiuterio grafinė atmintis organizuota puslapiais. Jų skaičius ir dydis priklauso nuo vaizduoklio (monitoriaus) ir tvarkyklės, todėl prieš rašant tokio tipo programas reikia išsiaiškinti savo kompiuterio galimybes. Grafinėje atmintyje puslapiai numeruojami pradedant nuliu (0). Taigi galima figūrą nupiešti puslapyje, kuris ekrane nematomas, po to užbaigtą vaizdą parodyti ekrane. Darbui su grafiniais puslapiais skirtos dvi procedūros.

procedure SetVisualPage (Puslapis : word); procedure SetActivePage (Puslapis : word); Pirmoji padaro matomą ekrane nurodytą puslapį. Antroji padaro aktyvų grafinį puslapį,

kuriame atliekami visi veiksmai. Jeigu puslapis sutampa su matomo puslapio numeriu, tai piešimo procesą galima stebėti

ekrane. Numatytieji aktyvus ir matomas puslapiai sutampa ir yra nuliniai.

Page 229: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.11 pratimas. Pateikiame pavyzdį, kaip naudotis puslapiais. Figura (stačiakampis gretasienis ir jo priekinėje plokštumoje esantis skritulys) piešiama nematomame puslapyje, i Nupieštas vaizdas parodomas ekrane, o nauja figūra piešiama kitame puslapyje. Programa j

naudoja du puslapius, kuriuos pakaitomis rodo ekrane (43 pav.).

Kompiuterio grafinį režimą galima pakeisti naudojant procedūrą SetGraphMode:

procedure SetGraphMode (Režimas : integer);

Darbo režimus galima keisti tik neišeinant iš tos pačios grafinės tvarkyklės, kuri buvo

nurodyta G r a p h l n i t procedūroje, ribų. Kai kurių galimų režimų ir juose naudojama

puslapių skaičius parodytas 10.3 lentelėje.

Page 230: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Įdomius efektus galima gauti spalvinant figūras skirtingomis spalvomis. Ekrane turimo piešinio spalvas galima keisti neperpiešiant figūrų, nuspalvintų naujomis spalvomis. Visos spalvos (jų kodai) surašyti tam tikra tvarka lentelėje (masyve), kuri vadinama palete.

Nulinėje masyvo vietoje yra spalvos kodas, atitinkantis fono spalvą. Kitose vietose yra spalvų kodai, naudojami figūroms piešti. Standartinėje paletėje spalvos išdėstytos lentelėje pagal jų kodus, t. y. antroje vietoje yra 2 (Green), ketvirtoje vietoje - 4 (Red) ir 1.1. Jeigu lentelėje į ketvirtą vietą įrašysime kodą 2 (Green), tuomet užrašas Red (ketvirta lentelės

spalva) reikš tą spalvą, kurios kodas bus čia parašytas, t. y. žalios spalvos. Paletės spalvoms kaitalioti naudojama procedūra:

SetPalette (Indeksas : word, NaujaSpalva : shotint).

Parametro Indeksas vietoje užrašomas naujos spalvos kodas.

Page 231: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

10.12 pratimas. Ekrane piešiamas raudonos spalvos stačiakampis. Raudonos spalvc s kodas yra 4 ir jis užrašytas ketvirtoje paletės vietoje (44 pav.).

Page 232: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

dura K e i s t i cikliškai perrašo spalvų kodus paletėje. Ekrane matome besisukančio rato vaizdą (45 psl.).

45 pav.

10.13 pratimas. Ekrane iš skirtingos spalvos segmentų piešiamas skritulys. Proce-

Konstanta MaxColors = 15 nurodo didžiausią galimą spalvos kodo reikšmę. Lauke Size yra saugomas aktyvioje paletėje esančių spalvų skaičius. Masyve Colors aprašoma spalvų tvarka paletėje.

Page 233: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Kiekviena tvarkyklė suteikia galimybę naudoti skirtingą spalvų skaičių. Tik tvarkyklėje IBM8514.bgi galima dirbti su 255 spalvomis. Procedūra SetRGBPalette leidžia nustatyti naudojamų spalvų iš intervalo [0..255] intensyvumus:

SetRGBPalette (SpNr, RedValue, GreenValue, BlueValue : integer);

čia SpNr spalvos numeris, o kit i parametrai nurodo spalvos pagrindinių komponentų reikšmes. Kiekviena spalva gaunama iš trijų pagrindinių spalvų: raudonos, žalios ir mėlynos.

Šią procedūrą galima naudoti tik IBM8 514 ir VGA tvarkyklėms.

Page 234: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

I 0.14 pratimas. Atliekamas spalvų perkodavimas. Vietoj žalios ir raudonos spalvų

(2 ir 4 numeriai) įrašomos skirtingo intensyvumo violetinės spalvos (46 pav.).

Page 235: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

gos spalvos. Pakeičiamos paletės spalvos. Ekrane stebime skirtingo intensyvumo žalius stačiakampius. Gaunama piramidės iliuzija (47 pav.).

10.15 pratimas. Ekrane nupiešiami šeši pilnaviduriai stačiakampiai. Visi skirtin-

Page 236: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Priedai

1 priedas. Turbo Paskalio 7.0 integruotoji terpė Turbo Paskalio sistemos integruotąją terpę sudaro trys pagrindinės dalys (žr. 1 pav. šios knygos 11 puslapyje): - ekrano viršuje esantis pagrindinis meniu, - didžioji ekrano dalis, vadinama darbiniu langu, - apačioje esanti informacinė eilutė. Priede pateikiami reikalingiausių terpės elementų paaiškinimai. Terpės elementai pasiekiami pele arba kla

višais. Kai kurios tų klavišų kombinacijos yra nurodomos šalia terpės komandų. Pagrindini meniu sudaro 10 pagrindinių komandų grupių:

File Edit Search Run Compile Debug Tools Options Window Help Byla Redaguoti Paieška Vykdyti Kompiliuoti Derinti Priemonės Parametrai Langas Žinynas

Į pagrindinį meniu patenkame paspaudę F10 klavišą arba perkėlę į jį pelės žymeklį. Atgal grįžtama paspaudus Esc klavišą arba naudojantis pele. Bet kurią komandų grupę galima pasirinkti keturiais būdais:

1) nuspaudžiamas F10 klavišas, tada žymeklio krypties valdymo klavišais pasirenkama norima komanda ir paspaudžiamas Enter klavišas;

2) nuspaudžiamas F10 klavišas, tada paspaudžiamas pasirinktos komandų grupės pavadinimo pirmąją raidę atitinkantis klavišas;

3) laikant nuspaustą Alt klavišą, spaudžiamas pasirinktos komandų grupės pavadinimo pirmąją raidę atitinkantis klavišas;

4) pelės žymeklis perkeliamas ties norima komandų grupe ir paspaudžiamas kairysis pelės klavišas.

Darbinis Turbo Paskalio terpės langas visada būna pažymėtas rėmeliu ir turi šiuos elementus: lango dydžio keitimo bei uždarymo simbolius, kuriais galima naudotis dirbant su pele, lango numerį ir darbinio lango stačiąją bei gulsčiąją slinkties juostas. Turbo Paskalio darbiniame lange renkamas programos tekstas.

Darbinio lango apačioje esančioje informacinėje eilutėje pateikiama informacija apie kai kurias dažniausiai vartojamas komandas ir jas atitinkančius funkcinius klavišus. Virš šios eilutės kairėje pusėje yra du skaičiai XX:YY, kurie rodo žymeklio koordinates - stulpelio ir eilutės numerius.

Darbas Turbo Paskalio 7.0 integruotoje terpėje pagrįstas meniu bei langų sistemų principais. Labai patogūs yra reiškinių reikšmių stebėjimo, rezultatų, dialogų langai. Vienu metu galima turėti keletą atvertų langų, tačiau konkrečiu momentu tik vienas iš jų bus aktyvusis (jis būna pažymėtas dvigubu rėmeliu). Jeigu langai išdėstyti pakopomis, tai aktyvusis langas visuomet yra pirmame plane. Langai numeruojami dešiniajame viršutiniame kampe.

Meniu komandos gali būti pasyvios ir aktyvios. Komanda tampa aktyvia tiktai tada, kai ji pasirenkama žymeklio krypties klavišais arba pele. Jei prie pagalbinio meniu kurios nors komandos yra daugtaškis, tai reiškia, kad ši komanda turi savo specialios paskirties pagalbinį langą, vadinamą Dialogo langu.

Programos rengimą sudaro tokie svarbiausi etapai: programos įvedimas ir redagavimas, kompiliavimas, vykdymas bei derinimas. Toliau programa gali būti įrašoma į bylą, saugoma, iškviečiama.

Page 237: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Programa pradedama rašyti iškvietus tekstų rengimo sistemą - tekstų redaktorių, esantį Turbo Paskalio integruotoje terpėje. Sis redaktorius automatiškai iškviečiamas pradėjus darbą. Tekstas renkamas paprastai, kaip ir bet kuria kita tekstų rengimo sistema. Yra įterpimo bei pakeitimo režimai. Pirmuoju atveju tekstas įterpiamas ten, kur rodo žymeklis; dešiniau žymeklio esantis tekstas pasislenka. Antruoju atveju naujai renkami simboliai pakeičia anksčiau buvusius. Mirksintis žymeklio brūkšnelis žymi įterpimo, stačiakampiukas - pakeitimo režimą. Režimai keičiami kiekvienu klavišo Insert paspaudimu. J naują eilutę pereinama paspaudus Enter klavišą.

Žymeklio valdymo komandos

Page 238: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Papildomos komandos

Komanda Klavišai

Pagrindinis meniu F 1 0

Išsaugoti bylą F2 arba Ctrl + KS Nauja byla F3

Užverti aktyvų langą Alt + F3

Tabuliacijos simbolis TAB arba Ctrl +1 Tabuliacijos režimas Ctrl + OT Automatinis postūmis Ctrl + OI Atkurti redaguojamą eilutę Ctrl + QL Įvesti specialų simbolį Ctrl + P Ieškoti Ctrl + QF Ieškoti ir pakeisti Ctrl + QA Pakartoti paskutinę paiešką Ctrl + L Nutraukti komandos vykdymą Esc

File grupės komandos

Parašytą programą reikia įsiminti į tam tikrą atmintinės vietą. Šį veiksmą reikia atlikti tuoj pat, kai tik parašome dalį programos teksto. Tam tekstų rengimo sistemos lango apačioje nurodytas komandos Save funkcinis klavišas F2. Komanda Save yra pagrindinio meniu pirmojoje grupėje File. Si grupė turi dar daugelį kitų komandų, kurios reikalingos darbui su parengtomis bylomis.

New - naujas. Šia komanda atveriamas naujas tekstų rengimo sistemos langas su standartiniu vardu NONAMFJCC.PAS, kuris iš karto tampa aktyvus. Lango vardai numeruojami, t. y. žymenys xx reiškia skaitmenis nuo 00 iki 99.

Open - atversti (F3). Šia komanda atveriamas bylos atvėrimo (Open a File) dialogo langas. Šiame lange yra įvedimo laukas (Name) su ankstesnių reikšmių sąrašu, bylų sąrašo laukas (File) bei informacinis laukas, aprašantis pasirenkamą bylą. Įvedimo lauke rašomas atveriamos bylos vardas arba bylų vardų šablonas. Bylų sąrašo lauke visos aktyviojo katalogo bylos, kurių vardai tenkina įvedimo lauko šabloną, aukštesniojo lygio katalogas (\..) bei visi žemesniojo lygio katalogai. Norint atverti bet kurią bylą, reikia ties tos bylos vardu paspausti pelės klavišą arba Enter klavišą. Po to reikia pasirinkti komandos klavišą, langelį Open arba Replace. Pirmoji komanda (Open) atveria naują redagavimo langą ir į jį įkelia pasirinktą bylą. Antroji komanda (Replace) pasirinktą bylą įkelia į aktyvių tekstų rengimo sistemos langą, neatidarydama naujo.

Save - įsiminti (F2). Ši komanda tekstų rengimo sistemos lange esančią bylą įrašo į diską. Jeigu bylos vardas tebėra standartinis NONAMExx.PAS, tai bus atveriamas langas Save File as + (įsiminti bylą vardu) dialogo langas, kuriame bus galima nurodyti norimą bylos vardą.

Save as - įsiminti nurodant vardą. Ši komanda atveria Save file as dialogo langą. Šiuo atveju galima pakeisti aktyvaus redagavimo lange esančios bylos vardą arba įrašyti ją į kitą katalogą bei į kitą diską. Dialogo lange

Page 239: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

yra įvedimo laukas su ankstesnių reikšmių sąrašu, bylų sąrašo lauku bei informaciniu lauku. Šis dialogo langas yra visiškai analogiškas komandos Open dialogo langui.

Save all - įsiminti viską. Šia komanda įsimenamos visos bylos, esančios atvertuose redagavimo languose. Change dir - keisti katalogą. Šia komanda keičiamas aktyvusis katalogas. Ši komanda atveria dialoge

langą, kuriame yra katalogo įvedimo laukas su ankstesnių reikšmių sąrašu bei katalogų medžių laukas. Įvedime lauke nurodomas naujo katalogo kelias. Katalogo medyje vaizduojamas aktyvusis katalogas ir jo pakatalogiai. Pakeitus katalogą, rodomas naujasis. Nustatytą situaciją reikia patvirtinti mygtuku OK (pele arba klavišu Tab išrinkus ir paspaudus Enter).

Print - spausdinti. Šia komanda gali būti spausdinamas aktyvaus redagavimo lango turinys - programos tekstas. Jeigu šio teksto dėl kokių nors priežasčių spausdinti negalima, tai šios komandos atlikti neleidžiama (jos užrašas tampa šviesios spalvos). Jeigu reikia spausdinti tik dalį teksto, tai tą dalį reikia pažymėti ir nurodyti komandą Ctrl K + P.

Printer setup - paruošti spausdintuvą. Šia komanda nurodomi įvairūs spausdinimo parametrai. Pavyzdžiui, redaktoriaus lange rodomame tekste įvairios paskirties Turbo Paskalio kalbos žodžių grupės paryškintos skirtingomis spalvomis. Norint, kad šie žymenys išliktų ir nespalvotu spausdintuvu spausdinamame tekste, reikia dialogo lange nustatyti parametrą Send highlighting escape codes - nusiųsti skiriamuosius kodus. Įvairių tipų teksto fragmentų skiriamieji kodai į spausdintuvus siunčiami specialiomis kodų sekomis, kurios nustato simbolių šriftus: pusjuodį, kursyvą, pabrauktą ir pan. Spausdinamų simbolių skiriamieji kodai aprašomi terpės byloje prnfltr.pas.

DOS shell - pereiti į DOS terpę. Ši komanda leidžia laikinai iš Turbo Paskalio terpės ir vykdyti įvairias DOS komandas bei kitas programas. Norint sugrįžti atgal į Paskalio terpę, reikia surinkti komandą Exit.

Exit - baigti darbą (Alt + X). Šia komanda išeinama iš integruotos Turbo Paskalio terpės ir grįžtama į DOS. Jeigu tvarkomos bylos nebuvo įrašytos (įsimintos), tai prieš baigiant darbą bus paklausta, ar reikia jas įrašyti.

Edit grupės komandos

Kai kurioms komandoms reikalingas pažymėtas tekstas. Tekstą galima žymėti naudojantis darbo su blokais komandomis arba naudojantis pele bei Shift klavišu. Tekstą pažymime perkėlę žymeklį į teksto pradžią, laikydami nuspaustą kairįjį pelės klavišą ir vilkdami ją iki tos vietos, kur baigiasi pažymėtas tekstas, arba laikydami nuspaustą Shift klavišą ir spaudydami atitinkamus žymeklio krypties klavišus.

Undo - atšaukti ką tik atliktą komandą (Alt + BkSp). Šia komanda galima panaikinti atliktos komandos rezultatą. Taip sudaroma galimybė daugiau eksperimentuoti: jei nepavyks kuri nors komanda, jos galima atsisakyti.

Redo - atstatyti ką tik panaikintą redagavimo komandą. Šios komandos veiksmas atvirkščias Undo komandai. Ji taikoma tik po Undo arba Redo komandų.

Cut - pašalinti pažymėtą teksto dalį (Shift + Del). Šia komanda pažymėtas tekstas ištrinamas iš redagavimo lango ir įkeliamas į krepšį (Clipboard).

Copy - kopijuoti (Ctrl+Ins). Ši komanda aktyviajame redagavimo lange pažymėtą tekstą kopijuoja į krepšį, tačiau jo nepanaikina. Tuo ši komanda skiriasi nuo komandos Cut. Vartojant šią komandą galima kopijuoti ir aprašus iš žinyno (Help) lango.

Pašte - įterpti (Shift + Ins). Šia komanda krepšyje esantis tekstas perkeliamas į aktyvųjį redagavimo langą - įterpiamas į žymeklio vietą. Krepšyje būna tekstas, kurį įterpia paskutinė atlikta Cut arba Copy komanda.

Page 240: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Clear - panaikinti tekstą (Ctrl + Del). Šia komanda pažymėtasis tekstas panaikinamas iš redagavimo lango ir neįkeliamas į krepšį. Todėl jo negalima atstatyti komanda Paste. Šia komanda patogu išvalyti krepšį.

Show Clipboard - rodyti krepšį. Atveriamas krepšio langas. Čia saugomi visi tekstai, kurie buvo kada nors įkelti komandomis Cut ir Copy. Kiekvieną kartą naujas tekstas rašomas į galą. Krepšio lange galima redaguoti jame esantį tekstą. Esant krepšio lange ir pažymėjus jame teksto dalį bei pasirinkus komandą Cut arba Copy, pažymėtoji teksto dalis bus įrašyta į darbo lango teksto pabaigą. Numatytąja paskutine komanda Cut arba Copy įkeltas tekstas pažymimas automatiškai. Kadangi tekstai krepšyje kaupiasi, patariama retkarčiais peržiūrėti jo turinį ir nereikalingus tekstus išmesti (komanda Clear).

Search grupės komandos

Find - rasti. Šia komanda atidaromas paieškos dialogo langas, kuriame galima nurodyti ieškomą tekstą bei papildomus reikalavimus. Šiame lange yra keletas laukų: įvedimo, pasirinkimo ir tikrinimo.

- Įvedimo laukas turi antraštę Text to find - ieškomasis tekstas. Siame lauke įvedamasis ieškomas tekstas - paieškos šablonas. Jeigu prieš iškviečiant šią komandą žymeklis redagavimo lange buvo ties kokiu nors žodžiu, tai šis žodis automatiškai atsiras įvedimo lauke. Spaudant žymeklio krypties klavišą —• , galima išvysti tolesnius, einančius po šio žodžio, simbolius.

- Paieškos sąlygos aprašomos įvairiais pasirenkamais bei įjungiamais parametrais. Yra keturi pasirinkimo langeliai.

1) Options - parametrai - nurodo įvairias paieškos galimybes: ar skirti mažąsias ir didžiąsias raides (Case sensitive), ar ieškoti tik ištisų žodžių (Whole words only), ar paiešką vykdyti pagal tam tikrus šablonus, kuriuose vartojami apibendrinantys simboliai (Regular expressions).

2) Scope - sritis - nurodo bylos dalį, kurioje reikia atlikti paiešką. Galimos dvi paieškos sritys: Global -visoje byloje ir Selected text - pažymėtoje bylos dalyje.

3) Direction - kryptis - nurodo paieškos byloje kryptį. Galimos dvi paieškos kryptys: Forward - link bylos pabaigos ir Backward - link bylos pradžios.

4) Origin - pradžia - nurodo, nuo kur pradėti paiešką. Galimi du būdai: From cursor - nuo esamos žymeklio padėties ir Entire scope - nuo bylos pradžios.

- Norint pradėti paiešką, reikia pasirinkti komandą OK, priešingu atveju - Cancel. Replace - pakeisti. Šia komanda nurodytas teksto fragmentas keičiamas kitu surinktu tekstu. Ieškomasis

ir keičiamasis tekstai rašomi dialogo lange, kuriame dar galima nurodyti įvairius paieškos ir keitimo variantus. Dauguma pakeitimo komandos dialogo lango laukų sutampa su paieškos komandos dialogo lango laukais, tad aprašysime tik tuos, kurie nuo jų skiriasi.

- Text to find - ieškomasis tekstas - sutampa su paieškos įvedimo lauku.

New text - naujas tekstas - skirtas įvesti tekstui, kuriuo turi būti pakeistas ieškomasis tekstas. Šis laukas turi ankstesnių reikšmių sąrašą.

- Change all - pakeisti visus - atliekami visi galimi pakeitimai aktyviame redagavimo lange (t. y. nereikia vartoti operaciją kartojančios komandos Ctrl + L.

- Prompt to replace - paklausti prieš pakeičiant. Šiame lauke galima nustatyti, kad prieš kiekvieną keitimą sistema reikalautų patvirtinimo.

Page 241: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Komandų Find ir Replace kartojimui vartojama komanda Ctrl + L.

Search again - ieškoti dar kartą. Si komanda kartoja paskutinę paieškos (Find) arba pakeitimo (Replace) komandą. Go to line number - pereiti į nurodytą eilutę. Šia komanda atveriamas dialogo langas. Jame nurodomas

eilutės, į kurią reikia pereiti, numeris. Eilutės, kurioje yra žymeklis, numeris matomas apatiniame kairiajame redagavimo lango kampe. Dialogo lange esančiame įvedimo lauke Enter new line number - įvesti naujos eilutės numerį - nurodomas reikalingas eilutės numeris. Be to, laukas turi ankstesnių reikšmių sąrašą, kuriuo galima pasinaudoti.

Show last compiler error - parodyti paskutinę kompiliavimo klaidą. Find error - klaidų paieška. Šia komanda atidaromas dialogo langas, kuriame nurodomos vykdant komandą

rastos klaidos adresas ir aptinkama programos eilutė, kuri sukėlė šią klaidą. Klaidos adresas žymimas dviem šešioliktainiais skaičiais taip: SEG:POS, čia SEG yra atminties segmentas, o POS - padėtis jame. Kad ši komanda gerai veiktų, turi būti aktyvus tikrinimo laukas Debugging Integrated (derinimas terpėje), kuris yra pagrindinės komandos Options Debugger dialogo lange.

Find procedure - procedūros paieška. Šia komanda atveriamas procedūros paieškos dialogo langas, kuriame nurodomas ieškomos procedūros ar funkcijos vardas. Ši komanda nuo paprastos paieškos komandos Find skiriasi tuo, kad suranda ne nurodyto procedūros ar funkcijos vardo panaudojimo vietą, bet patį aprašą. Šią komandą galima vartoti tik dirbant derinimo režimu. Įvedimo laukas Find procedure turi ankstesnių reikšmių sąrašą, kuriuo galima pasinaudoti.

Run grupės komandos

Run - vykdyti. Ši komanda yra pagrindinė: nurodžius ją, programa vykdoma. Jeigu programa nebuvo prieš tai sukompiliuota, tai ji kompiliuojama (atliekama taip, tarytum būtų duota kompiliavimo komanda Make iš Compile grupės), po to vykdoma.

Klaidų paieškai vartojamos įvairios programos derinimo priemonės. Jos išvardytos pagrindinio meniu komandų grupėje Debug - derinimas. Tačiau su derinimu susietų komandų yra ir grupėje Run. Ypač reikalingos komandos, kurios leidžia vykdyti programą sakiniais bei eilutėmis (kartais dar vadinama vykdymu žingsnis po žingsnio).

Step over - vykdyti pažingsniui. Programa vykdoma nuosekliai, sakinys po sakinio (pavyzdžiui, kai yra ciklas, einama į jo vidų ir atliekama po vieną jame esantį sakinį). Redaktoriaus ekrane spalvota juosta žymi vykdomą eilutę. Kreipinys į procedūrą arba funkciją laikomas vienu sakiniu.

Trace into - vykdyti gilyn. Ši komanda skiriasi nuo komandos Step over tik tuo, kad sutikus kreipinį į procedūrą ar funkciją, pereinama prie šios procedūros arba funkcijos sakinių žingsnis po žingsnio vykdymo.

Go to cursor - iki žymeklio. Šia komanda nurodoma, kad programa bus vykdoma iki eilutės, kurioje yra žymeklis. Nors ši programa nenustato nuolatinio programos pertraukties taško (kaip galima daryti derinimo komandomis), tačiau ji leidžia sustoti prie nurodyto taško, jeigu tik šis taškas yra aukščiau negu pasiekta reikalinga eilutė. Tokiu atveju reikia dar kartą pakartoti komandą Go to cursor.

Program reset - nutraukti programos vykdymą. Jei norime įpusėję derinimą nutraukti programą ir pradėti vėl iš pradžių, pasirenkame komandą Program reset.

Parameters - parametrai. Kai programa vykdoma, yra galimybė pakoreguoti jos vykdymo parametrus - tai atliekama komanda Parameters. Šia komanda atveriamas programos parametrų dialogo langas, kuriame galima nurodyti programai perduodamų parametrų eilutę (panašiai kaip iškviečiant programą iš DOS). Parametrai

Page 242: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

nurodomi įvedimo lauke Parameters (čia programos vardo rašyti nereikia). Parametrai daro įtaką tolesniam programos vykdymui.

Compile grupės komandos

Parašyta programa kompiliuojama, t. y. perrašoma kompiuterio vidine kalba (mašininiais kodais). Kompiliavimo metu ieškoma sintaksės (ir kai kurių semantikos) klaidų. Kad galėtų rasti šias klaidas, kompiliatorius kodais perrašytą programą papildo specialiomis lentelėmis. Aptikęs sintaksės klaidą kompiliatorius perduoda valdymą tekstų rengimo sistemai ir praneša apie klaidos tipą. Klaidos vietą parodo žymeklis. Klaidų kontrolė aprašoma komandų grupės Options (parametrai) komandos Compiler dialogo lange. Programos kompiliavimo metu atveriamas kompiliavimo būklės langas, kuriame pateikiama transliatoriaus darbo eiga ir rezultatai.

Compile - kompiliuoti (Alt + F9). Šia komanda kompiliuojama programa arba modulis, esantys tekstų rengimo sistemos aktyviajame lange. Jeigu programoje yra sintaksės klaidų, kompiliavimas nutraukiamas, o žymeklis atsiduria programos eilutėje, kurioje yra klaida. Jeigu kompiliuojamoje programoje yra kreipinių į vartotojo sukurtus modulius, tai šie moduliai turi būti sukompiliuoti anksčiau ir užrašyti su prievardžiu tpu. Kadangi šią komandą tenka dažnai atlikti, tai jos iškvietimo klavišai Alt + F9 yra prieinami ir redaktoriaus lango apačioje, paskutinėje eilutėje.

Make - sukurti: sąlyginė kompiliacija (F9). Si komanda vartojama tada, kai reikia kompiliuoti sudėtingas programas, sudarytas iš daugelio modulių ar bylų; ypač ji naudinga tada, kai moduliai dažnai taisomi, pertvarkomi. Ši komanda besąlygiškai kompiliuoja ne visą programą, kaip tai daro komanda Compile, o pirmiausiai tikrina: jei buvo anksčiau sukompiliuoti kai kurie moduliai ir juose nebuvo klaidų, tai jie neperkompiliuojami. Pirmiausia kompiliuojama pagrindinė byla, žinoma, jeigu tokia buvo nurodyta komanda Primary file. (Pagrindinė byla yra tokia, kuri turi būti kompiliuojama drauge su visais moduliais.) Jeigu pagrindinė byla nenurodyta, tai kompiliuojama ta programa, kuri yra redaktoriaus aktyviajame lange. Toliau tikrinamos visos bylos, susijusios su kompiliuojamąja. Jeigu kompiliuojant sutinkami vartotojo aprašyti moduliai, tai tikrinama, ar po ankstesnės kompiliacijos buvo pakeitimų. Jeigu pagalbinio modulio byla buvo modifikuota vėliau negu sukurta tpu (objektinio kodo) byla, tai šis modulis bus kompiliuojamas iš naujo. Jeigu modulio sąsajos dalis buvo modifikuota, tai iš naujo bus kompiliuojami visi susiję moduliai. Jeigu tpu modulis turi ryšį su išoriniu paprogramių moduliu obj ir pastarasis buvo sukurtas vėliau negu tpu modulis, tai šis modulis bus kompiliuojamas iš naujo. Jeigu modulyje yra byla, kuri buvo sukurta vėliau negu pats modulis, tai šis modulis kompiliuojamas iš naujo. Čia labai svarbu, kad modulių kūrimo metu sistema rodytų tikslų laiką. Jeigu pakeitimų moduliuose nebūta, jie neperkompiliuojami.

Build - sudaryti. Ši komanda analogiška Make komandai, tik yra vienas skirtumas: tpu modulių visos pas bylos perkompiliuojamos iš naujo nepaisant, ar buvo jose pakeitimų, ar ne. Atlikę šią kompiliaciją galite būti tikri, jog gautoje vykdymo byloje atsižvelgiama į visus anksčiau padarytus pakeitimus.

Destination memory - talpinimo vieta. Šia komanda galima nurodyti, kur reikia įkelti komandomis Make arba Build sukompiliuotą programą. Yra du pasirinkimai: Memory - į atmintį, Disk į diską. Jeigu pasirenkame Memory, sukompiliuota programa bus įkelta į pagrindinę (operatyviąją) atmintį, jeigu Disk - byla su programos vykdomuoju kodu bus įkeliama diske su prievardžiu exe. Kai įkeliama į diską, tai sukurtos exe bylos vardas bus arba komanda Primary file (pagrindinė byla) apibrėžtas vardas, arba aktyviame redagavimo lange esančios bylos vardas.

Page 243: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Visi komandomis Make arba Build iš naujo sukompiliuoti moduliai įkeliami į diską, - net jeigu talpiniro: vieta buvo nurodyta Memory.

Primary file - pagrindinė byla. Šia komanda atveriamas Primary file dialogo langas. Jame reikia nuroč; pagrindinės programos teksto bylą su prievardžiu pas. Ši byla reikalinga kompiliuojant, kai vartojamos kompiliavimo komandos Make arba Build. Komanda Primary file paprastai vartojama, kai didelė programa yn suskaidyta į daugelį logiškai susijusių modulių. Primename: kad ir kiek modulių būtų, pagrindinė programa yn viena, t. y. pagrindinė byla, sauganti pagrindinę programą, yra viena. Dialogo lange, be bylos vardo, įvedim: lauko yra bylų sąrašo bei informacinis laukas. Bylų sąrašo laukas turi antraštę Files (bylos). Jame pateikiame; visos aktyviojo katalogo bylos, kurių vardai tenkina įvedimo lauko šabloną, taip pat aukštesniojo lygio katalogas \.. bei visi žemesniojo lygio katalogai. Informaciniame lauke rodomas pasirinktos bylos vardas, dydis, sukūrimo data ir laikas, taip pat visas bylos kelias. Atveriant pagrindinės bylos dialogo langą ši byla būni pažymėta bylų sąraše - pasirinkta. Veiksmo laukas Clear - valyti - vartojamas norint pervesti pagrindinę byla iš aktyvaus į neaktyvų režimą.

Information - informacija. Šia komanda atveriamas informacijos langas, kuriame pateikiama išsami informacija apie kompiliavimo rezultatus ir atminties paskirstymą.

Debug grupės komandos

Derinimo sistema vartoja aktyvų redagavimo langą, kuriame rodomos programos pertraukties taškų vietos. Jeigu yra apibrėžtų reiškinių, tai specialiame reiškinių lange matomos jų reikšmės. Be to, atliekant derinimą galima vartoti visas pagrindinio meniu komandas. Tuomet galima koreguoti redagavimo lange esančios programos tekstą, kompiliuoti bei vykdyti šią programą iš naujo.

Visas derinimo komandas galima atlikti tik tada, kai komandų grupės Options komandos Debugger dialogo lange yra nustatytas integruotos terpės parametras Integrated Debugging bei komandos Compiler dialogo lange - parametrai Debug information ir Local symbols.

Breakpoints - pertraukties taškai. Pertraukties taškai - tai viena iš derinimo priemonių. Jais pažymimos vietos, kuriose norima stebėti kintamųjų reikšmes. Šia komanda atveriamas pertraukties taškų dialogo langas, kuriame galime redaguoti visus pertraukties taškus. Šiame lange yra pertraukties taškų sąrašas (Breakpoint list). Kiekvienam taškui rodomas eilutės, kuriame yra šis taškas, numeris, sąlyga ir kartojimų skaičius. Sąlygos turi ankstesnių reikšmių sąrašus: jie praverčia, kai reikia sustojus programai keisti pertraukties taškų sąlygas. Sąlyga apibrėžiama sąlygos (Condition) įvedimo lauke. Redagavimo (Edit) laukas atveria pertraukties taškų redagavimo (Edit Breakpoints) dialogo langą, kuriame galima nustatyti naujus pertraukties taškus. Peržiūros (View) laukas suaktyvina tekstų rengimo sistemos darbinį langą ir žymeklį pastato ties eilute, atitinkančia pertraukties tašką. Išvalymo (Clear all) laukas panaikina visus pertraukties taškus, esančius pertraukties taškų sąraše.

Call stack - dėklo duomenų lango atidarymas (Ctrl + F3). Kartais derinimo proceso metu reikia sužinoti programos vykdymo eigą iki šio momento. Tam yra Call stack langas. Jis parodo, kurios funkcijos bei procedūros buvo kviečiamos, t. y. šitaip sužinome aktyvių procedūrų bei funkcijų pavadinimus, kreipimosi tvarką, parametrų reikšmes. Call stack langas yra labai vertingas derinant sudėtingas programas.

Page 244: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Register - procesoriaus registrų duomenų lango atidarymas. Šia komanda atidaromas specialus langas, kuriame rodomos kompiuterio centrinio procesoriaus registrų reikšmės. Jos reikalingos tada, kai programoje vartojamas operacinės sistemos pertraukimas bei įterpiami tekstai Asemblerio kalba.

Watch - stebėti. Šia komanda atveriamas kontrolinių duomenų reikšmių stebėjimo langas. Šis langas paprastai būna ekrano apačioje ir uždengia dalį tekstų rengimo sistemos lango, kuriame yra derinamos programos tekstas (1 pav.). Patogiau dirbti, kai šie langai nedengia vienas kito - išdėsčius juos greta. Tai nurodoma komandų grupės Window komanda Tile.

Redaguoti stebimas kintamųjų reikšmes galima dviem būdais:

1) esant aktyviam stebėjimo langui ir krypties klavišais pasirinkus norimą kintamąjį.

2) vartojant Debug grupės komandą Add watch. Pasirinkus pirmąjį būdą atveriamas dialogo langas, kuriame nurodomas norimo įrašyti kintamojo vardas. (Kintamasis atsiranda dialogo lange, kai pasirenkame jį krypties klavišais.) Kintamasis į reikšmių stebėjimo langą patenka paspaudus Insert klavišą, pašalinamas - paspaudus Delete klavišą. Antrasis būdas aprašytas šiek tiek toliau.

Output - rezultatų langas. Šia komanda atveriamas rezultatų langas, panašus į reikšmių stebėjimo langą: paprastai jis būna apačioje ir uždengia dalį tekstų sistemos lango, kuriame derinamas programos tekstas.

User screen - vartotojo ekranas (Alt + F5). Šia komanda patenkama į MS DOS terpę ir rodomas ekranas, kuriame galima rasti įvestas pradinių duomenų reikšmes bei išspausdintus rezultatus.

Evaluate/modify - skaičiuoti ar modifikuoti (Ctrl + F4). Šia komanda galima skaičiuoti reiškinių reikšmes, pamatyti bet kurio programoje esančio kintamojo ar duomenų elemento reikšmę, pakeisti ją. Ši komanda paprastai vartojama kontroliniams duomenims tikrinti bei jų reikšmėms keisti. Komanda atveria dialogo langą, kuriame yra trys laukai: Expression - reiškinys, Result - rezultatas ir New value - nauja reikšmė.

Į reiškinio įvedimo lauką galima klaviatūra įvesti bet kurį reiškinį. Norint suskaičiuoti jo reikšmę, reikia nurodyti komandą Evaluate - tuomet suskaičiuotąją reikšmę matysime rezultatų lauke Result. Toliau reiškinį galima modifikuoti bei jį keisti. Tam reikia pasirinkti Modify komandą. Jeigu turimas kontrolines duomenų reikšmes norima pakeisti, vartojamas New value laukas: čia nurodoma nauja kintamojo reikšmė, po to pasirenkama Modify komanda. Atkreipkite dėmesį, kad naujas reikšmes galima keisti tik esant paprastiems duomenų elementams, pavyzdžiui, i, s, a[i].

Add watch - stebimų duomenų papildymas (Ctrl + F7). Šia komanda galima papildyti norimų stebėti duomenų sąrašą. Šiuo atveju atveriamas stebėjimo duomenų papildymo dialogo langas. Stebėjimo lange galima nurodyti tiek paprastuosius, tiek struktūrinius duomenis. Struktūrinių kintamųjų reikšmės rodomos pagal struktūrinių konstantų sudarymo taisykles. Taip pat galima nurodyti ir Paskalio kalbos reiškinius.

Add breakpoint - pertraukties taškų papildymas. Šia komanda numatomi programos pertraukties taškai, t. y. pažymimos tos vietos, kuriose pageidaujama matyti stebimų duomenų reikšmes. Gautosios reikšmės padeda aptikti klaidų vietas bei nustatyti jas sukėlusias priežastis. Paprasčiausias būdas nurodyti pertraukties taškus: į norimą programos teksto vietą nuvesti žymeklį ir atlikti komandą Go to cursor iš vykdymo grupės Run (arba paspausti F4 klavišą). Vykdant šią komandą programa sustabdoma žymeklio vietoje ir valdymas perduodamas tekstų rengimo sistemai. Stebėjimo lange rodomos kontroliuojamų duomenų reikšmės, kurios buvo programos stabdymo momentu. Šitokius veiksmus galima kartoti daug kartų. Tačiau jei programa didelė arba pageidaujama nemažai pertraukties taškų skirtingose programos vietose, taip daryti nepatogu. Šiuo atveju pertraukties taškus geriau aprašyti iš anksto. Tam ir skirta komanda Add breakpoint. Jos dialogo lange yra keturi parametrų įvedimo laukai, kuriuose aprašomos pertraukimų sąlygos ir vieta:

1) lauke Condition - sąlyga - reikia nurodyti pertraukimo sąlygas aprašantį loginį reiškinį;

2) lauke Pass count - skaitiklis - nurodoma, kiek kartų vykdant programą, galima pereiti per pertraukties tašką nestabdant programos; šis parametras labai praverčia testuojant ciklus;

3) laukuose File name ir Line number nurodomas atitinkamos programos bylos vardas bei jos eilutės, kurioje yra pertraukties taškas, numeris.

Page 245: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Šiomis komandomis galima peržiūrėti visus pranešimus apie kompiliavimo klaidas bei tyrinėti su jomis susijusį programos tekstą. Čia taip pat yra priemonės, kuriomis naudojantis galima neišeinant iš Turbo Paskalio terpės išsikviesti kitas analizės ir derinimo programas: Greep, Turbo Assembler, Turbo Debbuger, Turbo Profiler (pastarosios galimybės yra versijoje Borland Pascal with Object 7.0).

Options grupės komandos

Turbo Paskalio integruotos terpės parametrų yra daug. Jiems nustatyti bei keisti vartojama komandų grupė Options - parametrai.

Compiler - kompiliatoriaus parametrai. Dažniausiai pakanka nustatyti tik šios komandos parametrus ir gaunama norima integruota terpė. Daugelis kompiliatoriaus parametrų yra kompiliatoriaus direktyvų atitikmenys. Keletą dažniausiai vartojamų:

Force far calls Word align data Overlays allowed Range checking Stack checking I/O checking Debug information

(vartoti tolimus kreipinius) yra direktyvos $F analogas, tik veikia visuotinai. (duomenų lygiavimas ties žodžio riba) yra direktyvos $A analogas. (persiklojantys moduliai) yra direktyvos $0 analogas. (intervalo rėžių tikrinimas) yra direktyvos $R analogas. (dėklo tikrinimas) yra direktyvos $S analogas. (įvesties ir išvesties operacijų tikrinimas) yra direktyvos $1 analogas. (derinimo informacija) yra direktyvos $D analogas.

Memory sizes - atminties panaudojimo parametrai. Ši komanda atidaro atminties panaudojimo dialogo langą, kuriame nurodomas atminties perskirstymas programai. Jei vykdant programą nepakaks nurodytos atminties, tai programos darbas bus nutrauktas ir bus pranešta apie klaidą. Šio dialogo langas yra kompiliatoriaus direktyvos $M analogas.

Page 246: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Linker - sisteminių ryšių redaktoriaus parametrai. Ši komanda reikalinga, kai kompiliuojant programą kuriamas jos objektų modulis. Tuomet ryšių redaktorius planuoja modulių išdėstymą pagrindinėje (operatyviojoje) atmintyje ir organizuoja informacinius ryšius tarp jų.

Debbuger - derinimo parametrai. Ši komanda atidaro derinimo parametrų langą, apie kurį jau buvo kalbėta anksčiau. Šiame lange nustatomi parametrai, turintys įtakos visai programų derinimo sistemai.

Directories - katalogai. Ši komanda atidaro katalogų dialogo langą, kuriame nurodoma, kur Turbo Paskalio sistema turi įrašyti bei ieškoti bylų. Dialogo lange yra keturi įvedimo langai: E X E & TPU directory lauke nurodoma, kur rašyti vykdomas (.exe) ir objektų modulių (.tpu) bylas; įjungiamų katalogų (Include directories) lauke nurodomi katalogai, kuriuose reikia ieškoti įjungiamų bylų; modulių katalogų (Unit directories) - katalogus, kuriuose yra standartinių Turbo Paskalio ir vartotojo bibliotekų bylos; objektų bylų katakogų (Objeck directories) - katalogus, kuriuose yra objektų (.obj) bylos.

Tools - priemonės. Environment - terpės parametrai. Ši komanda atidaro papildomą meniu langą, kuriame yra komandos,

įgalinčios keisti įvairios terpės, spalvų parinkimo, pelės, redaktoriaus parametrus.

Window grupės komandos

Langas - tai ribota ekrane matomo vaizdo dalis, kuri turi aiškią paskirtį ir kurią galima atverti, užverti, keisti dydį, aktyvumą, poziciją kitų langų ar ekrano atžvilgiu.

Tile - gretutiniai langai. Ši komanda atvertus redagavimo langus išdėsto taip, kad jie visi matytųsi ekrane vienas greta kito.

Cascade - pakopiniai langai. Ši komanda visus atvertus redagavimo langus išdėsto taip, kad jie būtų vienas ant kito, pakopomis, tačiau matytųsi jų antraštės.

Close all - užverti visus - užveriami visi langai. Close - užverti - užveria aktyvųjį langą.

Refresh display - atstatyti ekrano vaizdą. Ši komanda atkuria integruotos terpės standartinį ekrano vaizdą, jeigu įvairios programos jį buvo pakeitusios.

Size/Move - lango dydžio keitimas klavišais (Ctrl + F5). Nurodžius šią komandą žymeklio krypties klavišais galima keisti lango dydį.

Zoom - lango dydžio keitimas pele (F5). Pasirinkus komandą Zoom viršutiniame dešiniajame kampe pasirodo rodyklė ()) ties ja nustatę pelės žymeklį ir spustelėję kairįjį pelės klavišą, galime padidinti langą iki maksimalaus. Jei viršutiniame dešiniajame kampe yra rodyklė, tai reiškia, kad, esamas langas yra maksimalus, pasirinkę šią rodyklę pele, galime tik sumažinti šį langą iki anksčiau buvusio.

Next - tolesnis (F6). Ši komanda suaktyvina tolesnį langą, t. y. tą, kurio numeris yra vienetu didesnis negu to, kuris buvo aktyvus. Jei atvertas paskutinis langas, tai aktyviu taps langas, kurio numeris lygus 1.

Previous - ankstesnis (Shift+F6). Ši komanda suaktyvina ankstesnį langą, t. y. tą, kurio numeris yra vienetu mažesnis negu to, kuris buvo aktyvus. Jeigu aktyviojo lango numeris buvo 1, tai ši komanda atvers langą su didžiausiu numeriu.

Page 247: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

List - langų sąrašas. Šia komanda atveriamas dialogo langas (Window List), kuriame yra langų sąraše laukas. Jame išvardijami visi atverti langai. Pasirinkus bet kurią bylą iš sąrašo, jos langas tampa aktyviu. Jeigu pasirenkamas užvertas langas, tai jis atveriamas įkeliant į jį bylą, kuri buvo jame prieš užveriant langą.

Help grupės komandos

Turbo Paskalio integruota terpe turi puikų žinyną (Help). Jame pateikiamas išsamus integruotos terpės bei Turbo Paskalio kalbos aprašas. Žinyną sudaro langas (puslapiai), kiekvienas iš jų pateikia bazinio žodžio, procedūros, funkcijos ar kitos konstrukcijos arba integruotos terpės elemento aprašymą.

Norint sužinoti apie žymekliu rodomą konstrukciją, reikia paspausti klavišų porą Ctrl + F1.

Page 248: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

2 priedas. Standartinės Paskalio procedūros ir funkcijos Pateiksime ne visas Paskalio ir Turbo Paskalio standartines procedūras bei funkcijas, esančias modulyje

System (kurio aprašyti nereikia), o tik svarbiausias, kurios vartojamos vadovėlyje arba gali būti reikalingos užduotims atlikti.

Aritmetinės funkcijos

function Abs (X): argumento tipas; Rezultatas yra argumento X absoliutinė reikšmė. Rezultato tipas sutampa su argumento

tipu ( i n t e g e r arba r e a l ) ,

function ArcTan (X: real) : r e a l ; Skaičiuoja duoto argumento X arktangentą.

function Cos (X: real) : rea l ; Skaičiuoja duoto argumento X kosinusą.

function Exp (x: real) : rea l ; Skaičiuoja duoto argumento X eksponentę.

function Frac (X: real) : r e a l ; Grąžina duoto argumento X trupmeninę dalį.

function I n t (X: real) : rea l ; Grąžina duoto argumento X sveikąją dalį.

function Ln (x: real) : rea l ; Skaičiuoja duoto argumento X natūralųjį logaritmą.

function P i : r e a l ;

Grąžina reikšmę 3.1415926535897932385.

function S i n (x: real); rea l ;

Skaičiuoja duoto argumento X sinusą,

function Sqr (X): < toks t ipas, kaip parametro X >;

Skaičiuoja duoto argumento X kvadratą,

function Sqrt (X: real) : r e a l ; Skaičiuoja duoto argumento X kvadratinę šaknį.

Atminties dinamiško paskirstymo paprogramės

procedure Dispose (var P: pointer [, destructor]);

Išlaisvina dinamiškai išskirtą atmintį,

procedure FreeMem (var P: pointer; k iek i s : word);

Išlaisvina nurodyto dydžio dinamiškai išskirtą atmintį,

procedure GetMem (var P: pointer; k iek i s : word);

Išskiria nurodyto dydžio dinaminę atmintį,

procedure Mew (var P: pointer [, Pradžia: constructor]);

Išskiria dinaminę atmintį,

function MaxAvail: longint;

Nustato didžiausio vientiso dinaminėje atmintyje esančio bloko apimtį,

function MemAvail: longint; Suskaičiuoja visų neužimtų dinaminėje atmintyje blokų apimtį.

Page 249: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Vykdymo valdymo procedūros

procedure E x i t ;

Nutraukia aktyvaus programinio bloko darbą,

procedure Halt [(Kodas: word)];

Nutraukia programos vykdymą,

procedure RunError [(KlaidosKodas: byte)]; Nutraukia programos vykdymą ir formuoja klaidos kodą.

Duomenų mainų paprogramės

procedure Assign (var BylosKintamasis; BylosVardas);

Prijungia išorinę bylą.

function Assigned (var p): boolean;

Analizuoja, ar rodyklės tipo kintamasis apibrėžtas N i l .

procedure ChDir (KatalogoVardas: string);

Pakeičia aktyvųjį katalogą naujai nurodytu,

procedure Close (var BylosKintamasis);

Uždaro atvertą bylą.

function Eof [(var BylosKintamasis: text)]: boolean;

Analizuoja tekstinės bylos pabaigą,

function Eof [(var BylosKintamasis)]: boolean

Analizuoja tipinės arba betipės bylos pabaigą,

procedure Erase (var BylosKintamasis);

Naikina išorinę bylą.

function F i lePos (var BylosKintamasis): longint;

Randama bylos aktyvaus elemento pozicija,

function F i l e S i z e (var BylosKintamasis): longint;

Randamas bylos elementų skaičius,

procedure GetDir (TvarkyklėsNumeris: byte; var E i l u t ė : string);

Grąžina aktyviojo katalogo vardą nurodytoje tvarkyklėje,

function lOResult: integer; Grąžina paskutinės įvedimo ar išvedimo operacijos pabaigos kodą. Jeigu nebuvo klaidų,

funkcijos reikšmė lygi nuliui,

procedure MkDir ( E i l u t ė : string); Sukuria katalogą.

procedure Rename (var BylosKintamasis; Naujas vardas);

Pakeičia išorinės bylos vardą,

procedure Reset (var BylosKintamasis [: f i l e ; Buferis: word]);

Atidaro bylą skaitymui,

procedure Rewrite (var BylosKintamasis [: f i l e ; Buferis: word]);

Atidaro bylą rašymui,

procedure RmDir ( E i l u t ė : string);

Pašalina tuščią katalogą. Jeigu netuščias - vadinasi, klaida,

procedure Seek (var BylosKintamasis; N: longint);

Padaro aktyvų N-ąjį bylos elementą,

procedure Truncate (var BylosKintamasis); Pašalina bylos elementus nuo aktyvaus iki bylos galo.

Page 250: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Įvairios paprogramės

procedure Exclude (var Aibė: set of Tipas; Elementas: Tipas);

Iš aibės pašalina elementą,

procedure F i l l c h a r (var X; Kiekis : word; Reikšmė);

Nurodytą reikšmių skaičių surašo į atmintį, pradedant baitu, kurio adresą nurodo kin

tamasis X.

function Hi (X): byte; Grąžina kintamojo X vyriausiojo baito reikšmę.

function High (X)

Grąžina didžiausią reikšmę iš kintamojo X reikšmių,

procedure Include (var Aibė: set of Tipas; Elementas: Tipas); Prie aibės prijungia naują elementą.

function Lo (x): byte; Grąžina kintamojo X jauniausiojo baito reikšmę.

function Low (x);

Grąžina mažiausią reikšmę iš kintamojo X reikšmių,

procedure Move (var Kl, K2; Kiek: word);

Kopijuoja nurodytą skaičių baitų iš kintamojo Kl į K2.

function ParamCount: word;

Grąžina parametrų skaičių, esantį programos komandų eilutėje,

function ParamStr (indeksas): str ing;

Grąžina komandų eilutėje nurodyto indekso parametro reikšmę,

function Random [(Riba: word)]: Sutampa_su_kintamojo_tipu; Grąžina atsitiktinį skaičių, ne didesnį už nurodytą ribą. Jei riba nenurodoma, tai reikšmė

bus intervale [0..1],

procedure Randomize;

Paruošia darbui atsitiktinių skaičių generatorių su pradine atsitiktine reikšme,

function SizeOf (x): integer;

Grąžina argumento X baitų kiekį,

function Swap (X): Sutampa_su_kintamojo_tipu;

Sukeičia vyriausiojo ir jauniausiojo kintamojo baitų reikšmes vietomis,

function UpCase (simbolis: char): char; Pakeičia raides (simbolius) didžiosiomis.

Sekos paprogramės

procedure Dec (var X [; N: longint]); Sumažina kintamojo X reikšmę dydžiu N. Numatytoji reikšmė - vienetas.

procedure Ine (var X [; N: longint]);

Padidina kintamojo X reikšmę dydžiu N. Numatytoji reikšmė - vienetas,

function Odd (x: longint): boolean;

True, jeigu reikšmė X yra nelyginė,

function Pred (X): Argumento_tipas;

Grąžina ankstesnę argumento reikšmę,

function Succ (X): Argumento_tipas; Grąžina tolesnę argumento reikšmę.

Page 251: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Rodyklės ir adresų funkcijos

function Addr (X): pointer;

Grąžina argumento adresą,

function CSeg: word;

Grąžina CS registro reikšmę,

function DSeg: word;

Grąžina DS registro reikšmę,

function Ofs (x): word;

Grąžina argumento adreso postūmio reikšmę,

function Ptr (Segmentas, Postūmis; word): pointer;

Formuoja rodyklę į nurodytą adresą, kuris nurodomas atskiromis dalimis,

function Seg (X): word;

Grąžina argumento adreso segmento reikšmę

function SPtr: word;

Grąžina SP registro reikšmę,

function SSeg: word; Grąžina SS registro reikšmę.

Darbo su eilutėmis paprogramės

function Concat ( s l [, s2, sn|: string): str ing; Sujungia eilutes į vieną,

function Copy (S: s tr ing; Indeksas: integer; Kiek: integer): s tr ing; Nuo indeksu nurodytos vietos išskiria iš eilutės S nurodytą simbolių skaičių (arba iki galo).

procedure Delete (var S: str ing; Indeksas: integer; Kiek: integer): s tr ing; Nuo indeksu nurodytos vietos pašalina iš eilutės S nurodytą simbolių skaičių (arba iki galo).

procedure I n s e r t ( E i l u t ė : str ing; var S: str ing; Indeksas: integer); Įterpia eilutę į S simbolių seką nuo nurodyto indekso,

function Length (s: string): integer;

Grąžina eilutės S ilgį.

function Pos ( E i l u t ė : str ing; S: string): byte;

Ieško eilutės pasikartojimo pradžios simbolių sekoje S.

procedure S t r (X [: Dydis [: Skaitmenys]]; var S: string); Skaičių X paverčia simbolių eilute. Galima nurodyti formatą (analogija spausdinant su W r i t e procedūra),

procedure Vai (S; var V; var Kodas: integer); Simbolių seką S verčia skaičiumi V ( r e a l arba i n t e g e r ) . Klaidingo simbolio numeris grąžinamas kaip kodas.

Darbo su bylomis paprogramės

procedure Append (var BylosKintamasis: text); Atidaro egzistuojančią bylą, kad būtų galimąją papildyti gale.

function EoLn [(var BylosKintamasis: text)]: boolean;

Analizuoja bylos eilutės pabaigą,

procedure Flush (var BylosKintamasis: text);

Užrašo į bylą buferyje likusius simbolius,

procedure Read (BylosKintamasis, VI [, V2, Vn]); Iš įvardytos bylos skaito kintamųjų reikšmes.

Page 252: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

procedure Read ([var BylosKintamasis: text;] VI [, V2, vn]); Iš tekstinės bylos skaito kintamųjų reikšmes,

procedure ReadLn ([var BylosKintamasis: text;] VI [, V2, Vn]);

Iš tekstinės bylos skaito kintamųjų reikšmes,

function SeekEof [(var BylosKintamasis: text)]: boolean; Praleidžia tarpus, tabuliacijos ženklus, eilutės pabaigos simbolius ir grąžina True, jeigu

po to bus bylos pabaiga,

function SeekEoln [(var BylosKintamasis: text)]: boolean;

Praleidžia tarpus ir tabuliacijos ženklus ir grąžina True, jeigu po to bus eilutės pabaiga,

procedure SetTextBuf (var BylosKintamasis: text; var Buferis [; Dydis: word]);

Išskiria bylos kintamajam buferį, kurio dydis nurodomas baitais, procedure Write (BylosKintamasis, VI [, V2, Vn]);

Į tipinę bylą surašo kintamųjų reikšmes,

procedure Write ([var BylosKintamasis: text;] PI [, P2, Pn]);

I tekstinę bylą surašo argumentų reikšmes,

procedure WriteLn ([var BylosKintamasis: text;] PI [, P2, Pn]); Į tekstinę bylą surašo argumentų reikšmes.

Pakeitimo (transformavimo) funkcijos

function Chr (x: byte): char; Grąžina nurodytą kodu simbolį,

function Ord (x): longint;

Grąžina nurodytos sekos elemento kodą.

function Round (X: real) : longint;

Realųjį skaičių paverčia sveikuoju (integer) - suapvalina,

function Trunc (X: real) : longint", Realųjį skaičių paverčia sveikuoju (integer) - atmeta trupmeninę dalį.

Darbo su netipinėmis bylomis procedūros

procedure BlockRead (var BylosKintamasis: f i l e ; var Buferis; Kiek: word [; var Rezultatas: word]);

Skaito iš netipinės bylos į buferį nurodytą baitų skaičių. Rezultatas - perskaitytų baitų skaičius.

procedure Blockwrite (var BylosKintamasis: f i l e ; var Buferis; Kiek: word [; var Rezultatas: word]);

Perrašo iš buferio į netipinę bylą nurodytą baitų skaičių. Rezultatas yra užrašytų baitų skaičius.

Page 253: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

3 priedas. Pagrindinės Crt bibliotekos priemonės

Page 254: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Window(xl, y l , x2, y2: byte); Užrašo į WindMin ir WindMax aktyviojo lango koordinates

GoToXY(x, y: byte); Perkelia žymeklį į aktyviojo lango poziciją (x,y).

Delay(laikas: word); Stabdo veiksmus nurodytą laiko tarpą milisekundėmis.

Funkcijos WhereX: byte;

Praneša žymeklio stulpelio numerį aktyviajame lange.

WhereY: byte; Praneša žymeklio eilutės numerį aktyviajame lange.

KeyPressed: boolean; Reikšmė False tol, kol nepaspaudžiamas koks nors klavišas.

ReadKey: char; Paspausto klavišo simbolis.

Lo(Kint: word): word;

Grąžina žodžio K i n t jaunesniojo baito reikšmę. Hi(Kint: word): word;

Grąžina žodžio K i n t vyresniojo baito reikšmę. Pastaba. Norint atstatyti funkcijos KeyPressed pradinę reikšmę False, reikia pašalinti iš įvedimo buferio nuspausto klavišo reikšmę. Tam gali būti panaudota funkcija ReadKey arba procedūra ReadLn.

Programavimo elementai Čia surašytos rečiau naudojamos priemonės, kurios leidžia pagreitinti programos darbą.

Aktyvių spalvų keitimas

T e x t A t t r := SimbolioFonas*16 + SimbolioSpalva + 128. T e x t A t t r := Green *16 + Red + B l i n k ; Tai tolygu tokiems veiksmams: TextBackColor(Green );

TextColor (Red+Blink);

Aktyviojo lango keitimas

WindMin := (Yl-1) * 256 + (XI-1);

WindMax := (Y2-1) * 256 + (X2-1); Tai tolygu kreipiniui į procedūrą: window(xl, Yl, X2, Y2); Lango koordinatės kintamuosiuose WindMin ir WindMax saugomos vienetu sumažintos. Aktyviojo lango koordinačių reikšmes galima taip sužinoti:

XI := Lo(WindMin) +1; X2 := Lo(windMax) +1; Yl := Hi(WindMin) +1; Y2 := Hi(WindMax) +1;

Žodžių analizės funkcijos Lo ir Hi atskiria žodį sudarančių baitų reikšmes. Dviejų baitų informaciją sujungti galima: Pirmasis būdas: x := 15 * 256 + 18; Reikšmė lygi 1518 Antrasis būdas: type i n f = r e c o r d a, b: byte end;

var X : word;

i n f(x ) . a := 15;

i n f(x ) . b := 18; Čia naudojamas tipų interpretavimo keitimo veiksmas.

Page 255: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

Ekrano atmintis

Kompiuterio ekrane galime užrašyti 25 eilutes po 80 simbolių, tai yra 2000 simbolių. Ekrano simbolį apibrėžia jo reikšmė, spalva, fono spalva ir vieta ekrane. Duomenys apie ekrano simbolius yra saugomi atminties zonoje, kurios adresas $B800:$0000. Simbolį aprašančio žodžio struktūra:

Nulinis baitas saugo spalvas, o jo struktūra tokia pat, kaip kintamojo TextAttr. Pirmas baitas saugo vaizduojamo simbolio kodą. Norint duomenis tiesiogiai rašyti į ekrano atmintį, reikia sukurti žodžių masyvą, kurio adresas sutaptų su ekrano atminties adresu. Pavyzdžiui:

bkrane matysime žalią simBoų K raudoname tone. Jeigu dirbame ne visame ekrane, o lange, kurio koordinatės saugomos kintamuosiuose windMin ir windMax lokalines simbolio koordinates reikės perskaičiuoti: v i e t a := (Hi(windMin) + Y - 1) * 80 + Lo(WindMin) + X; Ekrano atmintį gali būti patogiau interpretuoti kaip dvimatį masyvą:

Norint užrašyti simbolį ekrano taške (X,Y), simbolio vieta masyve skaičiuojama taip:

Page 256: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei

4 priedas. Pagrindinės Dos bibliotekos priemonės Dažniausiai vartojamos tokios bylų tvarkymui skirtos priemonės.

Konstantos

Page 257: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 258: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 259: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 260: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 261: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 262: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 263: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 264: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 265: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 266: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 267: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 268: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 269: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 270: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 271: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 272: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 273: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei
Page 274: J.Blonskis, V.Dagienė - Programavimo pradmenys 11-12 klasei