Herneczki Katalin
0:52 Köszöntöm kedves nézőinket. Eddigi adásainkban a BASIC nyelv számos utasításával, lehetőségével megismerkedtünk már. Úgy gondoljuk, hogy itt az ideje, hogy egy feladatot elejétől végéig, a tervezéstől a kódolásig, ellenőrzésig megoldjunk. Igen ám, de hogyan lássunk hozzá? Személyi számítógépeknél igen nagy a csábítás, hogy egyszerűen leüljünk a gép elé, és utasításonként beüssük a programot. Aztán megpróbáljuk futtatni. Ez persze elsőre az esetek többségében nem sikerül. Ilyenkor javítani próbálunk. Ha megint nem jó a megoldás, újabb és újabb javító menetek következnek. Ilyenkor új sorokat szúrunk be, régieket törlünk, netán GOTO utasításokkal előre-hátra ugrálunk a programban. Ettől persze a program egyre kuszább, egyre szövevényesebb lesz, és bizony nem mindig jutunk el a megoldáshoz. Sokszor az ember mérgesen félreteszi a programot úgy, ahogy van. Így van ez egyébként a köznapi életben is. Ha például mondjuk Kőbányáról Kelenföldre szeretnénk átjutni személygépkocsival, ráadásul még tanuló gépkocsivezetők is vagyunk, hát ilyenkor elég sokat kevergünk a városban, zsákutcákat találunk, egyirányú utcákkal találkozunk, sokszor visszajutunk egy olyan pontra, ahol már voltunk, és persze előbb vagy utóbb eljutunk Kelenföldre, de ez bizony komoly benzinköltségbe kerül, nem beszélve az eltelt időről és az idegességről. Nos, autóvezetésnél is, programozásnál is sokkal jobban járunk, ha előre eltervezzük, mit szeretnénk csinálni. Számos programtervezési módszer ismeretes – sajnos adásidőnk rövidsége miatt nem tudjuk egyiket se részletesen ismertetni. Ezek között a tervezési módszerek között azonban sok különbség van, de nagyon sok közös vonás is. Ezeket a közös vonásokat szeretnénk kiemelni és kihasználni a továbbiakban. Az egyik alapelv például az „oszd meg és uralkodj” elv. Azaz: egy feladatot bontsunk részekre, és a részfeladatokat további feladatokra, további részfeladatokra finomítsuk. Ez a finomítás addig tart, amíg egy olyan elemi részhez nem jutunk, amelyet már könnyen tudunk kódolni. Legegyszerűbb lesz, hogyha ezt egy konkrét feladaton megnézzük. Nézzük most a feladatot.
Dr. Kocsis András Commodore 64
3:09 Itt vagyunk ismét meghitt környezetünkben, a számítógépek között, és most nézzük a feladatot. Készítsünk egy olyan programot, amely napi középhőmérsékletet számol és ír ki a képernyőre, a reggeli, déli és az esti hőmérséklet alapján. Hogy az eredmény szemléletesebb legyen, ne csak a számszerű értékeket írja ki a program a képernyőre, hanem az egyes hőmérsékletek értékével arányos vonalat is rajzoljon ki. Ezek a vonalak álljanak csillagokból, és annyi csillagból, ahány fok van. Ha például öt fok van, akkor öt csillagból, és így tovább. Egyszerűsítésképpen tételezzük fel, hogy a fűtési időszak kezdetén vagyunk, és csak egy és harminc fok közötti értékek fordulhatnak elő. Ez a programunkat is némileg egyszerűsíteni fogja.
Herneczki Katalin Commodore 64
3:59 Tervezzük most meg a programot. Eddig az alapszerkezetek, így a feltételes szerkezet, illetve ciklusszerkezet működésének megértéséhez folyamatábrát használtunk. Programszerkezet ábrázolásához, programtervezéshez ennél jobb eszköz az úgynevezett hierarchiadiagram. Ezen jobban ábrázolható a részekre bontás, illetve a finomítás menete. Javasoljuk egyébként nézőinknek, hogy a későbbiekben egy konkrét programtervezési módszert alaposan tanulmányozzanak át.
Mostani feladatunk, az átlagszámító feladat egy egyszerű program. De ezen szeretnénk bemutatni a programtervezés lépéseit. Ezt a későbbiekben bonyolult feladatoknál fogják igazán jól használni.
Első megközelítésben a program három résztevékenységre bontható. Ezek közül az első az olvasás, a második az átlagszámítás, s végül a harmadik a kiírás. Ha közelebbről szemügyre vesszük őket, akkor az első mindössze három hőmérsékleti adat beolvasását jelenti, ezért ezt tovább nem részletezzük. A második, az átlagszámítás egyetlenegy művelet, szintén nincs értelme tovább bontani. És végül a harmadik, a kiírás – hát ez bizony több résztevékenységet tartalmaz, úgyhogy ezt tovább bontjuk.
5:18 A tervezés következő lépése tehát a hármas résztevékenység továbbfinomítása, tovább-bontása. Kérdés az, hogy mi alapján történjen a további finomítás. Hát a feladat szövegének figyelembe vételével, a feladat természetes szerkezetét követve. Vagyis az alábbi négy résztevékenységet sorolhatjuk fel: reggeli hőmérsékleti adatok kezelése, déli hőmérsékleti adatok kezelése, esti hőmérsékleti adatok kezelése, természetesen kiírásra gondolunk, és végül az átlaghőmérséklet kezelése, kiírása.
Ez a négy résztevékenység még nem úgynevezett elemi résztevékenység, mert tovább-bontható. Mind a négy egyébként ugyanazokat a műveleteket végzi el, ezért csak az egyik tovább-bontását, finomítását mutatjuk meg, a többit hasonlóképpen kell elvégezni.
A reggeli hőmérsékleti adatok kezelése két részből áll. Az első a hőmérséklet kiírása, természetesen Celsius-fokban, a második rész pedig a vonal kiírása. Ez a vonal tulajdonképpen csillag karakterek ismétlődéséből áll össze, annyi csillagot kell írnunk, ahány fokos hőmérsékletet mértünk aznap. Azt, hogy itt egy ciklusról van szó, azt a doboz jobb felső sarkában lévő csillag karakter jelzi. Ennek semmi köze nincs a feladat szövegében szereplő csillaghoz, ez egy egyezményes jel a ciklus ábrázolására, természetesen más jelöléseket is szoktak alkalmazni. Teljesen hasonló a felbontása a déli, az esti, illetve az átlag-hőmérsékleti adatoknak is. Ezért ezt most nem is mutatjuk meg.
Ezzel tulajdonképpen a programtervezés végére értünk, hiszen itt már csak elemi tevékenységeink vannak, ezeket könnyen tudjuk kódolni.
Pinkert László Commodore 64
7:08 A program kódolását kezdjük azzal, hogy az első néhány sorban megjegyzésekből fejlécet készítünk. Ez nem szerepelt az eddigiekben a részfeladatok között, de fontos ahhoz, hogy a későbbiekben a programot azonosítani tudjuk. Ezek után pedig megkezdhetjük a részfeladatok kódolását. Mindegyik elé írjunk megjegyzéssort, ezzel a program áttekinthetőbbé válik.
Az első feladat, ha visszaemlékszünk rá, beolvasni a reggeli, déli és esti hőmérsékleti adatokat, egymás után. Természetesen mindegyik előtt megfelelő szöveget írunk, amelyik felhívja a felhasználó figyelmét, hogy melyik hőmérsékletre vár a program. Nézzük tehát a reggelt.
Megjegyzés tehát: a reggeli adatokkal fogunk foglalkozni. Ezek után, bár ez nem szerepelt külön a részfeladatok között, de nyilván itt kell elvégeznünk, hogy letöröljük a képernyőt.
Dr. Kocsis András Commodore 64
15:24 Most pedig nézzük meg, hogyan lehet a csillagokból álló sorokat kódolni. Először is állapodjunk meg abban, hogy az alapművelet itt egyetlen csillagnak a kiírása, és ezt az alapműveletet mi annyiszor fogjuk ismételni, ahány csillagot egy sorba ki kell írni. Hogyan valósítható meg ez kód szintjén? A legkézenfekvőbb megoldás az, hogy annyi csillagkiíró PRINT utasítást írunk a programba, ahány csillagot ki kell írni. Mint ahogy a képen látható, itt csak két utasítást írtunk – ha ezt végrehajtjuk, akkor a feladatot korrektül végrehajtja. (Mint más esetekben is, itt és a következő példákban is ' aposztróf áll " idézőjel helyett – L. A. D.) De ez egy nagyon fáradságos megoldás, hiszen az utasítást annyiszor kell leírni, ahányszor végre akarjuk hajtani.
Pinkert László Commodore 64
19:57 A csillagokat kiíró programrészletet beírva eljutottunk odáig, hogy az esti hőmérséklet is a képernyőre kerül. Ezek után az átlaghőmérsékletet fogjuk kiírni, és mivel ugyanolyan hőmérsékletérték, mint a többi, illetve ugyanúgy ábrázolni is fogjuk, ezért semmiben nem különbözik az előző háromtól. Tehát. A következő sorokban az következik, hogy PRINT, a szöveg természetesen az lesz, hogy átlag, és az átlaghőmérséklet értékét íratjuk ki. Ezek után következik a csíkhúzó ciklus, de előbb még egy üres sort hagyunk. (Rossz sorszámot ír – L. A. D.) …háromszáznyolcvan… annyi csillagot íratunk ki, amennyi az átlaghőmérséklet… következik a csillagot kiíró PRINT utasítás, pontosvesszővel lezárva, azért, hogy a csillagok egymás mellé kerüljenek. Végül a FOR utasításhoz tartozó NEXT, és két PRINT utasítás.
Herneczki Katalin Commodore 64
24:04 Programunk látszólag helyesen működik. Én azonban szeretnék néhány más értéket is megpróbálni. A reggeli hőmérséklet legyen negatív mondjuk –5 fok. A déli hőmérséklet pedig ötvenöt fok, az esti hőmérséklet mondjuk egy fok.
(Az eredményképernyő felirataiból láthatóan itt a programnak egy másik változata fut – L. A. D.)
Eredményként átlaghőmérsékletnek tizenhét fokot kaptunk – igen ám, de a reggeli hőmérsékletnél, a mínusz öt foknál egy csillag jelent meg. Déli hőmérsékletként elfogadta az ötvenöt fokot. Tehát ez a feladat most nem úgy működik, ahogy ezt definiáltuk, vagyis nem csak a 0 és a 30 közötti értékeket fogadja el. Ezért feltétlenül be kell valamilyen ellenőrzést is iktatnunk.
Ha programunkat helyesen terveztük, akkor könnyen megtaláljuk azt a helyet, ahová a hőmérsékleti adatok ellenőrzése elhelyezhető. A tervezés első szintjén három dobozunk volt, ezek közül az első az Olvasások nevű doboz volt, ez egy résztevékenység. Itt olvassuk be a reggeli, az esti és a déli hőmérsékletet. Nos, ez az a hely, ahova az ellenőrzést be kell iktatni.
Ahhoz, hogy a programunk teljesen helyesen működjön, az Olvasás résztevékenységet további elemekre kell bontani, finomítani kell, be kell iktatni az adatellenőrzést. Nézzük meg ezt a reggeli hőmérsékletnél. Beolvasom a reggeli hőmérsékletet, megvizsgálom, azaz megnézem, hogy valóban nulla foknál nagyobb-e, és harminc fokot pedig nem haladja meg. Az eredmény pedig vagy jó, tehát a feltételnek megfelelő, vagy pedig rossz, a feltételnek nem felel meg. Általában ilyen esetben, tehát a rossz esetben hibaüzenetet illik írni a programban. Teljesen hasonló a helyzet a déli és az esti hőmérsékleti adatok kezelésénél, tehát olvasás, vizsgálat követi egymást. Még egy magyarázattal tartozunk: mit jelent a két kis karika a Jó, illetve Rossz nevű dobozok jobb felső sarkában? Nos, ez hierarchiadiagram esetében az IF–THEN szerkezet, a szelekció jele, tehát vagy az egyik kerül végrehajtásra, vagy pedig a másik, egymást kizáró módon.
Kedves nézőinknek javasoljuk, hogy gyakorlásként oldják meg most már ezt a feladatot teljesen helyesen, vagyis az adatellenőrzést is beépítve. Egyébként gyakorlásként – mind a programtervezés, mind a kódolás gyakorlására – hasznos feladatokat találnak a tankönyvben. Jó munkát kívánunk, viszontlátásra.
26:43