Upload failed. Maybe wrong permissions?

User Tools

Site Tools



3. Fejgyakorlat

3-0.jpg
  

25:50
1985. január 30.
MTV 2. csatorna, 19:30

Bevezető

3-1.jpgHorváthné Majsa Katalin Primo
  1:21 Legutóbb azt ígértük, hogy most megírjuk első saját programunkat. Ez így is van. Természetesen ne gondoljunk túl hosszú és bonyolult feladatot megoldó programra. Mielőtt azonban hozzákezdenénk, gondoljuk végig, hogy mit is várhatunk egy ilyen számítógépes programtól. Elsősorban azt, hogy legyen univerzális, általános, vagyis a feladatot ne csak egy meghatározott, speciális esetben tudja végrehajtani, megoldani. Másik fontos követelmény az, hogy a program legyen önműködő, önmagyarázó. Ez azt jelenti, hogy felhasználójától a program futását elindító parancs begépelésén kívül ne kívánjon meg semmiféle programozásra vagy a program működésére vonatkozó ismeretet.
  Mindezt nézzük most egy egészen egyszerű kis feladaton. Az új mértékrendszer, az SI bevezetése óta gyakran zavarba esünk, ha a személygépkocsik motorjának teljesítményéről esik szó. A megszokott lóerő helyett a kilowatt jött divatba, sőt hát most már ez a kötelező. Első kis programunk ezt a lóerő–kilowatt átszámítást fogja elvégezni. Hogy hogyan is fogjunk hozzá, azt dr. Kocsis András, a sorozathoz megjelent BASIC tankönyv szerzője fogja bemutatni nekünk.

Feladatelemzés

3-2.jpgDr. Kocsis András Commodore 64
  2:38 Hogy oldjuk meg a feladatot? Mi lesz az első lépés, és aztán hogyan folytassuk? Ahhoz, hogy ezeket a kérdéseket megválaszoljuk, meg kell ismernünk a programkészítés módszerét. Minden feladatot valamilyen meghatározott módszerrel kell megoldanunk. Ha például egy hidat akarunk felépíteni, prémiumot akarunk kiosztani vagy hétvégi bevásárlást akarunk elintézni, akkor valamilyen módszer szerint ezek a feladatok elvégezhetők. Nézzük ezt a nagyon egyszerű, hétköznapi feladatot, hogy hétvégi bevásárlást intézünk el. Ezt a feladatot többféle módszerrel tudjuk elvégezni. Tehetjük azt például, hogy megfogjuk a kosarat, pénzt veszünk magunkhoz, elmegyünk a boltba és ami eszünkbe jut, azt megvesszük. Ezzel a módszerrel könnyen juthatunk olyan helyzetbe, hogy a vasárnapi ebédnél vesszük észre, hogy valami nagyon lényeges dolog hiányzik. De alkalmazhatunk másik módszert is. Eszerint pontosan felmérjük, hogy a hétvégén mit fogunk csinálni, mikor megyünk el, mikor hívunk vendégeket, vagy kirándulni megyünk, ennek alapján pontosan össze tudjuk állítani az étrendet, megnézzük, hogy ehhez mit szükséges bevásárolnunk, összeállítjuk a listát s így megyünk le vásárolni. Ha ezt a módszert követjük, akkor bizonyára kisebb valószínűséggel kerülünk olyan helyzetbe, mint amit az előbb említettem.
  3-3.jpgMinden feladatnak nagyjából három megoldási lépése van. Először is elemezni, értelmezni kell a feladatot, majd meg kell tervezni, végül pedig meg kell valósítani. A programkészítés is nagyjából ebből a három lépésből áll, azonban a programkészítés egy sajátos tevékenység, tehát ennek megfelelően kicsit módosítani kell a lépéseket; eszerint tehát a három lépés az elemzés, a tervezés és a kódolás. Nézzük most végig ezt a három lépést, és közben oldjuk meg a feladatunkat.
  4:43 A feladatunk az volt, hogy egy olyan programot készítsünk, amely segítségével a számítógép lóerőértékekből kilowattértékeket számol át és ezeket a képernyőn kijelzi.
  Először nézzük az elemzést. Az elemzésnek az első lépése az, hogy a feladatot részfeladatokra kell felbontani. Olyan részfeladatokra, amelyekből az egész feladat fölépíthető. Esetünkben három részfeladatra lehet az egész feladatot felbontani. Az első részfeladat a lóerőértéknek a beolvasása vagy megadása a program számára; ez történhet úgy, hogy fixen beépítjük a programba, de történhet úgy is, hogy a felhasználó a program végrehajtása során gépeli be a lóerőszámot. A következő részfeladat az átszámítás, a lóerőértéknek az átszámítása kilowattá, és a harmadik pedig ennek a kapott kilowattértéknek a megjelenítése a képernyőn. Ezzel a feladatot részfeladatokra bontottuk.
  3-4.jpg6:04 Nézzük meg ezt a három részfeladatot. Az elsőben tehát abban maradunk, hogy a billentyűzetről beolvasott lóerőértékeket fogjuk beolvasni. A másik részfeladat az átszámítás lesz, amikor is a beadott lóerőértéket kilowattá átszámítjuk, és a harmadik pedig az átszámított kilowattértéknek a megjelenítése lesz a képernyőn. Ezzel tulajdonképpen nemcsak a részfeladatokat térképeztük fel, hanem egy algoritmust is kaptunk, egy műveletsort, amelynek a segítségével a program ezt a feladatot meg tudja oldani. Tehát ebben a sorrendben fogjuk a feladatot végrehajtani.
  Az elemzés során azt is kell vizsgálni, hogy a feladat megoldható-e. Esetünkben nyugodt szívvel kijelenthetjük, hogy a feladat megoldható, hiszen a lóerőértéket be tudjuk olvasni a billentyűzetről, a lóerőérték kilowattra átszámítható, ehhez van egy átszámító állandó érték, és végül arra is van lehetőség, hogy az átszámított kilowattértéket a képernyőn megjelenítsük. Így tehát a feladatunk megoldható.
  Ezzel az elemzést lezártuk, a következő rész a tervezés. A tervezés során az egyes részfeladatokat részletesen is meg kell vizsgálnunk, hogy mit kell elvégezni. Nézzük meg most még egyszer az előbbi ábrát. A lóerőértékek beolvasása a terminál billentyűzetéről történik, tehát itt fogja a számítógép beolvasni a lóerőértéket. Nem elég csupán beolvasni, hanem ezt tárolni kell, meg kell őrizni ahhoz, hogy az átszámítást is el tudja végezni a számítógép. A következő lépés ennek a beolvasott lóerőértéknek az átszámítása egy meghatározott formula szerint kilowattá, és ezt az értéket tovább kell adni a kijelzéshez, a harmadik részfeladathoz, amikor is ezt az átszámított kilowattértéket ki kell írni a képernyőre.
  Ezzel a részfeladatoknak a tervezése megtörtént, a következő lépés a kódolás.

Kódolás

3-5.jpgPinkert László Commodore 64
  8:29 A kódolás azt jelenti, hogy a feladat megoldásának tervét lefordítjuk BASIC nyelvre. Mielőtt hozzákezdenénk, gondoljunk azonban arra, hogy ha később, netán hónapok múlva elővesszük a program listáját, aligha fogunk emlékezni arra, hogy a program mit csinál. Így tehát az első utasítássort magunknak írjuk.
  A rem kulcsszó azt jelenti, hogy az utasítássor további része nem tartozik a programhoz. Csupán megjegyzés, angolul remark. A program futása közben a 10-es sorhoz érve a gép nem csinál semmit. Áttér a következő utasítás végrehajtására.
  Programunk, ha elég intelligens és barátságos, bemutatkozik, vagyis kiírja a képernyőre, hogy mit csinál. Erre használhatjuk a print utasítást.
  3-6.jpgNézzük meg az utasítás szerkezetét. A 20-as az utasítás sorszáma, mint tudjuk, meghatározza az utasítások végrehajtásának sorrendjét. A print kulcsszó, utasítja a gépet valamilyen művelet elvégzésére. A kulcsszót követi az utasítás tárgya, vagyis amire a művelet vonatkozik. Jelen esetben egy szöveg. Lóerő–kilowatt. A szöveg első jele egy speciális vezérlőkarakter. Commodore számítógépen ez utasítja a gépet, hogy törölje le a képernyőt és a szöveget a képernyő bal felső sarkába írja.
  (Egy inverz szívet ábrázol: – L. A. D.)
  Azt szeretnénk, ha programunk egyaránt át tudná számolni a motorkerékpár vagy a repülőgép-hajtómű teljesítményadatait. Ezért a feladatot változó bemenő adatokkal kell megoldanunk.

Változókezelés

3-7.jpgKiss Donát Spectrum
  10:36 A számítógép az adatokat tárolni is képes, mégpedig igen nagy mennyiségben. Azt is mondhatnánk, hogy bekapcsolás után a számítógép olyan, mint egy nagy, üres fiókos szekrény vagy más néven sublót. Ez azt jelenti, hogy egy-egy ilyen eltárolt szövegre vagy adatra később bármikor szükségünk lehet. Vagyis valahogy hivatkoznunk kell tudni rá, ezért ezeknek a fiókoknak – vagy most már mondjuk ki a számítástechnikai nevét –, változóknak van egy-egy azonosítójuk. És természetesen van tartalmuk. Nézzünk erre egy példát.
  

3-8.jpg3-9.jpg

  
3-10.jpg3-11.jpg

  Először vegyük a numerikus változót, amelyben – mint ahogy az a nevéből kiderül – általában számokat tárolunk. Legyen valamilyen azonosítója vagy neve ennek a változónak, például nagy A betű.
  3-12.jpg
  Hát ezt most ráírtuk itt a sublótnak a fiókjára, hogy mindenki fejben tudja tartani majd, hogy ez éppen milyen változó, tartalma pedig legyen mondjuk 200.
  3-14.jpg
  Ez azt jelenti, hogy a 200 belekerül ebbe a fiókba, s a továbbiakban ha erre az adatra szükségünk van, az A betűvel hivatkozhatunk majd rá különböző képletekben, kifejezésekben, vagy akár kinyomtathatjuk a képernyőre, vagy megvizsgálhatjuk még egyszer, hogy mi van ebben az A-ban: 200.
  11:58 Természetesen átírhatjuk ezt a 200-at, ez nem jelenti azt, hogy ez örökre vasalva ebben a fiókban van, a későbbiekben hogyha kiadunk egy másik értékadó utasítást ugyanerre a változóra vonatkozóan, és felülírjuk ezt az értéket, vagyis egy új értéket írunk be, akkor azt tárolja el a fiók.
  3-16.jpgNézzünk egy másik típusú változót. Ez pedig a szöveges vagy karakteres változó. Ez abban különbözik a numerikus változóktól, hogy nemcsak számokat, hanem szövegeket tárolhatunk benne. Nevezzük el – mivel ennek is természetesen kell legyen azonosítója – ezt a változót almának, amely, amint az a képen is látható, annyiban különbözik a numerikus változóktól, hogy utána egy dollárjelet teszünk, illetve kell tegyünk, minden esetben, amikor hivatkozunk rá, hiszen ez különbözteti majd meg a szöveges változót a numerikustól.
  Hát ebben mondjuk stílszerűen legyen az, hogy jonatán. Lehetne ez starking is természetesen.
  
3-17.jpg3-18.jpg

  Vagyis hogyha a későbbiekben előhúzzuk ezt a fiókot, akkor azt találjuk ott, hogy jonatán, ami tulajdonképpen egy szöveg.
  13:09 Nézzük meg, hogy milyen utasítások vonatkoznak a BASIC-ben a változókra. Már említettem az értékadást, nos, ez a következőképpen történik. Mondjuk egy A nevű változónak azt az értéket szeretném adni, hogy 15. Nagyon sok számítógép megelégszik avval, hogy A=15, más gépeknél viszont van erre egy külön utasítás, aminek a használata kötelező, ez pedig a let. Ilyen gép a Sinclair is. (A korabeli gépek közül csak a Sinclair-eken volt kötelező. A többin is szabad volt kiírni a kulcsszót, de nem kötelező – L. A. D.) Tehát azt kell mondjam, hogy LET a=15. Evvel a 15 bekerült az A változóba vagy A azonosítójú változóba. Tegyük fel, hogy lesz nekem egy másik változóm is, a B, amelyben 20-at tárolok.
  
3-19.jpg3-20.jpg

  Hogy hogyan tudom ezeket a változóneveket felhasználni egy kifejezésben, erre nézzünk egy nagyon egyszerű példát. Írassuk ki a képernyőre például a két változó tartalmának a szorzatát. Ebben az esetben mindössze annyit írok, hogy PRINT a*b. Ha ezt lefuttatjuk… rövid fejszámolással magunk is meggyőződhetünk arról, hogy a két szám szorzata látható a képernyőn.
  
3-21.jpg3-22.jpg

  3-23.jpgMég egy furcsaságot mutatnék. A BASIC-ben és általában a számítástechnikai nyelvekben megengedett az olyan utasítások használata, amitől, hát, érzékenyebb lelkületű matematikusok nem nagyon örülnek az ilyen típusú kijelentéseknek vagy kifejezéseknek, ez pedig így hangzik, hogy jogom van azt mondani, hogy LET a=a+1. Ami azt jelenti, hogy azt állítom, hogy az A egyenlő A plusz 1-gyel. Ez persze így matematikailag nem igaz, de ennek itt nem ez a szerepe, hanem evvel azt szeretném mondani a BASIC nyelvén, hogy ami eddig volt az A változóban, azt növeljük megy 1-gyel és tegyük vissza az új értéket az A változóba. Így tehát ha esetleg önök között is dühöngő matematikusokat találnak, avval lehet lecsillapítani a kedélyeket, hogy az A korábbi és aktuális értéke között teremt tulajdonképpen kapcsolatot ez a kifejezés. Ha ezt fölveszem 15-össel ebbe a programsorba (programba – L. A. D.), akkor… és lefuttatom ezt a programot, ebben az esetben én a 16-szor 20 számot kell hogy lássam a képernyőn, hiszen ugyan az A-nak adtam 15 értéket, de rögtön a következő sorban módosítottam azt.
  
3-24.jpg3-25.jpg

INPUT

3-26.jpgHorváthné Majsa Katalin Spectrum
  15:44 Egy másik mód arra, hogy ezeknek a fiókoknak vagy változóknak értéket adjunk, az input utasítás használata. A let és az input utasítás között az a különbség, hogy amíg a let utasítással a program írása során értéket adunk változóinknak, addig az input utasítással ez az értékadás a program futásának idejére halasztható. Ugyanis a számítógép, hogyha a program végrehajtása során egy input utasítással találkozik, a program futása félbeszakad, s a számítógép addig vár, míg ennek a változónak be nem gépeljük az értékét. Ezt a legtöbb számítógép a képernyőn egy kérdőjellel szokta jelezni. Ilyenkor kell tehát begépelnünk ezt az értéket, amivel a későbbiekben a számításokat a gép el fogja végezni, s az érték begépelése után a program futása ugyanúgy folytadódik, mint hogyha ennek a változónak a let utasítással adtunk volna értéket.
  Nézzünk erre egy példát. Kérdezzük be mondjuk az A változó értékét. Tehát begépelem azt, hogy INPUT a. Hát sajnos ez Spectrum és nem jelzi kérdőjellel azt, hogy tőlem értéket vár, de azt mondom, hogy legyen az értéke 2, s hogyha ezt a print utasítással visszakérdezem, a képernyőn valóban megjelenik az, hogy 2.
  

3-27.jpg3-28.jpg

  
3-29.jpg3-30.jpg

  3-31.jpg
  Az input utasítás egy másik nagy előnye, hogy barátságossá, önmagyarázóvá tehető. Ez alatt azt értem, hogy ha a változó nevének megadása elé begépelünk, beírunk idézőjelek közé egy szöveget, akkor a számítógép a változó értékének bekérdezése előtt ezt a szöveget megjeleníti a képernyőn. Nézzünk erre egy példát. Kérdeztessük meg ismét az A változó értékét, de most már intelligens formában, úgy, hogy a számítógép írja ki azt az üzenetet, hogy mire vár választ.
  
3-32.jpg3-33.jpg

  
3-34.jpg3-35.jpg

  Az üzenet meg is jelent a képernyőn; ezek után ha megadom a 23-as számot s ezt visszaellenőrzöm a print utasítással, tehát kiíratom az A változó értékét, a képernyőn valóban megjelenik a 23-as szám.
  18:08 Sajnos az input utasításnak ez a formája nem minden számítógépnél valósult meg, ilyen például a ZX81 is. De ilyen esetekben is van megoldás, az input utasítás elé írt print sorral ugyanis kiírathatjuk a kívánt üzenetet, s ezután az input-tal meg bekérdezzük a változó értékét.
  Elképzelhető, hogy ezek után még nem látjuk egészen világosan, hogy mekkora jelentősége van ennek. De gondoljunk csak bele. Tegyük fel, hogy kapunk egy olyan programot, amely több bemenő adattal dolgozik. Ha leülünk a számítógép elé anélkül, hogy ismernénk ennek a programnak a felépítését, szerkezetét, ugyancsak törhetjük a fejünket, hogy a számítógép ugyan milyen változók értékét kérdezi tőlünk, s vajon milyen sorrendben.
  Ha a fentieket végiggondoljuk, egyhamar rájövünk, hogy a lóerő–kilowatt átszámítós feladatunkban az input utasítást célszerű használni. Ugyanis most még, a program írása során nem tudjuk, hogy milyen lóerőértéket akarunk átváltani kilowattá, ez csak a program futása során dől el. Ennek megfelelően bővítsük is ki a programunkat: 40-es sorban kérdeztessük meg az átszámítandó lóerő értékét, tehát INPUT "KEREM A LOERO ERTEKET", ez lesz a megjelenítendő üzenet, és ahova kerül, az nem más, mint a LO nevű változó.
  
3-36.jpg3-37.jpg

Lóerő–kilowatt

3-38.jpgPinkert László Commodore 64
  19:49 Az első részfeladat megoldása után térjünk át a másodikra. Átszámítás.
  

3-39.jpg3-40.jpg

  Az átszámítást egyetlen utasítással elvégezhetjük.
  3-41.jpg
  Az utasítás hatására a gép kiszámítja az egyenlőségjel jobb oldalán lévő kifejezés értékét. Itt a LO nevű változó értékét megszorozza 0,736-del. Az eredményt a KW nevű változóban helyezi el, ez már a kilowattérték. Ki kell íratnunk, ismét a print utasítást használjuk.
  3-42.jpg
  A print utasítással itt több dolgot is kiíratunk. Először a LO változó értékét: ez az, amit az input utasításnál, a program elején begépeltünk. A gép utánaírja, hogy lóerő. Ezek után a kilowattérték következik, amit a gép kiszámított, majd ismét szöveg: kilowatt. Megfigyelhetjük, hogy a lóerő, illetve a KW változó közé vesszőt tettem, így a gép a két kiírás között némi helyet hagy.

Futtatás

3-43.jpgDr. Kocsis András Commodore 64
  21:23 Ezzel a program elkészült. Az elemzés, tervezés és kódolás során egy helyesen működő programot kaptunk. De mint mondani szokás, a puding próbája az, hogy megeszik, a programé pedig az, hogy helyesen működik. Hajtsuk végre a programunkat, gépeljük be a run parancsot, adjunk meg egy lóerőértéket, és megállapíthatjuk, hogy a program valóban helyesen működik, és most már üzemszerűen használhatjuk ezt a programot. Természetesen programunknak vannak még kritizálható pontjai, de ahhoz, hogy tökéletesebbé tudjuk tenni, meg kell ismernünk a BASIC további eszközeit.
  3-44.jpg

Házi feladat

Egy jó tanfolyam nem létezhet házi feladat nélkül. Javasoljuk, hogy feladatként készítsenek egy olyan programot, amely a fordított átszámítást végzi, tehát kilowattból számít át lóerőt, valamint tanulmányozzák a könyv harmadik és negyedik fejezetét és a negyedik fejezet végén levő feladatokat.
  3-45.jpg

GOTO

3-46.jpgKiss Donát Spectrum
  22:22 A program most már teljessé is tehető. Indítsuk akkor el a run paranccsal. Minden annak rendje-módja szerint elindult, megkérdezi a lóerő értékét, legyen ez mondjuk egy trabantnyi, 26 – megkapjuk kilowattban az eredményt. És azt is látjuk a képernyőn, hogy a program futása megállt.
  3-47.jpg
  Mi lenne, ha most egy újabb lóerőnek az átszámítását szeretnénk kezdeményezni? Akkor ezt a programot ismét el kell indítani run-nal. Igen ám, de a programozók általában igen szeretik a kényelmet, magyarul lusták, és szeretnék például, hogyha ez a program önmagától újraindulna minden esetben. Erre van egy nagyon praktikus utasítás a BASIC-ben, az a neve, hogy goto, ami angolul körülbelül annyit tesz, hogy menjen valamilyen helyre. A goto után megadjuk azt a sorszámot, ahol szeretnénk, hogyha a program végrehajtása folytatódna. Ebben az esetben a gép eltér a növekvő sorszám szerinti végrehajtástól és ezen az általunk megjelölt sorszámon folytatja a végrehajtást.
  Vegyük föl most erre a listára következő utasításként, programsorként a go to 30 (Sinclair-gépeken mindig két szóba írva jelenik meg – L. A. D.) utasítást, aminek hatására azt várjuk, hogy ez a program önmagától körbe-körbe fog futni. Próbáljuk meg.
  

3-48.jpg3-49.jpg

  Tehát egy Trabant… egy Zsiguli. És így tovább, a program minden további kérdezés és újraindítás nélkül körbe-körbe jár.
  Viszont ha ezt a programot szeretnénk megállítani, akkor erre is kell keressünk valamilyen módszert. Általában a programok a BASIC-ben a BREAK paranccsal (billentyűvel – L. A. D.) állítható meg, ha azonban egy program éppen egy input utasításnál áll, akkor ezt a stop-pal tehetjük meg. Próbáljuk ki: íme, a program megállt.

Zárszó

24:18 Foglaljuk akkor össze, hogy mit tanultunk ma. Szó volt ugye a programírás kapcsán különböző beíró, kiírató utasításokról, megtanultuk azt, hogy hogy kell egy programot felépíteni, sőt megírtuk az első kis programkánkat is. Azt is megtanultuk, hogy ha már egy olyan jó programunk van, ami körbe-körbe fut, akkor azt hogy lehet kikapcsolni. Miután megtanultuk, hogy hogy kell kikapcsolni, ezek után…
  

3-50.jpg3-51.jpg

  
3-52.jpg3-53.jpg

  3-54.jpg
  24:45