Upload failed. Maybe wrong permissions?

User Tools

Site Tools



8. Szubrutinok

8-0.jpg
  

30:17
1985. március 6.
MTV 2. csatorna, 19:30

Bevezető

8-1.jpgKiss Donát Spectrum
  0:40 Mint arról már szó volt, a programozók természettől adott tulajdonsága a kényelemszeretet – hogy finomak legyünk. Ez azt jelenti, hogy irtóznak a gépies, ismétlődő, úgy is mondhatnám, rutinszerű feladatok beprogramozásától. Ezért igyekeznek ezt különböző programozástechnikai módszerekkel, fogásokkal elkerülni. Erre már láttunk példát, a ciklusszervezést, és ma is egy hasonlóról lesz szó, mégpedig a szubrutinokról. Ehhez vegyük elő a már ismert lóerő–kilowatt átszámító programunkat. Emlékszünk rá, hogy ez a program kitűnően működött, csak a képernyő egy kicsit zsúfolt volt az eredményektől, ha egymás után mondjuk tíz átszámítást is kértünk. Ezért azt vettük a fejünkbe, hogy ezt a programot megjelenésében egy kicsit vonzóbbá, gusztusosabbá tesszük, mégpedig oly módon, hogy például a fejléc után üresen hagyunk három sort, majd minden átszámítás eredménye közé is három üres sort próbálunk beiktatni.
  

8-2.jpg8-3.jpg

  Ehhez a már eddig ismert módszerekkel a következőket kell tennünk. A „lóerő–kilowatt” fejléckiírató 30-as programsor után 35-ös programsornak vegyünk föl egy olyan utasítássorozatot, mely három PRINT-ből áll önmagában, vagyis ez három üres sort fog eredményezni. S tegyük ugyanezt a 60-as sor után is, például 65-össel, mivel a 60-as sorban történik az eredménykiíratás. Nézzük az eredményt.
  
8-4.jpg8-5.jpg

  Egy Trabant… egy Zsiguli… igen. Hát ez így sokkal áttekinthetőbb, és tulajdonképpen a feladatot meg is oldottuk. Jóérzésű programozó azonban ezt azért másképp oldaná meg. Különösen akkor, ha ez egy nagyobb program lenne, és többször is szükség lenne hasonló feladatra. Ez a más megoldás pedig a szubrutin. A szubrutin nem más, mint egy olyan programrész – vagy ahogy sokszor fordítani szokták: alprogram –, melynek végrehajtására a programban többször is szükség van. Ezért ezt egyszer kell megírni, és ott, ahol erre sor kerül a programban, ott meg kell hívni a szubrutint. Ezért nézzük, hogy ez milyen utasításokkal történik. Ez a meghívás nem más, mint a BASIC GOSUB utasítása. Kicsit rendet csinálunk a képernyőn… és a 35-ös sort írjuk felül evvel a bizonyos GOSUB BASIC utasítással. Majd 200-nál fogjuk megírni a szubrutinunkat, ezért ide azt írjuk, hogy GOSUB 200, (A Sinclair-gépek BASIC nyelvjárása az utasítást két szóba írja – L. A. D.) a 65-be pedig ugyanezt.
  
8-6.jpg8-7.jpg

  Nos, most már nincs más hátra, mint megírni valóban a szubrutint. A 200-as sorba ugyanazt az utasítást (tkp. utasítássorozatot – L. A. D.) írjuk, mint az előbb kétszer, és a szubrutint mindig le kell zárni egy visszatérő utasítással, melynek angol neve RETURN, aminek az a haszna vagy a feladata, hogy visszatérítse a programvégrehajtást oda, ahonnan a szubrutint meghívták, illetve pontosabban az azt követő sorra, különben végtelen ciklusba kergetnénk a programot.
  
8-8.jpg8-9.jpg

  Nézzük meg, hogy vajon ugyanúgy működik-e, most már, hogy ilyen fejlett technikát használtunk – és nem kis meglepetésre ugyanolyan áttekinthető képet kapunk.
  8-10.jpg
  4:15 Ennél a programnál talán nem látszik igazából a jelentősége ennek, hiszen látszólag több utasítássort kellett fölvegyünk, mint az előző megoldásnál, hiszen két sor maga a szubrutin, és hát kétszer kellett meghívnunk. Képzeljük azonban el, hogyha erre egy nagyobb program esetén mondjuk már négyszer lenne szükség, akkor már „pénzünknél vagyunk”, és ha ennél többször, akkor mindenképpen spórolunk, valamint sokkal áttekinthetőbb lesz a program szerkezete, ezért nagyon egyszerű feladatoknál is javaslom a szubrutinok használatát.

GOSUB–RETURN

8-11.jpgPinkert László Commodore 64
  4:49 Feltűnhetett az iménti példában, hogy a GOSUB és a RETURN utasítások hatása egyaránt ugrás. Azonban egyikük sem helyettesíthető egyszerű GOTO-val. Ugyanis a GOSUB utasítás végrehajtásakor a gép feljegyzi a következő utasítás sorszámát. Például a képen látható 35-ös utasítás végrehajtásakor 40-est jegyez föl a gép, ezek után ugrik a 200-as sorra. Végrehajtja egészen a 210-es sorig, itt RETURN utasítást talál, amelynél a gép előkeresi a feljegyzett sorszámot. 40-est fog találni, tehát a program folytatása a 40-es soron kezdődik. Ezek után a 65-ösnél ismét elteszi a következő sorszámot a gép, de ez itt 70-es lesz. Tehát a szubrutin végrehajtása után a RETURN-nél a 70-esre tér vissza.
  Ebből az egyszerű magyarázatból is kitűnik, hogy a szubrutinok akárhányszor és a program bármely helyéről hívhatók. A RETURN utasítás mindig tudni fogja, hogy hol kell a programba visszatérni. Meg kell azonban jegyezni, hogy ha a RETURN utasítást úgy hajtja végre a gép, hogy előtte nem volt GOSUB, akkor nem talál a feljegyzések között semmit, tehát hibajelzést fog adni. A példán látható szerkezetben gondoskodni kell arról, hogy valahol a 200-as utasítás előtt vagy ugró, vagy STOP utasítással elkerüljük azt, hogy a program végrehajtsa a RETURN utasítást GOSUB utasítás nélkül.

Paraméterátadás

8-12.jpgKiss Donát Spectrum
  6:28 Most nézzük meg, hogyan tudjuk sokrétűbben felhasználni a szubrutinokat, vagyis olyan feladatok végrehajtására, amelyek ha nem is pontosan azonosak, de nagyon hasonló jellegűek. Például ha az előbb említett lóerő–kilowatt programban a fejléc után mondjuk öt üres sort szeretnénk hagyni, két átszámítás eredménye között azonban csak kettőt. Nos, azok, akik nem nézik a TV–BASIC adásait, valószínűleg ebben az esetben két szubrutint írnának, egy olyat, amelyik öt üres sort használ, egy olyat, amelyik kettőt. Jóérzésű programozók azonban – és remélhetőleg önök is – nem így állnának hozzá ehhez a feladathoz, hanem egy olyan szubrutint próbálnának írni – és írjuk ezt most meg közösen –, amely mind öt, mind három, sőt esetleg tetszőleges számú üres sor írására alkalmas. Hát ehhez egy picit át kell alakítani ezt a szubrutint. Mégpedig egy ciklust fogunk szervezni – és a 200-as sor evvel fog kezdődni –, ahol az N ciklusváltozó értéke 1-től I-ig megy. Vagyis az I változóban tárolt érték fogja megmondani, hogy hányszor kell majd végrehajtani a ciklusmagot, ami természetesen nem más, mint egyetlenegy PRINT, és ezt a ciklust is le kell zárjuk egy NEXT N-nel.
  8-13.jpg
  Most már nincs más hátra, mint a szubrutinhívás előtt ezt az I paramétert – ugyanis ezt nem másnak, mint paraméterátadásnak nevezzük –, be kell állítsuk a megfelelő értékre. Vagyis a két átszámítás közötti esetben ugye ez 2, és a fejléc kinyomtatása utáni szubrutinhívás esetén pedig ez az érték 5 lesz.
  

8-14.jpg8-15.jpg

  Nézzük meg, hogy mi a végeredmény. Valóban egy olyan képernyőt látunk, mint amire számítottunk, és ez a szubrutin most már tetszőleges számú üres sor írására is alkalmas.
  8-16.jpg

Moduláris programozás

8-17.jpgDr. Kocsis András Commodore 64
  8:34 A szubrutin a programnak egy zárt része, amelynek eleje és vége van. A szubrutin egy vagy több műveletet hajt végre. Azt láttuk már, hogy milyen előnyös a szubrutin alkalmazása olyan esetekben, amikor egy programon belül egy műveletet többször kell végrehajtani, és a szubrutinnal tudjuk helyettesíteni. Most nézzünk meg egy új alkalmazási lehetőséget. A szubrutinok nagyon előnyösen támogatják a moduláris programozást. Megtehetjük azt, hogy a program moduljait szubrutinként kódoljuk, és a program elejére a szubrutinokat hívó utasításokat helyezünk el. Ezek az utasítások együttesen egy új modult fognak alkotni, és nevezzük ezt vezérlőmodulnak, mivel ezek az utasítások vezérlik, irányítják a többi modulnak a végrehajtását. Nézzünk most meg erre egy példát. Bizonyára emlékeznek még arra a feladatra, amikor a napi középhőmérsékletet kellett kiírnunk, illetve a hőmérséklettel arányos csillagsorokat. Nézzük meg, hogy alakul ez a program akkor, hogyha a modulokat szubrutinok formájában kódoljuk.
  A listán látható, hogy a 70-es, 80-as, 90-es, 100-as és 110-es sorok a program egyes moduljait hívják. A 80-as sor például a déli hőmérsékletet olvassa be és ellenőrzi. A 110. sor pedig a kiírásokat vezérli. A 120. sor írja ki a reggeli hőmérsékletet, és az utána következő két utasítás: a 130-as paraméterezi a szubrutint, tehát megmondja a reggeli hőmérsékletet, és a 140-es pedig végrehajtja magát a csillagsorkiírást. És ezt így folytathatjuk tovább.
  Az ilyenformán kódolt program nem lesz rövidebb ugyan, viszont áttekinthetőbb lesz. Előnye ennek a megoldásnak az is, hogy a program egyes moduljai mint építőkövek más programokban is felhasználhatók.

Több belépési pont

8-18.jpgHerneczki Katalin Commodore 64
  10:38 A szubrutinokat tetszőleges helyre tehetjük a programba, csak arra kell vigyázni, hogy véletlenül rá ne fusson a vezérlés. Ha a szubrutin első sora előtt nincs GOTO vagy STOP utasítás, akkor a szubrutin hívás nélkül is végrehajtásra kerül, és bizony a hívatlan vendég a programozásban is komoly gondokat okozhat. Nézzük most meg a korábbi feladatunkat.
  8-19.jpg
  Ebben a programban a szubrutin első sora előtt GOTO utasítást találunk, tehát nincs probléma. De lehetne, hogyha ezt a sort elhagynánk. Gondoljuk csak végig. Ha kihagyjuk a 70-es sort, akkor az őt megelőző sor a GOSUB 210, azaz a szubrutinhívó utasítás, vagyis végtelen ciklusban egymás után hívnánk meg a szubrutint, mégpedig azt a szubrutint, amely üres sorokat ír egymás után. Hát ez bizony nem jó megoldás. (Ez hibás okoskodás, semmilyen végtelen ciklus nem állna elő. Amikor a 65. sorra jut a vezérlés, az meghívná a szubrutint, amelynek végrehajtása után visszakerülnénk a 65. sor utánra, vagyis a 90. sorra. Még egyszer végrehajtódna a szubrutin, kiírna további öt üres sort, majd elérne a RETURN-höz és megelőző GOSUB hiányában leállna hibaüzenettel; hiszen a korábbi szubrutinhívást már feldolgozta, az ahhoz tartozó visszatérési adatokat eldobta. – L. A. D.)
  Azt említettem, hogy az előző programunkat nézzük meg. Nos, ez egy kicsit csalafinta dolog, mert ez nem pontosan ugyanaz a program. De mi az eltérés? Két GOSUB utasításunk van, de az egyik GOSUB 200, a másik pedig GOSUB 210. Nos, ez nem elírás, hanem azt szerettük volna bemutatni, hogy egy szubrutinnak több belépési pontja is lehet. Jelen esetben a 200-as, illetve a 210-es. Ha a GOSUB 200 kerül végrehajtásra, az azt jelenti, hogy kettő meg három, azaz összesen öt üres sort írunk ki. Ha pedig a GOSUB 210-et hajtjuk végre, akkor három üres sor kerül kiírásra.
  Nos, ez egy egyszerű gyakorló feladat volt, viszont komoly jelentősége lehet a több belépési ponttal rendelkező szubrutinoknak bonyolultabb feladatok esetén.

Házrajzolás

8-20.jpgHorváthné Majsa Katalin Primo
  12:34 Akkor most következzék egy egyszerű, de annál tanulságosabb feladat. Próbáljuk meg lerajzolni a Kovács szomszédék balatoni nyaralóját.
  

8-21.jpg8-22.jpg

  8-23.jpg
  Na nem, azért ez még egyelőre egy kicsit túl bonyolult. Olyan gyorsan forog azon a kacsalábon, hogy nem is tudjuk megnézni, hogy valójában hogy is néz ki. Lássunk inkább valami egyszerűbbet, mondjuk a Kiss szomszéd kis nyaralóját.
  8-24.jpg
  Na, hát egye fene, ebben már kiegyezhetünk. Rajzoljuk le ezt.
  Mielőtt a konkrét rajzoláshoz hozzákezdenénk, próbáljuk meg végiggondolni, hogy milyen feladatokkal is kell megbirkóznunk. Hát mindenesetre meg kell rajzolnunk a ház körvonalait, ez ugye egy téglalap megrajzolását jelenti. Van három ablak, ezek mindegyike egy-egy újabb téglalap, illetve négyzet; a két ajtó szintén téglalapok, és hát van a háztető, ami egy háromszög lesz. Itt már tulajdonképpen tudatosan kereshetjük a hasonló jellegű feladatokat, amiket majd egy kis okos, sokat tudó szubrutinnal könnyen, egyszerűen és gyorsan megoldhatunk. Ennél a feladatnál észrevehetjük, hogy nagyon sok egymással és a képernyő széleivel párhuzamos szakaszt kell húznunk. Úgyhogy ha írunk egy olyan szubrutint, amelyik vízszintes és egy olyat, amelyik függőleges párhuzamos szakaszokat rajzol, akkor a továbbiakban valószínűleg ezt nagyon jól felhasználhatjuk. Úgyhogy kezdjük talán ezzel.
  8-25.jpgMielőtt azonban megírnánk ezt a szubrutint, gondoljuk végig, hogy milyen adatokra van szükségünk ahhoz, hogy ilyen párhuzamos szakaszokat tudjunk rajzolni. Hát meg kell adnunk a szakaszok hosszát – ezt egy A betűvel jelöljük ábránkon –, meg kell adni a szakaszok egymástól való távolságát – ez lesz a B betű –, és hogy el tudjuk helyezni a képernyőn, ahhoz meg kell adnunk egy pontot, legyen ez az alsó szakasznak a bal oldali végpontja, és ennek a koordinátái lesznek a C, illetve D betűk. Hogyha egy szubrutint megírunk, amelyik ilyen szakaszokat fog rajzolni, akkor nyilván változókat kell használnunk, úgyhogy maradjunk ezeknél a betűknél, ilyen változókat fogunk használni; s ez azért lesz nekünk jó, mert hogyha konkrét számokat írnánk be, akkor az csak egy adott párhuzamos szakaszpárt lenne hajlandó rajzolni – így viszont hogyha a változókat a szubrutin meghívása előtt mindig beállítjuk a számunkra megfelelő értékűre, akkor mindig más és más szakaszokat kapunk.
  8-26.jpgHát akkor ezek után lássuk a konkrét szubrutint, amit most én gyorsan kilistázok. És nézzük meg, hogy hogyan valósítja ez a szubrutin meg a rajzolást. Hogyan rajzolnánk meg két ilyen szakaszt? Hát nyilván pontonként. (Legalábbis Primón, ahol nincs külön utasítás szakaszok rajzolására – L. A. D.) Kezdjük a rajzolást mondjuk a bal oldali végpontoktól, és egymás után, lépésenként haladjunk jobb oldalra, a jobb oldali végpont irányába. Ezt a legegyszerűbben egy ciklussal oldhatjuk meg, ahol a ciklusváltozó valamilyen módon kapcsolatban kell hogy legyen ezeknek a pontoknak az x irányú koordinátáival. Ezért a ciklusváltozót változtatjuk C-től C+A-ig, tehát a legkisebb és a legnagyobb x irányú koordináta között fog haladni a ciklusváltozó értéke, s a ciklusmag pedig nem mást csinál, mint hogy megvilágít, meggyújt egy-egy olyan pontot, amelynek az x irányú koordinátája éppen annyi, mint az aktuális ciklusváltozó-érték, az y irányú koordinátája pedig az előző ábrából adódóan az alsó szakasznál D, a felső szakasznál pedig D+B magasságú, tehát ennyi. (A konkrét esetben nincs jelentősége, de jó felfigyelni rá, hogy a szakaszok valójában egy ponttal hosszabbak lesznek a kívántnál. Ha például C-nek nullát, A-nak pedig százat adtunk meg, akkor a ciklus 0-tól 100-ig fog futni, vagyis összesen 101 pontot gyújt meg. Vannak esetek, amikor ez elronthatja a rajz minőségét. – L. A. D.) Az egészet természetesen lezártuk egy RETURN utasítással, mivel ezt szubrutinként akarjuk a későbbiekben felhasználni.
  8-27.jpgHát ha ez már megvan, akkor nagyon egyszerűen adódik ebből a függőleges párhuzamos szakaszokat rajzoló szubrutin, hiszen a betűk egyszerű cseréjével kapjuk meg azt. Ezt is kilistázom… (melléüt) nem ennyi, hanem 200-tól… igen, tehát itt a ciklusváltozó, a K nyilván a függőleges irányú koordinátát fogja befolyásolni. A legkisebb koordináta függőleges irányban a D, a legnagyobb pedig a D+B, ahogy az előbb a rajzon láttuk, és ennek megfelelően kell megvilágítanunk egy-egy pontot, amelynek az x irányú koordinátája a C, a másiknak pedig C+A. Így haladunk tehát lentről fölfele a pontok megvilágításával. Ezt szintén egy RETURN utasítással zárjuk le, hiszen ez is egy szubrutin lesz.
  Ezzel a két szubrutinnal már nagyon sok mindent meg tudunk rajzolni, mert rengeteg párhuzamos szakaszt tudunk ezekkel már húzni. A legegyszerűbb azonban az, hogyha összefogjuk őket egy újabb szubrutinba, s ez a szubrutin pedig már téglalapokat fog rajzolni. Ezt nagyon egyszerű megírnunk, hiszen semmi mást nem kell csinálnunk, csak meghívni az egyik szubrutint meg a másikat, amelyik megrajzol nekünk egy vízszintes, illetve függőleges szakaszpárt, s ebből kiadódik a téglalap. Ezt most gyorsan gépeljük is be. Kezdődjön a 400-as sortól. Tehát meghívjuk a 100-as sorszámon kezdődő szubrutint, ez megrajzolta a vízszinteseket… a 200-ast is meghívjuk, ez a függőlegeseket rajzolta… és mivel ez az egész megint csak egy szubrutin lesz, egy RETURN-nel zárjuk le… igen.
  8-28.jpg
  A paramétereket vagy változókat, amiket használunk ezekben a szubrutinokban, nyilván a programban fogjuk beállítani, hiszen így lesz ez egy általánosan felhasználható szubrutincsomag. És amint ez a példa is mutatja, az egyik szubrutin nyugodtan hívhatja a másikat, ez semmiféle problémát nem okoz.
  8-29.jpg19:13 Hát ennyi beszéd után most már lássunk is valamit, valami eredményt, úgyhogy próbáljuk ki ezeket a szubrutinokat. Ehhez persze meg kell írni azt a programrészt, amelyik ezt föl fogja használni. Ezt elkezdem az 5-ös sorszámtól írni. Meg kell ugye adni az A, B, C és D változók értékét, hiszen ezeket fogja majd fölhasználni az előző három szubrutin. Legyen az A értéke 100, a B értéke 70, ez ugye azt jelenti, hogy egy olyan téglalapot rajzolunk, amelynek a hossza száz egység, a szélessége hetven. Akkor meg kell adnunk a bal alsó csúcspont koordinátáit, ez legyen 30 és 0. Ezt már tanultuk, hogy egy soron belül több BASIC utasítást egymástól kettősponttal választhatunk el.
  Na most ezek után, ezekkel az értékekkel meghívjuk a téglalaprajzoló szubrutinunkat, ami a 400-as soron kezdődik, és rakunk még egy STOP utasítást, hogy az ezen a soron túl levő programsorok, tehát amelyek hátrébb helyezkednek el, azok most ne hajtódjanak végre. Most le is futtatom.
  8-30.jpg
  Na, hát ez egészen szép lett. Akkor bővítsük ki egy kicsit, rajzoljunk még hozzá két ablakot. Ehhez a 15-ös sort ugye meg kell szüntetni, nehogy itt megálljon a programunk. Megadunk újabb értékeket… az ablak értékeit, tehát a széltét-hosszát, ez az A és a B. Ezek most egyformák, ez azt jelenti, hogy négyzetet fogunk rajzolni. A C legyen negyven… igen… a D pedig harminc… közben puskázok ám, mert nem fejből találom ki ezt a sok értéket. Megint meghívom a 400-as soron kezdődő szubrutint. S hogy lássuk, hogy milyen egyszerűen föl lehet ezentúl ezt már használni, rajzoljunk ki még egy ablakot. Ez most azért nagyon tanulságos, mert nagyon sok érték ugyanaz maradhat: az A és a B paraméter értéke változatlan maradhat, hiszen ez azt jelenti, hogy ugyanolyan nagyságú ablakot rajzolunk. És a két koordinátából az y irányú is ugyanaz maradhat, ez csak annyit jelent, hogy ugyanolyan magasságban helyezkednek el majd ezek az ablakok. De az x irányú koordinátát azért mégiscsak meg kell változtatni, úgyhogy ez legyen hetven. Megint meg kell hívni a rajzoló szubrutinunkat. És szintén lezárjuk ezt a programot. S aztán jobb egy képernyőtörlés után futtatni az egészet.
  8-32.jpg
  Na. Hát ez pompás. Most már el tudjuk képzelni, hogy ugyanilyen módon megrajzolhatnánk a harmadik ablakot, ha kifér, és még az ajtókat is.
  22:43 Ebből a kis példából azért azt is látjuk, hogy mennyire segíti egy-két ilyen szubrutin a programírást. Ugyanis gondoljunk csak bele, hogy ha ennél a rajznál minden egyes szakaszt külön FOR ciklussal akarnánk kirajzolni, mennyivel hosszabb programot kapnánk, mint így, hogy néhány sor értékadás és szubrutinhívás van az elején, aztán meg utána egy-két szubrutin.
  8-34.jpgAkkor lépjünk tovább a rajzolásban. Itt egy újabb problémával állunk szemben: háztetőt kellene rajzolni. Ez sajnos ferde egyenes lesz, ferde szakasz, és ezt az eddigiekkel nem tudjuk megrajzolni. Tehát egy újabb programot, egy újabb szubrutint kell írnunk. Mielőtt hozzákezdenénk, gondoljunk bele, hogy milyen értékeket, milyen adatokat kell tudnunk ahhoz, hogy megrajzolhassuk ezt a ferde szakaszt. Hát azért tudni kell a kezdőpont koordinátáit és a végpont koordinátáit, tehát tudnunk kell, hogy hova akarjuk rajzolni ezt a ferde szakaszt, és ennyi elég is. Persze nem árt egy kicsit visszagondolni a középiskolában tanultakra, hogy hogyan lehet egy ilyet megrajzolni. Szintén ciklusban fogjuk kivilágítani a pontokat, csak itt az lesz a probléma, hogy minden egyes pontnak mind a két koordinátája, tehát az x és az y irányú koordinátája is változni fog. Na de az a kérdés, hogy mennyivel. Mint ahogy ez az ábra is mutatja mellettem, hogyha L értékkel változtatjuk az x irányú koordinátát, akkor az y irányú koordinátát ennek M-szeresével kell változtatni. Az M pedig nem más, mint a szakasz meredeksége. Tehát ha valamennyivel növelem az egyik koordinátát, valahányszorosával kell a másikat. Erre nekem van is itt készenlétben egy szubrutinom, ki is listázom… csak előbb egy kicsit puskáznom kell, hogy hol is van ez… 298-tól 320-ig… igen, ez az.
  8-35.jpg
  Ez megint egy nagyon egyszerű, rövid szubrutin. Az első sorban történik ennek az M értéknek, a meredekségnek a kiszámítása, a végpontok koordinátái alapján. Ezek után egy ciklus következik, ahol az L érték a kezdőponthoz viszonyított x irányú elmozdulást jelenti, ez nullától a két végpont x irányú távolságáig egyesével változik. A ciklus magja pedig sorban egymás után kigyújtja a megfelelő pontokat, az L értéket kell hozzáadni mindig a kezdőpont x irányú koordinátájához, és ennek M-szeresét az y irányú koordinátához. Most nézzük meg ennek az elejét is. 280-tól 320-ig… ebben ugyanis már van egy-két sor bővítés, néhány INPUT, azért, hogy most könnyen ki tudjuk próbálni ezt a pár sort.
  8-36.jpg
  Azért a 330-as sorba be kell raknom egy STOP-ot… és elindítom 280-tól. Megkérdezi az X1-et… hát legyen ez harminc… az Y1 legyen mondjuk szintén harminc… az X2 legyen száz… az Y2 pedig negyvenöt.
  8-37.jpg
  És meg is rajzolta ezt a ferde szakaszt. Hát azért ez a ferde szakasz nem egészen olyan, mint amilyennek szeretnénk, mert kicsit szaggatott – ami ugye háztetőnek pont megfelel, mert legalább látszanak a cserepek, de egy igazi egyenes szakasznál nem ez az ideális. Házifeladatnak pont megfelel az, hogy eltöprengjünk ezen, hogy vajon mitől ilyen szaggatott ez az egyenes, és be is rajzolhatjuk a háztetőt a ház körvonalaira. Valamint azon is érdemes elgondolkodni – ennek a háztetőrajzoló kis programrésznek a működését megvizsgálva –, hogy vajon miért nem lesz ez hajlandó függőleges egyeneseket húzni.

Zárszó

8-38.jpgKiss Donát
  27:44 Végezetül próbáljuk összefoglalni a mai adásban megismertetett szubrutinok előnyeit. Azt mondhatjuk általában, hogy amennyiben egy olyan program írásához készülünk, amelyben sűrűn előfordul azonos vagy azonos típusú feladat, így az ilyen programokat a szubrutinok használata rövidebbé és főleg áttekinthetőbbé teszi. További előnye a szubrutinok használatának az, hogy ezeket a szubrutinokat függetlenül is, önállóan is meg lehet írni, ki lehet próbálni. És később ezekből föl lehet építeni a bonyolultabb, nagyobb programokat.
  Most pedig lássuk a házi feladatot. A házi feladat a következő. Készítsünk olyan programot, amely mondjuk a hét valamelyik napjának délelőtti elfoglaltságait megkérdezi tőlünk, és kirajzolja a képernyőn azokat óránkénti bontásban. Ez emlékeztet a szokásos asztali naptár kivitelre, vagyis nyolctól kilencig, kilenctől tízig, és így tovább, megkérdezi, hogy mi az elfoglaltságunk, és ezeket valamilyen elfogadható formátumban kirajzolja a képernyőre, mint egy naptár. Nem titkolt célunk, hogy evvel a feladattal arra inspiráljuk önöket, hogy minél több szubrutint használjanak fel, hiszen véleményünk szerint úgy lehet ezt praktikusan megírni, s minél rövidebben, hogyha minél több szubrutint írunk hozzá. Mi is megírtuk az első lépését ennek a programnak, és ezt bemutatjuk azért, hogy lássuk, mire gondoltunk.
  

8-38.jpg8-39.jpg

  Ugye „mi az elfoglaltsága 8-tól 9-ig”, kérdezi a program… mondjuk értekezlet… és ezt kirajzolja a képernyőre, mondjuk egészen tizenkét óráig.
  Viszontlátásra.
  29:32