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 érdek­lődés, mégis meglepett az a sok levél, telefon és személyes ér­deklő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 nyo­mán elért. A kérdések termé­szetesen sokfélék, részben nyomtatásban — terjedelmi okokból — megválaszolhatatla­­nok, de volt egy visszatérő kér­dés, amelyet körülbelül így fo­galmazhatunk meg: jó, jó, lát­tuk a többféle nyelven írott programot, látjuk, hogy külön­bözőek -, de nem értjük egyi­ket sem; nem lehetne megma­gyarázni? A kérdés jogos, és ebben a cikkben erre teszek kísérletet. Annál is inkább szívesen tet­­szem, 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 an­­golul? — Népszabadság, 1973. április 15., Hogyan tanítgattunk egy tudós idiótát? — 1983. júli­us 9.). Vegyük példának a múltkori cikkben közölt különböző nyel­vű programok közül a Basic (ejtsd: bézik) „nyelven” írott változatot. Ez a legrövidebb és bizonyos szempontból a legegy­szerűbb, ezért talán lehetséges — ha nem is minden részleté­ben — megmagyarázni mit je­lent. Íme, itt látható újból a Ba­sic program tetszés szerinti su­garú 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, aho­gyan Orbán Katalin, a Szá­maik programozásoktatója el­mondta, aki múltkori cikkem­hez 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ép­hez 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ű: min­denki tanulja az iskolában, hogy a kör kerületét úgy kap­juk meg, hogy a kör sugarát megszorozzuk kettővel és 3,14-gyel, a Ludolf-féle szám­mal, a pivel (görög p betűvel je­lölik), a kör területének képlete pedig 12­a­n. 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 te­hát az lesz, hogy kérjen és fo­gadjon el egy ilyen adatot. Nézzünk a programra! Az el­ső 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övetke­ző sorok rendre a 20, 30, 40 stb. sorszámot viselik. Lehetne ter­mészetesen egyes, kettes, hár­mas is, azonban ennek volna egy nagy hátránya: ha a prog­ram próbálgatása („futtatása”) közben kiderülne — ami a bo­nyolultabb, hosszabb progra­moknál gyakori —, hogy két korábbi utasítás közé be kell il­leszteni 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ó! — progra­mot. Ha viszont például a 10-zel és 20-szal jelölt sor közé kell egy újat beírni, azt elnevez­zük például 15-ösnek: ekkor a gép (hála beépített operációs rendszerének) ezt a sort, uta­sítást önműködően beilleszti a 10-es és a 20-as közé — amel­lett, 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öbb­nyire angol nyelvterületen gyártott vagy oda eladott gépe­ken 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 érthe­tő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 ér­téket jelentő görög p betű (pi). A csillag a Basic nyelvben szor­zást jelent. Tehát: a gép szoroz­za 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 szor­zások után kapott értéket ismét tegye el az emlékezetébe, éspe­dig KK dm alá. Ez a KK a „kör kerülete” szavak rövidítése, de ezt ismét a programozó válasz­totta önkényesen (mert emlé­kezteti), de bármit írhatott vol­na a helyébe. A program harmadik utasítá­sa (a 30-as szám után) nagyon hasonlít erre, de azért van érde­kes különbség is. Itt a sugarat (S) hatványra kell emelni, ezt mutatja a fölfelé irányuló nyíl­hegy. Hányadik hatványra? Ezt jelzi a mögötte álló szám, ese­tünkben a kettes, tehát máso­dik 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 nyomta­tá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 pontos­­vessző 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üle­tét? Hiszen a számítógépi prog­ramok többek között éppen ar­ra 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 so­rával kap egy utasítást (IN­PUT), hogy ti. írja ki a kérdést: VAN MÉG TOVÁBBI FEL­ADAT? És mindjárt segít is a gép használójának abban, ho­gyan kell megválaszolni a kér­dé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 vala­mi 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 el­ső szava IF, ami angolul azt je­lenti: 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 (GO­TO , menj . .. hoz), és hajtsa végre azt újból. Vagyis a gép is­mét ki fogja írni a képernyőre, hogy kéri a kör sugarát, a hasz­náló bebillentyűzi, ő kiszámítja, kiírja és így tovább, mindaddig újra meg újra, amíg a 60-as uta­sí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 prog­ram, de ebből a géppel dolgozó csak keveset lát: pontosan any­­nyit, amennyi rá tartozik, vagy­is amennyi számára szükséges ahhoz, hogy a munkát elvégez­ze: először egy kérést, azután a két eredményt, végül egy kér­dé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ír­ta 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ényelme­sebb és legegyszerűbb módon: egy hajlékony kis kerek, hang­lemezszerű lemezen, amelyet floppy discnek (floppy diszk) vagy, mivel kicsi, kicsinyítve discette-nek (diszkett) nevez­nek. Ezen a lemezen persze sok más „könyv” is van. Mind­egyiknek van egy neve. Megfe­lelő utasításra (DIR) a gép meg­jelenteti a képernyőn a behe­lyezett lemezen levő programok címét. Mondjuk, hogy a progra­mozó ennek az itt részletezett programnak azt a nevet adta, hogy KORSZÁM (korszámí­tás). Ez azért célszerű, mert em­lékezteti az embert, hogy mi a program tartalma, célja. De ne­vezheti 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 be­tű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 kel­lett utasítani a gépet, hogy vé­gezze el a számítást és display szóval, hogy az utána követke­ző 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 GO­TO, Basic nyelven lehet két szóba is írni, meg egybe is. Ha viszont Cobolban írtuk a prog­ramot é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 sza­bad írni a GO­TO 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 he­lyettük. Ennek egyik legkénye­sebb lépése a programok meg­írása. Remélhetőleg ezen az egy­szerű — sőt leegyszerűsített — példán sikerült bepillantani va­lamelyest 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 PR­INT "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 Hun­­garoringen, augusztus 7-8-9-én. Jegyek kap­hatók: az Ibusz, a Cooptourist, a Magyar Autó­klub, a Volánteru, az Állami Biztosító és a Hungarocamion irodáiban, valamint a Tourin­­formnál. Őrizze meg a jegyét, mert az azon szereplő sorszám alapján, az augusztus 9-i ver­seny után, elektronikus számítógép több száz­ezer 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 kame­runi Nyos-tó vidékéről. A rejté­lyes körülmények közt elpusz­tult emberekről, állatokról ké­szült képek bejárták a világot. Rövidesen kiderült, hogy gáz­mérgezés áldozatai lettek. Mivel pedig a Nyos krátertó, kézenfek­vő volt az a feltételezés, hogy va­lamifé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ócso­portnak a jelentését, amely a helyszínen vizsgálta a rendkívü­li esemény körülményeit és oka­it. Augusztus 21-én este fél tíz körül robajló hangok hallatszot­tak 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ápto­jásszerű szagot, szokatlan me­legséget éreztek. Hosszabb-rövi­­debb időre a környéken minden­ki elvesztette az eszméletét, és sokan többé nem is tértek ma­gukhoz. Körülbelül 1700 ember halt meg, elpusztult 3000 szar­vasmarha, s néhány kilométeres körzetben minden egyéb emlős­állat és madár. A tó máskor tisz­ta kék színe rozsdavörösre válto­zott, tükrén növényi maradvá­nyok úszkáltak. (Ez utóbbiakat a kicsapó hullámok sodorták a víz­be a partról.) A Nyos-kráter annak a jól is­mert vulkáni láncnak a tagja, amely több száz kilométer hosz­­szan húzódik ÉK-DNY irány­ban Kamerun és Nigéria terüle­tén. A sok kisebb-nagyobb ba­zaltkú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 legna­gyobb 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 szeptem­ber 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 annyi­ra megemelte volna a víz hőfo­kát, hogy az esemény és a minta­vétel közti időben nem hűlhetett volna le annyira, amilyen álla­potban találták. A legfelső tíz­mé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 ere­detnek 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 keletke­zett. A trópusi Afrika területén valóban sok olyan tó van, amely­ben 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-di­­oxid van, amennyi szerves bom­lással semmiképpen sem jöhet létre. A szénizotóp-vizsgálatok (14C) végül is egyértelműen el­döntötték a kérdést. A szén-dio­­xid 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 sem­miképpen nem keletkezhetett benne. Csak a magmából jöhe­tett, több tíz kilométeres mély­ségből, a kráter alatti vulkáni csatornán, a töréseken, repedé­seken szivárgott fölfelé és felhal­mozódott a tó mélyén. E felhal­mozó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ély­­vízi rétegek telítődtek a szén-di­­oxiddal é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 ar­ra lehetett következtetni, hogy a szén-dioxid nagyon hirtelen je­lent meg a felszínen. Először a krátert töltötte ki és mintegy száz méter magasságba emelke­dett. Mivel a szén-dioxid sűrűbb a levegőnél, csakhamar elárasz­totta a legalacsonyabban fekvő területeket. Óriási mennyiségű gáz szaba­dult ki tehát. Telített állapotában a Nyos-tó mintegy másfél köbki­lomé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öb­­kilométer, azaz egybillió (101­) li­ter gáz került a légkörbe. S hogy mi indította el a gázki­tö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, gyakor­latilag a legkisebb függőleges irányú vízmozgás elég lehet ah­hoz, hogy a gáztömeg elszaba­duljon. Az bizonyos, hogy föld­rengés abban az időben nem volt azon a környéken. A gáz pusztító hatása a kráter­től való távolságtól függően vál­tozó volt. Azok, akik három kilo­méteres körzetben életben ma­radtak, utólag elmondták, hogy semmiféle szagot nem éreztek, mielőtt elveszítették az eszméle­tüket. Ezzel szemben azok, aki­ket mintegy tíz kilométeres kör­zetben ért el a gáz, záptojássza­got (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én­dioxid belégzése olyan nyálka­­hártya-irritációt okozott, amely­nek következtében „szaghallu­­cináció” lépett fel. A közelebb lévők valószínűleg azért nem ta­pasztalták mindezt, mert igen hamar elveszítették­ eszméletü­ket. A boncolások során megál­lapí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 ka­meruni tó, ahol gázkitörés tör­té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éte­geik közt fennálló törékeny egyensúly. Ezen a vidéken mint­egy negyven krátertó van. Rész­letes tanulmányozásukra van szükség ahhoz, hogy a jövőben hasonló katasztrófák ne ismét­lődhessenek meg. Németh Géza

Next