2010. július 20., kedd

Adattípusok

Már megbeszéltük korábban, hogy egy program elkészítéséhez meg kell határoznunk a bemenő adatokat és az azokon elvégzendő műveleteket annak érdekében hogy a megfelelő kimenetet kapjuk.
A bemenő adatok meghatározása egy igen fontos dolog. Egy adatot a programozás során változóként, illetve konstansként tudjuk kezelni. A változó egy oylan hivatkozás, amin keresztül elérhető és megváltoztatható az adat amit reprezentál. A konstans ezzel szemben egy fix értéket ábrázol, annak értéke nem módosítható.
Egy adatnak két jellemzője van. Az adatot reprezentáló változó vagy konstans neve és típusa.
A változó neve egy általunk szabadon választott - az adott programozási nyelv szabályainak megfelelő - karaktersorozat.
Pl.

  • a háromszög oldalainak jelölésére célszerű a matematikában megszokott a, b, c változóneveket használni. 
  • ha valakinek a keresztnevét szeretnénk tárolni a programban, akkor jó választás lehet a knev változónévnek.
  • valamilyen indexelési műveletnél én az i és j változóneveket használom
  • koordináták jelölésére természetesen az x és y nevek egyértelműek.
  • irányítószám tárolása lehet az irsz változóban
  • egy érték maximumát jelölheti az YMAX konstans.
Mint látható ezek célszerű, rövid a tartalmukat valamilyen logika szerint jelző nevek. A gyakorlatok során kialakul egy konvenció ami alapján elnevezzük majd a változóinkat. Használjunk rövi egyszerű, de mégis beszédes változóneveket!

A másik lényeges tulajdonsága a változóknak a nevük mellett azok típusa. A típus azért fontos mert meghatározza hogy az adott változót hogyan kell értelmezni, mik a határai, mekkora adat fér bele, azokkal milyen műveleteket lehet végezni. Pl két szöveget nagyon nehéz összeszorozni, de egy betűt egy számmal összeadni sem nagyon lehet (bár C-ben éppenséggel lehetséges :) )
Az egyszerű adattípusok azok amiket az adott nyelv eleve implementál. 
Pascal esetében a leggyakrabban használt típusok /az összes típus a nyelv referencialeírásában/:

Egészek:
  • Byte: 0..255 közti egész
  • Integer: -32768 .. 32767 közti egész
  • Word: 0 .. 65535 közti egész
  • Longint: -2147483648 .. 2147483647
  • Longword: 0 .. 4294967295
Logikai típus:
  • Boolean: értéke true vagy false lehet, ami  logikai igaz és hamis értékeket jelöl.
Valós típusok:
  • Real: 1.5E-45 .. 3.4E38 közti valós szám
  • Double: 5.0E-324 .. 1.7E308 közti valós szám
  • Extended: 1.9E-4932 .. 1.1E4932 közti valós szám
Karakteres típusok:
  • Char: egyetlen karakter.
  • String: karakterfüzér, aminek maximális hossza 255 lehet. 
   


2010. július 2., péntek

Kollár Zoli "hogyan kezdődött..." sztorija (I. rész)

Sziasztok!

Megosztom én is veletek a "hogyan kezdődött..." történetemet:

'83 végén, '84 elején kezdődött a számítógép iránti érdeklődésem. Ugyanis híradástechnikai szakközépiskolába jártam, és sok osztálytársammal ellentétben engem érdekelt is a szakma. Ezért a zsebpénzemet nem bulizásra költöttem, hanem alkatrészekre, újságokra. És ekkor jelent meg a '84-es Rádiótechnika évkövny, amiben elég jó leírás volt a 8085-ös mikroprocesszorról. Napokon-éjszakákon át ezerszer is elolvastam a cikket, próbáltam megérteni, hogy hogyan működik a processzor. Pár nap múlva azt vettem észre, hogy ez tök egyszerűnek tűnik. Értelmes, logikus utasítások tömkelege, amiket megfelelően sorba lehet rendezni.

'84-ben harmadikos voltam, amikor kapott az iskola egy HT1080Z számítógépet. Szó szerint az iskola kapta, mert diákok nem nagyon nyúlhattak hozzá, csak a tanárok. Ez a gép történetesen a szakmai gyakorlatot tanító tanárom asztalára került. Távolról, sóvárogva néztem a gépet...

Kaptam egy Basic könyvet kölcsön az egyik iskolatársamtól (nem a mi osztályunkba járt). Azt is hamar átolvastam és az is tök egyszerűnek tünt. Aztán egyszer megkérdeztem a tanárunktól, hogy oda ülhetek-e elé? És megengedte, a szünetekben. Mondanom se kell, hogy ezután az összes szünetet ott töltöttem a gép előtt. Első programom ha jól emlékszem egy torpedójáték volt. Aztán a Basic nem nagyon érdekelt, és közben kiderítettem, hogy a gép Z80-as processzora majdnem teljesen kompatibilis az általam már "ismert" 8085-el. Otthon papíron kezdtem el írogatni assembly-ben az egyszerűbbnél egyszerűbb programokat, a suliban már csak a lefordított kódot kellett gyorsan bepötyögni, és örülni, ha működött elsőre. Olyasmiket írtam, hogy az egész képernyőt kitölti egy karakterrel, aztán egymás után növeli őket és megdöbbentő volt számomra a Basic és a "gépi kód" közti különbség. Soha többé nem akartam Basic-et :)

'84 nyarán a telefongyárban töltöttem a szokásos szakmai gyakorlatomat és ekkor kerültem közelebbi kapcsolatba a TAP-34-es számítógéppel. Soha ennyire lelkesen nem töltöttem még szakmai gyakorlatot, mint abban az egy hónapban. Az első pár nap Star-Trekezései után nekiálltam programozni. Milyen programot is írjak? Az a gép nem volt olyan egyszerű felépítésű mint a HT, ezért eleinte maradtam a Basic-nél, és írtam egy Disassembler programot. Persze mutogattam boldog-boldogtalannak, amíg egyszer csak az ottani főnök fel nem hívta Sz. Zolit. Zoli mai szemmel rendszergazda volt egy TPA1148-as "miniszámítógépen", de ami a sorsomat meghatározta az az volt, hogy a barátnője (ma a felesége és két gyermekük anyja) a Számítástechnikai Fejlesztési Főosztályon dolgozott. Zolinak baromira megtetszett a programom, elkérte és el is kezdte terjeszeni a gyárban, mert kiderült, hogy ilyen még nem is volt a géphez.

A '84-es év további része és a '85-ös év az érettségiig nagyrészt azzal telt el, hogy kifényképeztem a HT ROM tartalmát (csak hexadecimális kódok voltak), és papírra vetettem. Ez elég sok estémet és éjszakámat emésztette fel, főként, hogy csak negatívon voltak meg a képek és diavetítővel kellett kinagyítanom. Aztán elkeztem visszafejteni a kódokat. Készült belőle egy "nyers" változat és egy "javított". Pont tele lett vele egy A4-es spirálfüzet. Ennek a munkámnak a későbbiekben igen nagy hasznát vettem.

http://ht.homeserver.hu/doc/listak/htrom/htrom.html


Alig vártam, hogy leérettségizzek és mehessek dolgozni a Telefongyárba, mivel szerződésem volt velük, hogy suli után ott fogok dolgozni. Zolival tartottam a kapcsolatot, mivel 4.-ben is a telefongyárba (is) jártam szakmai gyakorlatra év közben is, meg mint kiderült, a "Klub"-nak is meghatározó tagja volt. Legfőképp itt találkoztunk, és szóba került az elhelyezkedésem. Megkérte a barátnőjét, hogy kérdezze meg, van-e lehetőségem az ő osztályukon elhelyezkedni. És volt!

Első nap "kezelésbe" vettek az új kollégáim, akik egytől-egyig egyetemet végzett mérnökök voltak, és nem értették, hogy mit keresek én ott. T. Lajos volt az, akinek a legnagyobb hangja volt köztük, és aszondta, ha akarok egy gépet magamnak, akkor rakjak össze egyet. Ő úgy gondolta, hogy kifogott rajtam - hát nagyot tévedett! Volt ott egy prototípus TAP-34 teljesen kibelezve, és én két-három nap alatt életet leheltem bele, mindenféle segítség nélkül. Azaz ez pontosan nem igaz, mert a Floppy meghajtók működésképtelenek voltak, és ehhez segítségül kellett hívnom egy "specialistát", aki fél óra alatt beállította az elektronikát. (Akkoriban még így működtek a floppyk :)

Egy-két hétig csak ismerkedtem a géppel, a ROM-jaival, a HW elemek címzésével, működésével, a fejlesztői programokat gyűjtögettem össze, ismerkedtem az assemblerrel. A telefongyár nagyon jó hely volt, minden műszaki leírás ot volt a polcon, az eredeti Intel katalógusoktól kezdve mittudom én már, hogy mikig.

Aztán kitaláltam, hogy írok egy jobb Basic Interpretert, mint amit a Telefongyár tákolt össze. Senki nem akarta elhinni nekem, hogy képes vagyok rá. És itt jön a képbe a füzetem: visszafejtés közben meg is értettem az interpreter működését, és képes voltam szétválasztani a nyelvhez és a hardverhez kötődő részeket. (Egy kis visszaemlékezés: a suliban az egyik iskolatársamnak volt otthon egy C64-es gépe, apja olyan helyen dolgozott, ahol ez volt a munkaszköze, így azzal is volt szerencsém párszor találkozni). Nekem a C64-ből nagyon megtetszett a "Full Screen Editora", így teljesen újra kellett írni a beviteli-szerkesztési részeket. Kazettás magnó helyett Floppy funkciókat kellett írni, úgyhogy a HT kódnak (nem akarok hülyeséget mondani, de ) kb. 70-80%-át használtam fel, a többi teljesen saját kód volt. A "gyári" basic a gép rom rutinjait használta fel a képernyőre íráshoz, és az a 8275-ös CRT kontroller miatt elég lassúra sikeredett. Nekem nem is tetszett, ezért azt is teljesen újra írtam és ez volt az a része a programnak, amivel a 19.-ik születésnapomon 32.000 Ft-ot kerestem! :) A lényeg az, hogy nagyjából fél év alatt sikerült egy sokkal jobb és jóval gyorsabb Basic Interpretert írnom, és ezzel kivívnom mérnök kollégáim elismerését.

Lajos lett a "menedzserem" és elkezdte fusiban árulni a programomat. Két szervízes srác talált is rá vevőt, a szolnoki vízműveket. Egy feltételük volt, jóval gyorsabbnak kellett lennie mint a régi és kompatibilisnek kellett vele lennie.

Pont a 19.-is születésnapomon került sor a bemutatóra Szolnokon. És mekkora mázlim volt! :) Valami nyilvántartó programjuk volt, ami adatgyűjtés vagy mittomén mi közben folyamatosan írt a képernyőre ezáltal baromira lelassítva a programjukat. És mivel én átírtam a megjelenítést, így az addigi 6 óra helyett kevesebb mint két óra alatt futott le a programjuk, hibátlanul. Kérdés se volt ezután, hogy megveszik. A szerzői jogvédőn keresztül fizettek, miután mindenki levette a sápot még nekem is maradt egy otthoni számítógépre való pénzem.

Folytatása követketik...

II. rész - CP/M

A Telefongyárnak is haladnia kellett a korral, ezért mindenkinek a TAP-34-es gépét átalakították CP/M-esre. Ez nem volt különösen nagy hardverigényű "beavatkozás", egy-két fóliát kellett átvágni a CPU panelen és a ROM-okat kicserélni statikus RAM-okra. Eleinte idegenkedtem az "új rendszertől", de ez csak addig tartott, amíg az én gépemre is sor került. Egy egészen új világ tárult elém, olyan programokkal mint a WordStar, Microsoft Assembler, DDT és sorolhatnám őket a végtelenségig. Az egyik legfontosabb program a DBase volt, ami hamarosan meghatározta a jövőmet. Én képes voltam reggel 6-tól este 6-ig nyúzni a gépet, pedig hivatalosan munkám nem volt. Magyarul két és fél évig csak tanultam a programozást és a hardverekkel ismerkedtem. Sorozatban gyártottam például az ébresztős-zenélős mikroprocesszoros órákat. Fejlesztési Főosztály révén alkatrészben nem volt hiány, nem kellett elszámolni velük. 10-15 óra készült el körülbelül, az enyém még mindig megvan, bár már nem működik, mert huszonév alatt elfelejtette az eprom a tartalmát. Bár megvan még a forráskód eljárt felette az idő. Nagyon szerettem azt az órát, úgy 15 évig ébredtem a C16-ra írt Kikstart játékból "kölcsönzött" kétszólamú zenéjére. Egyébként 8085-ös proci volt benne, mert az volt a raktárban feleslegbe... A főosztályon egyetlen egy eprom égető volt, amire napokig kellett várni, hogy használhassam. Ezt is megelégeltem és csináltam magamnak :)

Aztán jött a katonaság. Én sosem éreztem magamat harcias alkatnak meg hazafi se akartam lenni, ezért próbáltam minél könnyebbé tenni magamnak azt a másfél évet, amit elvettek az életemből. Kezdtem azzal, hogy rögtön első nap a budaörsi laktanyában összefutottam K. Attilával, aki szintén telefongyári és jó haverom is volt. A vállapján több csillag volt mint az égen :) Kiderült, hogy az egyik alezredes feleségénél dolgozik a számítógépteremben. Aztán még aznap elvittek debrecenbe egy hónapra kiképezni. Csakhogy én szemüveges vagyok és ezért "B" kategóriát kaptam. Ezzel nagyjából három hetet át is vészeltem - se lövészet, se sárban csúszkálás, se konyha -, mígnem valamelyik nagytudású őrvezetőnek eszébe nem jutott, hogy nem a szívemmel van baj :(

Ezalatt az egy hónap alatt se tétlenkedtem a programozással: a telefongyárban megismerkedtem egy furcsa viselkedésű sráccal, R. Palival. Szakmáját tekintve vegyész volt, de őt is inkább a számítógépek érdekelték és volt tehetsége hozzá. Nem nálunk dolgozott, hanem egy másik osztályon, de senki nem tudta megmondani, hogy neki igazából mi is a munkája. A lényeg az, hogy másik munkahely után kezdett nézelődni, és saját fejlesztésű CP/M-es gépet tervezett az oroszoknak. A termináljába a már említett 8275-ös CRT kontroller került, amit szerintem addigra magyarországon én ismertem a legjobban. Papíron, egy kockás füzetbe megírtam a terminál teljes programját, többször "lefuttattam" fejben. Mikor visszakerültem Budaörsre és kiengedtek pár napra, első utam Palihoz vezetett, ahol még aznap éjszaka beírtuk a programot. Kisebb javítások után kifogástalanul működött :)

Visszatérve a laktanyába a századparancsnok irodájában találtam magamat. Tényleg százados volt és pontosan olyan vörös volt a feje mint a szovjet zászló. Azt kérdezte (inkább üvöltötte), hogy miért nem jó nekem ott, miért kell nekem hátszél, miért akarok máshová menni? Fogalmam se volt róla, hogy miről beszél. Még aznap kiderült, hogy Attila - akivel első nap összefutottam - "intézkedett", és az alezredesnél találtam magam, mint "személyi programozója". Egy C128-as gépe volt neki, amin futott a CP/M, és meg volt neki minden programja, ami szükséges lehetett. Úgyhogy DBase tudásomat felfrissítve mindenféle nyilvántartó programokat írkáltam neki - amikor épp nem játszottam :) Cserébe csak hétköznap reggel 7-től délután 4-ig kellett a laktanyában lennem, úgyhogy király életem volt. Ezért említettem korábban, hogy fontos dolog volt az életemben a DBase.

A folytatásban az első PC-m építése következik...

Programozási nyelvek, értelmezők és fordítók

Itt az idő hogy konkrétan belevágjunk a programozásba és igazi programot készítsünk, igazi exe-t amit tudunk futtatni (PC és Windows esetében).
Ahhoz hogy a megalkotott programokat a gép számára is érthető és végrehajtható formába öntsük, szükség van egy eszközre ami ezt megteszi. A valamilyen programozási nyelven megírt programunkat a gép számára érthető gépi kódra kell fordítani. Alapvetően kétféle megvalósítás létezik. Az egyik az értelmező (interpreter) a másik a fordító (compiler).
Röviden összefoglalva az interpretrek jellemzője hogy a forrásprogram utasításait akkor fordítja le amikor végre kell azt hajtani, míg a compilerek az egész forrásprogramot lefordítják gépi kódra, majd a linkelés után (ezt szintén nem szeretném most részletezni) létrejövő programfájl (exe) már közvetlenül futtatható.

Ebben a blogban a manapság leggyakrabban alkalmazott nyelveket, a C és a PASCAL nyelvet fogom példaként használni. A két nyelv között nagyon sok elvi különbség van. Szinte vallási fanatizmussal vetekszenek a különböző felfogások. "Miért jobb a C mint a Pascal?" típusú kérdések köré már filozófikus mélységű elemzések és eszmefuttatások kötődnek.
Jelenleg részünkről a különbség a jelölésmódban áll. Gyakorlatilag a C hardverközelibb, a Pascal meg szigorúan típusos és sokkal szebb, tisztább, olvashatóbb kód készíthető vele. De nem akarok belemenni most az ilyen szintű elmélkedésekbe.

Windows alatt Pascalhoz a Free Pascal környezetet ajánlom, C-hez pedig a Code::Blocks fejlesztőkörnyezetet. Ha a telepítésekkel probléma van írjatok! Mindkét fejlesztőeszköz ingyenesen és legálisan használható.