Népszabadság, 1987. július (45. évfolyam, 153-179. szám)
1987-07-28 / 176. szám
KÖZELEBBI ISMERKEDÉS A SZÁMÍTÓGÉPI PROGRAMOKKAL „Fordítás” Basicről magyarra Bár tudjuk, hogy a számítógépek iránt, ma óriási az érdeklődés, mégis meglepett az a sok levél, telefon és személyes érdeklődés, kérdés, amely a január 13-án ugyanezen az oldalon megjelent Számítógépek és „nyelvek” című cikkem nyomán elért. A kérdések természetesen sokfélék, részben nyomtatásban — terjedelmi okokból — megválaszolhatatlanok, de volt egy visszatérő kérdés, amelyet körülbelül így fogalmazhatunk meg: jó, jó, láttuk a többféle nyelven írott programot, látjuk, hogy különbözőek -, de nem értjük egyiket sem; nem lehetne megmagyarázni? A kérdés jogos, és ebben a cikkben erre teszek kísérletet. Annál is inkább szívesen tetszem, mert a kérdés engem is régóta foglalkoztat, és ezért — egy francia író tanácsát követve — úgy próbáltam megérteni, hogy írtam róla (Ki beszél angolul? — Népszabadság, 1973. április 15., Hogyan tanítgattunk egy tudós idiótát? — 1983. július 9.). Vegyük példának a múltkori cikkben közölt különböző nyelvű programok közül a Basic (ejtsd: bézik) „nyelven” írott változatot. Ez a legrövidebb és bizonyos szempontból a legegyszerűbb, ezért talán lehetséges — ha nem is minden részletében — megmagyarázni mit jelent. Íme, itt látható újból a Basic program tetszés szerinti sugarú körök kerületének és területének a kiszámítására, azonkívül arra, hogy egy számítás után a gép maga tudakolja meg: kíván-e még újabb számításokat végezni használója? Kövessük képzeletben a program készítését — úgy, ahogyan Orbán Katalin, a Számaik programozásoktatója elmondta, aki múltkori cikkemhez a programokat megírta. Sorszámok és idézőjelek A feladat tehát: a kör kerületét és területét kiszámító program írása, amely a kapott eredményeket a számítógéphez csatlakoztatott displayre (diszplé, kijelző — voltaképp egy tv-képernyő) kiírja, majd megkérdezi: van-e még további feladat. Ilyen programot persze nem írnak, nem volna értelme. Azért választottuk példának, mert roppant egyszerű: mindenki tanulja az iskolában, hogy a kör kerületét úgy kapjuk meg, hogy a kör sugarát megszorozzuk kettővel és 3,14-gyel, a Ludolf-féle számmal, a pivel (görög p betűvel jelölik), a kör területének képlete pedig 12an. A gép a számítást csak akkor fogja tudni elvégezni, ha kap egy adatot, amiből kiinduljon: a kör sugarát. Az első utasítás tehát az lesz, hogy kérjen és fogadjon el egy ilyen adatot. Nézzünk a programra! Az első utasítás, az első sor, amelyet 10-essel jelöltünk (hogy miért, arra mindjárt visszatérünk), így hangzik: INPUT „KÉREM A KOR SUGARAT”. Minden betűt, jelet pontosan így kell írni, különben a gép „nem érti meg”. Nézzük előbb a 10-es számot. Mint látható, a már kész programon a következő sorok rendre a 20, 30, 40 stb. sorszámot viselik. Lehetne természetesen egyes, kettes, hármas is, azonban ennek volna egy nagy hátránya: ha a program próbálgatása („futtatása”) közben kiderülne — ami a bonyolultabb, hosszabb programoknál gyakori —, hogy két korábbi utasítás közé be kell illeszteni még egyet, akkor ha a számozás 1, 2, 3, 4 stb. volna, a beillesztés helyéről át kellene számozni az egész — esetleg több száz sorból álló! — programot. Ha viszont például a 10-zel és 20-szal jelölt sor közé kell egy újat beírni, azt elnevezzük például 15-ösnek: ekkor a gép (hála beépített operációs rendszerének) ezt a sort, utasítást önműködően beilleszti a 10-es és a 20-as közé — amellett, ha utóbb még egyet be kell illeszteni, akkor ezt — ha a 10-es és a 15-ös közé kell tenni — elnevezhetjük 13-asnak, ha viszont a 15-ös és a 20-as közé kell írni, akkor mondjuk 17-esnek, és még mindig vannak helyeink. Az első, a 10-es számú utasítás tehát azt mondja a gépnek: a betáplálandó, mindig más és más adat (ez az „input”) az lesz, amit a géppel dolgozó személy a billentyűzeten leüt, de erre őt fel kell szólítani. írja ki tehát a gép a képernyőre azt, hogy KÉREM A KOR SUGARAT (mert ékezetes betűk ezeken a többnyire angol nyelvterületen gyártott vagy oda eladott gépeken nincsenek, de azért értjük, miről van szó). Az idézőjelet nem írja ki a képernyőre, az csak a gép számára teszi érthetővé, hogy az idézőjelek közti szöveget kell kiírnia. A szöveg utáni pontosvessző tudatja a géppel, hogy vége a szövegnek. Utána — erre utal az S — jön egy változó: a géppel dolgozó bebillentyűzi a kör sugarát, amit a gép elraktároz az emlékezetébe, adattárolójába, és egy S betűvel „címkéz” meg. Ez az S a sugár szó kezdőbetűje, de a program készítője választhatott volna bármilyen betűt, a gép azt „gépiesen” tudomásul veszi. Most következik az első műveleti utasítás, amely a 20-as szám mögött áll. Könnyebb érthetőség kedvéért kezdjük az egyenlőségjel jobb oldalán. Ott egy kettes áll, azután egy csillag, azután S, megint egy csillag és a 3,14 értéket jelentő görög p betű (pi). A csillag a Basic nyelvben szorzást jelent. Tehát: a gép szorozza meg a kapott és S jel alatt tárolt számot (a sugárhosszat) kettővel és pivel. Az egyenlőségjel — nem egyenlő De miért „egyenlő” ez KK- val? Nos, az egyenlőségjel itt nem a matematikai egyenlőséget jelenti, hanem azt az utasítást adja a gépnek, hogy a szorzások után kapott értéket ismét tegye el az emlékezetébe, éspedig KK dm alá. Ez a KK a „kör kerülete” szavak rövidítése, de ezt ismét a programozó választotta önkényesen (mert emlékezteti), de bármit írhatott volna a helyébe. A program harmadik utasítása (a 30-as szám után) nagyon hasonlít erre, de azért van érdekes különbség is. Itt a sugarat (S) hatványra kell emelni, ezt mutatja a fölfelé irányuló nyílhegy. Hányadik hatványra? Ezt jelzi a mögötte álló szám, esetünkben a kettes, tehát második hatványra, úgy is mondjuk, négyzetre kell emelni a sugár hosszát, azután megszorozni 3,14-gyel, majd eltenni KT („kör területe”) alatt. A 40-es számú utasítás első szava: PRINT, szó szerint: nyomtass, de itt nem nyomtatásról van szó, hanem arról, hogy a gép írja ki a képernyőre azt a szöveget, amely utána következik idézőjelek között, s amelynek végét egy pontosvessző jelzi, utána pedig írja oda azt a számot, amelyet KK jel alatt őriz. Mint látjuk, A KOR KERÜLETE szöveg után még egy egyenlőségjel is van, ami itt már azt jelenti, hogy az ott megjelenő szám a kör kerülete. Az 50-es utasítás ugyanez, csak itt a kör területét írja ki a gép a képernyőre. Igen ám, de hátha nemcsak ennek az egy körnek kell kiszámítani a kerületét és a területét? Hiszen a számítógépi programok többek között éppen arra valók, hogy mechanikus, sokszor ismétlődő azonos műveleteket végezzenek el velük! A gép tehát a program 60-as sorával kap egy utasítást (INPUT), hogy ti. írja ki a kérdést: VAN MÉG TOVÁBBI FELADAT? És mindjárt segít is a gép használójának abban, hogyan kell megválaszolni a kérdést: ha igen, akkor egy I-t kell lebillentyűzni, ha nem, akkor egy N-et. Utána azonban még két jelet látunk: egy nyomtatott V-t és egy dollárjelet. A V azt közli a géppel, hogy most valami változó adat jön, a dollárjel pedig azt, hogy nem szám lesz (mint a sugár esetében), hanem szöveg, igaz, csak egy betű, de az sem szám. A 70-es sorszámú utasítás első szava IF, ami angolul azt jelenti: ha. Vagyis ha a válasz az lesz, hogy I, azaz igen, van még további feladat, akkor (THEN , akkor) a gép menjen vissza a 10-es számú utasításhoz (GOTO , menj . .. hoz), és hajtsa végre azt újból. Vagyis a gép ismét ki fogja írni a képernyőre, hogy kéri a kör sugarát, a használó bebillentyűzi, ő kiszámítja, kiírja és így tovább, mindaddig újra meg újra, amíg a 60-as utasításra kiírt kérdésre azt a választ nem kapja, hogy vagyis nem. Akkor a munka kész — ezt jelzi a READY (angolul: kész) szó, s ezzel a program végre van hajtva. A gép „belügye” Ez a hét sor (10—70) a program, de ebből a géppel dolgozó csak keveset lát: pontosan anynyit, amennyi rá tartozik, vagyis amennyi számára szükséges ahhoz, hogy a munkát elvégezze: először egy kérést, azután a két eredményt, végül egy kérdést. Sem az utasítások előtti számot nem látja, sem a 20 és a 30 alatti utasítást, azt sem, hogy PRINT, azt sem, hogy INPUT — ez a programozó és a gép „belügye”, aminthogy az is, hogy „ha a válasz igen, menj vissza” stb. Amikor a programozó megírta a programot úgy, ahogyan itt látjuk, akkor ezt a „könyv”-et tárolják — amint a múltkori cikkben már szó volt erről — valamilyen adathordozón, ma leggyakrabban a legkényelmesebb és legegyszerűbb módon: egy hajlékony kis kerek, hanglemezszerű lemezen, amelyet floppy discnek (floppy diszk) vagy, mivel kicsi, kicsinyítve discette-nek (diszkett) neveznek. Ezen a lemezen persze sok más „könyv” is van. Mindegyiknek van egy neve. Megfelelő utasításra (DIR) a gép megjelenteti a képernyőn a behelyezett lemezen levő programok címét. Mondjuk, hogy a programozó ennek az itt részletezett programnak azt a nevet adta, hogy KORSZÁM (korszámítás). Ez azért célszerű, mert emlékezteti az embert, hogy mi a program tartalma, célja. De nevezheti bárminek, ez az ő joga. Ha mármost a lemezről ezt a programot akarjuk „behívni” a gépbe, mert körök kerületét és területét akarjuk kiszámítani, akkor a display előtti billentyűzeten leütjük a KORSZAM betűket , és a gép másodpercek múlva már jelzi, hogy készen áll a munkára. A múltkori cikkben közölt, más programnyelveken írt programokon látható volt, hogy mennyire másképp kell más nyelven írni: ott például nem volt ez a 10, 20, 30 stb. sorszámozás, azután például a Cobol nyelvben compute szóval kellett utasítani a gépet, hogy végezze el a számítást és display szóval, hogy az utána következő szöveget írja ki a képernyőre. A legfontosabb azonban az, hogy ha a programkészítő akár a legkisebb részletben is eltér a szabályoktól, a gép nem működik. Hogy milyen apróságról van szó, arra egy jellemző apróság. Azt az utasítást, hogy GOTO, Basic nyelven lehet két szóba is írni, meg egybe is. Ha viszont Cobolban írtuk a programot és a GOTO-t egy szóba írjuk, a gép nem megy vissza a megjelölt utasításhoz, mert a Cobolban csak két szóba szabad írni a GOTO utasítást. A számítógépek tehát — amint az információelmélet egyik megalapítója, Claude E. Shannon mondta — valóban „tudós idióták” — mindent az embernek kell kigondolnia helyettük. Ennek egyik legkényesebb lépése a programok megírása. Remélhetőleg ezen az egyszerű — sőt leegyszerűsített — példán sikerült bepillantani valamelyest e munka rejtelmeibe. Pető Gábor Pál 10 INPUT"KEREM Il KOR SUGARAT"JS 20 KK = 2 * S * ›t 30 KT = S 2 * a 40 PRINT "A KOR KERÜLETE=nJKK 50 PRINT "A KOR TERÜLETE="?KT 60 INPUT"VAN MÉG TOVÁBBI FELADAT?›I/M* 70 IF V*=“I“ THEN GOTO 10 READY. A kor kerületének és területének kiszámítására szolgáló Basic nyelvű program. A SIFOftMAI-belépő: belépő a szerencsében is! A világ egyik legnagyobb autóversenye a Hungaroringen, augusztus 7-8-9-én. Jegyek kaphatók: az Ibusz, a Cooptourist, a Magyar Autóklub, a Volánteru, az Állami Biztosító és a Hungarocamion irodáiban, valamint a Tourinformnál. Őrizze meg a jegyét, mert az azon szereplő sorszám alapján, az augusztus 9-i verseny után, elektronikus számítógép több százezer forint értékben nyereményeket sorsol ki a belépőjegyek tulajdonosai között. Nyereményjegyzék: szeptember 16-án a napilapokban.__________ TUDOMÁNY EHJZZZZZO Egy katasztrófa anatómiája Majdnem pontosan egy éve, 1986 augusztusában borzalmas katasztrófa híre érkezett Afrika egyik eldugott zugából, a kameruni Nyos-tó vidékéről. A rejtélyes körülmények közt elpusztult emberekről, állatokról készült képek bejárták a világot. Rövidesen kiderült, hogy gázmérgezés áldozatai lettek. Mivel pedig a Nyos krátertó, kézenfekvő volt az a feltételezés, hogy valamiféle vulkáni tevékenység áll a jelenség hátterében. Nemrégiben a Science című amerikai tudományos lap közzétette annak a tíztagú kutatócsoportnak a jelentését, amely a helyszínen vizsgálta a rendkívüli esemény körülményeit és okait. Augusztus 21-én este fél tíz körül robajló hangok hallatszottak a Nyos-tó környékén. A kráterből fehér felhő emelkedett ki, a vízen erős hullámzás söpört végig, néhol 25 méter magas hullámokkal. Voltak, akik záptojásszerű szagot, szokatlan melegséget éreztek. Hosszabb-rövidebb időre a környéken mindenki elvesztette az eszméletét, és sokan többé nem is tértek magukhoz. Körülbelül 1700 ember halt meg, elpusztult 3000 szarvasmarha, s néhány kilométeres körzetben minden egyéb emlősállat és madár. A tó máskor tiszta kék színe rozsdavörösre változott, tükrén növényi maradványok úszkáltak. (Ez utóbbiakat a kicsapó hullámok sodorták a vízbe a partról.) A Nyos-kráter annak a jól ismert vulkáni láncnak a tagja, amely több száz kilométer hoszszan húzódik ÉK-DNY irányban Kamerun és Nigéria területén. A sok kisebb-nagyobb bazaltkúp közt gyakran találhatók maar-vulkánok, mélyedések, amelyek a feltörő és a felszín alatt átmenetileg megrekedt gázok hirtelen, robbanásos kitörésétől keletkeznek. Legtöbbjüket, így a Nyost is, később víz tölti ki. A Nyos-kráter mindössze néhány száz éves. Legnagyobb hosszúsága 1925 méter, a legnagyobb szélessége 1180 méter, mélysége eléri a 208 métert is. A kráterfal anyagát az a vulkáni hamu, törmelék alkotja, amely a mélyedés keletkezésekor kilökődött. Alatta vulkáni kürtő rejtőzik, amelyet repedéshálózattal átjárt bazaltláva tört ki. Az első vízmintákat szeptember 4-én vették. Akkor a tó hőmérséklete normális volt, nem tért el a hasonló tavakétól. Egy robbanásos vulkánkitörés annyira megemelte volna a víz hőfokát, hogy az esemény és a mintavétel közti időben nem hűlhetett volna le annyira, amilyen állapotban találták. A legfelső tízméteres vízrétegben vashidroxid volt. Itt csapódott ki, ez okozta a tó vörös-barna színét. Ha lávafelnyomulás állt volna a gázkitörés hátterében, jóval több szén-monoxidot, hidrogént és kénhidrogént lehetett volna a mintákban kimutatni. Ezzel szemben a kiszabadult gáztömeg 99 százaléka szén-dioxid volt. Ellentmond a vulkáni eredetnek az is, hogy a tó fenekén az üledékben semmiféle zavar nem látszott, még csak fel sem keveredett. Többen kardoskodtak viszont amellett, hogy a gáz szerves anyagok bomlásával keletkezett. A trópusi Afrika területén valóban sok olyan tó van, amelyben ez történik. Ezt a feltevést azonban cáfolni látszott az a tény, hogy a Nyos környékén feltörő nátriumos források vizének kémiai összetétele nagyon hasonló a tóéhoz, s nem kétséges, hogy ezek ugyanonnan erednek. A forrásvízben pedig olyan nagy mennyiségű szén-dioxid van, amennyi szerves bomlással semmiképpen sem jöhet létre. A szénizotóp-vizsgálatok (14C) végül is egyértelműen eldöntötték a kérdést. A szén-dioxid keletkezésének ideje 35 ezer évre adódott, s mivel a tó csupán néhány száz éves, ez a gáz semmiképpen nem keletkezhetett benne. Csak a magmából jöhetett, több tíz kilométeres mélységből, a kráter alatti vulkáni csatornán, a töréseken, repedéseken szivárgott fölfelé és felhalmozódott a tó mélyén. E felhalmozódás feltétele, hogy a felszíni vízrétegek ne keveredjenek a mélységiekkel. És valóban, a Nyos vize — mint minden más hasonló trópusi tóé — a kitörés előtt jól elkülöníthető, eltérő hőmérsékletű rétegekre tagolódott. Az történt tehát, hogy a mélyvízi rétegek telítődtek a szén-dioxiddal és a normális rétegződés valami miatt megváltozott (erre utal az oldott vas megjelenése is a felszínen). De mi idézte elő az egyensúlyi állapot hirtelen megváltozását, miért szabadult ki a gáz? A gázfelhő megjelenéséből arra lehetett következtetni, hogy a szén-dioxid nagyon hirtelen jelent meg a felszínen. Először a krátert töltötte ki és mintegy száz méter magasságba emelkedett. Mivel a szén-dioxid sűrűbb a levegőnél, csakhamar elárasztotta a legalacsonyabban fekvő területeket. Óriási mennyiségű gáz szabadult ki tehát. Telített állapotában a Nyos-tó mintegy másfél köbkilométer szén-dioxidot tartalmaz. Abból kiindulva, hogy a kitörés során a tó vízszintje mintegy 110 centiméterrel csökkent, azt feltételezik, hogy körülbelül egy köbkilométer, azaz egybillió (101) liter gáz került a légkörbe. S hogy mi indította el a gázkitörést? A kiváltó ok továbbra sem ismert. De amikor a víz szén-dioxiddal való telítettsége a kritikus szinthez közelít, gyakorlatilag a legkisebb függőleges irányú vízmozgás elég lehet ahhoz, hogy a gáztömeg elszabaduljon. Az bizonyos, hogy földrengés abban az időben nem volt azon a környéken. A gáz pusztító hatása a krátertől való távolságtól függően változó volt. Azok, akik három kilométeres körzetben életben maradtak, utólag elmondták, hogy semmiféle szagot nem éreztek, mielőtt elveszítették az eszméletüket. Ezzel szemben azok, akiket mintegy tíz kilométeres körzetben ért el a gáz, záptojásszagot (a kénhidrogén jellegzetes bűze) éreztek, nehéz légzésre, szédülésre panaszkodtak. Ennek magyarázata valószínűleg az, hogy — mivel kénhidrogén nem volt — a nagy töménységű széndioxid belégzése olyan nyálkahártya-irritációt okozott, amelynek következtében „szaghallucináció” lépett fel. A közelebb lévők valószínűleg azért nem tapasztalták mindezt, mert igen hamar elveszítették eszméletüket. A boncolások során megállapították, hogy a halálozások oka minden kétséget kizáróan az uralkodóan szén-dioxidból álló gázfelhő volt. A Nyos nem az egyetlen kameruni tó, ahol gázkitörés történt. Ezt megelőzően a tőle 240 kilométerre fekvő Monoun-tónál játszódott le hasonló eset, 1984 augusztusában, 37 ember halálát okozva. Kutatók párhuzamot vélnek felfedezni az augusztusi időpontok egybeesésében. Ez az az időszak, amikor a kameruni tavak stabilitása a legkisebb, vagyis a legkönnyebben felborul a különböző hőmérsékletű rétegeik közt fennálló törékeny egyensúly. Ezen a vidéken mintegy negyven krátertó van. Részletes tanulmányozásukra van szükség ahhoz, hogy a jövőben hasonló katasztrófák ne ismétlődhessenek meg. Németh Géza