Algoritmai

TURINYS

1. ALGORITMAVIMO PAGRINDAI 3

1.1. Algoritmo samprata 3

1.2. Žodinis algoritmas 4

1.3. Algoritmo blokinės schemos elementai 5

1.4. Algoritmo blokinės schemos pavyzdys 8

1.5. Algoritmo “prasukimas” 11

1.6. Struktūrinio programavimo principai 13

1.7. Elementarios algoritmavimo stuktūros 14

1.8. Elementari algoritmavimo struktūra-kompozicija 15

1.9. Elementari algoritmavimo struktūra – alternatyva 17

1.10. Elementarios algoritmavimo struktūros-kartojimai 23

1.10.1. Elementari algoritmavimo struktūra CIKLAS WHILE 24

1.10.2. Elementari algoritmavimo struktūra CIKLAS REPEAT 26

1.10.3. Elementari algoritmavimo struktūra CIKLAS FOR 28

1.11. Struktūrinė ir nestruktūrinė programos 32

1.12. Paprogramės 40

1.13. Kai kurių charakteringų programavimo uždavinių algoritmai 48

1.13.1. Masyvo užpildymas atsitiktiniais skaičiais 48

1.13.2. Maksimumo ir minimumo ieškojimas masyve 50

1.13.3. Masyvo elementų rikiavimas didėjimo tvarka 52

1.13.4. Ciklinis sumavimas 54

1.13.5. Ciklinė daugyba 56

1.13.6. Vėliavėlių panaudojimas algoritmo keliams nustatyti 57

1.13.7. Polinomo šaknies radimas nurodyto taško aplinkoje 59

2. PROGRAMAVIMAS TURBO PASKALIU 62

2.1. Turbo Paskalio moduliai 62

2.2. Vartotojo moduliai 631. ALGORITMAVIMO PAGRINDAI

1.1. Algoritmo samprata

Žmogus savo veikloje privalo išspręsti gausybę uždavinių. Jam ggali talkinti kompiuteris, tačiau kiekvienam uždaviniui spręsti kompiuteris turi būti tinkamai užprogramuotas.

Kalbant bendrai, kiekvienas sprendėjas (vadinkime jį procesoriumi) privalo turėti paruoštą uždavinio sprendimo ALGORITMĄ.

ALGORITMU vadinama baigtinė nuoseklių veiksmų seka, kurią procesorius turi atlikti su pradiniais duomenimis, kad gautų uždavinio sprendinį.

Priklausomai nuo to, kas sprendžia uždavinį (kas yra uždavinio sprendimo procesorius), algoritmas gali būti pateikiamas įvairiai:

-kompiuterio mikroprocesoriui algoritmą reikia pateikti mašinine kalba (dvejetainis, aštuntainis arba šešioliktainis kodai), nes tik tokią kalbą supranta mikroprocesorius;

-žmogui, esančiam procesoriaus vaidmenyje, algoritmą galima pateikti daugelyje formų:

-teksto forma, t.y, programos , parašytos pseudo kodu, arba bet kuria, algoritmine kalba (paskalis, fortranas,., asembleris, mašininė kalba);

-grafine forma, t.y, blok-schemos arba struktūrogramos pavidalu.

Pirmiausia išsiaškinkime, kodėl pradėjom kalbėti apie žmogų kaip procesorių. Reikia priminti, kad kompiuteris pats dar nnėra išsprendęs nei vieno uždavinio, o sprendžia uždavinį tik tuomet, kai žmogus sudaro to uždavinio sprendimo ALGORITMĄ ir jį užkoduoja (parašo programą) taip, kad būtų “aišku” kompiuteriui.

Tagi, žmogus paprastai k u r i a uždavinio sprendimo algoritmą,

o kompiuteris tik v y k d o sukurtą ir patikrintą algoritmą.

Pateiksime tekstinės algoritmo formos pavyzdį, parodydami algoritmą dviejų sveikų skaičių bendro didžiausio daliklio radimui. Bendru atveju, minėtam uždaviniui galima parašyti visą eilę algoritmų, mes pateiksime Euklido pasiulytą variantą, naudojant atėmimo veiksmą.1.2. Žodinis algoritmas

1. Pradžia

2. Užrašyti du sveikus teigiamus skaičius M ir N

3. Nustatyti, kuris iš užrašytųjų skaičių yra didesnis.Didesnįjį skaičių pavadinti TURiniu, o mažesnįjį – ATĖminiu

4. Rasti TURinio ir ATĖminio skirtumą

(SKIR=TUR-ATĖ )

5. Patikrinti ar skirtumas nelygus nuliui ( SKIR<>0 ?)

5.1. Jeigu TAIP (SKIR<>0), eiti į 6 punktą

5.2. Jeigu NE (SKIR=0), eiti į 11 punktą

6. Patikrinti ar gautas SKIRtumas didesnis už buvusį ATĖminį (SKIR>ATĖ ?)

6.1. Jei TAIP, eiti į 7 punktą

6.2. Jei NE, eiti į 8 punktą

7. Naujam TURiniui priskirti buvusiojo SKIRtumo reikšmę ir eiti į 9 punktą

8. Naujam TURiniui priskirti buvusiojo ATĖminio reikšmę, o naujajam ATĖminiui priskirti buvusio SKIRtumo reikšmę.

9. Rasti naują SKIRtumo reikšmę

10. Eiti į 5 punktą

11. Bendru didžiausiu dalikliu (BDD) pavadinti paskutiniojo skirtumo veiksmo AATĖminį (BDD=ATĖ)

12. Atsakymas:

Dviejų sveikų skaičių M= ir N= bendras didžiausias daliklis BDD=

13. Pabaiga

Kūrimo ir tikrinimo procese naudotina informatyviausia – grafinė algoritmo forma, pvz., algoritmo blokinė schema.1.3. Algoritmo blokinės schemos elementai

Atskirus algoritmo veiksmus (veiksmų grupes) grafiškai priimta vaizduoti skirtingomis geometrinėmis figūromis vadinamomis blokais. Projektuojant arba analizuojant algoritmo blok-schemą nustatoma sprendimo proceso valdymo perdavimo, iš vieno bloko į kitą, tvarka.

Kiekvienam algoritmui privalu turėti pradžios ir pabaigos blokus. Valdymo procesas prasideda PRADŽIOS bloke , nuosekliai praeina visus algoritmo blokus ir bagiasi PABAIGOS bloke. Priimta tuos blokus vaizduoti tam tikrų matmenų ovalais, su juose įrašytais žodžiais PRADŽIA ir PABAIGA (kaip parodyta pav.1). Kiekvieną bloką rėminanti linija kairiajame viršutiniame kampe privalo būti trūki, čia įrašomas bloko numeris. Visi blokai numeruojami pradedant pradžios ir baigiant pabaigos bloku.

PASTABA.

Kadangi PRADŽIOS ir PABAIGOS blokai yra unikalūs, tai jų numeracija nebūtina.

Paprastai sprendimą (algoritmą) sudaro nuosekli veiksmų kompozicija, todėl pageidautina ir blokus numeruoti pagal valdymo perdavimo eigą .

Nesudėtingame algoritme, kai jo blokinė schema telpa į vieną lapą, blokus numeruojame sveikais skaičiais. Jeigu algoritmas sudėtingas ir jam pavaizduoti reikia kelių lapų, tai bloko numeracija gali turėti kelias dalis, atskirtas taškais: pvz. -2.12 (lapo numeris.bloko numeris). Santakos blokus (paprastai tai atitinkamo spindulio apskritimai, kurių viduje nurodytas vardas) įvardinti taip pat galima skaičiais, bet galima iir raidėmis.

Pav. 1. Algoritmo blokinės schemos grafinio vaizdavimo elementai

Aritmetinių ir loginių veksmų blokas vaizduojamas stačiakampiu, su jame įrašytais aritmetinių (loginių) išraiškų sakiniais (pav.1. -2 blokas).

Sąlygos tikrinimo blokui vaizduoti naudojama rombo forma (4-blokas) , jo viduje įrašoma tikrinama sąlyga.

Informacijos įvedimo/išvedimo blokui panaudota lygiagretainio forma, kur įvedami/išvedami duomenys užrašomi skliaustuose. Įvedimo bloko kairiojoje pusėje įrašomas požymis IN, išvedimo bloke-požymis OUT (8-BLOKAS).

Kreipimosi į paprogramę blokas turi stačiakampio su dvigubom šoninėm linijom formą, jame nurodoma, kuriai paprogramei bus perduodamas valdymas.

Visi algoritmo blokai tarpusavyje sujungiami taip vadinamomis valdymo linijomis, kurios gali būti tik vertikalios arba tik horizontalios.Valdymo krypčiai nurodyti valdymo linijos užsibaigia rodyklėmis.

PASTABA. Jeigu valdymas perduodamas į dešinę arba žemyn, linijos gale rodyklės nebūtinos.

Išskyrus blokus, kuriuose vienaip ar kitaip tikrinama sąlyga, valdymo linijos į bloką patenka tik iš viršaus, išeina tik iš apačios. Į sąlygos tikrinimo blokus valdymas gali patekti tik iš viršaus, išeiti – tik per šonus. Išimtį sudaro tik FOR ciklo parametro modifikavimo ir sąlygos tikrinimo blokas (pav.1- 5 blokas), kur šalia pagrindinio įėjimo viršuje, kairėje pusėje yra dar modifikuoto parametro įėjimas.

Valdymo linijos gali sueiti į vieną vietą, ji žymima apskritimu ir vadinama sąntakos bloku. Apskritimo viduje gali būti nurodyta sąntakos žymė (pav1.-α). Į sąntaką valdymo linijos gali įįėiti ir išėiti iš bet kurios pusės, tačiau keliama sąlyga-įėjimai gali būti keli, išėjimas tik vienas.

Kai algoritmo schema gaunasi sudėtinga, neimanoma išvengti valdymo linijų kryžiavimosi, tenka linijas nutraukti. Nutraukimo vietose dedamos ŽYMĖS, rodančios iš kur ateina nutrauktoji linija (iš kurio bloko) ir kur ji nueina toliau (į kurį bloką) (pav1. -6 ir 7 blokai).1.4. Algoritmo blokinės schemos pavyzdys

Grižkime prie dviejų sveikų skaičių bendro didžiausio daliklio radimo, tik šiuo atveju algoritmą pateiksime grafine forma (pav.2.).

Kaip matome iš pav.2., algoritmas pirmiausia reikalauja įvesti du sveikus skaičius M ir N (blokas 1). Toliau tikrinama, kuris iš įvestųjų skaičių yra didesnis. Jeigu didesnis M, tai 3 – bloke M pavadinamas TUR, o N – ATĖ, priešingu atveju kintamajam TUR priskiriama N – reikšmė, o kintamajam ATĖ – M – reikšmė (4 blokas).Toliau, iš Didesniojo (TUR) skaičiaus atimamas mažesnis (ATĖ) ir skirtumas patalpinamas į lastelę SKIR (5 blokas). Toliau įeiname į t.v. WHILE ciklą, kuriame, priklausomai nuo to ar vykdoma 6 bloko sąlyga, ciklo kūne aprašyti veiksmai gali būti kartojami. Taigi, tikrinama, ar skirtumas nelygus nuliui (6 blokas). Jeigu taip (SKIR<>0,t.y.sąlyga tenkinama-kartojami 7-10 blokų vaiksmai) , jeigu ne (SKIR=0), tai 11 bloke lastelei Bdd (Bendras didžiausias daliklis) priskiriama ATĖ reikšmė ir einama į 12, rezultatų

išvedimo bloką ir toliau į pabaigą. Ciklo kūne 7 bloke tikrinama ar SKIR>ATĖ. Jeigu taip, tai 8 bloke vykdomas priskirimas TUR=SKIR, jei ne-9 bloke padaromi priskirimai: TUR=ATĖ;ATĖ=SKIR.Toliau,10 bloke vėl suskaičiuojama SKIRtumo reikšmė ir grįžtama į 6 bloką,tikrinti ar SKIR<>0.

Priklausomai nuo skaičių M ir N reikšmių veiksmai blokuose 6-10 gali būti kartojami cikliškai eilę kartų.

Pateikus algoritmui du sveikus teigiamus skaičius didesnius už nulį, po keletos ciklo while “ apsisukimų” SKIRtumo lastelėje gausime nulį ir bendras didžiausias tų skaičių daliklis bbus surastas.

Jeigu algoritmui pateikti vieną iš skaičių nulinės reikšmės, tai tokiame algoritme gausis amžinas ciklas, nes skirtumo lastelės reikšmė nesikeis ir , kadangi ji nelygi nuliui, tai negausime išėjimo iš ciko.

Jeigu tokiam algoritmui pateikti vieną skaičių neigiamą, tai irgi gausis amžinas ciklas.

Taigi, naudojant Euklido principą dviejų skaičių bendram didžiausiam dalikliui rasti, reikia numatyti atitinkamus “saugiklius”, leidžiančius išvengti amžino ciklo.

Pav. 2. Dviejų sveikų skaičių bendro didžiausio daliklio radimo algoritmo blokinė schema (pirma dalis)

Pav. 2. Dviejų sveikų skaičių bendro didžiausio ddaliklio radimo algoritmo blokinė schema (antra dalis)1.5. Algoritmo “prasukimas”

Patikrinkime pateiktą algoritmą su konkrečiais skaičiais, tegu M=27, N=12, t.y., p r a s u k i m e šį algoritmą. Prasukant algoritmą, paprastai sudaroma lentelė (lentelė 1), kurioje fiksuojami algoritmo bblokuose atlikti veiksmai.

Lentelėje paprastai būna tokios skiltys:

1. Veiksmo eilės numeris;

2. Bloko eilės numeris;

3. Veiksmas;

4. Sąlyga tenkinama?;

5. Kur eiti?;

6. Komentarai.

Lentelė 1. BDD algoritmo prasukimo l e n t e l ė

VEIKSM.

EILĖS

NUMER. BLOKO

EILĖS

NUMER.

V E I KSMAS SĄLYG.

TENK. NAA ? KU KUR ei e eiti

? KOMEN-

TARAI

1 1 M=27;N=12 —— į 2 bl Įvedimas

2 2 ?

M>N

Taip

į 3 bl

3 3 TUR=27;ATĖ=12 —— į 5 bl

4 5 SKIR=27-12=15 —— į 6 bl 1 ciklas

5 6 ?

SKIR<>0 Taip į 7 bl

6 7 ?

SKIR>ATĖ Taip į 8 bl

7 8 TUR=SKIR=15 —— į 10bl

8 10 SKIR=15-12=3 —— į 6 bl 2 ciklas

9 6 ?

SKIR<>0 Taip į 7 bl

10 7 ?

SKIR>ATĖ Ne į 9 bl

11 9 TUR=ATĖ=12

ATĖ=SKIR=3 ——- į 10bl

12 10 SKIR=12-3=9 —— į 6 bl 3 ciklas

13 6 ?

SKIR<>0 Taip į 7 bl

14 7 ?

SKIR>ATĖ Taip į 8 bl

15 8 TUR=SKIR=9 —— į 10bl

16 10 SKIR=9-3=6 —— į 6 bl 4 ciklas

17 6 ?

SKIR<>0 Taip į 7 bl

18 7 ?

SKIR>ATĖ Taip į 8 bl

19 8 TUR=SKIR=6 —— į 10bl

20 10 SKIR=6-3=3 —— į 6 bl 5 ciklas

21 6 ?

SKIR<>0 Taip į 7 bl

22 7 ?

SKIR>ATĖ Ne į 9 bl

23 9 TUR=ATĖ=3

ATĖ=SKIR=3 ——- į 10bl

24 10 SKIR=3-3=0 —— į 6 bl 6 ciklas

25 6 ?

SKIR<>0 Ne į 11 bl

26 11 Bdd=ATĖ=3 —— į 12 bl Rezultatas

27 12 OUT (M,N,Bdd) —— į 13 bl Išvedimas

28 13 PABAIGA

Kaip matosi iš lentelės, valdymas algoritmo blok-schemoje prasukęs 6ciklus, 26 žingsnyje pasiekė rezultatą. Toliau BDD išvedamas į ekraną ir einama į pabaigą.

Pateiktas BDD radimo algoritmas nėra efektyvus (ko norėti iš tūkstantmečio), efektyvesnis būtų algoritmas su dalybos veiksmu naudojant rekursiją, bet tai jau tolimesni klausymai. Pastebėsime, kad algoritmo blok-schemoje ir prasukimo lentelėje veiksmams koduoti buvo naudojamas, t.v., pseudokodas, leidžiantis atsiriboti nuo bet kurios algoritminės kalbos. Priklausomai nuo to, kokiame bloke įrašytas veiksmas, jis gali būti perskaitytas įvairiai. Pavyzdžiui, aritmetinių veiksmų bloke užrašas Sk=0 skaitomas taip:”kintamajam Sk priskirti reikšmę 0(nulis)” , o sąlygos tikrinimo bloke šis užrašas turi būti skaitomas-”Ar kintamojo Sk reikšmė lygi nuliui?”(Prasukimo lentelėje,aiškumo dėlei, sąlygos tikrinimo bloke virš sąlygos įrašytas klaustukas (?)).

Dabar, kai uždaviniui (pvz., Bdd) spręsti sudarytas ir patikrintas algoritmas, pagal jo blok-schemą galima pradėti rašyti programą viena, ar kita algoritmine kalba (pvz. PPASKALIU), t.y., užkoduoti algoritmą.1.6. Struktūrinio programavimo principai

Algoritmo blokinė schema (programa) gali būti aiški arba sunkiai suprantama. Tai priklauso ne tik nuo uždavinio sudėtingumo, bet ir nuo programavimo stiliaus.

Pastaruoju metu kompiuterių greitaeigiškumas ir operatyvinės atminties talpa nustojo būti pagrindiniais programų kriterijais. Dabar nebesvarbu ar programa užims vienu kilobaitu daugiau atminties ir ar jos vykdimas truks dešimt milisekundžių ilgiau. Svarbiausiu kriterijumi dabar tampa programos aiškumas kitiems vartotojams.Todėl programuotojams privalu laikytis tam tikrų principų, leidžiančių pasiekti programos aiškumą net ir sudėtingam uždaviniui. Šie principai pavadinti STRUKTŪRINIO PROGRAMAVIMO PRINCIPAIS. Išvardinsim keletą pagrindinių principų.

1. Bet kokio sudėtingumo uždavinio algoritmą galima sudaryti iš trijų elementarių algoritmavimo struktūrų kombinacijos, tai yra, iš KOMPOZICIJOS, ALTERNATYVOS ir KARTOJIMŲ struktūrų.

2. Elementaria algoritmavimo struktūra laikoma tokia struktūra, kuri turi tik vieną valdymo įėjimą ir vieną (valdymo) išėjimą, valdymas į strukturą įėina iš viršaus, o išeina iš apačios (struktūros viduje valdymas gali “suktis”).

3. Uždavinio sprendimo algoritmas turi būti atskirų elementarių struktūrų kompozicija, kurioje valdymas turi ateiti iš viršaus (PRADŽIOS bloko) ir nuosekliai praeiti visas struktūras iki apačios (PABAIGOS blokas).

4. Algoritmą (tuo pačiu ir programą) privalu daryti “draugišką” vartotojui, t.y. , panaudoti dialogo priemones vykdant programą bei pateikti komentarus programos tekste bei algoritmo blok-schemoje.1.7. Elementarios algoritmavimo stuktūros

Kaip jau minėta, algoritmo blok-schemą galima sudaryti atsiribojant nnuo bet kurios algoritminės kalbos, arba nuo aplinkos, kurioje bus vykdomas tas algoritmas. Tam tikslui algoritmo veiksmams užrašyti naudojamas pseudokodas.Toliau parodysime, kaip sudaromas struktūrinis algoritmas ir kaip jis koduojamas PASKALIO (PASCAL) ir MathCad’o (MATHCAD) aplinkose.

Paskalis parinktas todėl, kad tai universali aplinka, leidžianti spręsti įvairių sričių uždavinius (uždaviniai su tekstiniais sąrašais, duomenų masyvais, failais, techniniai, ekonominiai, inžinieriniai, matematiniai uždaviniai). Be to, Paskalis specialiai skirtas programavimo mokymui, todėl lengvai suprantamas ir įsisąvinamas. Tačiau, kaip ir kiekviena universali priemonė panaudota specialiose, siauruose srityse gali būti mažiau efektyvi negu specializuota tai sričiai priemonė. Pavyzdžiui veiksmus su matricomis galima užprogramuoti ir Paskaliu, tačiau tai žymiai paprasčiau ir efektingiau galima padaryti naudojant MathCad’o aplinką.

Aplamai, sprendžiant techninius, inžinierinius, matematinius uždavinius MathCad’o aplinka tampa nepakeičiama.1.8. Elementari algoritmavimo struktūra-kompozicija

Kompozicijos struktūros blokinė schema parodyta pav.3. Valdymas į struktūrą patenka per įėjimą ir perduodamas pirmam blokui (veiksmai 1). Atlikus visus pirmo bloko veiksmus, valdymas perduodamas antram blokui ir t.t., iki paskutinio struktūros bloko N. Atlikus N bloko veksmus, valdymas per išėjimą palieka strukrūrą.

Struktūroje parodyti blokai gali atstovauti pavienius veiksmus, arba alementarias algoritmavimo struktūras, bet gali atstovauti ir tam tikrus veiksmų rinkinius

Pav.3. Elementarios algoritmavimo struktūros KOMPOZICIJA blokinė schema

• Kompozicija Paskalio aplinkoje (pav.3.1)

Bet kuri Paskalio programa traktuojama kaip vykdomosios

programos dalies sakinių kompozicija. Vykdomojoje programos dalyje atsispindi visi programos algoritmo veiksmai, užkoduoti Paskalio sakiniais. Vykdomoji programos dalis talpinama tarp bazinių Paskalio žodžių Begin ir End. Inicijavus programą, valdymas perduodamas pirmajam Paskalio sakiniui (po Begin), įvykdomi jame užkoduoti veiksmai, toliau valdymas perduodamas antrajam, trečiajam ir t.t., iki paskutiniojo sakinio (esančio prieš End).

Pav. 3.1. Kompozicija Paskalio aplinkoje

• Kompozicija MathCad’o aplinkoje (pav.3.2)

MathCad’e, kaip ir Paskalyje, programa -tai atitinkamų MathCad’o sakinių kompoziciją. Tačiau, kadangi MathCad’as organizuotas kaip interpretatorius, čia programos nereikia net inicijuoti, uužtenka su žymekliu nurodyti atitinkamą sakinį ir jis bus vykdomas. Akivaizdu, kad norint gauti atsakymą reikia nuosekliai “praeiti” visą programą nuo pradžios iki galo.

MathCad’o (kaip ir Paskalio) programą galima parašyti struktūrišką ir nestruktūrišką. Struktūrinėje programoje naudojamos tik elementarios algoritmavimo (programavimo) struktūros, kurių charakteringas požymis – ilgas vertikalus brukšnys.

Pav. 3.2. Kompozicija MathCad’o aplinkoje1.9. Elementari algoritmavimo struktūra – alternatyva

Struktūros blok-schema parodyta pav.4. Valdymas per struktūros įėjimą patenka į 1 bloką, kur tikrinama sąlyga (Sąlygos tikrinimas susiveda į tai, kad tikrinama kokią reikšmę įįgija loginis reiškinys įrašytas sąlygos tikrinimo bloke).

Priminsime, kad loginis domuo gali turėti tik dvi reikšmes: True – tiesa (T) ir False netiesa (F) .Jeigu sąlyga tenkinama, t.y. , reiškinyje užrašyta tiesa, tai per išėjimą T valdymas perduodamas 2 blokui atlikti vveiksmus 1. Atlikus tuos veiksmus, valdymas per išejimą palieka struktūrą. Jeigu sąlyga netenkinama, tai per F valdymas perduodamas 3 blokui veiksmams 2 atlikti. Po to valdymas palieka struktūrą. Kadangi vienu metu sąlyga negali būti tenkinama ir netenkinama, tai alternatyvos struktūroje atliekami arba veiksmai 1, arba veiksmai 2.

Pav.4. parodyta struktūra vadinama pilnaja alternatyvos struktūra, nes yra ir trumpoji alternatyva(pav.5)

Šiuo atveju, jeigu sąlyga netenkinama, neatliekama jokių veiksmų (blokas veiksmai 2 – tuščias) ir išeinama iš struktūros. Jeigu sąlyga tenkinama, tai atliekami veiksmai 1 ir, po to išeinama iš struktūros.

Pav.4. Blok-schema elementarios algoritmavimo struktūros – pilnoji ALTERNATYVA

Pav.5. Blok-schema elementarios algoritmizavimo struktūros – trumpoji ALTERNATYVA.

Šalia Paprastos alternatyvos struktūros galima ir Sudėtinės alternatyvos struktūra (pav.6).

Čia taip pat galimos sąvokos:

1) pilnoji sudėtinė alternatyva – bloke otherwise uužprogramuoti konkretūs veiksmai;

2) ir trumpoji sudėtinė alternatyva, kuomet blokas otherwise-tuščias.

Pav. 6. Sudėtinės alternatyvos blokinė schema.

• Alternatyva Paskalio aplinkoje (pav.6.1)

Paskalio algoritminė kalba sudaryta prisilaikant struktūrinio programavimo principų (tai struktūrinė kalba), todėl ji “palaiko” elementarias algoritmizavimo struktūras atitinkamais Paskalio sakiniais. Pavyzdžiui, pilnajai alternatyvos struktūrai atitinka toks Paskalio sakinys (pilnasis IF):

IF (sąlyga) THEN veiksmai_1 ELSE veiksmai_2 ; .

Šiame sakinyje didžiosiomis raidėmis parašyti baziniai Paskalio kalbos žodžiai, o mažosiomis parašyti žodžiai turi tokia prasmę:

sąlyga –loginio tipo domuo arba vienas iš duomenų tarpusavio palyginimo vveiksmų(veiksmo rezultatas-loginio tipo domuo):

x>y {ar X daugiau už Y};

x>=y {ar X daugiau arba lygu Y};

xy {ar X nelygu Y},

arba loginė išraiška, pav. (flag and (X>=Y)), kur flag-loginio tipo domuo.

veiksmai_1,veiksmai_2 – atitinkamų veiksmų blokai arba pavieniai veiksmai.

Jeigu tai veiksmų blokas, jis turi būti paimtas į “loginius” skliaustus, t.y., turi būti įrašytas tarp bazinių Paskalio kalbos žodžių BEGIN ir END.

Trumpajai alternatyvos struktūrai atitinka trumpasis Paskalio IF sakinys:

IF (sąlyga) THEN veiksmai_1 ; .

Pastaba.

Pilname Paskalio sakinyje IF THEN ELSE prieš žodį Else negalima rašyti kabliataškio(;), nes jis pavers pilnąjį IF sakinį trupuoju IF sakiniu.

Pav. 6.1. Alternatyva Paskalio aplinkoje

Paskalis “palaiko” ir trumpąją sudėtinę alternatyvą, čia ji vadinama išrinkimo struktūra, o palaikoma sakiniu case(pav.6.2).

Pav. 6.2. Išrinkimas Paskalio aplinkoje.

• Alternatyva MathCad’o aplinkoje

MathCad’o aplinkoje palaikoma sudėtinės alternatyvos struktūra (parodyta pav.6.2). Kairėje brūkšnio užrašomas struktūros vardas, kuriam bus priskiriami visi dešiniau brūkšnio apybrėžti veiksmai. Šiuo atveju dešinėje pusėje išvardinti sąlyginiai prikirymo sakiniai, kurie bus įvykdyti, jeigu bus patenkinta atitinkama sąlyga. Paskutiniojo sakinio priskirymas bus vykdomas tik tuo atveju, jeigu visų aukščiau stovinčių sakinių salygos tikrinimo rezultatas-False. Akivaizdu, kad struktūra su sakiniu otherwise atitinka piln.ajai sudėtinei alternatyvai, o be šio sakinio gauname trumpąją sudėtinę alternatyvą.

Pav.6.2. Alternatyvos struktūra MathCad’o aplinkoje.1.10. Elementarios algoritmavimo struktūros-kartojimai <

Kartojimų struktūros būna trijų pavidalų, tai CIKLAS WHILE(ciklas su pre sąlyga), CIKLAS REPEAT(ciklas su post sąlyga) ir CIKLAS FOR (ciklas su žinomu kartojimų skaičiumi ).1.10.1. Elementari algoritmavimo struktūra CIKLAS WHILE

Struktūros blok-schema pateikta pav.7.

Pav.7. Elementari algoritmavimo struktūra – “ciklas while”

Patekęs į struktūrą, valdymas atsiduria pirmame bloke, kur tikrinama ciklo atlikimo (pre) sąlyga. Jeigu sąlyga tenkinama, tai per išėjimą T valdymas perduodamas 2 blokui , kur išvardinti cikliškai kartojami veiksmai (arba veiksmas). Atlikus kartojamus veiksmus , valdymas vėl patenka į pirmą bloką. Jei sąlyga netenkinama , per išėjimą F valdymas palieka struktūrą.

Taigi, jeigu norime atlikti ciklo kūne išvardintus veiksmus, reikia pirmame bloke pateikti tenkinamą sąlygą. Pasiekus ciklo kūne užprogramuotą rezultatą , sąlyga turi tapti netenkinama.

Priešingu atveju, t.y, jeigu ciklo kūne sąlyga nebus modifikuojama, galimas “amžinas ciklas”.

Ciklas dažnai naudojamas analitiniuose skaičiavimuose, pavyzdžiui, funkcijos tabuliavime.Tuomet apibrėžiamos funkcijos argumento kitimo ribos, argumentui suteikiama kairioji riba ir tikrinama sąlyga ar argumento reikšmė neviršyja dešiniosios ribos, ciklo kūne suskaičiuojama funkcijos reikšmė, argumento reikšmė padidinama žingsniu (čia žingsnis gali būti tiek sveikas, tiek trupmeninis) ir vėl tikrinama sąlyga.

Kadangi šiame cikle skaičiavimai kartojami KOL tenkinama sąlyga, ciklas dar vadinamas ciklu KOL (arba PAKOL).

• While Paskalio aplinkoje (pav.7.1)

Paskalio kalboje šiai struktūrai atitinka sakinys:

WHILE (salyga) DO ciklo_kūnas;

Jeigu ciklo kūne bus pateikti keli veiksmai, tai juos reikia rašyti tarp loginių skliaustų (begin ir end). To nepadarius bus kartojamas tik vienas, pirmasis sąrašo veiksmas.

Pav.7.1. Ciklas while Paskalyje

• While MathCad’o aplinkoje

Ciklas WHILE MathCad’o aplinkai parodytas pav. 7.2 Čia taip pat ciklo kūne sąlyga privalo būti modifikuojama, kitaip gausis “amžinas ciklas“.

Pav. 7.2. Ciklas While MathCad’o aplinkoje.1.10.2. Elementari algoritmavimo struktūra CIKLAS REPEAT

Struktūros Ciklas Repeat blokinė schema parodyta pav.8.

Pav.8. Blok-schema struktūros CIKLAS REPEAT

Patekus į struktūrą, valdymas perduodamas blokui ciklo_kūnas, kuriame išvardinti visi reikalingi atlikti veiksmai (arba vienas veiksmas). Atlikus minėtus veiksmus, valdymas patenka į ciklo baigimo (post) sąlygos tikrinimo bloką. Paprastai ciklo kūne būna užprogramuota pasiekti tam tikrą rezultatą, taigi, tikrinama sąlyga ar rezultatas pasiektas ar ne.

Jeigu rezultatas pasiektas, tai per išėjimą T išeinama iš struktūros, jei ne, per išėjimą F valdymas vėl perduodamas ciklo_kunas blokui.

Ši struktūra naudojama iteraciniuose skaičiavimuose, kai skaičiavimai kartojami IKI pasiekiamas rezultatas, todėl struktūra dažnai vadinama “CIKLAS IKI”.

• Repeat Paskalio aplinkoje (pav.8.1)

Paskalyje struktūra palaikoma sakiniu:

REPEAT ciklo_kūnas UNTIL (sąlyga) ; .

Pastaba.

Jeigu ciklo kūne išvardinti keli veiksmai, tai juos nebūtina imti į loginius skliaustus (begin – end), nes žodžiai REPEAT ir UNTIL taip pat tolygūs loginiams skliaustams.

Pav.8.1. Repeat Paskalio aplinkoje

MathCad’as struktūros REPEAT

nepalaiko!1.10.3. Elementari algoritmavimo struktūra CIKLAS FOR

Struktūros blok-schema pateikta pav.9.

Pav.9. Blok-schema ciklo su žinomu kartojimų skaičiumi.

Per struktūros įėjimą valdymas patenka į 1 bloką, kur ciklo parametrui cp priskiriama pradinė reikšmė pr. Toliau valdymas perduodamas 2 blokui, čia tikrinama sąlyga ar ciklo parametro cp reikšmė neviršija galinės (gr) reikšmės.

Jeigu taip, tai per išėjimą T einama į bloką 3 (ciklo_kunas) atlikti čia nurodytų veiksmų (veiksmo), toliau 4 bloke ciklo parametro reikšmė ( cp ) padidinama vienetu ir valdymas vėl perduodamas minėtos ssąlygos tikrinimui.

Jeigu sąlyga netenkinama, tai per išėjimą F valdymas palieka struktūrą.

• For Paskalio aplinkoje

Paskalio kalboje ši struktūra palaikoma sakiniu:

FOR cp:=pr TO gr DO ciklo_kūnas; .

Sakinyje didžiosiomis raidėmis pateikti baziniai Paskalio kalbos žodžiai, o kitų žodžių mnemonika tokia:

cp:=pr -ciklo parametrui (cp) priskirti pradinę reikšmę (pr);

gr -galinė ciklo parametro reikšmė;

ciklo_kūnas -veiksmai (arba veiksmas), kurie bus kartojami cikliškai, nurodytą kartų skaičių. Jeigu ciklo kūną sudaro keli veiksmai, tai juos reikia paimti į loginius skliaustus, t.y, pradėti veiksmų vardinimą žodžiu BEGIN, o užbaigti žžodžiu END, to nepadarius, procesorius kartos tik vieną, pirmąjį sąrašo veiksmą. .

Taigi,sakinys skaitosi taip:“Pradedant pradine ciklo parametro reikšme pr ir baigiant galine jo reikšme gr kartoti bloko ciklo_kunas veiksmus (veiksmą)“.

Kadangi struktūros brėžinys gana sudėtingas, pastaruoju metu grafiniam struktūros atvaizdavimui naudojama paprastesnė schema(pav.10):

Pav.10. Modifikuota struktūros ciklo FOR blok-schema.

Šioje schemoje šešiakampis blokas vadinamas FOR ciklo parametro modifikavimo ir sąlygos tikrinimo bloku. Be pagrindinio įėjimo viršuje,blokas turi modifikuoto parametro įėjimą kairėje. Jeigu ciklo parametro reikšmė neviršija galutinės, tai einama per T išėjimą į ciklo kūną , priešingu atveju per F išeinama iš struktūros.

Parodytoje srtuktūroje gr>pr ir ciklo parametras didinamas (vienetu).Jeigu norime,kad cp mažėtų (vienetu) ,tai atsitinka , kai pr>gr,FOR sakinį reikia užrašyti taip:

FOR cp:=pr DOWNTO gr DO ciklo_kūnas;

Struktūrą -ciklas su žinomų kartojimų skaičiumi patogu naudoti uždaviniuose su masyvo tipo duomenimis, nes masyvo elementų skaičius taip pat žinomas.

Pav.10.1. For paskalyje

• For MathCad’o aplinkoje

Ciklo FOR struktūra MathCad’o aplinkai parodyta pav. 10.2. Papildomai pastebėsime, kad ciklo parametru čia gali būti ne tik sveikas skaičius ((skaliaras), bet ir vektorius.

Pav.10.2. For MathCad’e1.11. Struktūrinė ir nestruktūrinė programos

• Paskalio aplinka

Imkime konkretų uždavinį ir sudarykime jo sprendimo algoritmą neprisilaikant ir prisilaikant struktūrinio programavimo principų.

Uždavinys tegul bus toks:padalinti du sveikus skaičius A ir B. Kadangi dalyba iš nulio negalima, tai numatyti tikrinimą, ar įvestasis skaičius B=0 ar ne. Jeigu taip, tai į ekraną išvesti “suflerį” ‘Dalyba iš nulio negalima, įveskite B iš naujo’ ir valdymą nusiusti į skaičiaus B įvedimą. Jeigu ne tai padalinti A/B ir rezultatą išvesti įį ekraną.

Šio uždavinio sprendimo algoritmo blok-schema parodyta pav.11. Pastebėsime, kad parodytas algoritmas “draugiškas” vartotojui. Čia numatyti atitinkami “sufleriai”, patariantys vartotojui, ką jis privalo daryti tame ar kitame algoritmo (programos) dialogo su vartotoju žingsnyje. Tačiau algoritmas nėra tobulas jau vien todėl, kad nenumato kaip perduoti valdymą iš 7 į 4 bloką, nenaudojant “žymių” .

Toliau bus parodyta, kaip tai galima padaryti panaudojant elementarią algoritmavimo struktūrą REPEAT.

Pav.11. Uždavinio Dalyba nestruktūrinio algoritmo blok-schema.

Koduojant algoritmą (rašant programą), reikia prisiminti, kad algoritmo blokai bus atspindimi tik vykdomojoje programos dalyje (programa turi ir aprašomąją dalį).

Paskalio programos struktūra tokia:

1) Pirmasis sakinys-programos antraštė.Antraštė prasideda baziniu

žodžiu PROGRAM, toliau nurodomas programos vardas,

ir sakinio gale dedamas kabliataškis (;) .Taigi antraštės sakinio pavizdys

Program Dalyba ;

2)Paskutinis programos sakinys- END. (end su tašku),

tai programos pabaigos požimis;

3)Programos aprašomoji (deklaratyvinė) dalis. Šioje dalyje aprašomi (deklaruojami)

visi programoje naudojami duomenys (konstantės,kintamieji) bei paprogramės

(Funkcijos-Function arba procedūros-procedure).

Aprašomojoj daly gali būti tokie skyriai:

– Label – žymių;

– Const – konstančių;

– Type – tipų;

– Var – kintamųjų ;

– Function arba Procedure(paprogramių) aprašymo skyriai;

Paskalio paprogramės struktūra analogiška pagrindinės programos struktūrai. Čia taip pat yra paprogramės antraštė ir paprogramės pabaigos požymio sakinys. Paprogramė turi savo aprašomąją ir vvykdomasias dalis. Priklausomai nuo paprogramės tipo, antraščių sakiniai gali būti skirtingi. Paprogramės-funkcijos atveju antraštė prasideda baziniu žodžiu Function, o procedūros atveju- baziniu žodžiu Procedure. Abiem atvejais paprogramės pabaigos požymis- tai bazinis žodis END; (end su kabliataškiu). Paprogramių aprašomojoje dalyje gali būti aprašyti lokaliniai duotai paprogramei duomenys, bei lokalinės paprogramės.

4)Programos vykdomoji dalis. Čia atsispindi veiksmai pateikti uždavinio sprendimo algoritmo blok-schemoje.Vykdomoji dalis būtinai privalo prasidėti baziniu žodžiu BEGIN, o užsibaigti baziniu žodžiu END.

Pastaba.

Visi paskalio programos sakiniai (ir vykdomieji ir aprašomieji) privalo

užsibaigti kabliataškiu (;) !!!

Išsiaiškinę programos struktūrą galime pradėti koduoti algoritmą.

Pirmiausia sudarysime programos rėmus, kuriuos pradėsim pildyti nuo vykdomosios dalies:

Program Dalyba; {antraštė}

{Aprašomoji dalis-pradžia}

{Aprašomoji dalis-pabaiga}

Begin {Vykdomoji dalis-pradžia}

Writeln(‘Įveskite sveiką skaičių A’);

Readln(A);

Writeln(‘Įveskite sveiką skaičių B’);

Readln(B);

IF (B=0) THEN Writeln(‘Dalyba iš nulio negalima’) ;

ir ??!! stop-kaip, perduoti valdymą pakartotinam skaičiaus B įvedimui?

Be žymių neišsiversime,todėl aprašomojoj daly aprašykime žymę lab1

ir toliau tęskime programos rašymą.

End. {Vykdomoji dalis-paba.iga}

{Programos pabaiga }

Dabar programa atrodys taip:

Kaip matome, programa parašyta, bet ji gavosi nestruktūrinė, žymių panaudojimas-pirmas nestruktūriškumo požymis.

Pertvarkykime algoritmą, sudarydami jį iš elementarių algoritmizavimo struktūrų (pav.12). Pav. 12 blok-schemoje 1 ir 2 blokai sudaro kompozicijos struktūrą, 3,4,5,6,7 blokai-ciklo repeat struktūrą,tame tarpe 5 ir 6 blokai-trumpąją alternatyvą, o 8,9 blokai-kompozicijos struktūrą.

Repeat struktūra šiame algoritme nepraleidžia vvaldymo į sprendimų bloką (8 blokas), kol nebus įvesta nenulinė skaičiaus B reikšmė. Įvedus B=0, kas kart ekrane pasirodys “sufleris” Dalyba iš nulio negalima, ir veiksmas bus perduotas 3,4 blokams, kad galima būtų įvęsti skaičių B≠0, NESINAUDOJANT ŽYMĖMIS.

Pav. 12. Struktūrinio Dalybos algoritmo blokinė schema.

Iš pav.12. seka, kad struktūrizuotame algoritme sąlygos tikrinimo blokas (STB) gali įėiti arba į alternatyvos struktūrą, tuomet STB išėjimai turi susilieti į sąntaką, arba į vieną iš kartojimų struktūrų, tuomet vienas iš STB išėjimų skiriamas ciklo kūno veiksmų kartojimui organizuoti, kitas išėjimui iš struktūros.

Žinant kaip Paskalis palaiko išvardintas struktūras, programą parašysime taip:

Palyginę struktūrizuotą ir nestruktūrizuotą programas, galime padaryti išvadą, kad nestruktūrizuotoje programoje vietoj žymės lab1: įrašę žodį Repeat, o vietoj sakinio goto lab1 įrašę Until (atitinkama sąlyga), gausime struktūrizuotą programą.

• MathCad’o aplinka

Nestruktūrinė dalybos programa MathCad’o aplinkoje parodyta (pav. 12a). Čia panaudota nestruktūrinė Mathcad’o funkcija if(sal,v1,v2) , kurios parametrai: sal -tikrinamoji sąlyga, jeigu sąlyga tenkinama, tai vykdomas priskyrimas v1, jei ne, tai vykdomas priskyrimas v2 (MathCad’o ∞=110e307).

Pav.12a. parodyta ir srtuktūrinė dalybos programa, čia panaudota sudėtinės alternatyvos struktūra.

dalyba(5,0)=

Pav. 12a. Programa Dalyba MathCad’o aplinkoje.1.12. Paprogramės

Paprogramė – tai tam tikra programos dalis. Paprastai į paprogramę išskiriamas funkcionaliai išbaigtas programos blokas. Tas blokas vieną kartą

aprašomas aprašomojoje dalyje ir jam suteikiamas unikalus vardas (paprogramės vardas). Vykdomojoje programos dalyje galima kreiptis į paprogramę minėtu vardu, t.y. iškviesti darbui taip pažymėtą programinį bloką. Nors paprogramė aprašoma vieną kartą, ją iškviesti darbui galima norimą kartų skaičių. Akivazdu, kad pakartotinas paprogramės iškvietimas pasiteisina tik tuomet, kai paprogramė gali dirbti su naujais pradiniais duomenimis. Taigi, iškviečiant paprogramę reikia numatyti priemones, kaip paprogramei perduoti pradinius duomenis skaičiavimui. Atlikusi numatytus skaičiavimus, parogramė gauna tam tikrą skaičiavimų rezultatą. Reikia numatyti ir priemones, leidžiančias iišsaugoti gautą rezultatą. Tai padaroma paprogramės parametrais. Paprastai paprogramės parametrai išvardijami tuoj pat po jos vardo paprastuose skliausteliuose, parametrą nuo parametro atskiriant kableliu (pavyzdžiui: Function Euklidas(m,n);Procedure Bdd(x,y)).

Algoritmo su paprograme blokinė schema

Sudarant algoritmą su paprograme, pirmiausia reikia sudaryti paprogramės algoritmo blokinę schemą (pav.13.). Vėliau pagrindinės programos algoritme turi atsispindėti paprogramės veiksmai. Tam tikslui į pagrindinės programos algoritmą įvedamas specialus paprogramės blokas – stačiakampis su dvigubom šoninėm sienelėm, kurio viduje užrašytas paprogramės vardas (pav.14).

Paprogramėje Euklidas parodyta, kaip galima rasti dviejų ssveikų teigiamų skaičių x≠0 ir y≠0 bendrą didžiausą daliklį (BDD), naudojant skirtumo veiksmą while cikle, kol x≠ y.

Pav. 13. Paprogramės Euklidas algoritmo blokinė schema

Pagrindiniame BDD radimo algoritme pasirūpinta dviejų sveikų skaičių įvedimu ir “saugikliais”, apsaugančiais paprogramę Euklidas nuo neigiamų iir “nulinių” skaičių. Čia 2 bloke neigiami skaičiai “paverčiami” teigiamais, o, esant vienam iš įvęstų skaičių lygiam nuliui, BDD priskiramas kitas, nenulinis tos poros skaičius (3,4 ir 5,6 blokai) . Jeigu vartotojas įveda abu “nulinius” skaičius, tai numatytas “sufleris” ,nurodantis vartotojui, kad šiuo atveju Ieškoti Bdd nėra prasmės (9,10 blokai).

Prieš užbaigiant algoritmą, rastoji BDD reikšmė išvedama į ekraną (11 blokas).

Pav.14. Algoritmas su Paprograme

Programa su paprograme Paskalyje

Paskalyje paprogramės suprantamos dviem aspektais:

1)Paprogramės aprašymas;

2)Kreipimąsis į paprogramę.

Paprogramės aprašymas

Paprogramės Paskalyje būna dviejų rūšių:1)Paprogramė Funkcija; arba

2)Paprogramė Procedūra .

Pagrindinis šių paprogramių skirtumas-išėjimo parametrų skaičius. Jegu Procedūra gali turėti norimą išėjimo parametrų skaičių, tai Funkcija-tik vieną. Šis skirtumas atsispindi ir paprogramių antraštėse. Funkcijos antraštė pradedama baziniu Paskalio žodžiu Function, toliau seka paprogramės vardas, po kurio apvaliuose sskliausteliuose išvardijami formalieji funkcijos įėjimo parametrai bei nurodomas jų tipas, ir, galiausiai nurodomas funkcijos išėjimo parametro tipas. Kadangi funkcija turi tik vieną išėjimo parametrą, tai sutarta, kad jis bus saugomas lastelėje, kuri pavadinta funkcijos vardu. Funkcijos antraštės pavyzdys:

Function Euklidas(x,y:integer):integer;

Čia nurodyta, kad funkcijos įėjimo parametrai x ir y bus sveiki skaičiai, lygiai kaip ir funkcijos išėjimo parametras(:integer). Toliau funkcijos aprašyme nurodomi jos lokaliniai duomenys bei lokalinės paprogramės (pavyzdyje nėra) ir pateikiama funkcijos vykdomoji dalis.

Funkcijos vykdomojoje dalyje turi būti priskyrimo ssakinys, kuriame kairiojoje pusėje privalo atsispindėti funkcijos vardas, o dešinėje – išraiška apsprendžianti funkcijos išėjimo rezultatą. Pavyzdžiui:Euklidas:=x;

Paprogramės aprašymas baigiamas baziniu Paskalio žodžiu end;(su kabliataškiu).

Kreipimąs.is į funkciją atliekamas pagrindinės programos vykdomojoje dalyje užrašant priskirimo sakinį su funkcijos vardu. Tame sakinyje turi būti nurodyti (apibrėžti) realieji funkcijos įėjimo parametrai. Įėjimo parametrai apibrėžiami nurodant kreipimosi sakinyje arba jų reikšmes, arba kintamųjų vardus, kur saugomos įėjimo parametrų reikšmės. Vykdant kreipimosi į funkciją sakinį atliekamas formaliųjų jos parametrų pakeitimas realiaisiais. Priklausomai nuo to, kaip buvo apibrėžti realieji parametrai, pakeitimas gali būti vykdomas pagal reikšmę, arba pagal vardą . Kairėje priskirimo sakinio pusėje turi būti užrašytas kintamojo vardas, kuriam bus perduodamas funkcijos rezultatas (pav.14).

Pav. 15. Programa su Funkcija Paskalyje

Programa su procedūra pateikta pav.16.

Pav.16. Programa su procedūra Paskalyje

Kaip seka iš pavyzdžio, procedūra traktuojama taip pat dviem aspektais, ją reikia tinkamai aprašyti, o vėlau atitinkamai kreiptis.

Procedūros antraštėje po bazinio žodžio procedure nurodomas procedūros vardas ir tuoj pat skliausteliuose išvardijami procedūros įėjimo bei išėjimo formalieji parametrai, nurodant jų tipą. Kadangi išėjimo parametrai bus keičiami tik pagal vardą, tai reikia užtikrinti, kad prieš išėjimo parametro vardą stovėtų bazinis žodis var (pav.16, parametrai is1 ir is2). Įėjimo parametrai, jeigu jie paprasto (nestruktūrinio) tipo, keičiami pagal reikšmę, todėl prieš jų vvardą žodžio var rašyti nereikia. Tačiau, jeigu įėjimo parametras yra struktūrinio tipo, pavyzdžiui masyvas, tai prieš toki įėjimo parametrą taip pat jau reikia rašyti žodį var. Procedūros vykdomojoje dalyje privalo būti priskyrimo sakiniai, nurodantys kokie rezultatai bus saugomi atitinkamose išėjimo parametrų lastelėse.

Pagrindinės programos vykdomojoje dalyje gali būti keli kreipimosi į procedūrą sakiniai, kuriuose privalo atsispindėti procedūros vardas, o skliaustuose-realieji procedūros parametrai.

Realiųjų parametrų skaičius privalo sutapti su formaliųjų parametrų skaičiumi, formaliųjų ir realiųjų parametrų tipai turi būti vienodi, o realiųjų parametrų išvardinimo eilė turi atitikti formaliųjų parametrų išvardinimo eilę.

Kadangi išėjimo parametrai bus keičiami pagal vardą, tai juos būtina aprašyti pagrindinės programos aprašomojoje dalyje.

Atlikus kreipimosi į procedūrą sakinį, formalieji parametrai bus pakeisti realiaisias parametrais. To pasekoje procedūrai iš pagrindinės programos bus perduoti atitinkami įėjimo parametrai, o procedūros skaičiavimų rezultatai iš išėjimo lastelių (jos randasi procedūros atminties lauke) bus perrašyti į pagrindinę programą vardais, atitinkančiais realiųjų išėjimo parametrų vardus(pav.16-kreipimosi į procedūrą Eukli sakinys).

Programa su paprograme MathCad’e

Pav.17. Programa su paprograme MathCad’o aplinkoje

Pav. 17. duotas Bendro Didžiausio Dviejų Sveikų Skaičių Daliklio algoritmas su Euklido paprograme MathCad’o aplinkoje, čia jis taip pat aprūpintas “saugikliais”, nuo nedėmėsingo vartotojo, kuris gali mėginti įvedinėti neigiamus, arba nulinius skaičius. Šiame algoritme irgi įvęstas ciklų skaitiklis I, rodantis kiek kartų “prasisuka” cciklas while, prieš surandant įvestų skaičių m ir n bendrą didžiausią daliklį.1.13. Kai kurių charakteringų programavimo uždavinių algoritmai

1.13.1. Masyvo užpildymas atsitiktiniais skaičiais

Dažnai tenka masyvą užpildyti atsitiktiniais skaičiais.Tokio uždavinio sprendimo viena iš galimų algoritmo blok-schemų parodyta pav.18. Masyvui A, turinčiam dešimt elementų užpildyti panaudotas ciklas su žinomu kartojimų skaičiumi (2 blokas), kurio kūne vykdomi tokie veiksmai:

3 blokas-į buferinę lastelę (buf) nusiunčiamas sveikas atsitiktinis skaičius, kuris gaunamas kreipiantis į atsitiktinių skaičių generavimo funkciją Random(arg).

Jeigu funkcijos Random argumentas arg=10, tai generuojamas arsitiktinis sveikas skaičius diapazone nuo nuliuo iki dešimties. Norint gauti trupmeninį skaičių, reikia naudoti funkciją Random be argumento, t.y rašyti tik Random.

4 blokas-tikrinama ar skaičius buf lyginis ar nelyginis (Funkcijos Odd(buf) rezultatas-TRUE, jei buf nelyginis ir -FALSE, jei buf lyginis);

5,6 blokai-priklausomai nuo to, ar buf lyginis, ar nelyginis lastelėje zenkl (ženklas) atsiranda vienetas arba minus vienetas;

7 blokas-i-tajam masyvo elementui priskiriamas teigiamas, arba neigiamas naujai sugeneruotas sveikas skaičius;

8 blokas-išvedami į ekraną masyvo elementai.

Taigi, pateiktas algoritmas užpildo vienmatį dešimties elementų sveikų skaičių masyvą atsitiktiniais sveikais skaičiais (diapazone nuo 0 iki 10 ) su atsitiktiniais ženklais.

Pastaba.

Funkcija Random(arg) generuoja tam tikrą atsitikrinių skaičių seką. Pakartotinai kreipiantis į Random(arg) gaunama ta pati skaičių seka. Tam, kad masyvą kas kartą užpildyti tikrai atsitiktiniais skaičiais, reikia prieš kreipiantis

į Random(arg) pakeisti atsitiktinių skaičių sekos pradžią. Tai pasiekiama programos pradžioje užrašius kreipimosi sakinį į procedūrą Randomize.

Pav.18. Masyvo užpildymo atsitiktiniais skaičiais algoritmo blok-schema1.13.2. Maksimumo ir minimumo ieškojimas masyve

Vienas iš sprendimo variantų parodytas pav.19.

Pav.19. Maksimumo ir minimumo ieškojimo masyve algoritmo blok- schema.

Algoritme priimta, kad jau yra žinoma, kaip sugeneruoti atsitiktinių skaičių masyvą (2 blokas). Maksimumo ir Minimumo paieškos masyve pradedamos tuo, kad apybrėžiamos lastelės Max ir Min, kuriose, pasibaigus ciklui, turėtų “nusėsti” maksimali ir minimali masyvo elementų reikšmės. Pirmiausia į ttas lasteles nusiunčiamas pirmasis masyvo elementas A[1] tam, kad su juo galėtume palyginti kitus masyvo elementus (3 blokas). Čia pat matome ir lasteles MaxViet ir MinViet, į kurias nusiusta po vienetą tam atvejui, jei pasirodytų, kad pirmasis masyvo elementas ištikrųjų yra didžiausias arba mažiausias.

Cikliškai (4 blokas), pradedant nuo ANTROJO elemento pradedama tikrinti ar:

5 blokas-eilinis masyvo elementas didesnis už elementą, esantį lastelėje Max? Jei taip, tai (6 blokas) į lastelę Max perrašom tą didesnijį elementą, o į lastelę MaxViet įrašom jo eeilės numerį masyve, t.y.,esamą ciklo parametro I reikšmę. Jei ne, tai išeinam iš struktūros ir patenkam į 7 bloką;

7 blokas-eilinis masyvo elementas mažesnis už elementą, esantį lastelėje Min? Jei taip, tai (8 blokas) į lastelę Min perrašom tą mažesnyjį elementą, oo į lastelę MinViet įrašom esamą ciklo parametro reikšmę I.

Ciklui pasibaigus, išvedamos Max ir Min reikšmės, bei jų vietos masyve, t.y.,MaxViet ir MinViet.

Pasitikrinimui galima išvesti visus masyvo elementus, dar kartą panaudojus ciklą FOR.1.13.3. Masyvo elementų rikiavimas didėjimo tvarka

Kartais tenka surikiuoti masyvo elementus didėjimo arba mažėjimo tvarka. Pav.20. pateikta algoritmo blok-schema rikiavimui didėjimo tvarka.

Algoritme priimta, kad jau žinoma kaip atlikti 2 bloko veiksmus.Toliau dvigubu (įdėtiniu) FOR ciklu suformuotas masyvas analizuojamas ir rikiuojamas didėjimo tvarka.

Išorinio FOR ciklo parametras j keičiamas nuo 1 iki N-1(3 blokas), nes bus lyginami tarpusavyje kaimyniniai elementai A[ i ] ir A[ i+1 ] (5 blokas). Vidinio FOR ciklo parametras i keičiamas nuo 1 iki N-j (4 blokas), kad trumpėtų analizuojamoji masyvo kairioji dalis (liekana), dešinioji jau tampa ssurikiuota.

Pav. 20. Masyvo elementų rikiavimo didėjimo tvarka algoritmo blok-schema.

Atlikus vidinio ciklo veiksmus pirmą kartą, didžiausias masyvo elementas iš savo vietos nustumiamas į masyvo pabaigą (dešinįjį kraštą) ir sekančiam kartui bus pateikiamas analizuti masyvas vienu elementu (be galinio) trumpesnis, įvertinant tai, kad gale jau stovi didžiausias masyvo elementas. Atlikus vidinio ciklo veiksmus antrą kartą masyvo liekanos didžiausias elementas atsidurs liekanos gale ir pati liekana vėl sutrumpės vienu elementu, o masyvo du paskutiniai elementai bus surikiuoti didėjimo tvarka. Atliekant cikluose nurodytus veiksmus lliekana vis trumpės, o surikiuota dešinioji dalis vis ilgės iki bus surikiuotas visas masyvas.

Didžiausias analizuojamos masyvo dalies elementas stumiamas į dešinę pusę 5 ir 6 blokų veiksmais. Jeigu 5 bloke nustatoma, kad karysis masyvo elementų poros narys didesnis už dešinįjį, tai 6 bloke jie sukeičiami vietomis ir analizuojama sekanti elementų pora. Pastebėsime, kad sukeitimui vietomis panaudota buferinė lastelė Buf.

7 ir 8 blokai reikalingi surikiuoto masyvo elementų išvedimui.1.13.4. Ciklinis sumavimas

Ciklinis sumavimas gaunasi tuomet , kai ciklo kūne naudojamas toks sumavimo veiksmas: Sum=Sum +A[ i ].

Čia Sum-lastelė ,kurioje saugoma sumos reikšmė, o A[ i ]-eilinis dėmuo (pvz., i-tasis masyvo elementas ).

Norint, kad sumavimas vyktų teisingai, reikia prieš užeinant į ciklą lastelę Sum apnulinti.

Ciklinio sumavimo pavyzdys pateiktas uždavinio algoritme (pav.21),kur reikia susumuoti teigiamų masyvo elementų reikšmes ir suskaičiuoti kiek masyve yra neigiamų narių.

Algoritme priimta, kad pirmiausia suformuojamas N-elementų sveikų atsitiktinių skaičių masyvas, su neigiamais ir teigiamais elementais (2 blokas).

Toliau, 3 bloke, apnulinamos sumų saugojimo lastelės Sum ir Kiek ir einama į ciklą FOR (4 blokas), kurio kūne tikrinama ar eilinis masyvo elementas teigamas ar ne (5 blokas). Jeigu elementas teigiamas, tai (6 blokas) jis prisumuojamas prie

lastelės Sum turinio ir nusiunčiamas į lastelę Sum, jegu elementas neigiamas, tai (7 blokas) lastelės Kiek tturinys padidinamas vienetu ir rezultatas nusiunčiamas į lastelę Kiek.Taip patikrinus visus masyvo elementus, teigiamų iš jų reikšmės bus susumuotos, o neigiamų elementų skaičius bus laikomas lastelėje Kiek.

8 blokas algoritme įvestas tam, kad būtų galima ekrane pamatyti teigiamų masyvo elementų reikšmių sumą ir neigiamų masyvo elementų skaičių.

Pav.21. Ciklinio sumavimo algoritmo blok-schema.1.13.5. Ciklinė daugyba

Ciklinė daugyba gaunama ciklo kūne naudojant veiksmą: Sand=Sand*i ; . Čia Sand sąndaugos saugojimo lastelė, o i -eilinis daugiklis. Kaip ir ciklinės sudėties atvejų, prieš užeinant į ciklą į Sand lastelę būtina nusiusti 1(vienetą).

Ciklinę daugybą pailiustruosime faktorialo skaičiavimo pavyzdžiu (pav.22). Įvedę sveiką teigiamą skaičių N jo faktorialą skaičiuosime taip.

Pirmiausia į lastelę, kur saugosime faktorialo reikšmę nusiunčiam vienetą (4 blokas).Toliau, organizuojame ciklą su žinomu kartojimų skaičiumi , kuriame ciklo parametras i keisis nuo vieno iki užduoto skaičiaus N. Ciklo kūne (6 blokas) daugindami Fak iš ciklo parametro i ir nusiusdami tą sandaugą į lastelę Fak, gausime, kad lastelėje Fak bus patalpintas tokios išraiškos rezultatas

Fak=(1*2*3*.*(N-2)*(N-1)*N), kas ir yra skaičiaus N faktorialas.

7 blokas išveda lastelės Fak ir įvestojo skaičiaus N turinius į ekraną.

Pastaba.

Kaip matosi iš Fak išraiškos, net ir prie nedidelių N reikšmių Fak reikšmė greitai užauga ir gali viršyti Maxint reikšmę .(Maxint-tai maksimali sveiko skaičiaus reikšmė charakteringa duotai ESM).

Pav.22. CCiklinės daugybos (faktorialo skaičiavimo) algoritmo blok-schema.1.13.6. Vėliavėlių panaudojimas algoritmo keliams nustatyti

Šakotame algoritme, ypač kai atskiros algoritmo dalys kartojamos cikliškai, kartais reikia, kad valdymas į kai kurias šakas patektų ribotą kartų skaičių ir tai turėtų priklausyti nuo tam tikro požymio. Minėtas reikalavimas gali būti įvykdytas naudojant, t.v. ,vėliavėles.Tai loginio tipo kintamieji, reikiamais momentais įgijantys reikšmes True arba False.

Pav.23. parodyta algoritmo blok-schema uždaviniui, kuriame reikalaujama susumuoti visus teigiamus masyvo

Pav.23. Teigiamų masyvo narių didesnių už pirmą teigiamą masyvo narį sumavimo algoritmo blok-schema.

narius, jeigu jie didesni už pirmą teigiamą masyvo narį (tarkime masyve yra atsitiktiniai teigiami ir neigiami sveiki skaičiai). Algoritme parodyta kaip vieno ciklo metu, nuosekliai tikrinant ar elementas teigiamas, pirmą teigiamą elementą nukreipti į lastelę PirTe ir toliau šį kelią “padaryti nepravažiuojamu” kitiems teigiamiems elementams.Tikslui pasiekti naudojama vėliavėlė Flag, kurios reikšmė prieš užeinant į ciklą nustatoma Flag=True (3 blokas,čia pat apnulinama ir Sum lastelė). Užėjus į ciklą ir nustačius, kad elementas teigiamas, 6 bloke tikrinama ar vėliavėlė True ar False. Pirmą kartą einant Flag=True, todėl pateksime į 7 bloką kuriame pirmas teigiamas masyvo elementas bus įrašytas į lastelę PirTe ir tuoj pat priskiriama Flag=False, tuo pačiu teigiamiems elementams uždraudžiamas kelias šita algoritmo šaka. Iš tikrųjų, atėjęs iki 6 bloko tolimesnis

teigiamas elementas ras Flag=False ir bus nukreiptas į 7 bloką, kur, paaiškėjus, kad jis didesnis už pirmą teigiamą, bus prisumuotas į lastelę Sum, jei ne, bus imamas tikrinimui sekantis masyvo elementas.Atlikus visus ciklo žingsnius lastelėje Sum turėsime sumą masyvo teigiamų elementų didesnių už pirmą teigiamą-PirTe, ką ir parodys rezultatų išvedimas į ekraną (10 blokas) .1.13.7. Polinomo šaknies radimas nurodyto taško aplinkoje

Pav. 24. parodyta polinomo šaknies radimo nurodyto taško aplinkoje algoritmo blok-schema.Nurodžius polinomo argumento reikšmę X0 (4 blokas), jos aplinkoje pradedamas kryptinis ppolinomo šaknies ieškojimas. Pirmiausia suskaičiujama polinomo reikšmė taške X0 ir gautas rezultatas nusiunčiamas į lastelę Y0.Tam tikslui (5 blokas) kreipiamės į funkciją Skaičiavimai ,kurios algoritmo blok-schema pateikta pav.19. Iš čia seka, kad nagrinėjamas polinomas y=2*x*x*x-6*x*x+3*x+1.Toliau ciklu WHILE (blokai:6,7,9,10,11,12) palaipsniui artėjama prie šaknies. 6 bloke tkrinama ar absoliutinė Y0 reikšmė viršija užduotą priartėjimo prie nulio tikslumą ksi, jei ne, tai uždavinis išspręstas ir 8 bloke lastelei Saknis priskiriama esama X reikšmė, kurį 13 bloku išvedama į ekraną.

Pav.24. Polinomo šaknies radimo (nurodyto ttaško aplinkoje) algoritmo blok-schema.

Jei tikslumas nepakankamas, tai einama į ciklo kūną, kur 7 bloke argumentas padidinamas žingsniu delX ir vėl kreipiamės į funkciją Skaičiavimai, kad būtų suskaičiuota polinomo reikšmė prie naujo argumento ir nusiusta į lastelę Y1 (9 blokas). Dabar ggalima pasitikrinti, ar žengtas žingsnis arčiau ar toliau nuo šaknies. Jeigu 10 bloko sąlyga tenkinama, tai einama teisinga kryptimi, jei ne, tai tolstama nuo šaknies. Būtina keisti kryptį, kas ir atliekama 11 bloke, kartu sumažinant žingsnį pusiau. 12 bloke suskaičiuota naujoji polinomo reikšmė priskiriama lastelei Y0 ir grįžtama į ciklo pradžią tikrinti ar naujoji polinomo reikšmė atitinka šaknies reikalavimams.

Valdymas prasisukęs cikle keletą kartų, tas priklauso nuo užduoto tikslumo ir pradinio žingsnio, galiausiai pasiekia šaknį ir polinomo argumento reikšmė, prie kurios polinomo reišmė lygi nuliui (užduotu tikslumu), išvedama į ekraną.

Pav.25. Funkcijos SKAIČIAVIMAI algoritmo blok-schema.2. PROGRAMAVIMAS TURBO PASKALIU

2.1. Turbo Paskalio moduliai

Paskalio kalba buvo sukurta specialiai mokymui ir ją greitai pamėgo vartotojai.Vis dažniau naudojant asmeninius kompiuterius (AK) ir Paskalio kalbą taikomiesiems uždaviniams sspręsti, atsirado poreikis sukurti programines priemones didelių programų skaidymui į atskiras dalis, nes dažnas AK turi griežtą apribojimą-vienas programinis modulis negali užimti daugiau kaip 64K atminties. Be to, vystantis AK, atsirado poreikis programinėmis priemonėmis įvertinti vis naujas AK savybes (pvz. programuoti spalvas,garsus, grafinius objektus).

Taip atsirado Turbo Paskalis, kurio versijos sparčiai keičia viena kitą. Šiandien dirbama jau su TP7-versija.

Taigi, programuoti Paskaliu šiandien reiškia – programuoti Turbo Paskaliu.

Turbo Paskalyje programa gali būti skaidoma į modulius. Kai sudėtingas uždavinys ddalijamas į keletą smulkesnių uždavinių ir rašomas kiekvieno jų atskiras modulis, tokie moduliai vadinami funkciniais. Antruoju būdu – į vieną modulį surašomos nedidelės apimties dažnai naudojamos procedūros ir funkcijos. Tai tarsi programinių instrumentų rinkinys, kuriuos gali naudoti eilinis vartotojas, įtraukdamas tokį instrumentinį modulį į savo programą.

Sudarydamas savo instrumentinius modulius, kiekvienas vartotojas gali išplėsti Turbo Paskalio galimybes, papildydamas jį savo sukurtomis procedūromis ir funkcijomis bei naujais duomenų tipais. Turbo Paskalio programų paketas jau pats turi nemaža tokių programinių “instrumentų” , sukauptų specializuotuose Turbo Paskalio moduliuose, kurių objektiniai kodai saugomi bylose su plėtiniais .TPU (Turbo Pascal Unit) .

Norint įtraukti reikiamą modulį į savo programą, pakanka programos tekste (sekančiame sakinyje po antraštės) parašyti sakinį USES, jame nurodant vieno ar kelių modulių vardus, ir visos šių modulių procedūros, funkcijos, taip pat juose aprašyti konstantų vardai ir duomenų tipai gali būti naudojami programoje pagal tas pačias taisykles, kurios taikomos “savos” programos procedūroms ir funkcijoms.

Šiuo metu dar nėra standarto, nusakančio kokie specializuoti moduliai turi būti įtraukti į Turbo Paskalio programų paketą.

Pateikiame dažniausiai naudojamų Turbo Paskalio modulių sąrašą:

1. SYSTEM.TPU.

2. DOS.TPU.

3. CRT.TPU.

4. GRAPH.TPU.

5. PRINTER.TPU ir t.t.

Tam, kad sužinoti, kokie Turbo Paskalio moduliai įtraukti į Jūsų AK, reikia patyrinėti Turbo Paskalio programų paketo katalogą UNITS.2.2. Vartotojo mmoduliai

Modulį sudaro keturios dalys:

• antraštė (UNIT modulio vardas);

• ryšio dalis (INTERFACE);

• realizavimo dalis (IMPLEMENTATION);

• inicializavimo blokas (BEGIN . END).

Modulio dalių išdėstymo tvarka, jų sudėtis ir paskirtis parodyti šioje schemoje:

Turbo Paskalyje nėra kėlimo laipsniu funkcijos, parodysime, kaip sukūrti modulį su tokia funkcija.

Dabar reikia modulį sukompiliuoti ir gauti failą laipsuni.tpu.

Pagrindinė programa naudoja modulį Laipsuni tam, kad atliktų kėlimo laipsniu veiksmus.

Programoje Pagrindine šalia modulio laipsuni, įgalinančio programuoti kėlimo laipsniu veiksmus, panaudotas ir specialaus tekstinio režimo modulis CRT, kuriame yra procedūrų ir funkcijų leidžiančių tiesiogiai valdyti ekraną, programuoti teksto ir fono spalvas, programuoti garsus.

2.3. CRT-specialusis tekstinis režimas

Jeigu informacijos (simbolių) išvedimui naudojame tik procedūras Write,Writeln, tai kompiuteris užtikrina t.v. “ruloninį” ekrano režimą, kuomet kompiuterio monitoriaus ekranas traktuojamas kaip vienas tekstinis langas (80×25) ir simboliai išvedinėjami į ekraną, pradžioje viršutinėje eilutėje, po to antroje, trečioje ir t.t. iki paskutinės eilutės. Vėliau informacija rašoma tik paskutinėje eilutėje, ankstesniąsias perstumiant aukštyn.

Šiuolakinių AK aparatūros (hard ware) galimybės didesnės, jas ir įvertina CRT;. Šiuo atveju ekrane galima “atverti” kelis įvairių spalvų “langus” ir juose įvedinėti pradinius duomenis, išvedinėti tarpinius ir galutinius rezultatus. Tekstinį langą (pav. 1.) atveria procedūra Window (x1,y1,x2,y2:byte).

Lango dydį nusako jo kairiojo viršutinio (x1,y1) ir dešiniojo apatinio (x2,y2) kampų koordinatės, tenkinančios sąlygą:

1<=x1

4 Žydra Cyan 3

5 Raudona Red 4

6 Avietinė Magenta 5

7 Ruda Brown 6

8 Šviesiai pilka LightGray 7

9 Tamsiai pilka DarkGray 8

10 Šviesiai mėlyna LightBlue 9

11 Šviesiai žalia LightGreen 10

12 Šviesia žydra LightCyan 11

13 Šviesiai raudona LightRed 12

14 Šviesiai avietinė LightMagenta 13

15 Geltona Yellow 14

16 Balta White 15

17 Mirksėjimo konstantė Blink 128

Pastaba. Teksto spalvai nustatyti galima naudoti visas išvardintas konstantes, o teksto fono spalvai nustatyti galima naudoti tik pirmasias septynias.

Kaip matosi iš pateikto programos fragmento, tekstą galima išvedinėti norimoje ekrano (tekstinio lango) pozicijoje, tik reikia prieš tai perkelti ten žymeklį procedūra

GoToXY (x,y:byte);

Procedūros parametrai x ir y nustato koordinates tekstiniame lange. Įsidėmėkite, dabar .viršutinio kairiojo lango kampo koordinatės yra (1,1), o apatinio dešiniojo (x2-x1,y2-y1) (žiūr.procedūros window parametrus). Jei šie parametrai yra už lango ribų, tai procesorius pastato žymeklį į karįjį viršutinį lango kampą, tačiau ir toliau lieka tame lange. Išeiti iš lango galima tik vėl kteipiantis į procedūrą Window. Pavyzdžiui, norint grįžti į pagrindinį ekraną reikia panaudoti sakinį Window(1,1,79,24) ;

Procedūra GoToXY galima pasinaudoti ne tik išvedant informaciją į norimą ekrano (lango) vietą, bet ir ją įvedant. Šiuo atveju, nustačius žymeklį, reikia kreiptis į procedūrą Read (readln). Tuomet preocesorius stabdys programos vykdimą ir lauks įvedamos informacijos iš klaviatūros. Paspaudus atitinkamus klaviatūros klavišus, ekrane (lange) pradedant nuo žymeklio pozicijos pamatysime įvedamą informaciją.

Crt modulis leidžia naudoti papildomai dar dvi įvedimo funkcijas: KeyPressed

ir ReadKey.

Paspausto klavišo kodas užrašomas į vadinamąjį klaviatūros buferį. Prieš pradedant vykdyti programą buferis būna tuščias. Paspausto klavišo kodas buferyje saugomas tol, kol bus nuskaitytas arba kol buferį išvalys vykdomojoje programoje esančios procedūros Read arba Readln.

Klaviatūros apklausą vykdo funkcija KeyPressed, kurios loginė teikšmė yra True, jei klaviatūros buferyje yra nors vienas simbolis, arba False, jei buferis tuščias. Pavyzdžiui, sakinys Repeat until KeyPressed; įpareigoja kompiuterį laukti, kol bus paspaustas kuris nors klavišas.

Funkcija ReadKey perskaito paspausto klavišo kodą (char tipo reikšmę), tačiau eekrane jos nepateikia. Funkcijos veikimas priklauso nuo klaviatūros boferio būklės: jei jame yra koks nors simbolis, ReadKey perskaito pirmąjį anksčiausiai įvestą buferio simbolį; jei buferis tuščias, ReadKey pristabdo programą ir laukia, kol bus paspaustas kuris nors klavišas.

Kadangi specialiųjų klavišų kodai dvigubi:(pirma dalis 0(nulis), antra-t.v.sken kodas), tai , norint perskaityti specialiųjų klavišų kodus, funkciją ReadKey reikia panaudoti du kartus. Pirmą kartą funkcija įgauna reikšmę 0 (nulis), o antrą kartą- specialaus klavišo sken kodo reikšmę. Funkciją ReadKey patogu vartoti, kai procesas valdomas mmeniu principu.

Daugumoje asmeninių kompiuterių įrengti harmoninių signalų generatoriai. Kadangi generuojamų signalų dažnį ir trukmę galima programuoti, juos patogu naudoti norint garsu perspėti apie neleistinus veiksmus, paprastoms vienbalsėm melodijoms atlikti ir pan.

Generatorius įjungiamas procedūra

Sound (dažnis:word);,

Kurios vienintelis parametras – garso aukštis, išreikštas ((Hercais) -virpesiais per sekundę. Įjungęs garsą procesorius toliau vykdo programą ir, tik sutikęs procedūrą

Nosound;,

jį išjungia.

Patogu garsinio signalo trukmę nustatyti procedūra

Delay (trukmė:word);

Word tipo parametru-trukmė nurodomas milisekundžių skaičius. Suprantama, procedūra Delay gali būti naudojama ne tik programuojant garsus..