Upload failed. Maybe wrong permissions?

User Tools

Site Tools



9. Függvények 1.

9-0.jpg
  

26:48
1985. március 13.
MTV 2. csatorna, 19:30

Bevezető

9-1.jpgKiss Donát Spectrum
  1:01 Az elmúlt adás végén, ha még emlékeznek rá, egy házi feladat megírására buzdítottuk önöket. Most megmutatjuk ennek a házi feladatnak egy lehetséges megoldását, a mi megoldásunkat. A feladat úgy szólt, hogy készítsünk egy olyan programot, amely a képernyőre naptárszerűen kirajzolja valakinek az elfoglaltságát mondjuk nyolctól tizenkettőig, mégpedig oly módon, hogy megkérdezi minden órában az elfoglaltságát, és ezt a megfelelő idő mellé felviszi a képernyőre, és hát valamilyen élvezhető formátumban ezt megjeleníti. Nézzük meg, hogy hogy működik a mi programunk. Megkérdezi tőlünk, hogy mit csinálunk nyolctól kilencig, hát a szoftveresek akkor még bőven alszanak, kilenckor már nyugodtan lehet azonban egy értekezletük… tíztől tizenegyig mondjuk nyílt nap van az óvodában, beugrunk és az ebédet előrehozzuk tizenegytől tizenkettőig. Függőlegesen is kettéosztjuk a képernyőt és lám, itt az eredmény.
  

9-2.jpg9-3.jpg

  9-4.jpgValami ilyesmire gondoltunk – természetesen nagyon sok más formátum is elképzelhető, nézzük azonban meg most ezt a programot. Hiszen az egésznek az volt az értelme, hogy ez egy olyan feladat, amely – úgy éreztük, hogy – szubrutinok írására sarkallja majd a vele foglalatoskodókat. A program nem meglepő módon igen rövid, mindössze tán tizenöt sor. Tulajdonképpen a fő programrész a 10-estől a 60-as sorig tart, ahol is egy STOP, „állj” utasítás található. A program magja, tulajdonképpen a legfontosabb része az a ciklus, amely a 10-es, 30-as, 40-es, 50-es sorban található. Itt négyszer, mégpedig úgy négyszer, hogy nyolctól tizenegyig – tehát mindig a megfelelő kezdőpont órájának értékének megfelelő a ciklusváltozó, s a ciklusmagban nem történik más, mint két szubrutinhívás. A 200-as és a 300-as soron kezdődő szubrutinok meghívása. Nézzük meg, mit végez a 200-as sornál kezdődő szubrutin. Nem csinál mást, mint megkérdezi tőlem, hogy mit csinálok n-től n+1-ig, ahol n a ciklusváltozó, és az általam beadott elfoglaltságot eltárolja az a$ szöveges változóba. És visszatér. A 300-as sornál kezdődő szubrutin pedig kiírja a megfelelő tól-ig időpontot, tehát azt, hogy mondjuk nyolctól kilencig, melléírja az elfoglaltságomat, és a 400-as sor hatására aláhúzza egy csillagsorral. Valamint visszatér. Amikor a program túljutott ezen a cikluson, akkor már csak egyetlenegy feladata van hátra, ez pedig az 55-ös sorban található, hogy függőlegesen is kettéossza a képernyőt: ez az a sor, amely felelős a függőleges, csillagokból álló oszlop kirajzolásáért. Valóban nagyon egyszerű a program, és nagyon elegánsan megoldható két kis szubrutin írásával.
  9-5.jpgNézzük meg tehát még egyszer, hogy hogy működik. Ugye tehát alvás volt itt… itt mondjuk programozás… természetesen itt ugyanez, hiszen egy óránál rövidebb időre nem is érdemes elkezdeni.
  4:23 A házi feladat után most térjünk át mai témánkra, a függvényekre. A függvények matematikai fogalmáról, úgy vélem, mindenkinek van valamilyen kialakult fogalma. Nos, a számítástechnikai értelmezése a függvényeknek, mint látni fogjuk, ennél lényegesen bővebb. Számítástechnikai értelemben ugyanis függvénynek nevezünk vagy függvénynek értelmezünk minden olyan utasítást vagy utasítássorozatot, amelynek beadunk valamilyen bemenő adatot, azon adott átalakítást végez, és számunkra egy kimenő adatot szolgáltat. Olyan ez tehát, mint egy húsdaráló. Amelybe fölül belepottyantunk valamit, tekerünk rajta egyet-kettőt, és tartjuk a markunkat a végeredményért. Vagy a tányért. Nézzünk erre egy példát, mondjuk a gyökfüggvény esetén. Ugye ebbe hogyha a tizenhatot pottyantjuk, akkor azt várjuk, hogy kellő darálás után az eredmény négy legyen, ez meg is jelenik az asztalon.
  
9-6.jpg9-7.jpg

  
9-8.jpg9-9.jpg

  
9-10.jpg9-11.jpg

  Ugye kilencnél ez szintén jól ellenőrizhetően három. Azért ez annyiban különbözik egy háztartási húsdarálótól, hogy nem hagyja magát rászedni, például negatív számoknak a gyökét nem hajlandó ledarálni, csakúgy, mint egy adott számnál nagyobb számokat, ugyanis ehhez túl sokat kéne itt tekerni, és nem férne bele az adásidőbe.
  
9-12.jpg9-13.jpg

  5:44 A függvényeknek a BASIC-ben több csoportja van. A matematikai függvényeken kívül a számítástechnikában értelmezünk még szöveges függvényeket. Ezek különböző átalakításokat hajtanak végre szövegeken, tehát a bemenő adatuk nem szám, hanem valamilyen szöveg. Ezenkívül léteznek még úgynevezett felhasználó által definiált függvények. Ez azt jelenti, hogyha a darálóhoz – a számítógéphez – kapott függvénykészlet, vagyis a kések, amiket vele együtt leszállítanak, kevésnek bizonyulnak, és nekünk valamilyen más eredményre van szükségünk vagy más átalakításra, akkor ehhez reszelünk magunknak kést, ami számítástechnikául annyit tesz, hogy gyártunk magunknak függvényt. Vagyis definiálunk egy függvényt.
  
9-14.jpg9-15.jpg

  9-16.jpg
  Nos, olyan ez, mint a gépkocsiknál a minimálszolgáltatáson kívüli extrák, tehát a négy keréken és a motoron kívül esetenként kapunk egy-egy visszapillantó tükröt is, vagy egy elakadásjelző háromszöget.
  Arról kell még szólnunk, hogy a különböző személyi számítógépek – attól függően, hogy a BASIC melyik tájszólását beszélik – különbségeket mutatnak a függvénykészletüket tekintve. Ez azt jelenti, hogy a BASIC-szabványban rögzített minimál-függvénykészleten kívül több-kevesebb extrát vagy több-kevesebb plusz függvényt tartalmaznak, esetleg eltérő szintaktikával is. Erre fel kell készülni és ezt minden gépnél tulajdonképpen meg kell külön tanulni.
  Nézzünk most példát a függvények második nagy csoportjára, a szöveges függvényekre. Tételezzük fel, hogy címfestő barátunk azt szeretné, hogyha egy olyan programot írnánk számára, amely a szövegekről megmondaná, hogy azok milyen hosszúak, vagyis hogy neki mekkora lemezt kell levágni ahhoz, hogy azt fel tudja festeni. Vagyis használjuk föl azt a függvényt, amely minden BASIC-ben megtalálható, rövidítése a LEN, ami az angol length, vagyis hosszból származik, amely éppen erre alkalmas, tehát egy adott szöveghez hozzárendel egy számot, mégpedig azt a számot, ahány karakterből áll az adott szöveg. Ebben az esetben tehát nyolc, hiszen ez a felirat, hogy TV–BASIC, a kötőjellel együtt nyolc betűből áll.
  
9-17.jpg9-18.jpg

Szöveges függvények

9-19.jpgPinkert László Commodore 64
  8:08 A karakterlánc hosszát megadó függvényen kívül gépeink még több tucat ilyen beépített programmal, vagyis függvénnyel rendelkeznek. Ezekből nézzünk meg most néhányat.
  Ennek a függvénynek két bemenő adata van, egy szöveg és egy szám. Egyúttal megfigyelhetjük azt is, hogy ha egy függvénynek kettő vagy több bemenő adata van, akkor ezeket vesszővel kell elválasztani.
  9-20.jpg
  A függvény öt betűt adott eredményül, a bemenő szöveg utolsó öt betűjét. Nézzünk most egy másik függvényt.
  9-21.jpg
  Ennek már három bemenő adata van, egy szöveg és két szám.
  9-22.jpg
  Eredményül hét betűt adott vissza, amely a bemenő szöveg hatodik betűjénél kezdődik.
  Erre a függvényre érdekes programokat lehet írni, ebből mutatunk most kettőt.
  9-23.jpg
  Az első először is beolvas egy szöveget. Ezek után egy ciklus következik, ahol a ciklusmag annyiszor fut le, ahány betűje van a beolvasott szövegnek. A ciklusmag egy PRINT utasítás, amely kiírja a beolvasott szöveg I-edik betűjétől kezdődően egy betűjét a szövegnek. Mivel a PRINT utasítás végén semmiféle írásjel nincsen, ezért mindegyik új sorba fog kerülni. Nézzük meg a program működését. Írjuk be mondjuk azt, hogy DARABOL.
  9-24.jpg
  A program feldarabolta ezt a szöveget, a várakozásnak megfelelően.
  Az előbbi programot egy kis átalakítással a következő alakra hozhatjuk:
  9-25.jpg
  ahol megváltoztattuk a ciklusnak a lefutását, ugyanis szintén annyiszor fut le, ahány betűje van a szövegnek, de most nem az első, hanem az utolsó betűtől kezdődően haladunk visszafelé, és a PRINT utasítás egy sorba írja a betűket. Az eredményt talán már sejtjük is: megfordítja a bemenő szöveget.
  9-26.jpg

Matematikai függvények

9-27.jpgHerneczki Katalin Spectrum
  10:55 A függvények egy másik csoportjába tartoznak a matematikai függvények. Ezek írásmódja hasonló a hétköznapi, matematikában megszokott írásmódhoz, úgyhogy aki ismeri őket, továbbra is ugyanúgy használhatja. Aki viszont nem, annak egy látványos ismerkedési módot kínálunk. Írtunk egy programot, amely matematikai függvények képét ábrázolja. A program kirajzol egy koordináta-rendszert. A koordináta-rendszer x és y tengelyén nem találunk ugyan skálabeosztásokat, de úgy írtuk meg a programot, hogy a skálabeosztások léptéke egyforma legyen. Nézzük most a koordináta-rendszerben, ábrázoljunk egy egyszerű függvényt. Egyébként a program meg is kérdezi, hogy milyen függvényt kívánunk ábrázolni. Legyen most ez az y=x függvény. (Ez persze csak matematikai értelemben függvény, a számítástechnikában nem számít annak – L. A. D.)
  

9-28.jpg9-29.jpg

  Nézzünk most egy másik alapfüggvényt, mondjuk a sin x függvényt.
  
9-30.jpg9-31.jpg

  Nézzük meg a tan x függvény képét is.
  9-32.jpg
  Természetesen nemcsak ilyen egyszerű függvények ábrázolhatók ezzel a programmal, hanem ezekből összetett, összetettebb, bonyolultabb függvények is. Nézzünk ezek közül is most egyet, mondjuk a sin x*tan x függvényt.
  9-33.jpg
  Nézzük meg végül, hogy alakul az x*cos x függvény képe.
  9-34.jpg
  9-35.jpgA függvényekkel való ismerkedésünk akár több hétig is eltarthat, és közben számos variációt kipróbálhatunk. Ha elég ügyesek vagyunk és jól állítjuk össze a programot, akkor egészen különös mintákat is rajzolhatunk. Itt a programunkban található például egy abszolútérték-függvény, egy szinuszfüggvény, néhány PLOT utasítás, és nézzük meg, mi lesz az eredmény.
  9-36.jpg

Rajzolás szögfüggvényekkel

9-37.jpgHorváthné Majsa Katalin Spectrum
  15:14 A matematikai függvények közül a szögfüggvények azok, amelyeket itt egy kicsit másképp kell kezelni, mint ahogy megszoktuk. Ezeknek változóit ugyanis nem fokban kell megadni, hanem radiánban. Tehát nem szabad elfeledkeznünk ezeknek az átváltásáról, amit viszont könnyen megtehetünk a 2π=360° összefüggés ismeretében. Elsősorban a szinusz- és koszinuszfüggvény az, amelyik különösebb figyelmet érdemel. Ezeknek a segítségével ugyanis már rendkívül sokféle látványos, érdekes ábrát tudunk rajzolni. Nézzük ezek közül a legeslegegyszerűbbet: rajzoljunk ki egy kört. Természetesen nekem már van itt készenlétben egy ilyen programom, úgyhogy most kedvcsinálónak először lefuttatom. A program először megkérdezi a középpont koordinátáit – hát a középpont legyen a 100, 100 koordinátájú pont. Ezután a sugár értékét kérdezi meg, ez legyen 68… és a szükséges adatok begépelése után elkezd rajzolni. Amint látjuk, a kört szépen pontról pontra haladva rajzolja meg. Nézzük meg a listáját, hogy hogyan is érhetjük ezt el.
  9-38.jpg
  Íme, megjelent a lista. Amint látjuk, a program a néhány bevezető REM sor után rákérdez az adatokra, tehát a változókra, a középpont és a sugár értékeit kell megadnunk. Ezek után egy rövid ciklus következik, ez végzi magát a kör kirajzolását. A ciklus változója, az n nullától 2π-ig változik, a lépésköz pedig π/90 – tehát ez azt jelenti, hogy egy félkört kilencven pontból fog kirajzolni nekünk. A kirajzolást pedig a PLOT utasítással végezhetjük el: a PLOT-nál, mint tudjuk, két koordinátát kell megadni, itt is ez történik, a középpont koordinátáit kell mindig változtatni valamennyivel, ez pedig természetesen az elfordulás szögétől és a sugártól függ.
  Hát ezek után akkor nézzünk egy kicsit bonyolultabb programot: legyen ez mondjuk egy ellipszis kirajzolása. Gyorsan le is futtatom, hogy lássuk, milyen. Ez is először a középpont megkérdezésével kezdi. Legyen ismét a 100, 100 koordinátájú pont a középpont, a nagytengely hossza nyolcvan egység, a kistengely hossza negyven. Ha szépen végigvárjuk, láthatjuk, hogy ez is pontról pontra haladva végzi a rajzolást. Amint befejezte, megnézzük ennek is a listáját.
  9-40.jpg
  Ez a program is tehát az adatok bekérdezésével kezdi, utána egy ciklus következik, szintén a PLOT utasítás felhasználásával; a körkirajzoló programtól pusztán abban különbözik, hogy a PLOT utasításban a koordinátákat egy egészen kicsit másképp kell kiszámítanunk.
  További átalakításokkal érdekesebbnél érdekesebb görbéket tudunk kirajzoltatni. Ilyen például az egymásra merőleges rezgések összeadásával keletkező Lissajous-görbe. Lássunk erre is egy-két példát. Elindítom a programot; ez egyből a fázisszögeltérés megadásával kezdi, természetesen radiánban kell megadnom, figyelmeztet is erre. Ez legyen 1. A két rezgés frekvenciájának aránya legyen 4 – és elkezdi a rajzolást.
  9-42.jpg
  Akkor most lássunk egy még izgalmasabb, még látványosabb feladatot, mondjuk egy igazi mutatós óra megrajzolását. Gyorsan elindítom…
  9-43.jpg
  Ezek után lássuk a program listáját. A lista két fő részre bontható, ebből az első végzi a számlap megjelenítését, a második pedig a mutató megjelenítését és mozgatását. Az első részben egy ciklust szerveztünk, ez rajzolja ki egy kör kerületére a számjegyeket egytől tizenkettőig. A második részben pedig azt kellett megoldani, hogy az idő múlásával arányban, megfelelő időközökben megjelenjen a mutató, majd letöröljük onnan azt és egy kicsit továbbmozdítva, tehát az elfordulásszög változtatásával egy új mutatót ismét megrajzoljunk, és azt később onnan megint letöröljük.
  Ennyit tud ez a program, és amint látjuk, ez egy kicsit azért hiányos, hiszen nincsen neki kis- és nagymutatója. Hát ezt mindenki rajzolja meg hozzá otthon saját maga.
  9-45.jpg

Adattípus-konverzió

9-46.jpgHerneczki Katalin Commodore 64
  21:35 Az eddig megismert függvények két csoportra oszthatók. Az egyiknél a bemenő adat szám, a másiknál pedig szöveg. Előfordulhat azonban az az eset is, hogy egy szövegen hasonló változtatást kívánunk elvégezni, mint egy számon, és fordítva. Nézzünk egy példát. Mondjuk a 12 345-ös számnak az utolsó három jegyét szeretnénk leválasztani, a 345-öt. Ez matematikai eszközökkel könnyen megoldható, de még kézenfekvőbb lenne a RIGHT$ függvény használata. Ezzel már korábban is találkoztunk – próbáljuk meg.
  9-47.jpg
  Nos, ez nem jó megoldás, hiszen hibaüzenetet kaptunk. A magyarázat kézenfekvő: a RIGHT$ függvény csak szöveget fogad el inputként, számot pedig nem. (Ez valóban így van, a mutatott hibaüzenet azonban azért jelent meg, mert Herneczki Katalin kifelejtette a sor elejéről a PRINT utasítást – hiszen függvények csak utasítás paramétereiben szerepelhetnek, sor elején nem. Ha az utasítást is kiírta volna, az üzenet ?TYPE MISMATCH ERROR lett volna. – L. A. D.) De ezen is tudunk segíteni, a számot idézőjelbe tesszük, és máris jól fog működni a RIGHT$ függvényünk.
  9-48.jpg
  Ez a megoldás azonban csak akkor vezet célra, hogyha konstansokkal dolgozunk, numerikus változók esetén nem. Van egy másik megoldásunk is, az úgynevezett sztringfüggvény használata. A STR$ függvény minden esetben számot szöveggé alakít át.
  9-49.jpg
  Így a 12 345-ből szöveg lesz, és a RIGHT$ függvény így már helyesen működik, a 345-öt kiírja eredményként.
  Igen ám, de a 345 most nem szám, hanem szöveg, azaz a három, négy és ötös karakterek egymásutánja, nem pedig a háromszáznegyvenötös szám. Ha a programunk további részében ezzel számolni szeretnénk, hát bizony gondban lennénk. De ezen is segíthetünk egy új függvény bevezetésével, a VAL függvénnyel. A VAL függvény az angol value szó rövidítése, amely egyébként értéket jelent.
  9-50.jpg
  Elemezzük ezt a sort. A STR$ függvény a számból szöveget készített, a RIGHT$ függvény leválasztotta a három jegyet – az utolsó három jegyet –, és végül a VAL függvény ebből a három karakterből, a 3-4-5 karakterből a 345-ös számot állította elő.
  9-51.jpg
  (Ez azon is megfigyelhető, hogy a korábbi esettel ellentétben itt a 345 előtt egy szóköz is megjelent, a BASIC ugyanis a számokat egy bevezető szóközzel írja ki [ez az előjel helye, negatív számnál a mínuszjel jelenik meg helyette] – L. A. D.)
  A BASIC-ben számos lehetőségünk van a függvények használatára, egyvalamire azonban vigyázni kell, hogy mindig megfelelő eredményt kapjunk. Vagyis vagy számot, vagy szöveget, attól függően, hogy hogyan kívánunk a továbbiakban dolgozni vele.
  Most foglaljuk össze, mit tudunk eddig a függvényekről, hogyan csoportosíthatjuk őket. Találkoztunk szöveg–szöveg típusú függvényekkel, vagyis olyanokkal, ahol a bemenő adat szöveg volt és az eredmény is szöveg volt. Ilyen volt például a RIGHT$, a LEFT$ (ez valójában nem szerepelt az adásban – L. A. D.), illetve a MID$ függvény: ne felejtsük el, hogy mindegyiknek az utolsó karaktere dollárjel. Erre azért van szükség, mert ezek szöveget adnak eredményként, és minden olyan függvény, amely szöveget ad eredményként, dollárjellel kell hogy végződjön.
  9-52.jpgTalálkoztunk olyan függvénnyel is, amely szövegből számot ad eredményként, ilyen volt például a LEN függvény, illetve a VAL függvény. A LEN függvény a hossz – a length szó rövidítése –, a VAL pedig értéket jelent.
  A harmadik típusba tartoznak a szám–szöveg típusú függvények, ilyen volt a STR$ függvény. Ennek is az utolsó karaktere természetesen dollárjel, hiszen az eredmény szöveg lesz.
  A negyedik csoportba tartoznak a szám–szám típusú függvények, ezek körébe tartoznak a matematikai függvények, amelyek inputja minden esetben szám, és az eredménye is egy számérték.
  Most pedig a házi feladat következik. Nagyon sokszor halljuk nyelvészektől, külföldiektől, hogy a magyar nyelvben nagyon sok az e betű. Nos, ez igaz is. Ezennel be kell jelentenem: rengeteg e szerepel e nyelvben. Nos, ez adta az ötletet a házi feladathoz is. Írjanak olyan programot, amely egy tetszés szerinti szövegben megvizsgálja az e betűket, gyűjti ezek számát, és eredményként ki is írja ezt.
  Jó munkát kívánunk, viszontlátásra.
  25:50