Kifejezésorientált nyelv...18 Objektum orientált nyelv...18 Párhuzamos programnyelv...18 Programozási alapfogalmak...19 Algoritmus...19 Program...

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Kifejezésorientált nyelv...18 Objektum orientált nyelv...18 Párhuzamos programnyelv...18 Programozási alapfogalmak...19 Algoritmus...19 Program..."

Átírás

1 Tartalomjegyzék Programozás története...6 Programozási nyelvek generációi...7 Első generációs programozási nyelvek...7 Második generációs programozási nyelvek...8 FORTRAN...9 ALGOL...9 COBOL...9 BASIC...10 RPG...11 Harmadik generációs programozási nyelvek...11 PL/1 (Programming Language I.)...11 APL (A Programming Language)...12 PASCAL...12 MODULA ADA...13 C nyelv...13 Objektum-orientált programozási nyelvek...13 Tiszta objektum-orientált nyelvek...14 SmallTalk...14 Eiffel...14 Vegyes nyelvek...14 Turbo Pascal...14 Borland C Specializált programozási nyelvek...14 Rendszer- és fordítóprogramok fejlesztése...15 Formulakezelő nyelvek...15 Szimbólum-feldolgozó nyelvek...15 Szimulációs nyelvek...15 Adatbázis-kezelő nyelvek...15 Kiterjeszthető programnyelvek...15 Negyedik generációs programozási nyelvek...15 Lekérdező nyelvek...15 Programgenerátorok...16 Egyéb 4 GL nyelvek...16 Programozási nyelvek osztályzása...16 Felhasználói kör szerint...16 Amatőr nyelvek...16 Professzionális nyelvek...16 Számítási modell szerint...16 Neumann elvű nyelvek...16 Automata elvű nyelvek...16 Funkcionális nyelvek...17 Logikai nyelvek...17 Felhasználói közelség szerint...17 Gépi kód...17 Alacsonyszintű nyelv...18 Magasszintű nyelvek...18 Egyéb osztályozások...18 "Compiler" illetve "Interpreter" nyelvek...18 Procedurális illetve nem procedurális nyelvek...18 Deklaratív nyelv...18 Utasításorientált nyelv

2 Kifejezésorientált nyelv...18 Objektum orientált nyelv...18 Párhuzamos programnyelv...18 Programozási alapfogalmak...19 Algoritmus...19 Program...19 Programozó...19 Programozás...19 Forrásprogram...19 Programozási nyelv...19 A programozás szintjei...19 Szintaxis és szemantika leírás...20 Szintaxisleíró eszközök...20 Fordítás és értelmezés...20 Programkészítés és futtatás menete...20 Byte-kód fordítás...21 Case-sensitive, case-insensitive nyelvek...22 Megjegyzések...22 Kulcsszavak...22 Programstruktúrák...22 Program...22 Programcsomag...22 Párhuzamos folyamat (taszk)...22 Fordítási egység...22 Export-, importlisták...22 Programegység...22 Eljárás, függvény, operátor...23 Deklarációs rész, törzs...23 Blokkstruktúra...23 Programkészítés elvei...23 Stratégiai elvek...23 Taktikai elvek...24 Technológiai elvek...24 Technikai elvek...25 Esztétikai-ergonómiai elvek...25 Programkészítés lépései...27 Feladat meghatározása (specifikáció)...27 Algoritmuskészítés...28 Algoritmus...28 Algoritmussal szemben támasztott követelmények...28 Algoritmikus elemek...28 Program...29 Értékadó utasítás...29 Beolvasó utasítás...29 Kiíró utasítás...29 Megjegyzések...29 Utasításblokk - szekvencia...29 Elágazás - szelekció...30 Ciklus - iteráció...30 Eljárás, függvények, operátor...31 Műveletek csoportosítása...32 Algoritmus leíróeszközök...32 Folyamatábra (blokkdiagram)...32 Struktogram

3 Jackson diagram...36 Mondatszerű leírás...37 Kódolás...38 Tesztelés, hibakeresés, javítás...38 Hibaüzenetek értelmezése...41 Hibakeresés (Bedugolás)...41 Bedugolás technikák...42 Kivételkezelés...42 Hatékonyságvizsgálat...42 Hatékonyság fogalma...42 Hatékonyságvizsgálat szempontjai...43 Hatékonyságvizsgálat szintjei...43 Globális hatékonyság...43 Lokális hatékonyság...43 Algoritmus hatékonysága...43 Programkód hatékonysága...43 Dokumentálás...43 Dokumentáció fajtái...44 Dokumentáció tulajdonságai...45 Dokumentáció általános alakja...46 Példa dokumentációra...48 Strukturált program...49 Típusok...50 Adatok, adatszerkezetek...51 Változó...51 Konstans...51 Definíció, deklaráció...51 Azonosító...51 Védett azonosítók...52 Azonosítók átlapolása (túlterhelés)...52 Hozzáférési jog...52 Kezdőérték...52 Hatáskör...52 Láthatóság...52 Élettartam...52 Típus...52 Értékhalmaz...52 Adat csoportosítása...52 Egész típus...53 Valós típus...54 Logikai típus...54 Karaktertípus...54 Felsorolástípus...55 (Rész)Intervallumtípus...55 Valós résztípus...56 Rekord...56 Vektor/Tömb...56 Mátrix...57 Halmaz...57 Szöveg...57 Sorozat...58 Számábrázolások...59 Számábrázolás...59 Fixpontos ábrázolás

4 Lebegőpontos ábrázolás...60 Programozási tételek...61 Programozási tétel fogalma...61 Tételek megfogalmazásának elemei...61 Tételek alkalmazásának lépései...61 Tételek csoportosítása...61 Egy sorozathoz egy értéket rendelő tételek...61 Összegzés tétele...61 Megszámlálás tétele...62 Eldöntés tétele...62 Kiválasztás tétele...63 Egy sorozathoz egy sorozatot rendelő tétele...63 Másolás, transzformálás tétele...63 Kiválogatás tétele...64 Egy sorozathoz több sorozatot rendelő tétel...64 Szétválogatás tétele...64 Több sorozathoz egy sorozatot rendelő tételek...65 Metszetképzés tétele...65 Unióképzés tétele...66 Összefuttatás tétele (UNIÓ)...66 Összefuttatás tétele (METSZET)...68 Keresési tételek...68 Lineáris keresés tétele...68 Logaritmikus keresés tétele...69 Rendezések************...69 Rekurzió******...72 Objektumorientált programozás...73 Objektumorientált programozás fogalma...73 Objektumorientált program jellemzői, alapfogalmak...74 Futóverseny példa...77 Objektum-orientált tervezés...78 Ábrázolás osztálydiagramon...78 Objektumosztály definiálása, objektumok létrehozása...78 Linux alapok...79 Python...83 Első lépések...83 Számolás Pythonban...83 Adatok és változók...83 Változónevek és foglalt szavak...83 Értékadás, hozzárendelés...84 Változó értékének a kiírása...84 Változók típusadása...85 Operátorok és kifejezések...85 A műveletek prioritása...85 GUI tananyag***************...86 Programok feladatok**************...86 Specifikáció készítés...86 A specifikáció során használható szimbólumok...86 Algoritmus készítés...87 Egyszerű konzol feladatok...91 Programok...91 Beolvasás, kiíratás...91 Típuskonverzió...91 Egyszerű műveletek

5 Elágazások...91 Ciklusok...91 Vegyes feladatok...91 Menü a programban...91 Eljárást tartalmazó...91 Függvényt tartalmazó...91 Összetett adattípusok...91 Tömb...91 Mátrix...91 Rekord...91 Tételek...91 Keresési tételek...91 Rendezési tételek...91 Műveletek fájlokkal...91 GUI programok...95 OOP programok

6 Programozás története 1822 ben Charles Babbage, az angliai Cambridge egyetem hallgatójaként felismerte, hogy az akkori számító eszközök nagy része, (például a csillagászati táblázatok, vízállásdiagramok, hajózási térképek kritikus hibákat és hiányosságokat tartalmaznak. (A hibák gyakran a emberi életébe is került.) Mivel a pontatlanságok forrásá nak az emberi tényezőt tartotta, az volt az elképzelése, hogy gőzgépek segítségével a táblázatok és a diagramok készítéséből és karban tartásából kiiktatja a találgatásokat. Az egyik ilyen gép, a Difference Engine néven emlegetett szerkezet Babbage életének hátralevő részében ren geteg idejét lekötötte. Még a brit kormányt is felkereste, hogy pénzügyi segítséget kérjen: az első kéréssel a szá mítógép tudományi kutatás finanszírozásához kért kormányzati támogatást. A Difference Engine 10 évnyi fejlesztése után Babbage felismerte, hogy az egy funkciós gép kizárólag egyetlen művelet végrehajtására képes. Rájött, hogy ez igen komoly korlátozás, és egy időre felfüggesztette a munkát a sokoldalú Analytical Engine fejlesztésének kedvéért. Ez a gép a modern számítógép alapelemeit tartalmazta, és megalapozta Babbage számára a számítógép atyja nevet. Az Analytical Engine nem nyert széles körben elismerést, mivel Babbage ugyanazzal a problémával küzdött, ami évszázadokra megkeserítette a programozók és az informatikusok életét: képtelen volt világosan dokumen tálni és ezáltal közkinccsé tenni ötleteit! 1854 a következő állomásunk, amikoris Charles Boole elkészítette a nevét viselő szimbolikus logikai rendszert (Boole algebra), amelynek igen jelentős szerepe van a programozásban. A rendszer bevezette a nagyobb, mint, kisebb, mint, egyenlő és nem egyenlő fogalmát, és egy szimbolikus rendszer segítségével megje lenítette ezeket a fogalmakat ben az Egyesült Államok népszámlálási hivatala versenyt írt ki. Az 1880 as népszámláláskor az adatok összesítése 7 évet vett igénybe, valamint a lakosság is növekedett, így a becslések szerint az 1890 es népszám lálási adatok feldolgozása nem fejeződött volna be az 1900 as népszámlálás előtt. Ezért a verseny célja az volta, hogy fellendítse a számítástudomány iránti érdeklődést, és ennek eredményeként előálljon egy adatfeldolgozó berendezés, amely a kormány munkáját segíti. A versenyt Herman Hollerith német származású amerikai statisztikus nyerte. Az ötletét a Jaquard féle szövő gépek lyukkártyás módszeréből merítette. Jacquard módszerének kulcsa egy kártyasorozat alkalmazása, ame lyen lyukak vannak elhelyezve, mégpedig úgy, hogy azok a kívánt mintát rajzolják ki. Ennek láttán találta ki, hogy a Jacquard deszkalapjaihoz hasonló perforált kártyákat adatfeldolgozásra is lehet használni. Egy kártyára egy ember adatait lyukasztotta. Maga a lyukasztás kézi munkával történt. Az adatok feldolgozásá ra olyan rendszert használt, ahol a lyukkártyák elektromos érintkezők között mentek át. Ahol a kártyán lyuk volt, az áramkör bezárult. Így a lyukakat meg lehetett számolni. Ezzel dolgozta fel az USA 1890 es népszámlálási adatait, mindössze négy hét alatt. A lyukkártyás módszer egyébként később, több programozási nyelv kialakulására is hatással volt. Miután bebizonyította a technológia eredményességét, Hollerith más országokban is vállalta népszámlálási in formációk feldolgozását. Ennek sikere láttán alapította 1896 ban a Tabulating Machine Company nevű céget, amelyből aztán 1924 ben megalakult az IBM ben Konrad Zuse programozás történetének újabb meghatározó alakja kifejlesztette Z 1 névre hallgató számítógépét. Ez volt az első számítógép, amely reléket használt, és a kettes számrendszer segítségével szá molt. Ez a gép a számítógépek modern korának előfutára. Zuse volt az, aki a világ első programozási nyelve, a Plankalkül kifejlesztésével 1946 ban megalapozta a mo dern programozást. A nyelv megjelenése azért volt nagy áttörés, mert modern nyelvek összetevőinek nagy ré szét, többek között a táblákat és az adatstruktúrákat is tartalmazta a számítástechnika történetében újabb fontos állomást jelentett, felbukkant az a szó, amelytől mindenki hi degrázást kap: a hiba! 1945 ben Grace Murray Hopper (később Hopper admirális) a Harvard egyetemen a Mark II Aiken féle átkapcsoló kalkulátoron dolgozott. A gépekkel akkortájt folyamatosan probléma volt, és az egyik ilyen kellemetlen eset során, szeptember 9 én az egyik technikus felfedezte, hogy egy moly került a gépbe. Az esettel kapcsolatban a következő naplóbejegyzés született: Az első eset, amely során tényleges hibát (bug) találtam. Ebből a bejegyzésből született a gép hibakeresése (debugged), valamint a számítógép hi bakeresése (debugging a computer) és a számítógépprogram hiba keresése (debugging a computer program) 6

7 kifejezés is. A 20. század közepétől felgyorsult a fejlődés. Egyre több fejlesztés történt: rengeteg különböző programnyelv jött létre, amelyek mindegyike rendelkezik egyaránt előnyös és hátrányos tulajdonságokkal. Megjelent az Internet, amely szintén nyelvek seregét hozta magával. Az Internet másik nagy előnye, hogy meg könnyíti az információk és a programok megosztását másokkal, így a programozás és a programozási nyelvek iránti érdeklődés egyre nő, és ezt az érdeklődést az információk, ötletek és alkalmazások akadálytalan cseréje még inkább fellendíti, vagyis a fejlődés nem áll meg ben Neumann János tervei elkészül az EDVAC, az első Neumann elvek alapján épített gép volt. Első sorban matematikai problémák megoldására lett specializálva, a programok gép függőek voltak, a programo zás tulajdonképpen nem volt más, mint adott utasítások sorozatának leírása. A programok megírása sok időt vett igénybe. A 60 as években egyre több számítógép került a nagyvállalatokhoz, ahol már nemcsak a számítások elvégzése volt az igény, szerettek volna számítógépen ennél összetettebb feladatokat is megoldani. A nehézkes programozási módszerek és a gazdasági élet amely a vállalatok döntéseit alapvetően befolyásolja dinamikus változásai nem igazán voltak összhangban egymással. A hosszú, nehéz munkával készített programok igen gyorsan elavultak, és máris lehetett hozzákezdeni a következő írásához. Tehát új, gyorsabb, egyszerűbb programfejlesztési módszerekre volt szükség. Ebben az időben jelentek meg az első magas szintű programozási nyelvek, amelyek már nem a számítógép, hanem az emberi gondolkodás logikája alapján próbálták a problémákat megközelíteni. A fejlesztések, kutatások eredményeképpen új programozási módszerek, technikák, filozófiák jelentek meg. Most már nemcsak a problémamegoldás egyszerűsítése volt a cél, a programok szerkezeti felépítése, az emberi logika minél hatékonyabb kihasználása lett az újabb fejlesztések irányvonala. Megjelentek az általános célú és a specializált programozási nyelvek, a 70 es évek elején új módszerként jelentkezett a strukturált programozás. A 90 es évekre komoly teret nyertek a számítógépek az élet valamennyi területén. Komoly igény volt arra, hogy a szoftverpiac követni tudja az egyre szélesebb körű igényeket, tehát új eszközökre volt szükség, amelyek segítségével a programozók gyorsan tudnak hatékony és megbízható alkalmazásokat írni. A gyors programfejlesztés céljait egy az emberi gondolkodáshoz közel álló módszer teszi lehetővé, ugyanakkor a programnak nem szabad hatékonyságát elveszítenie, tehát minél elemibb egységekből kell felépíteni. Mindkét igényt kielégítette az objektum orientált programozási technika, amely a valódi tárgyakhoz hasonlóan képes kezelni a rendszer absztrakt elemeit. Azaz a programozónak rendelkezésére állnak az előre definiált programelemek, amelyekből összeállíthatja a működőképes programot. Annak érdekében, hogy a problémának leginkább megfelelő alkalmazást lehessen előállítani, az egyes elemek tulajdonságait a programozó tetszése szerint módosíthatja. A 90 es évek második felére jellemző a legújabb programozási technikák kialakulása, amelyek esetében már nemcsak egy probléma megoldására nyílik lehetőség, komplex információs rendszereket kezelhetünk általuk. Ezen a szinten a programozónak már nem arra kell koncentrálnia, hogy hogyan oldja meg a problémát, sokkal fontosabbá válik a mivel kérdése. A legfejlettebb programozási rendszerek már automatikusan generálják a kódot, ezzel a programozónak már nem kell foglalkoznia. Ezek a rendszerek sok esetben nemcsak a program helyességét ellenőrzik, hanem a problémamegoldás hatékonyságát is. Ezáltal a programozónak kizárólag a megoldandó probléma lényegére kell figyelnie, megkeresheti a kritikus pontokat a programban, és minden korábbi lehetőségnél hatékonyabban optimalizálhatja annak működését. Az évek során igen sok programozási nyelv alakult ki, amelyeket szemléletük, fontosabb jellemzőik alapján négy generációba soroltak. Programozási nyelvek generációi Első generációs programozási nyelvek Az első programozási nyelv a gépi kód volt. Ennek a nyelvnek az utasításait a számítógép képes volt közvetlenül, minden átalakítás nélkül végrehajtani, értelmezni. A problémákat nagyon precízen kellett megfogalmazni, lépésekre bontani. Emellett a nyelv erősen gépfüggő volt, hiszen minden gépen más és más utasításokat használt, az adott problémát minden géptípus esetén másképpen kellett leírni, megfogalmazni, 7

8 alkalmazkodva a számolóegység sajátosságaihoz. (A gépi kód mai napig sem egységes a különböző processzorok esetében.) A gépi nyelv olyan utasításokból állt, amelyek a gép számára közvetlenül értelmezhetőek voltak, az emberi nyelvektől azonban igen messze állt a gépi logika. Hátrányai mellett néhány előnyt is meg kell említenünk: A leggyorsabb programot eredményezi, mivel nem tartalmaz felesleges utasításokat. Az egyes utasítások egységes formában vannak leírva. Az első generációs nyelvek nagy érdeme, hogy bevezették a kifejezés fogalmát. Itt jelenik meg az egész és valós típus, illetve néhány egyszerű vezérlési szerkezet. Példa egy gép kódú utasításra: 0B0A 0C0E 0D00 Az első négy számjegy az utasítás, a második négy számjegy az első memóriacím, a második négy számjegy a második memóriacím. A gépi kódú lehetőségekhez képest komoly előrelépést jelentett az Assembly nyelvek megjelenése, amelyek tulajdonképpen segédeszközt jelentettek a gépi kódú utasítások egyszerűbb megfogalmazásában. Az egyes gépi kódú utasításokhoz egy egy mneomnikus kódot rendeltek hozzá, a tárcímeket pedig a memória kezdetéhez viszonyított relatív címekkel számították. Szintén újdonságnak számított, hogy az egyes memóriacímeket egy egy szimbolikus névvel lehetett helyettesíteni. Egy összeadás Assembly nyelven: ADD X, Y Az ADD szócska az összeadásra (addition) utal, az X és Y pedig memóriacímeket szimbolizálnak. Tehát az Assembly egy olyan alacsony szintű programozási nyelv, amelynél a művelet és a tárcím szimbolikusan megadható, de a programozás logikája továbbra is követni a gépi logikát. Természetesen, ha egy Assembly programot szeretnénk futtatni, azt mindig meg kell előznie egy átalakítási, fordítási műveletnek, amikor az Assembly utasításokat gépi utasításokká alakítjuk át. Az Assembly virágkorában az operációs rendszerek tartalmazták az Assembly fordítót. A fordítóprogramok compiler típusúak voltak. Az Assembly legtöbb utasítása egyetlen gépi utasítást reprezentált, azaz az Assembly 1:1 tipusú nyelv. Volt néhány utasítás, amely több gépi kódú utasítást jelentett, ezeket makróknak nevezték. Az Assembly nyelv a gépi kódú programozás után igen nagy előrelépést jelentett, általa sokkal kényelmesebbé vált a programfejlesztési munka. Napjainkra az alacsony szintű programozási nyelvek háttérbe szorultak. Az Assembly t ma már csak olyan feladatok esetén használják, ahol hardver szintű vezérlést kell megvalósítani. A visszaszorulásuknak sok oka mellett két fontosabbat szeretnék mindössze kiemelni: A processzorok utasításkészlete ma is különböző, ezért a gépi kódban írt program nem hordozható. Az alacsony szintű programozási nyelvek aprólékos, átgondolt munkát feltételeznek egyszerű problé mák esetén is. A mai kor követelménye pedig a gyors, látványos, rövid idő alatt elkészülő programok felé mutat. Második generációs programozási nyelvek A számítógépek alkalmazási területének bővülése szükségessé tette a programok fejlesztési idejének csökken tését, azaz felmerült az igény, hogy a programokat minél gyorsabban írják meg a programozók. A gépi kód és az assembly nehézkessége, géphez igazodása miatt nem volt erre alkalmas. A 60 as évek elején jelentek meg az első magas szintű programozási nyelvek. Az új nyelvek struktúrája már nem a számítógép sajátosságaihoz, hanem a problémához igazodott, a programozóknak itt már nem kellett a gé pi végrehajtással foglalkoznia. Minél függetlenebb egy programozási nyelv a gépi logikától, annál magasabb szintű, annál magasabb minőségi követelményeknek tud eleget tenni. A magas szintű programozási nyelvek 1:N típusú nyelvek, azaz egyetlen magas szintű programnyelvi utasítás több gépi kódú utasítást reprezentál. Természetesen a magas szintű nyelven írt programokat is le kell fordítani az assembly hez hasonlóan de komoly előny, hogy ezeknél a nyelveknél már sokkal kisebb a hibalehetőség, a forrásprogram sokkal áttekinthetőbb lett. A magas szintű programozási nyelvek már sokkal közelebb állnak az emberi logikához, mint elődük, jóval egyszerűbben, világosabban le lehet írni segítségükkel a problémát. Egy összeadási művelet assembly ben, il letve magas szintű programozási nyelvben: 8

9 mov x,10 mov y,12 add x,y mov sum,x X=10 Y=12 SUM=X+Y FORTRAN Az első magas szintű programozási nyelv az IBM cég által kidolgozott FORTRAN volt ben jelent meg, elsősorban a műszaki tudományos számítások legősibb nyelve. Nevét a Formula Translation szavak összevoná sából kapta. Elsősorban matematikai formulákat tartalmazó elágazások kezelésére volt alkalmas, a numerikus algoritmusok széles körét támogatta, viszont az I/O műveletek, és a karakteres adathalmazok kezelése szempontjából nem bi zonyult hatékony nyelvnek. Az I/O műveleteket mindössze alapvető függvények által valósította meg, a nyelv elsődleges célja a matematikai problémák megoldása volt, ehhez a speciális területhez azonban nagyon haté kony eszköznek bizonyult. A nyelv szerkezetét vizsgálva azt tapasztaljuk, hogy a programok két részből állnak: főprogramból, amely a PROGRAM és END utasítások között helyezkedik el. egymásba nem ágyazható alprogramokból, szubrutinokból, amelyek a FUNCTION...END, illetve a SUBROUTIN...END utasítások között helyezkednek el. A fordítóprogram az egyes szerkezeti elemeket külön fordítja, a különböző tárgyprogramokat kell összeszer keszteni, hogy futtatható programot kapjunk. A FORTRAN képességeinek növelésén a fejlesztők igen sokat fáradoztak. A nyelvnek igen sok szabványosított változata jelent meg ban a FORTRAN 66, 1977 ben a FORTRAN 77 ANSI, és ezek mellett készültek el a FORTRAN II., IV. és V. változatok. Az utolsó szabványosított változat a FORTRAN 90 volt, melyek ma is használnak a tudományos számítások programozására. Bár napjaink igényei az univerzális nyelvek felé mutatnak, a FORTRAN mégis megmaradt a műszaki és tudo mányos számítások nyelvének. Jelenleg folyamatban van vagy már elkészült a legújabb verzió, a FORTRAN ALGOL A FORTRAN hoz hasonlóan, úttörő nyelv volt a magas szintű nyelvek sorában ben fejlesztették ki, a matematikai, műszaki számítások célnyelveként. Az első véglegesnek tekintett változatot 1960 ban fogadták el egy párizsi konferencián, neve ALGOL 60 volt. Később, több lépcsőben történő fejlesztés után megjelent a nyelv egy újabb változata, az ALGOL 68. Mindkét változat támogatta a moduláris programozást és a dinamikus tárolóelhelyezést (hasonló a mai muta tókhoz). Új lehetősége volt a rekurzív alprogramok írása. Az ALGOL viszonylag kis utasításkészlettel rendelkezett, azonban szintaktikája nagyon hasonlított az emberi beszédre (Bacus Naur Forma). A nyelv szimbólumrendszere azonos volt a matematikában alkalmazott szimbó lumrendszerrel, ami az ilyen jellegű problémák programozását nagyon megkönnyítette. A programban lévő blokkok önálló egységeket képviseltek, az alprogramokat egymásba lehetett ágyazni. Az ALGOL szabad formátumú nyelv, az utasítások tetszőleges helyre írhatók. Minden utasítást ; vel kell lezár ni. A főprogram kezdetét a PROCEDURE szó jelzi, a program végét az END. Mindkettő után meg kell adni a program nevét. A programban használt változókat deklarálni kell, a deklarációk a blokkok elején helyezkednek el. Az ALGOL nyelv elsősorban a kutatómunkában és az oktatás területén terjedt el. Első számú alkalmazási terü lete az informatikai kutatás volt. Jelentősége azonban vitathatatlan, mivel számos később kialakult programozá si nyelv alapjaként szolgált. Pl.: PASCAL. COBOL Az eddigiekben tárgyalt programozási nyelvek elsősorban a matematikai, műszaki számítások területét támo gatták sikeresen. Szükség lett volna egy olyan nyelvre is, amely az adatfeldolgozást, az információs rendszerek kezelését segíti, támogatja. Az Amerikai Védelmi Minisztérium finanszírozásával 1959 ben létrejött a CO DASYL (Conference on Data Systems Language) bizottság, és lefektette az alapokat egy új, a gazdasági, keres 9

10 kedelmi életben jól használható adatfeldolgozás orientált programozási nyelv kifejlesztéséhez ban szüle tett meg a COBOL (Common Business Oriented Language), amely alkalmasnak látszott a gazdasági életben va ló alkalmazásra is. Az Amerikai Szabványügyi Hivatal (ANSI) 1968 ban elfogadta, majd újabb fejlesztések után 1974 ben szabványossá nyilvánította a nyelvet. A COBOL megjelenése után hamar népszerűvé vált, mert minden számítógéptípuson alkalmazható nyelv volt. Kiterjedt lehetőségeket biztosított az adatállományok létrehozására, karbantartására és lekérdezésére. A COBOL kötött szerkezetű programozási nyelv volt, 4 szerkezeti blokkból épült fel: Identification Division: Azonosító rész. Olyan információkat tartalmaz, mint a program és a programozó neve, készítési idő pontja stb. Environment Division: Környezethívó rész. A futási környezet meghatározását, az alkalmazandó perifériák hivatkozásait tartal mazza. Data Division: Adatleíró rész. Az alkalmazandó állományok és adatstruktúrák leírását tartalmazza. Procedure Division: Az eljáráshívó rész. A feldolgozandó adatokkal végzett műveletek, utasítások leírása. A COBOL nyelvet ma is használják az adatfeldolgozás területén. Az első változathoz képest a nyelv igen nagy változásokon ment keresztül, nagyon sokat fejlesztették az évek során ben jelent meg a strukturált, né hány évvel később az objektumorientált változata. A COBOL nyelv előnyeként meg kell említeni a kiváló do kumentálási lehetőségeket, a komplex adathalmazok kezelésének jelentős könnyítését. Hátránya viszont, hogy a programok mérete igen nagy lesz, és az alapvető matematikai műveleteken túl nem támogatja a bonyolultabb számítási feladatokat. BASIC A BASIC nyelv kialakulása a programozási nyelvek fejlődésének bölcsőjéhez vezet vissza, amikor a magyar származású Kemény János és munkatársa, Thomas Kurtz elhatározták, hogy kidolgoznak egy olyan programo zási nyelvet, amelynek segítségével a programozás könnyen oktatható és tanulható. A köztudatban a BASIC nyelv a kezdő programozók nyelveként vált ismertté. Az ötlet a 60 as évek elején született, amikor megjelentek az első Time sharing (időbeosztásos) rendszerek, és a központi számítógépen tárolt adatokhoz egyre több felhasználó férhetett hozzá. A felhasználóknak szükségük volt egy olyan programozási nyelvre, amelynek segítségével megvalósíthatták a központi adatokhoz való inter aktív hozzáférést. A FORTRAN és COBOL nyelvek batch üzemmódban készültek, ezért nem voltak alkalma sak az adatok dialogikus feldolgozására, igény volt egy általános célú, interaktív, eljárás orientált programozási nyelv létrehozására. Az első ilyen interpreter típusú nyelv a BASIC volt, amely nagymértékben egyszerűsítette a programok írását és tesztelését. A BASIC (Beginners All Purpose Symbolic Instruction Code) nyelv első működő változata 1963 ban jelent meg. A nyelv valójában a FORTRAN egyszerűsített változata volt, korlátozott utasításkészlettel és egyszerű szimbólumrendszerrel. A FORTRAN nél lényegesen hatékonyabb támogatást nyújtott a karakteres adatok és az I/O műveletek keze léséhez, szintaktikája közel állt az emberi gondolkodáshoz. Az első változatok utasításkészlete még nem tette lehetővé a struktúrált programozást, gyakran kellett alkalmaz ni az ugró utasításokat (GOTO). A BASIC ben a programok végrehajtása utasításonként történt (INTERPRE TER módban), ami gyakorlatilag nagyon megkönnyítette a programok tesztelését. Az első változattól kezdve a nyelv nagyon sok változtatáson ment keresztül, nagyon sok változata jelent meg, újabb és újabb lehetőségekkel bővítve a nyelvet. A fontosabb változatok a QUICK BASIC, GFA BASIC, MS BASIC, és a Pascal elemet is tartalmazó VISUAL BASIC. A változatok közül egyedül a VISUAL BASIC et tekintjük strukturált programozási nyelvnek, a programblok kok és eljárások, függvények kezelése miatt. 10

11 RPG A 60 as évek végén jelent meg egy új, az IBM cég által kidolgozott programozási nyelv, amely a COBOL hoz hasonlóan az adatfeldolgozás támogatását tűzte ki célként, de a megvalósítás során teljesen eltérő filozófiát al kalmazott. Ez a nyelv volt az RPG (Report Program Generator). Ellentétben az eddig tárgyalt procedurális nyelvekkel, az RPG a nyelvbe épített, előre definiált standard elemekkel dolgozott. A technikát arra alapozták, hogy minden üzleti típusú jelentés, kimutatás gyakorlatilag azonos felépítésű. Az RPG volt az első listageneráló programozási nyelv. Lehetővé tette a bonyolult adatok gyors és egyszerű feldolgozását, és emellett viszonylag kis memóriát igényelt. Hátránya volt, hogy nem támogatta a bonyolultabb számításokat, ezek elvégzéséhez As sembly rutinokat kellett beszúrni. A nyelvnek sokféle változata született, sokáig próbálták fejleszteni, piacon tartani. Ennek ellenére korlátozott felhasználási területe miatt háttérbe szorult. Harmadik generációs programozási nyelvek A második generáció programozási nyelvei már lényegesen függetlenebbek voltak a gépi logikától, mint az első generációs nyelvek, az elkészített programokat többféle gépen is használni lehetett. Azonban a 2 GL nyelvek többsége egy egy problémacsoport megoldására specializálódott, ami a programok fejlesztése, javítása során igen komoly akadályokat jelentett. A 60 as évek derekán kíséreltek meg először olyan programozási nyelvet fejleszteni, amely rendelkezik a 2 GL nyelvek jó tulajdonságaival is, emellett többféle problémacsoport megoldására alkalmas, univerzális. Az új kor szakot a procedurális programozási szemlélet és az adatok struktúrájának hangsúlyozása jellemezte. Megszülettek az első 3 GL nyelvek, amelyeket még ma is használnak. Ezek a programnyelvek már igen sokféle probléma megoldására alkalmasak, de minden problémára optimális programozási lehetőséget biztosító progra mozási nyelv nem létezik. A 3 GL nyelveket három csoportra oszthatjuk: általános célú, magas szintű nyelvek objektum orientált nyelvek specializált nyelvek Az általános célú programozási nyelvek családjába tartozó nyelvek széleskörűen alkalmazhatók a gazdasági számításoktól a rendszerprogramozási fejlesztésekig, széles a lehetőségek skálája. Néhány ismertebb, szélesebb körben elterjedt 3 GL programozási nyelv: PL/1, APL, PASCAL, Modula 2, ADA, C. PL/1 (Programming Language I.) A PL/1 programozási nyelvet az IBM cég fejlesztette ki, az első változata 1964 ben jelent meg. Ez a nyelv még nem igazán sorolható a harmadik generációs programozási nyelvek közé, de mivel igen sokféle feladat megol dására alkalmas, megérdemli a 3 GL elnevezést. A PL/1 szabad formátumú nyelv, amely a FORTRAN, az ALGOL és a COBOL nyelvek előnyeit egyesíti ma gában. Egyaránt alkalmas az adat feldolgozási és a számítási problémák megoldására, emellett a program szerkezete egyszerű és követhető, formai előírásai nem túl szigorúak. A programok blokk szerkezetű felépítése már a strukturáltság koncepcióját vetíti előre. A program tartalmaz egy főprogram részt, amely külön blokkokban több alprogramot foglalhat magába, az alprogramok egymásba ágyazhatók. A fordító a deklarációkat utólag helyezi el a program elején. A PL/1 előnyei: mindenféle alkalmazáshoz jól használható könnyen tanulható, egyszerű nyelv bonyolult feladatok megoldására is alkalmas szabad formátumú programozást tesz lehetővé blokkszerkezete jól illeszkedik a struktúrált programozási szemlélethez, az eljárások, függvények jól el választhatók egymástól Az első verziót újabb és újabb változatok követték, 1976 ban jelent meg az oktatáshoz is jól alkalmazható vál tozata a PL/C. Bár a PL/1 univerzális programozási nyelv, mégis csak az IBM gépek alkalmazói körében terjedt el, aminek 11

12 oka a megjelenés időpontjában keresendő. Ekkorra már a programozók többsége megismerte a FORTRAN és a COBOL használatát, és nem kívántak egy újabb nyelvre áttérni, főleg mivel ez a nyelv az előző kettő integráci ójának tekinthető, igaz tartalmaz néhány újdonságot. APL (A Programming Language) Az APL egy a matematikai problémák megoldására orientálódott, többcélú (de nem általános) programozási nyelv volt. A nyelvet Kenneth Iverson, amerikai matematikus dolgozta ki, elsősorban műszaki, tudományos al kalmazások fejlesztése céljából. Az APL programok egyik sajátossága, hogy kezelik a görög betűket, beépített (implicit) lehetőségei közé tar toznak az egy és többdimenziós tömbökkel végzett műveletek. A nyelv szimbólumrendszere és szerkezete szabad formátumú. Az APL programok írásához speciális billentyű zetre van szükség (a görög betűk és a speciális operátorok miatt). Az APL nyelv nem támogatja a struktúrált programozást, így nagyobb feladatok megoldását nehézkessé teszi, de a nagy számban rendelkezésre álló beépí tett operandussal kiválóan alkalmas prototípusok gyors készítésére. A 70 es, 80 as években műszaki, tudományos és gazdasági problémák megoldásra egyaránt hatékonyan hasz nálták. Az újabb változatok (APLG) támogatják a grafikus feldolgozást is, manapság a numerikus számítógépek műkö désének leírásához használják. PASCAL A PASCAL nyelv volt az első igazi és legteljesebb körű megvalósítása a strukturált szemléletű programozás el veinek. Niklaus Wirth professzor, a zürichi Műszaki Főiskola oktatója dolgozta ki a nyelvet a 70 es években, és Blaise Pascal francia matematikus filozófusról nevezte el. Wirth professzor az ALGOL programozási nyelv alapján definiálta a PASCAL szabályait, a cél egy az AL GOL hoz hasonló, de általános célú programozási nyelv elkészítése volt. A PASCAL általános célú programozási nyelv, amelyet elsősorban az oktatásban, a műszaki tudományos szá mítások területén és a komplex programrendszerek fejlesztése során alkalmaznak elterjedten. Szabad formátumú nyelv, mely viszonylag kevés utasítást tartalmaz. A programok szerkezete kötött, szigorú előírások vonatkoznak rá. A PASCAL programok blokkokból épülnek fel, a blokkok a BEGIN foglalt szóval kezdődnek és az END fog lalt szóval érnek véget. Minden utasítás végére ; t kell tenni. A PASCAL nyelv támogatja a moduláris progra mozást, függvények és eljárások definiálhatók a FUNCTION és a PROCEDURE foglalt szavak segítségével. A függvények, eljárások egymásba ágyazhatók, sőt a nyelv támogatja a rekurziót is. A PASCAL erősen típusos nyelv. A programban használni kívánt változókat a főprogram előtt elhelyezkedő deklarációs részben fel kell tüntetni. A PASCAL fordítók compiler típusú fordítók. A programok szabályos, szigorú, egyértelmű felépítése miatt a nyelv az oktatás kedvelt programozási nyelve. A PASCAL nagyon jó alapot biztosít más programozási nyelvek tanulásához, a strukturált programozás alapelvei nek megértéséhez. MODULA 2 Amint a nevéből is lehet következtetni, olyan programozási nyelvről van szó, amely igen magas szinten támo gatja a moduláris programozás módszerét, azaz a feladatok részfeladatokra bonthatók és az egyes részeket kü lön lehet programozni, fejleszteni. Az egyes modulok az utasítások mellett tartalmazzák a modul során felhasz nált adatokat, változókat, konstansokat is. A modulok hierarchikus felépítésűek, tehát egymásba ágyazhatók. Célszerű élni ezzel a lehetőséggel, annak érdekében, hogy az egyes alprogramok egymással megfelelően tudjanak kommunikálni. A nyelv támogatja a rekurzív alprogramok mellett, a párhuzamos vezérlőszerkezetek készítését is. Ez utóbbi lehetőség a verseny helyzetben álló folyamatok programozásánál lehet hasznos (multitasking). A nyelv egyik nagy előnye, hogy a moduláris felépítésű programok könnyen áttekinthetők, értelmezhetők egy esetleges módosításkor. Manapság is népszerű nyelv, majdnem minden operációs rendszerhez beszerezhető a fordítóprogramja. 12

13 ADA A 70 es évek közepén fejlesztették ki ezt a Pascal hoz hasonló nyelvet, amely nagyon hatékonyan alkalmazha tó mind a rendszerszintű programok írása során, mind a komplex gazdasági számítások megoldásakor. A nyelv Augusta Ada Byron ról kapta a nevét, akit Charles Babbage munkatársaként az első női programozóként említ az informatika története. Az ADA nyelv fejlesztésének célja egy hatékony, teljes gépfüggetlenséget biztosító programozási nyelv létre hozása volt. Éppen ezen törekvések miatt az ADA nyelv nagyon sok lehetőséget biztosít, a fontosabbak: mult itasking, kommunikáció, megszakítás kezelés. Az ADA programok moduláris felépítésűek, az egyes modulokat Package nek nevezzük. Ezek az egységek gyakorlatilag egymástól függetlenül elkészíthetők és lefordíthatók. A modulok hivatkozhatnak egymásra a USE kulcsszó segítségével. A nyelv sajátossága, hogy az egymástól csak néhány ponton eltérő modulokat a GENERIC és NEW kulcssza vak segítségével egymásból származtathatjuk. Ez a tulajdonság már az objektum orientált nyelvek irányába mutat előre. A nyelv előnye, hogy támogatja a multitaskos működést, amely ma már alapvető követelménynek számít. A megírt program áttekinthető, könnyen módosítható, a moduláris felépítés miatt. A nyelv szerteágazó lehetőségei szinte minden területen használhatóvá teszik, ugyanakkor ebben a komplexitásban kereshető a nyelv hibája is. Az ADA egyik gyenge pontja, hogy bonyolult és sajátságos szemantikával rendelkezik, amely más nyelvek ese tén nem jellemző, ezért tanulása elég nehéz feladat. C nyelv A rendszerprogramozás fejlődése során mérföldkőnek tekinthetjük az 1972 ben megjelent C nyelvet. Megalko tója Dennis Ritchie, aki eredetileg a UNIX rendszerek fejlesztőeszközének szánta. Később különleges haté konyságát és sokoldalú felhasználási lehetőségét látva más operációs rendszerekhez kidolgozták a C nyelvű for dítóprogramokat. A nyelv különlegessége, hogy egyesíti magában a hardverközeli programozás és a magasszintű nyelvek elő nyeit, ilyen módon jól kihasználhatjuk a hardver adta lehetőségeket javul a futási idő mégis gyorsan tudunk új programokat írni, mivel logikájában a magas szintű nyelvek formáját követi a C is. A Pascal hoz hasonlóan viszonylag kevés utasítást tartalmaz, a legtöbb műveletet előre definiált függvények se gítségével oldja meg. A C nyelv támogatja az alprogramok készítését, de csak a függvény típusú modulokat is meri. Az eljárásokat visszatérési érték nélküli függvényként definiálhatjuk. Lehetőség van rekurzív alprogra mok készítésére is. A C nyelv nagyon erősen támaszkodik a mutatókra. Előnyös a C programok írása során kihasználni a mutatók adta lehetőségeket, mert programunk ezáltal gyorsabb, hatékonyabb lehet. Típuselőírásai sokkal engedékenyebbek, mint azt a Pascal nyelv esetén tapasztaltuk, bár az automatikus típus deklarációt nem támogatja, a konverziók terén igen nagy szabadságot biztosít a programozónak. A C nyelv utasításai mindössze a strukturált programok készítéséhez szükséges utasításokra korlátozódnak: Összetartozó utasítások (utasításblokk {}) Kétirányú elágazási szerkezet (if else) Esetszétválasztás (switch case ) Ciklusszervező utasítások A C nyelvet 1989 ben fogadta el az Amerikai Szabványügyi Hivatal. Ekkor jelent meg az ANSI C, az első szabványos C fordító. A későbbi változatok ennek lehetőségeire építkeztek. A C nyelvet ma is széles körben használják, első számú alkalmazási területe a rendszerprogramozás. A mai követelményeknek megfelelő C vál tozatok a C++, az objektum orientált lehetőségekkel bővített C nyelv, és a Concurent C, a párhuzamos folya matok programozását segítő eszköz. Objektum orientált programozási nyelvek Az utóbbi években kezdett széleskörűen elterjedni egy új szemléletű programozási technika, az objektum orien tált programozás, amely az elődeinél egyszerűbbé, hatékonyabbá, biztonságosabbá teszi a programkészítési munkát. Az objektum orientált programozási nyelvek absztrakt adattípusokkal és a hozzájuk tartozó előre definiált algo ritmusokkal segítik a programozó munkáját. Az objektum orientált nyelvek az adatokat és az őket kezelő eljá 13

14 rásokat, függvényeket egységbe foglaltan ún. objektumként kezelik. Az objektum orientált programozás lényege, hogy a programozás során felhasznált elemeket a nyelv előre de finiálja, és különböző tulajdonságokkal ruházza fel. Amikor a programozó használni szeretné az egyik elemet, csak a tulajdonságait kell egyéni ízlése illetve a feladatnak megfelelő elvárások szerint megváltoztatnia. Egy egyszerű példán szemléltetve: A nyelvben előre definiált objektum a Kor, amely egy kör rajzolását teszi lehetővé. A Kor objektum: Type Kor=object Szin: Integer; Sugar: Integer; X: Integer; Y: Integer; Procedure Rajzol; End; A Kor objektum felhasználása: Kor.Szin:= Green; Kor.Sugar:= 120; Kor.X:= 200; Kor.Y:= 300; Kor.Rajzol; Ez a programozási technika sokkal közelebb áll az emberi gondolkodáshoz, mint a procedurális programozás. Az objektum orientált programozás elterjedésével sok új nyelv jött létre, amelyek tiszta objektum orientált nyelvek, más technikát egyáltalán nem támogatnak. Sok nyelvet kibővítettek az objektum orientált technika al kalmazásának lehetőségével, ezek az ún. vegyes nyelvek. Tiszta objektum orientált nyelvek SmallTalk A 70 es évek elején fejlesztette ki Adele Coldberg és munkatársa Alan Kay azzal a céllal, hogy egy rugalmas, felhasználóbarát programozási környezetet biztosítson a fejlesztők számára. Manapság is széles körben használt programozási nyelv. Eiffel 1988 ban dolgozta ki a nyelvet Bertold Meyer. Objektum orientált, erősen típusos nyelv. A hordozhatóság ér dekében a megírt programot C nyelvre is le lehet fordítani. A szakemberek szerint az egyik legjobb objektum orientált programozási nyelv. Vegyes nyelvek Turbo Pascal A Turbo Pascal 5.5 verziójától kezdve támogatja az objektumok létrehozásának és kezelésének lehetőségét. A 6.0 verzióba már került egy előre definiált objektumrendszer TVISION is, amely a szöveges felületű prog ramok készítése során használható fel hatékony segédeszközként. Borland C++ A C++ elnevezés a hagyományos C nyelv objektum orientált lehetőségekkel bővített változatát jelenti. A Bor land C verzió már támogatja az objektum orientált technika alkalmazását. Hasonló környezetet és objek tumrendszert biztosít, mint a Turbo Pascal 6.0. Specializált programozási nyelvek Ma már a számítógépet a tudományos és kutatómunka igen sok területén is felhasználják. Ezek a területek olyan speciális igényeket támasztanak a számítógépekkel szemben, amelyek megoldásához hasonlóan speciális eszközökre van szükség. Ezen problémák támogatása érdekében fejlesztették ki a specializált programozási 14

15 nyelveket, amelyek sokszor csak igen szűk problémacsoportok megoldására alkalmasak. Ez mégsem említhető hátrányként, hiszen éppen ezért alkották őket: egy egy probléma megoldásához hatékony segítséget biztosíta nak. Rendszer és fordítóprogramok fejlesztése A programfordítók fejlesztéséhez olyan magasszintű programozási nyelvre van szükség, amely hatékonyan tá mogatja az alacsony szintű programozás és az operatív tár közvetlen kezelését egyaránt, lehetővé teszi a biten kénti műveletek végzését, mégis rendelkezik a magasszintű nyelvek előnyeivel. Ilyen nyelvek: B, C, BCPL, Pascal. Formulakezelő nyelvek Nagy pontosságot igénylő, bonyolult matematikai, műszaki számítások számítógép által történő elvégzéséhez biztosítanak hatékony segítséget ezek a nyelvek. Például: FORMAC, REDUCE, MACSYMA. Szimbólum feldolgozó nyelvek Nagy mennyiségű szöveges információk, hosszú listaadatok értékelésére, elemzésére kidolgozott célnyelvek. Felhasználási területük az információkutatás, a matematikai kutatások. Például: PROLOG, CONVERT, LISP, SNOBOL, COGENT. Szimulációs nyelvek Nagyon sok területen használatos nyelvek, kísérletek, folyamatok eredményeinek előrejelzését segítő eszközök. Például: SIMSCRIPT, SIMULA, GPSS. Adatbázis kezelő nyelvek Adatbázisokban tárolt adatok kezelését segítő programozási nyelvek. Segítségükkel lekérdezhetjük, módosít hatjuk, karbantarthatjuk az adatbázisban tárolt adatokat. Kiterjeszthető programnyelvek A harmadik generációs programozási nyelvek legfejlettebb változatai. A programozási feladat megoldásához a nyelv csak egy minimális bázist definiál előre. A hiányzó eszközöket azonban a programozó maga állíthatja elő a már létező elemek segítségével. Például: LOGO, FORTH. Negyedik generációs programozási nyelvek A XX. század második felében a számítástechnika forradalmi változáson ment keresztül. A Neumann elvek megjelenése és az első memóriában tárolt gépi nyelvű program lefuttatása után alig ötven évvel már informáci ós rendszerek, központilag vezérelt számítógép hálózatok programozása, döntéshozást támogató rendszerek fej lesztése a célunk. Nyilvánvaló, hogy ilyen jellegű munkák elvégzésére a hagyományos programozási nyelvek által biztosított eszközök nem megfelelőek. A hardver eszközök rohamos fejlődésére támaszkodva kezdett ki alakulni a programozás során egy új szemlélet, mely az eddigi alapelvekkel szöges ellentétben állt. A 4 GL nyelvek előnyösen egyesítik a procedurális és a non procedurális nyelvek elemeit, lehetőségeit, kihasz nálva mindkét nyelv előnyeit, és kiküszöbölve a hátrányok jelentős részét. A programok (programrendszerek) tervezése során a programozónak már nem a hogyan kérdésre kell válaszolnia, csak azzal kell törődnie, hogy mit szeretne megvalósítani. A legújabb programozási nyelvek esetében már nem az algoritmust, hanem az el érendő célt kell megfogalmazni, a kód generálását legtöbb esetben a fejlesztő rendszer automatikusan végzi el. Fontos jellemzője a nyelveknek, hogy nemcsak a program szintaktikai helyességét ellenőrzik, hanem megvizs gálják a program hatékonyságát, rendszerbe illeszthetőségét is. Meg kell említenünk a 4 GL nyelvek nyilvánvaló előnyei mellett néhány rossz tulajdonságot is. A program ha tékonyságának növekedésével egyenes arányban nő a program hardverigénye elsősorban memória igénye is, a lefordított program méretéről nem is beszélve. A gyakorlati alkalmazások kb. 25% a fejleszthető optimáli san a 4 GL programozási nyelvek valamelyikével, a maradék 75% esetében továbbra is hatékonyabb eszköznek bizonyulnak a 3 GL nyelvek. A 4 GL nyelvek osztályozása Lekérdező nyelvek Biztosítják az adatbázisok adataihoz történő hozzáférést, akár egyszerű lekérdezésről, akár az adatok módosí 15

16 tásáról, rendezéséről, vagy az adatbázis bővítéséről van szó. Programgenerátorok Lehetővé teszik, hogy a felhasználó egy előre definiált minta alapján egyszerűen és hibátlanul hozzon létre egy harmadik generációs programnyelvi alkalmazást. Egyéb 4 GL nyelvek Ebbe a csoportba sorolhatjuk a döntéstámogató rendszerek fejlesztésére használatos nyelveket, a prototípus nyelveket (modellezést, tervezést segítő nyelvek), és a formális specifikáció nyelveit. Ötödik generációs programozási nyelvek A XX. század második felében a számítástechnika forradalmi változáson ment keresztül. A Neumann elvek megjelenése és az első memóriában tárolt gépi nyelvű program lefuttatása után alig ötven évvel már informáci ós rendszerek, központilag vezérelt számítógép hálózatok programozása, döntéshozást támogató rendszerek fej lesztése a célunk. Nyilvánvaló, hogy ilyen jellegű munkák elvégzésére a hagyományos programozási nyelvek által biztosított eszközök nem megfelelőek. A hardver eszközök rohamos fejlődésére támaszkodva kezdett ki alakulni a programozás során egy új szemlélet, mely az eddigi alapelvekkel szöges ellentétben állt. Párhuzamos programozás Hálózatok programozása Programozási nyelvek osztályzása Felhasználói kör szerint Amatőr nyelvek (Pascal, Logo, Elan, Prolog 1. része, Basic) mérnök, tanár, közgazdász, stb. használja, egyszerű programszerkezet, sok nyelvi elem (a felhasználót így nem kell terhelni az alapeljárások megírásával), sok gépfüggő elem (saját gépen saját célra való felhasználás miatt), interaktivitás (könnyen, gyorsan lehessen kipróbálni, módosítani a programokat, mivel a nemhivatásos programozó több hibát ejt), gyors fejlődés. Professzionális nyelvek (Pascal, Prolog 2. része, Modula 2, Ada) programozó használja, kevés nyelvi elem, szűkebb utasításkészlete (mindent a programozónak kelljen megírni), modularatás (modulokra bonthatóság), hordozhatóság (gépfüggetlenség), viszonylagos stabilitás (nem jó, ha nagy programokat gyakran újra kell írni, viszont jó, ha az újabb vál tozatok felülről kompatibilisek a régivel). Számítási modell szerint Neumann elvű nyelvek A Neumann elvű nyelvek mögé egy Neumann elvű számítógépet képzelünk: címezhető, írható olvasható memória: az adatok és a program a memóriában van, program végrehajtása utasítások szekvenciális végrehajtása, változó fogalmának megjelenése, értékadás, adatok beolvasása, kiírása, memóriacímre való ugrás, el ágazás, ciklusok szervezése, a mai nyelvek többsége ilyen; pl. Fortran, Pascal, Basic stb. Automata elvű nyelvek végrehajtója (elvben) egy automata (ipari robot, festőautomata, lángvágó), 16

17 az automata rendelkezik állapotokkal, s az állapotok közötti átmenetet leíró függvényekkel, egy egy állapot az összes globális "változó" ill. jellemző pillanatnyi értékét tartalmazza; ezek az álla potkomponensek, utasítások: állapotmódosító illetve állapotlekérdező, minden állapotváltozás relatív, hiszen a változás az előző állapothoz képest történt, nincs változó, nincs értékadás (helyette állapotkomponens változtatás van), nincs beolvasás (helyette eljárások paraméterezése, ill. állapotlekérdezés szerepel), nincs kiírás (helyette az eredmény az állapotváltozások nyoma (pl. teknőc rajza)), elágazások, ciklusok paraméter illetve állapotfüggők egyszerűbbek, mint a Neumann elvű nyelvek ben. A ciklus vagy adott lépésszámú ciklus vagy rekurzív eljárás lehet, pl. Logo teknőcgrafika. Funkcionális nyelvek a program egy függvény, a program végrehajtása a függvény kifejtéséből áll, programstrukturálás: függvénykompozíció f ( x ) = g o h ( x ) alternatív függvény f ( x ) = [ g ( x ) ha p ( x ) [h (x) ha nem p (x) rekurzív függvény f ( x ) = [ g ( x ) ha nem p ( x) [ h o f o i (x) ha p (x) nincs memóriacímzés, nincs változó (helyette függvényparaméter van, ez lehet újabb függvény is), nincs értékadás, nincs ciklus, nincs beolvasás (helyette függvényparaméterezés van), nincs kiírás (helyette a kiszámított függvényérték automatikus kijelzése történik), pl. Logo. Logikai nyelvek a program egy logikai formula, a program végrehajtása a logikai függvény kiértékelése, a program eredménye: FALSE vagy TRUE ill. azon paraméterek megadása, melyekre a TRUE teljesül, nincs memória, nincs változó, nincs értékadás, nincs beolvasás (helyette paraméterezés van), nincs kiírás, nincs szekvencia, elágazás, ciklus, őket logikai formulákban szereplő "és", "vagy", "nem" műveletek he lyettesítik. A program struktúrája: f ( x ) ha h ( x ) é s g ( x ) egymás utáni végrehajtás f ( x ) ha h ( x ) vagy g ( x ) alternatív végrehajtás f ( x ) ha g ( x ) vagy i ( x ) é s f ( x ) rekurzív formula pl. Prolog. Felhasználói közelség szerint Gépi kód ez a legalacsonyabb szintű nyelv. Ez az a nyelv, amit a számítógép processzora közvetlenül megért, a gép lehetőségeinek maradéktalan kihasználása (memóriacímek, regiszterek, verem, megszakítások, op.r. változói közvetlenül elérhetők), gépi kódú utasítás (bináris szám). 17

18 Alacsonyszintű nyelv Minden gépi kódú utasításnak megfelel egy alacsonyszintű nyelvi utasítás, amelyet azonban már egy szimbolikus elnevezés takar (ezek állhatnak több gépi utasításból is). Adatokat, adatok helyfoglalását, a programkód memóriába helyezését definiáló utasítások megjelenése. Memóriacímek azonosítóval való ellátása, adatok kezdőcímének elnevezése (a rájuk való hivatkozás a változófogalom első megjelenése). elágazás, ciklus szervezhető, de a nyelvnek nem eleme, kiegészítés: minden lehetőség kihasználható, amit a hardware nyújt, változó = kezdőcím (megjelenik a változó fogalma, de még az adatoknak nincs szerkezetük), azonosító = memória cím neve, utasítás = azonosító, feltételes vezérlésátadás. Visszatérés, általában gyorsabb mint egy magas szintű nyelv, primitívebb, minden gépi utasításhoz nyelvi utasítást rendel. Magasszintű nyelvek magas szintű nyelvek feladatorientált nyelvek, kifejezés. változó. típusfogalom. elágazás. ciklus. eljárás megjelenése, kiegészítés: faladatorientált, változó memóriatartpményt jelöl, típusfogalom, kifejezések, az algoritmusban felhasznált utasítások a nyelv elemi utasításaival kódolhatók, elágazás, ciklus, értékadás, I/O, eljárások = programegységek, paraméterek. Egyéb osztályozások "Compiler" illetve "Interpreter" nyelvek Arra utal, hogy egyes nyelvekhez gyakrabban készítenek interpretert (értelmezőprogramot), míg másokat szinte kizárólag compilerrel (fordítóprogrammal) használnak. Procedurális illetve nem procedurális nyelvek procedurális: a program írásban a megoldó algoritmus leírására törekszik (pl. Neumann elvű illetve automata elvű nyelvek) nem procedurális: a program írásban nem a megoldó algoritmus leírására törekszik; a megoldó algoritmust a nyelv kiértékelési szabálya tartalmazza. (pl. funkcionális és logikai nyelvek) Deklaratív nyelv Olyan nyelv, amelyben csak a specifikációt adjuk meg, s a rendszer ennek alapján automatikusanállít elő meg oldást. (pl. logikai nyelvek) Utasításorientált nyelv Olyan programnyelv, melynek alapelemei utasítások,s a program végrehajtása ezek egymás utáni elvégzéséből áll. (pl. Pascal, Elan) Kifejezésorientált nyelv Olyan programnyelv, melynek alapelemei kifejezések,s a program kifejezések kiértékeléséből áll. Objektum orientált nyelv Olyan programnyelv, mely az objektum orientált programozás eszközeivel rendelkezik. (pl. Delphi) Párhuzamos programnyelv Olyan programnyelv, mely a párhuzamosság kezelésére szolgáló eszközökkel rendelkezik. 18

19 Programozási alapfogalmak Algoritmus Lépések sorozata, amellyel egy feladat kiindulásától a megoldásáig jutunk. Program Az algoritmus megfogalmazása a számítógépek, vagy a fordító programok számára érthető nyelven. Programozó A programozó a matematikushoz hasonlóan formális nyelveket használ az okfejtések (vagy az algoritmusok) leírására. A mérnökhöz hasonlóan terveket gondol ki, az alkotó részekből szerkezeteket állít össze, és értékeli azok teljesítményét. Mint a tudós megfigyeli az összetett rendszerek viselkedését, magyarázatokat vá zol föl, ellenőrzi a jóslatokat. A programozó fő tevékenysége a problémamegoldás. Ez különböző képességeket és ismereteket igényel: egy problémát különböző módokon kell tudnunk meg/újrafogalmazni, innovatív és hatékony megoldásokat kell tudnunk elképzelni, ezeket a megoldásokat világosan és komplett módon kell tudnunk kifejezni. Programozás A számítógép programozása lényegében abból áll, hogy részletesen megmagyarázzuk egy gépnek, (ami nem ért meg, az emberi nyelvet, csupán karaktersorozatok automatikus kezelésére képes) hogy mit kell tennie. A program előre rögzített konvenciók ezek együttesét programozási nyelvnek nevezzünk szigorú betartásá val kódolt utasítások sorozata. A gép rendelkezik egy eljárással ami úgy dekódolja ezeket az utasításokat, hogy a nyelv minden szavához egy pontosan meghatározott akciót rendel. Programozás alatt szűkebb értelemben a kódolást értjük, tágabb értelemben a feladat kigondolásától kezdődően a kész program leírásáig minden lépés ide tartozik. Forrásprogram A programot, ahogyan azt egy szerkesztő programmal (egyfajta specializált szövegszerkesztővel) megírjuk mostantól fogva forrásprogramnak (vagy forráskódnak) nevezzük. Programozási nyelv A programozási nyelv nagyon pontos szabályokhoz rendelt (önkényesen választott) kulcsszavaknak a készlete. Azt írja le, hogyan rakhatjuk össze ezeket a szavakat olyan mondatokká, amiket az interpreter vagy a compi ler a gép nyelvére (bináris számokra) le tud fordítani. A programozás szintjei Gépi kódú A számítógép számára közvetlenül érthető nyelv a gépi kód. A nyelv elemei közvetlenül a processzor számára ismert gépi kódú utasítások. Mind az utasítások, mind az adatok bináris kódúak. A memóriában tárolt adatok el helyezkedésének és helyes felhasználásának összes gondja a programozót terheli. Assembly nyelv A nyelv utasításkészlete szinte teljesen egyezik a gépi kódú programozáséval, de az utasításokat könnyebben megjegyezhető angol nevekkel látták el, valamint az adatokat és memóriacímeket sem kell binárisan megadni, hanem használható a sokkal kényelmesebb hexadecimális számrendszer is. Természetesen az assembly nyelvű programok közvetlenül nem értelmezhetőek a processzor számára, hanem egy fordító program segítségével gé pi kódúvá kell lefordítani ahhoz, hogy futtatható legyen. Magas szintű programozási nyelvek Magasabb szintű utasításkészlet, amely már nem a processzor utasításkészletéhez áll közel, hanem inkább az 19

20 emberi gondolkodáshoz. Az adatok kezelésével kapcsolatos gondok nagy részét átveszi a fordítóprogram. Ezek kel a nyelvekkel fogunk részletesebben foglalkozni. Újabb generációs nyelvek Az emberi gondolkodáshoz még közelebb álló programozási nyelvek. Szintaxis és szemantika leírás Szintaxisnak nevezzük egy programozási nyelven írt program formai helyességére vonatkozó szabályok gyűjte ménye. A szemantika pedig ugyanennek a jelentését, tartalmi helyességét leíró szabályokat tartalmazza. Szintaxisleíró eszközök A szintaxis leírására sokféle eszköz szolgál, ezek közül gyakran használt a BNF (Backus Naur forma), szinta xisgráf, és axiómákkal és következtetési szabályokkal való leírás. BNF metanyelv Nagyon kevés szimbólumot használ. A definiálandó fogalmakat <, > jelek közé kell tennünk, a definiálás jele a ::=, az alternatív definíciókat a jellel választjuk el egymástól, a megismétlendő elemeket pedig a {,} jelek közé tesszük. Példák: <Program> ::= Program: {<Utasítás>} Program vége. <Értékadás> ::= <Változó> := <Kifejezés> <Adat> ::= <Változó> <Konstans> Szintaxisgráf vasútdiagram A szintaxisgráf csomópontjait nyelvi elemek alkotják, s ezek lehetséges sorrendjét az irányított gráf élei jelölik ki. Példák: Program Értékadás Fordítás és értelmezés Ahhoz, hogy egy számítógéppel beszéljünk, olyan fordító rendszereket kell alkalmaznunk, melyek képesek a számunkra érthetőbb kulcsszavakat (rendszerint angol szavakat) alkotó karaktersorozatokat bináris számokká alakítani. Fordításnak nevezzük azt a folyamatot, amikor egy adott nyelven (forrásnyelven) megírt programot egy prog ram (fordítóprogram compiler) lefordít egy másik nyelvre (célnyelvre). A célnyelvi program futtatásához ez után sem a forrásnyelvi programra, sem a fordítóprogramra nincs szükség. Az értelmező (interpreter) a programszöveget nem alakítja át, hanem utasításonként olvassa, elemzi, a a felis mert utasítást azonnal végre is hajtja, majd megkeresi a végrehajtásban következő utasítást. Programkészítés és futtatás menete Interpreteres nyelvek esetén (pl. Basic, script) 1. Program megírása egy programozási nyelven, ez az úgynevezett forrás program. 2. Forrás program futtatása egy futtató program (interpreter) segítségével. 20

21 vagy (pl. JAVA) 1. Program megírása egy programozási nyelven, ez az úgynevezett forrás program. 2. Forrás program lefordítása egy köztes kódra (ezt a fordítót is szokás compiler nek nevezni). 3. Köztes kód futtatása egy futtató program segítségével. Compileres nyelvek esetén (pl. C, C++, Pascal, Delphi) 1. Program megírása egy programozási nyelven, ez az úgynevezett forrás program. 2. Forrás program lefordítása a fordító program segítségével gépi kódú programmá. 3. A gépi kódú program futtatása. A compiler es nyelvek előnye: gyorsabb, hátránya: a lefordított kód csak ugyanolyan architektúrájú gépen futtatható, mint amelyiken fordították. Az interpreter es nyelvek előnye: a program hordozható minden olyan helyre, ahol van interpreter, hátránya: lassabb. Byte kód fordítás Egyes modern nyelvek megpróbálják a két módszert kombinálni, hogy mindegyikből a legjobbat hozzák ki. Ez a helyzet a Python és a Java esetében is. Amikor egy forráskódot adunk át, az először egy gépi kódhoz hasonló közbenső kódot ú.n. bytecode ot hoz létre, amit aztán egy interpreternek ad át végrehajtásra. A számítógép szempontjából a bytecode ot nagyon egyszerű gépi nyelven interpretálni. Ez az interpretáció tehát sokkal gyorsabb lesz, mint egy forráskód interpretációja. 21

22 Ennek a módszernek az előnyei érzékelhetőek: Az, hogy állandóan rendelkezünk egy interpreterrel, lehetővé teszi bármilyen kis programrészlet köz vetlen tesztelését. Egy alkalmazás bármelyik alkotójának helyes működését igazolhatjuk an nak létrehozását követően. A lefordított bytecode interpretációja nem olyan gyors, mint egy igazi bináris kódé, de számos program számára, beleértve a grafikus programokat is, nagyon megfelel. A bytecode portábilis. Ahhoz, hogy egy Python vagy egy Java program különböző gépeken végrehaj tódjon elég ha mindegyik gépen rendelkezésre áll egy adaptált interpreter. Case sensitive, case insensitive nyelvek A case sensitive nyelvek megkülönböztetik a kisbetűket és a nagybetűket, a case insensitive nyelvek nem, azaz mindegy, hogy valamit kisbetűvel vagy nagybetűvel írunk. Megjegyzések A megjegyzéseket a fordító nem veszi figyelembe. Azt a célt szolgálja, hogy a programot olvasó könnyebben eligazodjon a programban, ezzel segítve a kód újrafelhasználását. Megjegyzésekkel szokás magyarázni a fontosabb változók szerepét, a függvények szerepét, hívásának módját, paramétereit, eredményét modul tartalmát, egyes trükkösebb megoldásokat. Kulcsszavak A nyelv rögzített jelentéssel bíró szavai, amelyet más célra nem lehet használni. Programstruktúrák Program A program utasítások olyan sorozata, amely a számítógépen önállóan képes megoldani egy feladatot. A prog ram háttértáron futtatható formában egy fájlban található. Programcsomag Rokon programok halmaza, amelyek egy feladatkör megoldására szolgálnak. Párhuzamos folyamat (taszk) Egyes programok a feladat megoldására olyan programrészeket használnak, amelyek egymással párhuzamosan végrehajthatók, a megoldás során egymással kommunikálnak, működésüket szinkronizálni kell, s meg kell oldani a közös erőforrások megosztását. Ezeket a párhuzamosan működő programrészleteket nevezzük folyamatoknak. Fordítási egység (Modul, unit, szegmens) A program önállóan, a többi résztől függetlenül lefordítható legkisebb nyelvtani egységét nevezzük fordítási egységnek. Ez a fordítóprogram egyszeri végrehajtásával lefordítható. Nem tévesztendő össze azzal, amikor egy fájlban több fordítási egységet helyezünk el, s azokat egyszerre fordítjuk. Export, importlisták Ezek a fordítási egységek olyan részei, amelyek leírják egyrészt, hogy az adott egység mely azonosítóit használhatja más modul, másrészt, hogy ő mely modulokat, azokat, azoknak mely objektumait használja. Nem csak a modulnevet kell megadni, hanem azt is, hogy abból a modulból mire van szükségünk. Programegység Egy részfeladatot megoldó utasítások összefüggő csoportja. A programegység egyben, egységként hajtható végre, a külvilágtól valamilyen mértékben elzárt, azzal változókon, paramétereken keresztül kapcsolatot tartó, lokális típusokkal, változókkal konstansokkal, a blokkstruktúrájú nyelvekben lokális programegységekkel rendelkező utasításcsoport. 22

23 Eljárás, függvény, operátor Gyakorlatilag háromfajta programegységet használunk : az eljárást, a függvényt, valamint a függvény egy speciális fajtáját: az operátort. Az eljárás olyan programegység, amely egy utasítást helyettesíthet a programban. A függvény értékével egy kifejezésben szereplő értéket reprezentálhat. Az unáris vagy bináris operátort szintén kifejezésekben használhatjuk. Ezek a programegységek, az ún. alprogramok paraméterezhetők. Definíciójukban formális paramétereket használunk, a ezeket híváskor feleltetjük meg az aktuális paramétereknek. Deklarációs rész, törzs Egyes programozási nyelvekben önálló programegységként szerepel a típusdefiníció, vagy blokk. A programegység egy (ELAN) vagy két (Pascal) részből áll. A deklarációs rész adatok, típusok, blokkstruktúrá jú nyelvekben ezeken kívül más programegységek definícióit tartalmazza, a törzs pedig végrehajtható utasítá sok sorozatát. Ha e két rész nincs elkülönítve, akkor azt a szabályt kell betartanunk, hogy egy dolog használatát meg kell hogy előzze a definiálása. Néhány nyelvben a programegységek egy harmadik részt is tartalmaznak, a kivételkezelés. Blokkstruktúra Programok programegységeit kétféleképpen helyezhetjük el. Az egyik, egyszerűbb elv szerint a program programegységek sorozata, melyek sorrendje lényegtelen. A Neumann-elvű nyelveknél gyakoribb esetben a programegységek deklarációs részeiben tartalmazhatnak újabb programegységeket. A programegységek egymásba ágyazásával előállt struktúrát hívjuk blokkstruktúrának. Programkészítés elvei Stratégiai elveinek Taktikai elvek Technológiai elvek Technikai elvek Esztétikai ergonómiai elvek Stratégiai elvek Egyik legfontosabb, sokféleképpen alkalmazható elvünk oszd meg és uralkodj elve alapján fogalmazható meg: oszd részekre, majd a részek független megoldásával az egész feladatot könnyebben oldhatjuk meg. Így programunk könnyen kézben tarthatjuk. Lépésenkénti finomítás A feladat megoldását először átfogóan végezzük el, nem törődve a részletekkel, részfeladatra bontjuk. Úgy is mondhatnánk: a feladatot megoldjuk a legfelső szinten. Ezt az eljárást fogjuk követni az egyes részfeladatok megoldásakor is mindaddig, amíg olyan utasítások szintjéig nem érünk, amelyeket gépünk (kódolás után) már végre tud hajtani. (Piramis elv) Pontosan ki kell jelölni, hogy az adott részműveletek milyen adatokat kezel, milyeneket állít elő, és ezeket mi ként kell egymáshoz rendelni. Két azonos szinten definiált részfeladat között biztosítani kell a harmóniát úgy, hogy a végrehajtásban előbb kö vetkező az utána következő adatait szolgáltassa. Program felülről lefelé való kifejtése (top down programozás) A bemeneti adatokból indul ki és a kimeneti adatokat próbálja előállítani. Ez a leggyakrabban használt mód szer, ezt segítik az eljárások, függvények és elemi programozási tételek is. Program alulról felfelé való felépítése (bottom up programozás) A kimeneti adatokból indul ki és próbálja meghatározni az előállításukhoz szükséges bemeneti adatokat és a megfelelő utasítássort. 23

24 Taktikai elvek Milyen elv alapján hajtsuk végre a lépésenkénti finomítást. Párhuzamos finomítás elve A szint összes részfeladatára kell elvégezni a finomítást. Nem szabad előre sietni valamelyik könnyebbnek vélt ágon, mert előfordulhat, hogy munkánk kárba vész. Vissza az ősökhöz elv Erre akkor van szükségünk, amikor körültekintő megfontolásaink ellenére zsákutcába kerülünk. Ekkor vissza kell lépni az előző szinthez (őshöz), és újra végig kell gondolni a részfeladatokra bontást, és tapasztalatainkat. Technológiai elvek Ezek az elvek az algoritmus (és a kód) írására, annak szabályaira vonatkoznak. Algoritmusleírási szabályok Kevés, de egyértelmű szabályt kell kialakítani az algoritmusok leírására. Az adatokat beolvasó és kiíró utasítások az ablak szerepét játsszák a külvilág felől, illetve a program felhasz nálója felé. A program változóinak értékkel való ellátását az értékadó utasítások végzik. A feltételektől függő végrehajtást teszik lehetővé az ún. feltételes utasítások, elágazások. A számítógépre szánt feladatok mindegyike feltételezi bizonyos részfeladatok ismételt elvégzését. A számító gép erősségét, a gyorsaságot éppen a mechanikus ismétlések használják ki a legjobban! Ezek ciklusutasítások segítségével valósulnak meg. A program adott szintjén elemi utasításként felhasznált, meghatározott, de nem finomított részprogramok (eljá rások, függvények, operátorok) beépítését (az ún. eljáráshívást) is meg kell oldanunk nyelvünkben. Természetesen a felhasznált és még hiányzó eljárások finomítása (másként szólva: az eljárás kifejtése) sem hiá nyozhat. Az algoritmusleírás mellett e nyelvek rendelkeznie kell az adatok (konstansok, változók) és típusok leírására szolgáló eszközökkel is. Értelmes sorokra tördelés világos tagolás Kérdés, hogy mit írjunk egy sorba, mit több sorba. Alapelképzelésünk lehetne például az, hogy minden utasítást külön sorba kell tenni. Ezt a következőképpen módosítjuk: kerüljenek egy sorba azok az utasítások, amelyek szervesen összekapcsolhatók, és egy sorba írásukkal a program még áttekinthető marad. Bekezdéses leírás Az algoritmikus gondolatainkat, az algoritmus főbb eseményeit, epizódjait jól láthatóan el kell különíteni a programban. A program teljes levezetése (finomítása) után a program szerkezetének vissza kell tükröznie a szintekre tagozódást: egy szint elemi utasításai a bekezdések azonos szintjeit alkossák! Egyes nyelvi szövegszerkesztők automatikusan a bekezdéses leírásnak megfelelően tördelik programunkat. Összetett struktúrák zárójelezése Az algoritmusokban szereplő elágazások, ciklusok, eljárások, valamint az összetett adatstruktúrák úgy ismerhe tők fel könnyen, ha nemcsak az elejüket jelzi valamilyen nyelvi elem, hanem a végüket is egyértelműen rögzít jük. A beszédes azonosítók elve A konstansoknak, változóknak, típusoknak, eljárásoknak, függvényeknek, operátoroknak olyan nevet érdemes adni, ami utal arra, hogy mire használjuk. Ez kizárja az azonosítók keveredését: hiszen a név sugallja funkciót, az algoritmusban betöltött szerepet. Nagy segítséget nyújt a kódoláskor is, például lehetővé teszi, hogy minimá lis számú változót rendeljünk az adatokhoz, hiszen a munkaváltozókhoz azonos neveket is rendelhetünk. Nem minden esetben a hosszú azonosítók a beszédesek, például ha egy fizikai képlettel (E=m*g*h) dolgozunk, akkor éppen ezek az egybetűs jelölések a beszédesek, ha pedig mátrixösszeadásra definiálunk egy operátort, ak kor azt célszerű a + jellel jelölni. 24

25 Technikai elvek A program kódjával kapcsolatosak. Inkább úgy mondhatjuk, hogy az előzőek a program megírásához szükségesek, ez utóbbiak pedig a program használhatóságához elengedhetetlenek. Ilyen értelemben beszélhetünk a csak helyes programról, amely a feladat logikája szempontjából tökéletes, és a jó programról, amely ezen túl elő is segíti saját felhasználását. Barátságosság, udvariasság Az udvarias program bemutatkozással kezdi (tájékoztató), és ezzel tudatja a felhasználójával képességeit, szol gáltatásait, használatának mikéntjét. Az udvariasság másik fontos megnyilvánulása, hogy a program futása so rán megjelenő kérdések bárki számára azaz a nem informatikus szakemberek számára is érthetők, és a vála szok a lehető legegyszerűbben megadhatók legyenek. Biztonságosság A bolondbiztos program az, amit a kísérletezni vágyó vagy éppen balszerencsés felhasználó sem képes ellen őrizetlen vágányokra terelni azáltal, hogy nem a megfelelő módon, vagy nem a megfelelő pillanatban válaszol a feltett kérdésére. Ennek érdekében a program kritikus pontjait, azaz ahol a felhasználó közvetlenül avatkozik be a program további menetébe, nagy odafigyeléssel kell megírni. Az esetleges hibalehetőségekre fel kell készíteni a programot úgy, hogy a felhasználónak lehetősége legyen a helyesbítésre is. (Itt használjuk ki a specifikáció előfeltétel részében leírtakat.) Nem támaszkodhatunk a számítógép, illetve az értelmező vagy fordítóprogram eleve meglévő hibajelzéseire. Ezek ugyanis arra valók, hogy segítségükkel felderíthessük és kijavíthassuk az esetleges programhibákat, tehát a program írója, nem pedig a használója számára készültek. Jól olvasható program A program módosításakor, továbbfejlesztésekor óriási előnyt jelent, ha nem kell a programunk minden mellé kes vonását újra feltérképezni a megértéshez, hanem a lényeges tulajdonságai a program megfelelő helyén könnyen kiolvasható formában megtalálhatók, és így biztos kézzel nyúlhatunk bele a program legérzékenyebb részeibe is. Már két idevágó elvet is említettünk: a bekezdéses leírás és az összetett utasítások zárójelezése elveket Ezt kiegészíthetjük a kódoláskor különösen nagy jelentőségűvé váló jó magyarázatok (kommentek) elvével. A programozási nyelvre való áttéréskor ugyanis a programozási nyelv kötöttségei miatt sok, az algoritmust nagyban jellemző tulajdonság elveszne, ha ezeket az információkat nem őriznénk meg egy egy jól megfogal mazott megjegyzés formájában. A (jól) dokumentált program Sokszor nincs lehetőség a program méretére rótt korlátozások miatt arra, hogy az előző elvet maradéktala nul megvalósíthassuk; ekkor le kell írni a program fontos vonásait: az algoritmusát (felépítését), a változóit és ezek szerepét, értelmezését, értéktartományát, hatáskörét stb., a kódolásnál követett szabályokat (a leíró és a programozási nyelv utasításainak, illetve változóinak megfeleltetését). Ezeket a dokumentációban is rögzíteni kell, amelyben ezen kívül még foglalkozni kell a használat mikéntjével és az esetleges, előre látható fejlesztési lehetőségekkel is. Esztétikai ergonómiai elvek A program emberközelségéről van szó. Nagy gondot kell fordítani a program által megjelenített információk külalakjára. Ide nemcsak az eredmény jellegű kiírandók tartoznak, hanem például a tájékoztató, a felhasználó val való párbeszéd módja is. Lapkezelési technika A kiírandó szövegek, adatok logikai egységekre bontva jól különüljenek el, egyszerre csak annyi és olyan ütemezésben, amennyit és ahogy a felhasználó be tud fogadni. Ennek megvalósítására alkalmazzák a lapkezelés technikáját. Egyszerre egy képernyőlapnyi információt jelenítünk meg, és a felhasználónak lehetősége van lapozásra, példá ul egy adott billentyű lenyomásával jelzi a gépnek: Elolvastam! Lapozhatsz! (Többek között ennek megvaló sítására használható a Várj, amíg szükséges utasítás.) Nem szerencsés ez esetben az adott ideig történő vára kozás gondoljunk a különböző olvasási sebességű felhasználókra! 25

26 Nyomtató esetén e várakozásra nincs szükség, viszont újdonságként felmerülhet a lapszámozás, illetve a fejléc vagy lábléc írása. Képernyőkezelés esetén is lehetőséget kell teremtenünk arra, hogy az aktuális képernyőtartalmat kinyomtathas suk. Ügyelni kell a képernyőlap arányos kitöltésére, és jó, ha az egy lapon belül szereplő, logikailag szorosan össze nem tartozó információk egymástól elkülönülnek. Az elkülönítés megoldható üres sorok beiktatásával, az egyes részek szakaszokkal való elkülönítésével, illetve bekeretezésével. A mondanivalónk legfontosabb elemeit a gép adta lehetőségek figyelembevételével kiemeljük (inverz be tűkkel, vagy bekeretezve, vagy más színű háttérrel, illetve betűkkel stb.). Menütechnika A lapkezeléssel szorosan összefüggő módszer, amely a felhasználóval való párbeszéd elegáns megszervezésére alkalmas. Általában bonyolult szolgáltatásokkal rendelkező programoknál használatos, amelyből a felhasználó akár egy menüből kiválaszthatja a számára szükséges lehetőséget. Minden egyes válaszával (válaszcsoporttal) a kérdések egy nagy hányadát kizárja, ezeket a számítógépnek fel sem kell tennie, megkímélve a felhasználót a fölösleges válaszadásoktól (hierarchikus menürendszer). A menü egy lap (vagy ablak), amelyen megjelennek a választási lehetőségek; közülük sorszámmal (vagy kezdőbetűvel), illetve rámutatással (kurzormozgató billentyűk vagy egér segítségével) választhatunk. A program főmenüjében célszerűen szerepel egy Munka befejezése menüpont, a többi menüpont végrehajtása után pedig újra e főmenü jelenik meg. Az egyes almenük hasonló elven épülhetnek fel, de ezekben a befejezés helyett a Vissza az előző menühöz pont választható. Ikontechnika A szöveges menüknél esetenként gyorsabban felismerhetők az egyes választási lehetőségek, ha azokat kicsi jel lemző ábrával, ún. ikonnal jelenítjük meg; közülük rámutatással (kurzormozgató billentyűk vagy egér segítsé gével) választhatunk. Ez a technika azonban könnyen veszélyessé válhat: a túl sok és túl kicsi ikon a képet áttekinthetetlenné teheti. Értelmezési tartomány kijelzése A kérdéseknél nagyon sokszor épp az okoz bizonytalanságot, hogy a felhasználónak fogalma sincs arról, hogy az adatot milyen mértékegységben kell megadni. Ezért a kérdés szövege mellett célszerű közölni az adat mér tékegységét, sőt ha nem magától értetődő, akkor még az értéktartományt is. Így elkerülhető, hogy például a program egy szöget radiánban vár, a gyanútlan felhasználó pedig a legnagyobb természetességgel fokban adja meg az értéket. Az ilyesmiből származó hibát nyilván nem kell ecsetelnünk. Fontos adatok kiemelése Nemcsak az információk könnyebb megértése szempontjából van jelentősége, hanem hasznos a program álla potának, meghatározó paramétereinek azonnali visszajelzésekor is. Például amikor a számítógép egy hosszadalmas számítást végez, vagy bármilyen időigényes tevékenységbe fog, akkor ne maradjon el időnként egy egy kiírás, ami értesíti a felhasználót, hogy mely tevékenységgel foglalkozik éppen a program, és hogy még kis türelmet kér. Látványos lehet ilyen esetekben közölni azt esetleg grafikus formában is, hogy a feldolgozás hány százalékánál tart éppen a program. Tördelés A legelemibb elvárás a képernyőn megjelenő szövegekkel szemben, hogy a sorok/szavak tördelése a helyesírás szabályainak megfeleljen. Ne sajnálja a programozó a fáradságot mondanivalójának gördülékeny megfogalmazására, szép elhelyezésére, hiszen csak ily módon kaphat mindenki számára kellemes programot! Következetesség A következetes beolvasási és kiírási szokások is fontosak. Tartsunk mértékletességet a beolvasási módszerek változatosságában. Nem díjazzák a felhasználók kiterjedt programozási ismereteinket, ha a választ hol ENTERrel lezárva, hol anélkül várja a program. Hasonló probléma az IGEN-NEM választ igénylő kérdések sokféle feldolgozási lehetősége, válasszunk egyfajtát, és ahhoz ragaszkodjunk. Ha lehetőségünk van rá, akkor a lapkezelési technikához kapcsolódva az azonos jellegű kérdések, illetve eredményadatok a lapok azonos helyein jelenjenek meg. Hibajelzés követelményei A hibák kézben tartásának szükségességéről már volt szó, de a hibák jelzésének mikéntje is jellemzi a progra26

27 mot. Igyekezni kell a hibajelzés legmegfelelőbb módjának kiválasztására. Ehhez a következő szempontokat érdemes megfontolni: A hibajelzés ideje. Hibát akkor kell jelezni, amikor bekövetkezett, nem pedig valamely következményekor! Tipikusan bosszantó lehet több száz adat beolvasása után olyan üzenetet látni, hogy kezdjük elölről a begépelést, mert a legelső rossz volt. A hibajelzés látványkörnyezete. Ha a kezelői hiba javítása után folytatható a végrehajtás, akkor a képernyőlátványt vissza kell-e, illetve vissza lehet-e állítani? A hibajelzés időtartama. Mindig a felhasználó dönthessen a továbbhaladásról! Kerüljük az adott időtartamig megjelenő hibajelzéseket! A felhasználó ugyanis lehet lassúbb vagy gyorsabb, esetleg éppen nem a képernyőre figyel, és így elmulaszthatja a hibajelzést. A hibajelzés mozgósító ereje. Biztosan észlelhető legyen, érthető legyen, azaz ne legyen túl rövid csak a program írója ismeri a megfejtést, esetleg külön búvárkodást igényel, túl hosszú az ember az ilyenkor természetes türelmetlensége miatt csak hevenyészve képes végigszaladni a leírt regényen, a várható felhasználói számára érthető szakkifejezéseket tartalmazzon. Felesleges azonban abban az esetben külön hibajelzés szöveget kiírni, amikor a kérdés szövegéből egyértelmű, hogy a felhasználó mit rontott el. Ekkor elég például egy hangjelzés, majd a kérdés újra feltevése. Naplózás A program futása során több olyan esemény következhet be, amelyeket jó feljegyezni a későbbi esetleges feldolgozás érdekében. A felhasználó nem biztos, hogy megteszi ezeket. Ennek megoldására szolgál az ilyen események automatikus fájlba írása, a naplózás. Ez többnyire egy egyszerű szerkezetű szöveges fájl, amit a használó könnyen (egy igénytelen szövegszerkesztővel is) képes megjeleníteni, nyomtatni. Funkcióbillentyűk Érdemes lehet egyes funkciókhoz, funkciócsoportokhoz egy-egy billentyűt hozzárendelni, és annak bármikori lenyomása a megfelelő funkciók végrehajtását jelenti. Például szimulációs programokban gyakran találkozunk olyan funkcióbillentyűkkel, amelyek a szimuláció leállítására, újra paraméterezésére, megjelenítési módjának változtatására, részleges összesítések elkészítésére stb. vonatkoznak. Segítség Egy tipikus funkcióbillentyű a segítség (HELP=SÚGÓ) billentyű. Ennek lenyomása a futás bármely pillanatában a program aktuális állapotáról szükséges tudnivalók kiírását eredményezi. Ennek egy hasznos formája a menüben mozgás alatti segítség, amely az aktuális menüpont részletes leírását adja a felhasználó kívánságára Ablaktechnika A homogén képernyő helyett célszerű olyan lapokat, ún. ablakokat használni, amelyek a képernyő elkülönített részein jelennek meg. Egy ablak mindig egy keret, és egy a belsejében levő tartalom. Az ablak kiírásakor a képernyőn alatta lévő részt eltakarja, és levételekor újra megjelenik az eltakart rész. Ablakokat használhatunk a segítségszöveg megjelenítésére, hibajelzésre, menük kezelésére, a program állapotának kijelzésére stb. Programkészítés lépései Feladat meghatározása (specifikáció) Algoritmus készítése Kódolás Tesztelés, hibakeresés, javítás Hatékonyságvizsgálat Dokumentálás Feladat meghatározása (specifikáció) A feladat lehető legpontosabb, rövid, egyértelmű írásos megfogalmazása. A program helyes működéséhez 27

28 szükséges körülmények megfogalmazása. Specifikáció tartalmazza a következőket A specifikációnak tartalmaznia kell a bemenő és a kimenő adatok leírását, azok értékhalmazát is meg kell ad nunk, tartalmaznia kell a feladatban használt fogalmak definícióját, valamint az eredmény kiszámítási szabá lyát. Itt lehetne megadni a bemenő adatokra vonatkozó összefüggéseket is. A bemenő, illetve a kimenő adatokra kirótt feltételeket nevezzük előfeltételnek, illetve utófeltételnek. Az előfeltétel nagyon sokszor egy azonosan igaz állítás, azaz a bemenő adatok értékhalmazát semmilyen külön feltétellel nem szorítjuk meg. 1. példa: Feladat: Valaki nyissa ki az ablakot! Bemenet: ablak, valaki (pl. Géza), ablaknyitó tevékenység Előfeltétel: csukva legyen az ablak Kimenet: ablak Utófeltétel: nyitva legyen az ablak 2. példa: Feladat: Add meg az osztályból a 10. legnagyobb emberkét! Bemenet: osztály, magasságok, kiválasztási módszer Előfeltétel: legalább 10 fő legyen az osztály, legyenek csökkenő sorba rendezve Kimenet: egy emberke Utófeltétel: előtte 9 ember legyen Feladatok 1. Feladat: Valaki adja meg az osztályból magasság szempontjából a középső embert! Bemenet: osztály, magasságok, kiválasztási módszer Előfeltétel: legyenek növekvő sorba rendezve Kimenet: egy vagy kettő emberke Utófeltétel: előtte és utána is ugyanannyi emberke legyen 2. Feladat: Kerüljön fel a táblára egy angol szó! Bemenet: tábla, valaki (pl. Géza), táblára írás módszere Előfeltétel: valaki (pl. Géza) tudjon egy angol szót Kimenet: tábla Utófeltétel: táblán legyen egy angol szó Algoritmuskészítés Algoritmus Az algoritmus olyan pontos elírás, amely megmondja, hogy milyen műveleteket kell meghatározott sorrendben elvégezni, hogy megoldjuk a problémát. Az algoritmus olyan pontos elírás, amely megmondja, hogy milyen műveleteket kell meghatározott sorrendben elvégezni, hogy megoldjuk a problémát. Algoritmussal szemben támasztott követelmények Legyen időben és lépésszámban véges. Legyen egyértelmű: ugyanazon bemenet adatokra minden esetben ugyanazt az eredményt szolgáltassa. Legyen általános: ne csak egy konkrét feladatot oldjon meg, hanem lehetőleg minél szélesebb problémaosztályt! (Pl. ne csak egy konkrét másodfokú egyenletet oldjon meg, hanem bármelyiket) Algoritmikus elemek program, értékadó utasítás, 28

29 beolvasó utasítás, kiíró utasítás, megjegyzések, utasításblokk (szekvencia), elágazások (szelekció), ciklusok (iteráció). Program A program minden esetben utasítások sorozata. Program: utasítás Program vége. Értékadó utasítás Változók legtöbbször értékadó utasítással kapnak értéket. Az értékadás jel: :=, a bal oldalán a célként megje lölt változó, jobb oldalon pedig a kiszámítandó kifejezés, szám szerepel. azonosító := kifejezés pl. a:=12 Az azonosító tetszőleges objektum neve lehet, a kifejezés pedig a matematikában és más tudományokban hasz nált operátorokat, függvényeket, konstansokat tartalmazhat. Beolvasó utasítás Tetszőleges adat beolvasására szolgál a felhasználó által kezelt perifériáról (billentyűzet). Mivel a felhasználó nem része a programnak, ezért az általa beírt adatok és a program által várt paraméterek típusát, értékhalmazát ellenőrizni kell. Az adatokat karakteresen kell megadni, és beolvasáskor a megfelelő változó típusa szerinti automatikus konverzió történik. Be: azonosítók [feltételek] A feltételek elmaradhatnak, ha a beolvasandó értékekre semmilyen előfeltevésünk nincs. Kiíró utasítás A felhasználó által figyelt perifériára helyezi el az adatokat karakteresen. Ki: kifejezések [formátum megkötés] Ha a kiírás formátumára van valamilyen speciális megkötésünk, akkor az itt szerepelhet, illetve a legtöbb ilyet majd a kódolásnál kell megfontolni. Megjegyzések Az algoritmusban elhelyezhetünk magyarázó szövegeket, a program állapotára vonatkozó állításokat, bármit, ami az olvashatóságot növeli, a későbbi munkánkat megkönnyítheti. [magyarázó szöveg] Utasításblokk szekvencia A szekvenciát alkotó utasítások a megadás (leírás) sorrendjében végrehajtandók. Utasítás1 Utasítás2... Pl.: Kelj fel! Moss arcot! Fésülködj meg 29

30 Elágazás szelekció Két (vagy több) műveletcsoport közül csak az egyiket kell végrehajtani. A döntés mindig valamilyen logikai feltételtől függenek, és annak ismeretében egyértelmű a döntés. Egyszerű elágazás Egy utasításblokkból áll. Az utasításblokk a feltételtől függően vagy végrehajtásra kerül, vagy nem. Ha logikai kifejezés akkor utasítássor Összetett elágazás Két utasításblokkból álló A két utasításblokk közül a feltételtől függően pontosan az egyik utasításblokk hajtódik végre. Ha logikai kifejezés akkor utasítássor különben utasítássor Összetett elágazás Több utasításblokkból álló A több utasításblokk közül legfeljebb az egyik kerül végrehajtásra elképzelhető, hogy egyik feltétel sem telje sül. Ekkor ha van KÜLÖNBEN ág, akkor az hajtódik végre ha nincs KÜLÖNBEN ág, akkor egyik blokk sem hajtódik végre ha több feltétel is teljesül, akkor sorrendben csak az első hajtódik végre Ha logikai kifejezés akkor utasítássor különben ha logikai kifejezés akkor utasítássor különben utasítássor Elágazás feltétel_1 akkor utasítássor_1 feltétel_2 akkor utasítássor_2 feltétel_n akkor utasítássor_n egyéb esetben utasítássor_n+1 Elágazás vége. Ciklus iteráció Egy feltételtől függően egy adott utasításblokk többszöri ismételt végrehajtását jelenti. Az utasításblokkot cik lusmagnak, a feltételt ciklus vezérlő feltételnek nevezzük. Elöltesztelős ciklus Feltétel előbb értékelődik ki, majd megfelelő esetben végrehajtásra kerül a ciklusmag előbb tesztel, aztán ciklusmag. Ciklus amíg logikai kifejezés utasítássor Ciklus vége Hátultesztelős ciklus A ciklusmag végrehajtódik, majd kiértékelődik a ciklus vezérlő feltétel, és megfelelő esetben újra végrehajtásra kerül a ciklusmag. Egyszer mindenképpen lefut a ciklus. ciklus mag, majd tesztelés 30

31 Ciklus utasítássor amíg feltétel Ciklus vége Számlálós/Növekményes ciklus A ciklusmag utasításai a fejrészben megadott számszor hajtódnak végre, megadott lépésenként. Ciklus cv=k tól L ig utasítássor Ciklus vége. Eljárás, függvények, operátor Programjainkat célszerű részfeladatokra bontani. Az olyan részfeladatokat megoldó részprogramokat, amelyek valamit csinálnak, nevezzük eljárásoknak. Az eljárások egyik fontos szerepe az absztrakció támogatása. Az eljárás formailag ugyanúgy néz ki mint a (fő)program. Használata egyszerűen a nevének a leírásával történik, önálló utasításnak számít. Eljárás Eljárásnév: utasítássor Eljárás vége. Az eljárások paraméterezhetőek, az eljáráson belül használt paramétereket formális paramétereknek, az eljárás hívásánál is fel kell sorolni, itt aktuális paramétereknek nevezzük. A paramétereket megkülönböztetjük még bemenő (amiből az eljárás számol valamit) és kimenő (amit ered ményül ad az eljárás). Egy másik csoportosításban a paraméter értéke az eljárásban vagy megváltozik (változó paraméter), vagy pedig nem (konstans). Eljárás Eljárásnév(formális paraméterek): utasítássor Eljárás vége. Eljárásnév(aktuális paraméterek) Az eljárás mellet a másik absztrakciós eszköz függvény. Definiálása hasonló az eljáráshoz, használata formai lag ugyanaz, csak nem önálló utasításként, hanem kifejezésben szerepelhet. Függvény Függvénynév(formális paraméterek): függvényérték típusa utasítássor Függvénynév:=kifejezés Függvény vége. Vannak speciális függvények, amelyeket a többiektől eltérő módon használunk, jelüket nem az argumentumuk elé, hanem argumentumaik közé írjuk, ezeket operátoroknak vagy műveleteknek nevezzük. Művelet Operátornév(formális paraméterek): értékének típusa utasítássor Operátornév:=érték Művelet vége....aktuális paraméter_1 Operátornév aktuális paraméter_2 31

32 Műveletek csoportosítása Elemi műveletek Azok a tevékenységek, amelyek nem igényelnek magyarázatot, azonnal végrehajthatók. Ezen műveleteket a végrehajtó (a számítógép) ismeri, és azokat végre tudja hajtani. Elemi utasítások: értékadás, függvényhívás, beolvasás, kiíratás. Összetett műveletek Azok a tevékenységek, amelyek elemi tevékenységekből épülnek föl, tartalmukat mindig meg kell magyarázni, maguk is egyszerűbb algoritmusokból épülnek föl. Ezen tevékenységeket a végrehajtó (a számítógép) nem is meri, azok további magyarázatra várnak, ki kell bontani őket. Összetett utasítások: utasítás blokk (több utasítás egyben), elágazások: döntési szerkezetek, ciklusok: ismétlési szerkezetek. Algoritmus leíróeszközök Néhány ismertebb algoritmus leíróeszköz: folyamatábra (blokkdiagram), struktogram, Jackson módszer, mondatszerű leírás (pszeudokód). Folyamatábra (blokkdiagram) Az egyik legkorábban kialakult megadási mód. Alapjeleit maga Neumann János dolgozta ki. A nyilakkal jelöl jük a végrehajtási sorrendet. Téglalap: értékadó utasítás, eljárások, Rombusz vagy hatszög: az egy vagy többágú kiválasztás, Paralelogramma: az adatáramlás, Kör: a vezérlő utasítások Az ismétlési szerkezeteket elrejtve tartalmazza az ábra. 32

33 5. Ciklusok: 33

34 34

35 Struktogram Gépfüggetlen, nyelv független algoritmus leíró nyelv. Az egyes szerkezeti elemeket különböző téglalapba fog lalható ábrákkal jelöljük. A szerkezetek egymásba ágyazhatók, de vonalaik nem keresztezhetik egymást. A fo lyamatábra hibáit próbálja meg kiküszöbölni ezzel. Előny: a program gráfot élek nélkül ábrázolja, egyetlen alapelem marad a téglalap. Hátrány: rajzossága miatt terjedelmes nehezen javítható nehezen olvasható 35

36 Jackson diagram Szekvencia esetén az utasításokat balról jobbra haladva kell végrehajtani, a kétféle elágazásnál az igaz feltételű, jobb felső sarkában kis karikával (o) jelölt téglalap tartalmát, ciklusnál pedig mindaddig, amíg a feltétel teljesül, a jobb felső sarkában csillaggal (*) jelöltét. Az új eszköz egyértelmű előnye az algoritmus és adatleírás egységessége, áttekinthetősége azonban az eddigi eknél is rosszabb. A szekvenciát itt azonnal, mint sok utasítás szekvenciáját definiáltuk, a többi alapelem a szo kásossal megegyező. 36

37 Mondatszerű leírás Az anyanyelvi megfogalmazáshoz hasonló, de annál tömörebb leírási mód. Az élőnyelv pontatlanságait próbál juk vele kizárni, de még egyszerűen értelmezhető marad. 1. Értékadó utasítás változó:=kifejezés Az utasítás hatására a változó felveszi a kifejezés aktuális értékét. 2. Beolvasó utasítás BE: változók [az adatokkal szemben állított követelmények] Kiírató utasítás KI: kifejezések [a kiírás formájára vonatkozó követelmények] 3. Utasítás sorozat: Egymás alá írással adjuk meg az egymás után végrehajtandó utasításokat 4. Elágazás Egyszerű: HA logikai kifejezés AKKOR utasítások Összetett: HA logikai kifejezés AKKOR utasítások KÜLÖNBEN utasítások ELÁGAZÁS VÉGE. HA logikai kifejezés AKKOR utasítások KÜLÖNBEN HA logikai kifejezés AKKOR utasítások KÜLÖNBEN utasítások ELÁGAZÁS VÉGE. 37

38 ELÁGAZÁS feltétel_1 AKKOR utasítássor_1 feltétel_2 AKKOR utasítássor_2 feltétel_n AKKOR utasítássor_n EGYÉB ESETBEN utasítássor_n+1 ELÁGAZÁS VÉGE. 5. Ciklusok Elöltesztelős CIKLUS AMÍG logikai kifejezés utasítássor CIKLUS VÉGE Hátultesztelős CIKLUS utasítássor AMÍG feltétel CIKLUS VÉGE Számlálós CIKLUS cv=k tól L ig utasítássor CIKLUS VÉGE. 6. Eljárás vagy függvény megadás: ELJÁRÁS eljárás_neve (paraméterek) utasítások ELJÁRÁS VÉGE Az eljárás vagy függvény hívása nevének és paramétereinek leírásával történik meg. A program egy kitüntetett szerepű eljárás (vagy függvény), neve meghatározott: PROGRAM neve: utasítás sorozat PROGRAM VÉGE. FÜGGVÉNY Függvénynév(formális paraméterek): függvényérték típusa utasítássor Függvénynév:=kifejezés FÜGGVÉNY VÉGE. Kódolás A kész terveket egy választott programozási nyelven kódoljuk. Vannak olyan szoftverek, amelyek a kódolást a terv alapján automatikusan elvégzik. Az elkészült forráskód olyan, mint egy épület esetében a tervrajz. A for ráskódból egy fordítóprogram hozza létre a futtatható gépi kódú programot. Tesztelés, hibakeresés, javítás 38

39 Tesztelés: Minden program hibás. Az elkészült programot minimum két szempontból alaposan elemezni kell. Minden esetben helyesen működik e? Hatékony e? A hatékonyság három fő mérőszáma a tárhelyhasználat, a sebesség és a bonyolultság. Szinte lehetetlen minden hibát biztosan javítani, ezért a szoftverfejlesztés egyik központi kérdése a hibakeresés hibajavítás ciklus szerve zése. Hibajavítás: A felismert hibák kijavításához új specifikáció, új terv és újrakódolás lehet szükséges. A programtesztelés módszereit két csoportba oszthatjuk, aszerint, hogy a tesztelés során végrehajtjuk e a prog ramot vagy nem. Ha csak a program kódját vizsgáljuk, akkor statikus, ha a programot végre is hajtjuk a teszte lés során, akkor dinamikus tesztelésről beszélünk. Statikus tesztelési módszerek kódellenőrzés, formai ellenőrzés, tartalmi ellenőrzés, ellentmondás keresés, felhasználatlan objektumok, felhasználatlan változóérték, érték nélküli változó, végtelen ciklus, stb. Statikus (számítógép nélküli algoritmus, ill. forrásellenőrzés) 1. Szemantikai hiba: logikátlan lépések 2. Szintaktikai hiba: nem helyesen lett beírva a programba. Dinamikus (lefuttatjuk a programot) Hibák észlelése (mi a hiba?) Nem indul el a program, Nem áll le a program, Megszakad a programfutás, Rossz eredményt ír ki, Nem ír ki semmit, Hibakeresés A hibakeresési módszerek kétféle kérdésre adhatnak választ: A bemenetnek mi az a része, amire hibásan működik a program? Hol található a programban a hibát okozó utasítás? Mire kell kicserélni a hibás részt, hogy a hibát megszüntessük? Hibakeresési eszközök kiírás: a program bizonyos helyeire elhelyezünk tesztkiírásokat. nyomkövetés: végrehajtott utasítások követése a programban, futás során az eredmény képernyő mellett a programszöveget is látnunk kell. A programszövegből éppen végre hajtott utasítást látjuk, vagy a programszövegben mutatja egy mutató az aktuális utasítást. adatnyomkövetés: nyomkövetés speciális esete. Akkor kapunk a képernyőn üzenetet, ha kijelölt változó(ka)t valami használja, módosítja. töréspontok elhelyezése: a töréspontok a program olyan utasításai, aminél végrehajtáskor meg kell állnia. A felhasználó információt szerezhet a program állapotáról és folytathatja a végrehajtást. lépésenkénti végrehajtás: olyan eszköz, amely a program minden utasítására egy törés pontot definiál. Tipikus hibák 39

40 A hibakeresést nagyban megkönnyíti az, ha tudjuk, hogy mire figyeljünk. Szép számmal vannak olyan hibák, amelyeket sokan, sokszor követnek el. A hibakeresés első lépése lehet e tipikus hibák megvizsgálása. Ebben a fejezetben ezeket soroljuk fel vázlatszerűen. Gépelési hibák 0 számjegy és O betű keverése. Alapszavak különírása. Változónevek és alapszavak egybeírása. Elválasztójel hiánya vagy rossz helyre tevése vagy keverése (,;:). Sorokra tagolási hiba. Elágazásszervezési hibák Elágazás ágainak felcserélése. Sokirányú elágazás hibás feltételű kétirányúvá alakítása. Sokirányú elágazás nem létező egyéb ággal. Elágazáslezárási hiba (nincs, vagy rossz helyen van). Ciklusszervezési hibák Kezdő és lezáró utasítások rossz helyen vannak. Hibás ciklushatárok, lépésköz. 0 vagy nagyon kis valós szám lépésközű ciklus. Számlálós ciklus ciklusmagja akkor is lefut egyszer, ha nem kell. Kilépési feltételben szereplő változónak az első belépéskor még nincs értéke. Ciklusváltozó nem változtatása feltételes ciklusnál. Ciklusváltozó változtatása számlálós ciklusnál. Bemeneti adatok hibái Hibás típusú bemenő adat. Kevesebb adat beolvasása, mint amit a program vár. Több adat beolvasása, mint amit a program vár. Nem megengedett típusú változó beolvasása. Kimeneti adatok hibái Hibás típusú kimenő adat. Kép utolsó sorába írás soremeléssel a kép elcsúszik. Kép jobb alsó pontjába írás a kép elcsúszik. Fájlok hibái Nem létező fájl megnyitása. A fájl nem ott van, ahol keressük. Nem adtuk meg a fájlnévben a kiegészítőt. Nem azonos a fájl szerkezete azzal, amit a program vár. Hibás fájlvége kezelés. Írásvédett fájlba írás. Változókkal kapcsolatos hibák Hatásköri hibák Láthatósági hibák Kezdőérték nélküli változó használata (a program előszörre, illetve másodszorra különbözőképpen fut hat) Konstans megváltoztatása Ciklusváltozó használata a cikluson kívül 40

41 Kifejezések hibái Típuskeveredés. Túlcsordulás vagy alul csordulás (emiatt asszociativitási, disztributivitási hibák). Hibás zárójelezés. Nullával osztás, négyzetgyök, logaritmus negatív számból. Kerekítési hiba. Szimmetrikus logikai műveletek miatti hibák. Tömbindexhatár hibák, memóriaméret hibák, indexek felcserélése. Logikai formulák tagadásában az ÉS és a VAGY műveletek hibás tagadása. Eljárások hibái Aktuális paraméterek száma nem megfelelő. Aktuális paraméterek típusa nem megfelelő. Aktuális paraméterek sorrendje nem megfelelő. A függvényérték típusa nem megfelelő. Nincs függvényérték visszaadás a függvénydefinícióban vagy valamelyik ágán. Érték szerinti paraméter megváltoztatása nem jut vissza a hívóhoz. Mellékhatások problémái. Grafikai hibák Ablakrelativitás figyelembe nem vétele. Szövegvágás furcsaságai (teljes szövegre vágás). Képernyő vágás nélküli kezelése kívülre rajzolás miatti memória felülírás. Nem megfelelő grafikus kártya. Grafikus driver hiánya. Nem az aktuális grafikus kártya méretparamétereihez igazodó rajzolás. Torzítási hibák (négyzet, kör). Hibaüzenetek értelmezése Traceback (most recent call last): File "feladat1.py", line 6, in <module> szam=rw_input("kérek egy negatív számot! ") NameError: name 'rw_input' is not defined File "feladat1.py", line 11 szam=szam+ ^ SyntaxError: invalid syntax Melyik fájlban és hanyadik sorban van a hiba A hibás rész Hibatípus megnevezése, itt nincs definiálva Melyik fájlban és hanyadik sorban van a hiba A hibás rész Hibatípus megnevezése, szintaxis hiba, ismeretlen szintaxis File "feladat1.py", line 10 print("a szám: +str(szam)) ^ SyntaxError: EOL while scanning string literal Melyik fájlban és hanyadik sorban van a hiba A hibás rész Hibatípus megnevezése, szintaxis hiba Hibakeresés (Bedugolás) A programozás nagyon összetett és, mint minden emberi tevékenység során, ennek során is számos hibát köve tünk el. Anekdotai okokból a programozási hibákat bug oknak nevezzük. A detektálásukra és javításukra hasz nált technikák együttesét debugnak nevezzük. Háromféle típusú hiba létezhet egy programban: szintaxishibák, 41

42 szemantikai hibák, végrehajtás közben fellépő hibák. Bedugolás technikák Lépésenkénti végrehajtás A lépésenkénti végrehajtás segítségével programunknak mindig egyetlen sorát tudjuk végrehajtani. Ilyenkor egy egységnek nem egy utasítás, hanem egy sor számít, ha egy sorba több utasítást írunk, ezeket mind egy lé pésben fogja a gép végrehajtani. Töréspont A töréspont lényege, hogy a program elindítása előtt kijelölhetjük azt a sort, amelyiknél majd a végrehajtást szeretnénk megállítani. Változók és kifejezések pillanatnyi értékének figyelése A hibakeresés másik hatékony eszköze a változók tartalmának figyelése. Ezt a legáltalánosabb módon (amely minden programozási környezetben működik) úgy valósíthatjuk meg, hogy a változók tartalmát a program megfelelő helyein kiíratjuk a képernyőre. Ez azonban elég körülményes, hiszen egyrészt állandóan módosíta nunk kell a programszöveget, és a futtatás előtt kell döntenünk, hogy mely változók lesznek érdekesek szá munkra, másrészt egy összetettebb adat áttekinthető kiíratásához már egy kisebb programot kell írnunk. Kivételkezelés A kivételkezelés egy programozási mechanizmus, melynek célja a program futását szándékosan vagy nem szándékolt módon megszakító esemény (hiba) vagy utasítás kezelése. Az eseményt magát kivételnek (except ion) hívjuk. A hibaüzenet két részből áll, amit : választ el. Elöl van a hiba típusa, utána egy, a hibára vonatkozó specifikus információ következik. Számos esetben előre lehet látni, hogy bizonyos hibák léphetnek fel a program egyik vagy másik részében. Ezekbe a programrészekbe beépíthetünk olyan speciális utasításokat, amik csak akkor aktiválódnak, ha ezek hibák fellépnek. Az olyan magasszintű nyelvekben, mint amilyen a Python, lehetőség van arra, hogy egy felügyelő mechanizmust kössünk egy egész utasításcsoporthoz és így egyszerűsítsük azok nak a hibáknak a kezelését, melyek ezen utasítások bármelyikében felléphetnek. A Python kivételkezelő mechanizmusa a try except else utasításcsoportot használja, ami lehetővé teszi egy hiba elfogását és egy erre a hibára nézve specifikus scriptrész végrehajtását. Ez a következő módon működik: A try t követő utasításblokkot a Python feltételesen hajtja végre. Ha az egyik utasítás végrehajtásakor hiba lép fel, akkor a Python törli a hibás utasítást és helyette az except et követő kódblokkot hajtja végre. Ha semmilyen hiba sem lép fel a try utáni utasításokban, akkor az else et követő kódblokkot hajtja végre (ha ez az utasítás je len van). A program végrehajtása mindegyik esetben a későbbi utasításokkal folytatódhat. Hatékonyságvizsgálat Hatékonyság fogalma A specifikációnak megfelelően elkészített, működőképes programjaink általában sok szempontból még nem tö kéletesek. A legtöbb kész program javítható: gyorsabbá tehető memóriaigénye csökkenthető programkódja egyszerűbbé tehető. A programok ilyen szempontból történő vizsgálatát hatékonyságvizsgálatnak nevezzük. A hatékonyabbra írás alapfeltétele a program helyes működése, hiszen egy rosszul működő program esetében nincs értelme hatékonyságról beszélni. 42

43 A hatékonyságvizsgálat már az algoritmuskészítés idején megjelenik, de gyakran az elkészült forráskód haté konysága is javítható. A hatékonyság vizsgálata több szempontból is fontos: szűkös erőforrások esetén költségkímélés céljából a gyakorlati használhatóság miatt Hatékonyságvizsgálat szempontjai végrehajtási idő, helyfoglalás (memóriában, háttértárakon), bonyolultság. Hatékonyságvizsgálat szintjei Globális hatékonyság A globális hatékonyság növelése az algoritmus hatékonyabbá tételét jelenti, ez tehát valójában a program tervezés része. Egy program tényleges hatékonyságát alapvetően a globális hatékonyság határozza meg. Lokális hatékonyság A programkód egyszerű transzformációit jelenti, általában a program működésének megértése nélkül, me chanikusan is elvégezhető. Jelentősége kisebb, mint a globális hatékonyságé, de nem elhanyagolható. Algoritmus hatékonysága jó algoritmus, ciklusok végrehajtási száma (egymásba ágyazott ciklusok nagyon lassítják), egy ciklus végrehajtási ideje, feltételvizsgálat száma, kivételesetek kiküszöbölése. Programkód hatékonysága jó adattípusok (kis helyfoglalás, gyors számolás a real számtípus nem szabványos, nem támogatja a koprocesszor), feltételek egyszerűsítése, lehetőleg ne használjunk különböző adattípusokat egy kifejezésben (átváltás miatt), függvények kiszámítását ritkán alkalmazzuk. Dokumentálás A program egy termék, és egy termékhez mindig tartozniuk kell különböző leírásoknak. Mire is lehet szükség egy program kapcsán? Először is egy leendő felhasználónak el kell döntenie, hogy milyen programot, akar használni. Ha a programot megvette, akkor el szeretné helyezni a számítógépén, majd használ ni szeretné, és a felhasználásban segítséget vár. Nemcsak a felhasználónak van szüksége dokumentációra, hanem a fejlesztőnek, karbantartónak is (nem véletle nül adnak például háztartási készülékeinkhez műszaki leírást is). Nyilvánvaló, hogy ez a két vagy többfajta dokumentáció másoknak szól, így nem egy egységes dokumentáció ról fogunk beszélni, hanem többfajta dokumentumról. 43

44 Dokumentáció fajtái Fejlesztői dokumentáció A fejlesztői dokumentációt használja az, akinek a programban hibát kell keresnie, a hibát ki kell javítania, a programot hatékonyabbra kell írnia, át kell vinnie más gépre, át kell írnia más nyelvre, valamint tovább kell fej lesztenie. Az ő munkájuk megkönnyítése érdekében a fejlesztői dokumentációban szerepeljenek a következők: specifikációk, követelményanalízis (korlátozások, pl. megkívánt hatékonysági jellemzők, alkalmazan dó adatszerkezetek). A feladat és a megoldástól elvárt követelmények meghatározása. Ezt még a fel adat kitűzője adta, vagy vele történt megbeszélés során pontosodott a megoldás első lépéseként. a futási környezet leírása: számítógép, operációs rendszer, memóriaméret, (speciális) perifériaigény, grafikus kártya (felbontóképesség, színek száma ) fejlesztői környezet leírása: a választott programnyelv(ek), és verziószáma(i), eljáráskönyvtárak, uni tok (azaz a szükséges programdarabok fájljai). az algoritmusok és az adatok (típusok, osztályok, programkonstansok) leírása, ezek kapcsolata. Dön tések, más lehetőségek, érvek, magyarázatok. kód, implementációs szabványok (ún. kódolási szabályok, egyéni konvenciók), döntések; tesztesetek, azaz milyen (jellegzetes) bemeneti adatokra, milyen eredménnyel válaszol a program. hatékonysági mérések (hatékonysági tesztesetek), megfontolások, javaslatok az esetleges hatéko nyabbra írásra. fejlesztési lehetőségek. a készítő adatai. Felhasználói dokumentáció Ezt a dokumentumot használja a felhasználó, az üzembe helyező, a betanító. Nekik szükségük van a következőkre: a feladat egy rövid összefoglaló leírás is kell az áttekintés miatt és egy részletes a pontos használat hoz. a futási környezet leírása: számítógép, operációs rendszer, memóriaméret, perifériaigény, grafikus kártya,... (megegyezik a fejlesztői dokumentáció ugyanilyen című részével). a használat leírása hogyan kell a programot betölteni/elindítani, milyen kérdéseket tesz fel, mik a le hetséges válaszok, mik a program egyes lépései, lehetőségei (nagyvonalú funkcionális leírás). bemenő adatok, eredmények, szolgáltatások részletes leírása: mit, mikor, milyen sorrendben kell megadni (részletes funkcionális leírás). mintaalkalmazás példafutás. A felhasználó főleg a betanító ennek alapján tudja előre gép nél kül elképzelni a programot. hibaüzenetek és a hibák lehetséges okai mi a teendő valamely hibaüzenet láttán. Látható ebből, hogy a felhasználói és a fejlesztői dokumentáció több közös jellemzőt tartalmaz. Programismertető A programismertető célja a vásárló, programkereső ember meggyőzése arról, hogy e program felel meg legin kább igényeinek. Ez a hangzatos, reklám jellegű stílus mellett a következőket igényli: a feladat rövid, szöveges leírása, áttekintési céllal. a program tulajdonságainak rövid leírása. minimális hardver és szoftver (operációs rendszer és az esetlegesen megkívánt egyéb, a programmal együtt nem szállított szoftverkellékek, pl. driverek, dll ek stb.) környezet. Installálási kézikönyv, operátori kézikönyv Nagyobb programok esetén külön installálási (üzembe helyezési) kézikönyvet mellékelnek, máskor ez a fel használói dokumentáció része. Ebben szerepel mindaz az információ, aminek segítségével egy több generáló lemezről a program elhelyezhető a gépünkön úgy, hogy az aktuális környezetben optimálisan működjön. (Ügyelni kell arra, hogy az installáció minél kevesebb számítástechnikai ismerettel végrehajtható legyen! Fel 44

45 lehet használni olyan célprogramokat, amelyeket kifejezetten erre terveztek, de legalább egy batch programmal automatizálni kell. Ilyen automatizmus esetén is dokumentálni kell az installációs folyamat lépéseit.) Az operátori kézikönyv olyan rendszereknél különül el a felhasználói kézikönyvtől, ahol más a program fel használója és más a kezelője. Dokumentáció tulajdonságai Szerkezet A dokumentáció elsődleges célja segítségnyújtás a program leendő felhasználóinak, továbbfejlesztőinek. Ezért olyannak kell lennie, hogy minden számukra szükséges tudnivalóhoz könnyen hozzájuthassanak. Ehhez elsőd leges szempont természetesen, hogy a dokumentáció mindezeket tartalmazza, de a használatát egyéb követel mények betartásával jelentősen megkönnyíthetjük. Ezek a következők: a dokumentáció ne legyen túl hosszú, hiszen egy program használatához senki sem akar egy re gényt elolvasni; a dokumentáció ne legyen túl rövid, mert akkor tömörsége miatt érthetetlen lesz, s így használhatat lan; a dokumentáció legyen világosan tagolt, és a tagolás segítse elő az egyes tudnivalók gyors keresését; a dokumentáció legyen tömör: az olvasója ne vesszen el a részletekben; a dokumentáció legyen olvasható: a túlságos (és kizárólagos) formalizálás az érthetőség rovására megy; a dokumentáció legyen pontos: az olvasója minden kérdésére tartalmazza a választ. Forma A dokumentáció használatát néhány formai jellemző nagyban megkönnyítheti. Ezek egyike a tartalomjegyzék. Másik, dokumentációkban ennél ritkábban használt, de néha kifejezetten nagy segítséget nyújtó eszköz az in dex. Az nyilvánvaló, hogy világos szerkezetű kell legyen: kitalálható mondanivalójú fejezetekre bontva. További stí lusjegyek megegyeznek bármely szakmai kiadványéval. Stílus A programismertető egyértelműen reklámcélra szolgál. Itt dicsérni kell a programot, kiemelve jó tulajdonságait. A felhasználói dokumentáció elsősorban részletes szöveges leírás, amely időnként lehet szájbarágó is. (Cél szerű figyelembe venni a várható felhasználói kört a leírás részletességének, a szájbarágósság szintjének meg tervezésénél. Például teljességgel fölösleges egy Windows környezetben futó program esetében az ablakkeze lésről általánosságban szólni.) A fejlesztői dokumentációban minden más szempontnál fontosabb a pontosság, emiatt ebben kerülhet elő a ma tematikai leírás, a formális specifikáció. Az installálási, illetve az operátori kézikönyv elsősorban utasítások, teendők pontos felsorolása, utalva a lehet séges válaszok következményeire. 45

46 Dokumentáció általános alakja Felhasználói dokumentáció Feladat Feladat megfogalmazása. Használat A program indítása: Honnan indul, mi a program neve. A program indítása: Egy lehetséges párbeszéd: A felhasználó mit lát." A program eredménye: Egy példa eredmény kiírása, amit a felhasználó látna. Hibalehetőség: Ha a program hibákat kezel, hogyan is teszi, mit fog tapasztalni a felhasználó. Fejlesztői dokumentáció Feladat Feladat megfogalmazása. Környezet Milyen gép, operációs rendszer, program szükséges hozzá. Forráskód A forráskód milyen néven, és hol található. Megoldás Fontosabb típusok Változók, konstansok megadása. Algoritmus A feladat megoldása mondatszerű algoritmus leírással. Kód A program kódja. 46

47 Tesztelés Érvényes tesztesetek: helyes eredményhez vezet. Érvénytelen tesztesetek: Hibás adatok megadására példák. Hatékonysági tesztesetek {Egyelőre nincsenek.} Fejlesztési lehetőségek Hogyan lehet fejleszteni a programot. Készítő Program készítőjének neve 47

48 Példa dokumentációra Felhasználói dokumentáció Feladat A program olvasson be két számot, adja össze azokat, majd írja ki az összeget! Használat A program indítása: Dokumnetumok könyvtárban taláható osszeg.py Indítása Terminálból python osszeg.py prancs kiadásával. A program indítása: Egy lehetséges párbeszéd: Kérem az első számot: 12 Kérem az első számot: 3 A program eredménye: A két szám összege: 15 Hibalehetőség: Szám helyett szöveg megadása, a hiba nincs lekezelve. 48

49 Fejlesztői dokumentáció Feladat A program olvasson be két számot, adja össze azokat, majd írja ki az összeget! Környezet Forráskód Dokumnetumok könyvtárban taláható osszeg.py Indítása Terminálból python osszeg.py prancs kiadásával. Megoldás Fontosabb típusok szam1, szam2, osszeg: Valós Algoritmus Program osszeg: Ki: Kérem az első számot: Be: szam1 Ki: Kérem a második számot: Be: szam2 osszeg=szam1+szam2 Ki: A két szám összege: Ki: osszeg Program vége Kód szam1=raw_input( Kérem az első számot: ) szam2=raw_input( Kérem a második számot: ) osszeg=szam1+szam2 print( A két szám összege +str(osszeg)) Tesztelés Érvényes tesztesetek: szam1=2, szam2=3, osszeg=5 szam1=-2, szam2=3, osszeg=1 Érvénytelen tesztesetek: szam1=a, szam2=2 Hatékonysági tesztesetek {Egyelőre nincsenek} Fejlesztési lehetőségek Szöveg típust ne olvashasson be. Készítő Dobosné Varsányi Anita Strukturált program Böhm Jacopini tétel: (1966) 49

50 A szekvencia, szelekció és az iteráció segítségével minden olyan algoritmus felépíthető, amelynek egy belépési és egy kilépési pontja van. A csak szekvenciákból, szelekciókból és iterációkból építkező programot strukturált programnak nevezzük. A strukturált programozásban a ciklusból való kiugrás fogalma ismeretlen. Ebből kö vetkezik, hogy a program minden szekvenciájának és így az egész programnak is egyetlen belépési és egyet len kilépési pontja van, ennélfogva a program lényegesen áttekinthetőbb. Szekvencia: egymás után végrehajtható utasítások sorozata. Szelekció: választás megadott tevékenységek közül. Iteráció: megadott tevékenységek ismételt végrehajtása. Típusok Nyelvek típusossága A típus egy algebrai struktúra: értékhalmazból és azon értelmezett műveletekből áll. A típusfogalom erőteljes sége alapján típus nélküli, típusos, erősen típusos nyelvekről. Gyengén és erősen típusos nyelvek Azokat a nyelveket, amelyekben kötelező minden használni kívánt változót deklarálni és minden adattípussal szigorúan csak olyan műveletet enged végezni, amely a típusra lehetséges, erősen típusos nyelvnek nevezzük. Ezzel szemben a gyengén típusos nyelvekben nem kötelező a változók deklarálása. A fordító az első értékadás kor állapítja meg, hogy használni kívánjuk a változót, a kapott értékből állapítja meg a típust és a definiálást automatikusan elvégzi. A műveletek ellenőrzésekor is kevésbé szigorú, ugyanis, ha találkozik egy olyan műve lettel, amely az adott típussal nem elvégezhető (pl. karakterek szorzása), akkor megpróbálja az adatokat olyan típusúvá átalakítani, amelyre értelmezve van a művelet. A gyengén típusos nyelvek nagy hátránya, hogy a hibák felderítése hihetetlenül megnehezedik. Például, ha elír juk egy változó nevét, akkor azt hiszi a fordító, hogy egy új változót szeretnék használni. Az erősen típusos nyelvek esetén, ha elírjuk a változó nevét egy helyen, akkor szól a fordító, hogy ilyen nevű változót nem dekla ráltunk. Előnyük viszont, hogy nem kell "vacakolni" a deklarációval. Hosszabb programok esetén megéri az erősen típusos nyelvek használata. Gyengén típusos nyelv pl. a Visual Basic, JavaScript. Erősen típusos nyelv pl. a C++, JAVA, Delphi(Pascal) Típuskompatibilitás Mikor végezhető el a következő A:=B értékadás? Az egyértelmű válasz, akkor, ha azonos típusúak. Két típus azonos, ha szerkezetük azonos. Típuskényszerítés Ha kifejezésben különböző típusú tényezők szerepelnek, akkor vagy kötelező a felhasználónak típuskonverziós függvénnyel azonos típusúvá alakítani őket, vagy automatikus konverzió, típuskényszerítés történik. Altípus Olyan típus, amely értékeit egy másik típus értékhalmazából veszi, örökli a másik típus műveleteit, s a másik tí pussal minden esetben kompatibilis. Származtatott típus Ez egy másik típusból származó típus, értékeit a másik típus értékhalmazából veszi, műveleteit örökölheti az őstípustól, s az őstípussal nem ekvivalens típus. Statikus és dinamikus típusok Statikusnak nevezünk egy típust, ha az adott típushoz tartozó értékek a memóriában mindig azonos helyet fog lalnak el. Dinamikus típushoz tartozó értékekhez futás közben különböző tárterület tartozik. 50

51 Paraméteres típus Paraméteres típusok paraméterezhetők konstansokkal, változókkal, típusokkal. Adatok, adatszerkezetek Változó A változó egy elnevezett memória terület. Jellemzői: a neve, memóriacíme, típusa, pillanatnyi értéke. A válto zókat első használat előtt deklarálni kell, azaz meg kell adni a változó nevét és típusát. Ennek hatására a fordító automatikusan kijelöl egy (virtuális) memóriacímet ennek a változónak. Arról, hogy melyik cím lett lefoglalva a változó számára a programozónak nem kell tudnia, hiszen a programban mindenütt a változó nevével hivatko zunk a területre. Erre a területre eltárolhatunk adatot (ha már volt ott adat, akkor felülírva azt), azaz értéket adunk a változónak, illetve hivatkozhatunk a pillanatnyilag éppen ott található értékre. Tehát az érték megvizsgálható és módosítható. - A változó neve: nevek képzésének vannak szabályai, ezek természetesen programozási nyelvenként eltérő ek lehetnek. Legtöbb nyelvben a szabályok a következők: a nevek betűkből és számokból állhatnak, betűvel kell kezdődjenek (semmiképpen sem lehetnek bennük írásjelek vagy szünet!!). - A változó memóriacíme: nem kell ismernünk az értékét, de bizonyos nyelvekben felhasználjuk, lásd ké sőbb. - A változó pillanatnyi értéke: egy változónak a definiálás pillanatától kezdve van pillanatnyi értéke. Még akkor is ha még nem adtunk neki értéket (persze ez az érték nem valódi eltárolt érték), de ilyenkor nem cél szerű felhasználni a pillanatnyi értéket. A definiált, de még értéket nem kapott változókat inicializálatlan változóknak szokás nevezni. Egyes nyelvek fordító programjai nem engedik felhasználni az inicializálatlan változók értékét, míg más nyelveknél a programozó felelőssége, hogy ne használja. - A változó típusa: a típus egyrészt meghatározza a lefoglalt memóriaterület nagyságát, van 1 byte os, 2 byte os, 4 byte os, stb. másrészt meghatározza, hogy az adatot hogyan lehet kezelni, egész számként, valós számként, karakterkódként, stb. harmadrészt meghatározza, hogy milyen műveletek végezhetők az adattal. Konstans A konstans is egy memóriatartományt reprezentál, adott típusú értéket tárolhat, ez az érték megvizsgálható, de nem módosítható. Definíció, deklaráció A definíció és deklaráció szinte teljesen azonos fogalmak. Ha változó deklarálásáról beszélünk, akkor azt akar juk kifejezni, hogy megadjuk a fordító számára egy használni kívánt változó nevét és típusát. Ha változó defini álását emlegetünk változó deklarálása helyett, akkor azzal azt hangsúlyozzuk ki, hogy lefoglalódik egy hely a változónak a memóriában. Egy változót egyszer lehet definiálni, de bizonyos körülmények között előfordul, hogy többször deklaráljuk. Vagyis egyszer történhet egy változó számára helyfoglalás, de lehetséges, hogy többször is tudatnunk kell a fordítóval a változó nevét és típusát. (Például többmodulos programok esetén.) Inicializálás Inicializálásnak nevezzük, amikor egy változó definiálásával egyidejűleg értéket is adunk a változónak. (Nem összetévesztendő az inicializált változó fogalmával, lásd változó pillanatnyi értéke.) Deklarációkiértékelés A deklarációs rész végrehajtása kétféleképpen történhet, a statikus deklarációkiértékelés fordításkor elvégezhe tő, a dinamikus deklarációkiértékelés viszont csak futási időben. Azonosító A programozási nyelv objektumaihoz, konstansaihoz, változóihoz, típusokhoz, programegységeihez, fordítási egységekhez rendelt nevet hívjuk azonosítónak. Az azonosítók elnevezésere a programozási nyelvek különböző szabályokat vezettek be. Általános szabály: az 51

52 azonosítók betűkből és számjegyekből állhatnak. Védett azonosítók Programozási nyelvek egy része fordíthatóság miatt megtiltja, hogy alapszavait azonosítóként használjuk. Eze ket a nem használható azonosítókat nevezzük védett azonosítóknak. Azonosítók átlapolása (túlterhelés) Különböző objektumokat általában különböző azonosítóval jelöljük, de ez nem mindig van így. Két objektum neve lehet ugyanaz, ha a hatáskörük különböző. Hozzáférési jog Az adat módosíthatósága és lekérdezhetősége. Kezdőérték Kezdőértéknek nevezzük a memóriába képezéskor a lefoglalt helyre elhelyezett értéket. Hatáskör Egy azonosító hatáskörének nevezzük a programszöveg azon tartományát, amelyben a definíciója érvény ben van. Globális: minden eljárásból elérhető. Saját: Csak az adott eljárásban használható Lokális: Csak az őt közvetlenül tartalmazó eljárásban használható. Láthatóság A program azon része, ahol lehetséges a hozzáférés (egy lokális változó eltakarhat egy külső változót). Blokkstruktúra esetén egy programegység belsejében egy másik programegység az azonosítókat újradefini álhatja. Ekkor a belső azonosító hatáskörében eltakarja a külsőben definiált azonos nevű azonosítót. Azt a programszövegbeli tartományt, ahol az azonosítót semmi sem takarja, nevezzük láthatósági körnek. Ez vagy azonos a hatáskörrel, vagy része annak. Élettartam A futási idő azon része, ahol az azonosító ugyanazt az adatot jelenti. Statikus változónak nevezzük azokat a változókat, amelyek élettartalma a program teljes futási ideje. Ezeket a fordítóprogram egy statikus memó riahelyen helyezi el. Dinamikus változók a program futási idejének csak egy részében létezik. Típus Az alábbi adattulajdonságok összessége: értékhalmaz, műveletek, ábrázolás. Értékhalmaz Az a halmaz, amelyből a változó értéket vehet fel. Adat csoportosítása (értékhalmaz szempontjából) Egyszerű típusok Szerkezetileg nem bontható tovább. Például: egész, valós, logikai, karakter, 52

53 mutató (adat címe), felsorolás, intervallum. Összetett(strukturált) típusok Szerkezettel rendelkezik. Például: rekord (különböző típusú, de logikailag összetartozó típusok együttes kezelése), halmaz, szöveg (karakterek sorozata), sorozat, tömb (mátrix). Típus meghatározásnál megadjuk az értékhalmazát, a hozzátapadó műveletek, a relációk körét. Az elemi adattípusok lehetséges műveleteit 3 csoportba szokás sorolni: értékadó, típusátviteli: relációs, szelekciós (egy elem kiválasztásának módja), konstrukciós (hogyan képezzük), számosság (hány elemű az értékhalmaz), transzformációs (ugyanarra a típusra képez le, például +,,min, előző). Az összetett adattípusok műveletei további csoportokat alkothatnak: lekérdező (egy egy érték kiolvasása), bővítő (új adat felvétele), szűkítő (adat törlése), mozgató (kívánt adat kiválasztása), egyéb (hibakezelés, hány eleme van,...). A típus harmadik jellemzője az adatok memóriában történő tárolása. Egész típus Értékhalmaz (Min'Egész..Max'Egész) Műveletek +,, *, Div (egészosztás), ^ (pozitív egész kitevős hatványozás), Mod, (unáris mínusz). Relációk =, <,, >,,. Ábrázolás ún. kettes komplemens kódú. 53

A programozási nyelvek története, fejlődése

A programozási nyelvek története, fejlődése A programozási nyelvek története, fejlődése Időszámításunk előtt 1500-ra tehető az első számolást segítő eszközök megjelenése (abakusz). Már ezeknek az egyszerű eszközöknek a használata is algoritmikus

Részletesebben

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Programozási nyelvek a közoktatásban alapfogalmak I. előadás Programozási nyelvek a közoktatásban alapfogalmak I. előadás Szempontok Programozási nyelvek osztályozása Felhasználói kör (amatőr, professzionális) Emberközelség (gépi nyelvektől a természetes nyelvekig)

Részletesebben

Programozási nyelvek 6. előadás

Programozási nyelvek 6. előadás Programozási nyelvek 6. előadás Szempontok Programozási nyelvek osztályozása Felhasználói kör (amatőr, professzionális) Emberközelség (gépi nyelvektől a természetes nyelvekig) Számítási modell (hogyan

Részletesebben

Programozás tankönyv évfolyam

Programozás tankönyv évfolyam Programozás tankönyv 9 10. évfolyam 1 Programozás története 1822 ben Charles Babbage, az angliai Cambridge egyetem hallgatójaként felismerte, hogy az akkori számító eszközök nagy része, (például a csillagászati

Részletesebben

4. Programozási nyelvek osztályozása. Amatőr és professzionális

4. Programozási nyelvek osztályozása. Amatőr és professzionális 4. Programozási nyelvek osztályozása. Amatőr és professzionális programozási nyelvek. Számítási modellek (Neumann-elvű, automataelvű, funkcionális, logikai). Programozási nyelvekkel kapcsolatos fogalmak

Részletesebben

C programozás. 1 óra Bevezetés

C programozás. 1 óra Bevezetés C programozás 1 óra Bevezetés A C nyelv eredete, fő tulajdonságai 1. Bevezető C nyelv alapelemei többsége a BCPL (Basic Combined Programming Language {1963}) Martin Richards B nyelv Ken Thompson {1970}

Részletesebben

Java programozási nyelv

Java programozási nyelv Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék

Részletesebben

Programozás alapjai (ANSI C)

Programozás alapjai (ANSI C) Programozás alapjai (ANSI C) 1. Előadás vázlat A számítógép és programozása Dr. Baksáné dr. Varga Erika adjunktus Miskolci Egyetem, Informatikai Intézet Általános Informatikai Intézeti Tanszék www.iit.uni-miskolc.hu

Részletesebben

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Programozási nyelvek a közoktatásban alapfogalmak II. előadás Programozási nyelvek a közoktatásban alapfogalmak II. előadás Szintaxis, szemantika BNF szintaxisgráf absztrakt értelmező axiomatikus (elő- és utófeltétel) Pap Gáborné. Szlávi Péter, Zsakó László: Programozási

Részletesebben

Adatbázis rendszerek. dr. Siki Zoltán

Adatbázis rendszerek. dr. Siki Zoltán Adatbázis rendszerek I. dr. Siki Zoltán Adatbázis fogalma adatok valamely célszerűen rendezett, szisztéma szerinti tárolása Az informatika elterjedése előtt is számos adatbázis létezett pl. Vállalati személyzeti

Részletesebben

Programozási nyelvek (ADA)

Programozási nyelvek (ADA) Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 1. előadás Hasznos weboldal http://kto.web.elte.hu Program felépítése Programegységek (program unit) eljárások (procedure)

Részletesebben

Programozás alapjai Bevezetés

Programozás alapjai Bevezetés Programozás alapjai Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Programozás alapjai Bevezetés SWF1 / 1 Tartalom A gépi kódú programozás és hátrányai A magas szintÿ programozási nyelv fogalma

Részletesebben

ME 306-2 Szoftverfejlesztés

ME 306-2 Szoftverfejlesztés Programozási nyelvek kialakulása, fejlődése. Eljárás és objektumorientált nyelvek jellemzői, alapfogalmai. Grafikus fejlesztői környezetek kialakulása, eseményorientált programozás. 1. Programozási nyelvek

Részletesebben

Történeti áttekintés

Történeti áttekintés Történeti áttekintés Előzmények A számítástechnika kezdetén elterjedt (egyeduralkodó) volt a mérnökpult használata, a gép és az ember kommunikációja bináris nyelven zajlott. A gépi kódú programozás nem

Részletesebben

Algoritmizálás és adatmodellezés tanítása 1. előadás

Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az

Részletesebben

Bevezetés. Dr. Iványi Péter

Bevezetés. Dr. Iványi Péter Bevezetés Dr. Iványi Péter Programozási készség Számos munka igényel valamilyen szintű programozási készséget Grafikus a képfeldolgozót, Zenész a szintetizátort, Programozó a számítógépet programozza.

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai A programozás alapjai 1 1. előadás Híradástechnikai Tanszék Amiről szólesz: A tárgy címe: A programozás alapjai A számítógép részegységei, alacsony- és magasszintű programnyelvek, az imperatív programozási

Részletesebben

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Adatbázis-kezelő rendszerek. dr. Siki Zoltán Adatbázis-kezelő rendszerek I. dr. Siki Zoltán Adatbázis fogalma adatok valamely célszerűen rendezett, szisztéma szerinti tárolása Az informatika elterjedése előtt is számos adatbázis létezett pl. Vállalati

Részletesebben

Programzás I. - 1. gyakorlat

Programzás I. - 1. gyakorlat Programzás I. - 1. gyakorlat Alapok Tar Péter 1 Pannon Egyetem Műszaki Informatikai Kar Számítástudomány Alkalmazása Tanszék Utolsó frissítés: September 15, 2007 1 tar@dcs.vein.hu Tar Péter (PE-MIK-DCS)

Részletesebben

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Python Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása alatt

Részletesebben

Informatika tagozat osztályozóvizsga követelményei

Informatika tagozat osztályozóvizsga követelményei Tartalom 9. évfolyam... 1 10. évfolyam... 4 11. évfolyam... 6 12. évfolyam... 8 9. évfolyam Az informatikai eszközök használata Az egészséges munkakörnyezet megteremtése Neumann elvű számítógép felépítése

Részletesebben

Bevezetés az informatikába Tételsor és minta zárthelyi dolgozat 2014/2015 I. félév

Bevezetés az informatikába Tételsor és minta zárthelyi dolgozat 2014/2015 I. félév Bevezetés az informatikába Tételsor és minta zárthelyi dolgozat 2014/2015 I. félév Az informatika története (ebből a fejezetből csak a félkövér betűstílussal szedett részek kellenek) 1. Számítástechnika

Részletesebben

Programozási alapok jegyzet

Programozási alapok jegyzet Programozási alapok jegyzet Javított változat Összeállította: Faludi Anita 2012. Tartalom A programozás története... 4 Program... 4 Programozás... 4 Történet... 4 Programnyelv-generációk... 6 Ellenőrző

Részletesebben

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott. Szigorlati témakörök az Informatika (szigorlat) (BMEVIAU0181) c. tantárgyat felváltó Informatika (BMEGERIEEIS) tantárgyból az okleveles energetikai mérnökképzés (2N-0E) hallgatói számára 1. tantárgy: Programozás

Részletesebben

Számítógép architektúra

Számítógép architektúra Budapesti Műszaki Főiskola Regionális Oktatási és Innovációs Központ Székesfehérvár Számítógép architektúra Dr. Seebauer Márta főiskolai tanár seebauer.marta@roik.bmf.hu Irodalmi források Cserny L.: Számítógépek

Részletesebben

Informatika tanítási módszerek

Informatika tanítási módszerek Informatika tanítási módszerek Programozás tanítási módszerek módszeres, algoritmusorientált; adatorientált; specifikációorientált; feladattípus-orientált; nyelvorientált; utasításorientált; matematikaorientált;

Részletesebben

Irányítástechnika 1. 9. Elıadás. PLC-k programozása

Irányítástechnika 1. 9. Elıadás. PLC-k programozása Irányítástechnika 1 9. Elıadás PLC-k programozása Irodalom - Helmich József: Irányítástechnika I, 2005 - Zalotay Péter: PLC tanfolyam - Jancskárné Anweiler Ildikó: PLC programozás az IEC 1131-3 szabvány

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe Mechatronika és mikroszámítógépek 2017/2018 I. félév Bevezetés a C nyelvbe A C programozási nyelv A C egy általános célú programozási nyelv, melyet Dennis Ritchie fejlesztett ki Ken Thompson segítségével

Részletesebben

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem } Funkcionális és logikai programozás { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem } http://www.ms.sapientia.ro/~mgyongyi ` 1 Jelenlét: Követelmények, osztályozás Az első 4 előadáson

Részletesebben

Podoski Péter és Zabb László

Podoski Péter és Zabb László Podoski Péter és Zabb László Bevezető Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket Felmértük a manapság ismert eszközök előnyeit és hiányosságait Kidolgoztunk egy saját megjelenítő

Részletesebben

Az informatika kulcsfogalmai

Az informatika kulcsfogalmai Az informatika kulcsfogalmai Kulcsfogalmak Melyek azok a fogalmak, amelyek nagyon sok más fogalommal kapcsolatba hozhatók? Melyek azok a fogalmak, amelyek más-más környezetben újra és újra megjelennek?

Részletesebben

1. Egyszerű (primitív) típusok. 2. Referencia típusok

1. Egyszerű (primitív) típusok. 2. Referencia típusok II. A Java nyelv eszközei 1. Milyen eszközöket nyújt a Java a programozóknak Korábban már említettük, hogy a Java a C nyelvből alakult ki, ezért a C, C++ nyelvben járatos programozóknak nem fog nehézséget

Részletesebben

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14. Informatika 1 2011 Második előadás, vezérlési szerkezetek Szabó Adrienn 2011. szeptember 14. Tartalom Algoritmusok, vezérlési szerkezetek If - else: elágazás While ciklus For ciklus Egyszerű típusok Összetett

Részletesebben

Adatstruktúrák Algoritmusok Objektumok

Adatstruktúrák Algoritmusok Objektumok Adatstruktúrák Algoritmusok Objektumok A számítógépes problémamegoldás modellezésének módszerei. Programozási elvek és módszerek: imperatív, strukturált, moduláris, objektumorientált programozás. Programozási

Részletesebben

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás Kódgenerálás Memóriagazdálkodás Kódgenerálás program prológus és epilógus értékadások fordítása kifejezések fordítása vezérlési szerkezetek fordítása Kódoptimalizálás L ATG E > TE' E' > + @StPushAX T @StPopBX

Részletesebben

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Javascript Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása

Részletesebben

Bánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31

Bánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 9. ELŐADÁS - OOP TERVEZÉS 2014 Bánsághi Anna 1 of 31 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív paradigma

Részletesebben

Programozás elmélete

Programozás elmélete Programozás elmélete Programozás és program Programozás: folyamat, melynek során a feladat megoldását a számítógép számára érthető formában írjuk le. Program: a programozás eredménye, futtatható változatban

Részletesebben

A programozás alapjai

A programozás alapjai A programozás alapjai Változók A számítógép az adatokat változókban tárolja A változókat alfanumerikus karakterlánc jelöli. A változóhoz tartozó adat tipikusan a számítógép memóriájában tárolódik, szekvenciálisan,

Részletesebben

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez Pásztor Attila Algoritmizálás és programozás tankönyv az emeltszintű érettségihez 3. ADATTÍPUSOK...26 3.1. AZ ADATOK LEGFONTOSABB JELLEMZŐI:...26 3.2. ELEMI ADATTÍPUSOK...27 3.3. ÖSSZETETT ADATTÍPUSOK...28

Részletesebben

A számítástechnika fejlődése

A számítástechnika fejlődése A számítástechnika fejlődése Az 1600-as évektől kezdődően az emberek igyekeztek olyan gépeket építeni, melyek megkönnyítik a számolást. A számítógépek fejlődését nagy lépésekben követjük. Az egymástól

Részletesebben

INFORMATIKA ÉRETTSÉGI VIZSGAKÖVETELMÉNYEK AZ ÉRETTSÉGI VIZSGA RÉSZLETES TEMATIKÁJA

INFORMATIKA ÉRETTSÉGI VIZSGAKÖVETELMÉNYEK AZ ÉRETTSÉGI VIZSGA RÉSZLETES TEMATIKÁJA A témakörök előtt lévő számok az informatika tantárgy részletes vizsgakövetelménye és a vizsga leírása dokumentumban szereplő témaköröket jelölik. KÖVETELMÉNYEK 1.1. A kommunikáció 1.1.1. A kommunikáció

Részletesebben

Iman 3.0 szoftverdokumentáció

Iman 3.0 szoftverdokumentáció Melléklet: Az iman3 program előzetes leírása. Iman 3.0 szoftverdokumentáció Tartalomjegyzék 1. Az Iman rendszer...2 1.1. Modulok...2 1.2. Modulok részletes leírása...2 1.2.1. Iman.exe...2 1.2.2. Interpreter.dll...3

Részletesebben

Occam 1. Készítette: Szabó Éva

Occam 1. Készítette: Szabó Éva Occam 1. Készítette: Szabó Éva Párhuzamos programozás Egyes folyamatok (processzek) párhuzamosan futnak. Több processzor -> tényleges párhuzamosság Egy processzor -> Időosztásos szimuláció Folyamatok közötti

Részletesebben

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT Eddig Tetszőleges

Részletesebben

Digitális technika VIMIAA01 9. hét

Digitális technika VIMIAA01 9. hét BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT Eddig Tetszőleges

Részletesebben

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat Formális nyelvek a gyakorlatban Formális nyelvek, 1 gyakorlat Segédanyagok Célja: A programozási nyelvek szintaxisának leírására használatos eszközök, módszerek bemutatása Fogalmak: BNF, szabály, levezethető,

Részletesebben

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 0.1. Az algoritmikus tudás szintjei Ismeri (a megoldó algoritmust) Érti Le tudja pontosan

Részletesebben

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1 Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1 Ajánlott irodalom A programozás fogalma Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu 2012. február 7. A tárgy címe: A tárgy adminisztratív

Részletesebben

Fordítóprogramok. Aszalós László. 2009. szeptember 7.

Fordítóprogramok. Aszalós László. 2009. szeptember 7. Fordítóprogramok Aszalós László 2009. szeptember 7. 1. Bemelegítés Honlap: www.inf.unideb.hu/ aszalos/diak.html (Fordítóprogramok, 2009) Jegymegajánló: utolsó hét előadásán. PótZH (csak gyakorlat) vizsgaidőszak

Részletesebben

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,

Részletesebben

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás? Bevezetés Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések Forráskód Hibajegyzék p2p.wrox.com xiii xiii xiv xiv xvi xvii xviii

Részletesebben

SZAKDOLGOZAT. Kiss Albert

SZAKDOLGOZAT. Kiss Albert SZAKDOLGOZAT Kiss Albert Debrecen 2009 Debreceni Egyetem Informatikai Kar A VIZUÁLIS PROGRAMOZÁS TANÍTÁSA A DEBRECENI MECHWART ANDRÁS GÉPIPARI ÉS INFORMATIKAI SZAKKÖZÉPISKOLÁBAN Témavezető: Nyakóné dr.

Részletesebben

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS 2.ELŐADÁS A VB programozási nyelv Az Excel programozása 2 A VB programozási nyelv Adattípusok Adatok kezelése Vezérlőszerkezetek Adattípusok és műveletek Egész adattípusok

Részletesebben

A szoftverfejlesztés eszközei

A szoftverfejlesztés eszközei A szoftverfejlesztés eszközei Fejleszt! eszközök Segédeszközök (szoftverek) programok és fejlesztési dokumentáció írásához elemzéséhez teszteléséhez karbantartásához 2 Történet (hw) Lyukkártya válogató

Részletesebben

Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe Bevezetés a C++ programozási nyelvbe Miskolci Egyetem Általános Informatikai Tanszék CPP0 / 1 Története A C++ programozási nyelv a C programozási nyelv objektum orientált kiterjesztése. Az ANSI-C nyelvet

Részletesebben

Programozás alapjai. 7. előadás

Programozás alapjai. 7. előadás 7. előadás Wagner György Általános Informatikai Tanszék Jótanács (1) Tipikus hiba a feladat elkészítésekor: Jótanács (2) Szintén tipikus hiba: a file-ból való törléskor, illetve a file-nak új elemmel való

Részletesebben

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző

Részletesebben

Adatbázis és szoftverfejlesztés elmélet

Adatbázis és szoftverfejlesztés elmélet Adatbázis és szoftverfejlesztés elmélet Témakör 4. Összefoglalás 1. A kódolás eszközei Általános szövegszerkesztő Programozói szövegszerkesztő Fejlesztői környezet Vizuális fejlesztői környezet Általános

Részletesebben

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

sallang avagy Fordítótervezés dióhéjban Sallai Gyula sallang avagy Fordítótervezés dióhéjban Sallai Gyula Az előadás egy kis példaprogramon keresztül mutatja be fordítók belső lelki világát De mit is jelent, az hogy fordítóprogram? Mit csinál egy fordító?

Részletesebben

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,

Részletesebben

Internet programozása. 1. előadás

Internet programozása. 1. előadás Internet programozása 1. előadás Áttekintés 1. Mi a PHP? 2. A PHP fejlődése 3. A PHP 4 újdonságai 4. Miért pont PHP? 5. A programfejlesztés eszközei 1. Mi a PHP? Egy makrókészlet volt, amely személyes

Részletesebben

A számítástechnika rövid története

A számítástechnika rövid története Budapest XIV. Kerületi Németh Imre Általános Iskola, 1148 Bp. Lengyel u.23. számítástechnika - informatika oktatás A számítástechnika rövid története Tartalomjegyzék 1. A számolást segítő eszközök története,

Részletesebben

OOP. Alapelvek Elek Tibor

OOP. Alapelvek Elek Tibor OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós

Részletesebben

Szoftver-technológia I.

Szoftver-technológia I. Szoftver technológia I. Oktatók Sziray József B602 Heckenast Tamás B603 2 Tananyag Elektronikus segédletek www.sze.hu/~sziray/ www.sze.hu/~heckenas/okt/ (www.sze.hu/~orbang/) Nyomtatott könyv Ian Sommerville:

Részletesebben

Adatszerkezetek I. 1. előadás

Adatszerkezetek I. 1. előadás Adatszerkezetek I. 1. előadás Adatok jellemzői ismétlés 1. Azonosító Az a jelsorozat, amellyel hivatkozhatunk a tartalmára, amely által módosíthatjuk tartalmát. 2. Hozzáférési jog Adatokat módosítani,

Részletesebben

INFORMATIKA ÉRETTSÉGI VIZSGA ÁLTALÁNOS KÖVETELMÉNYEI

INFORMATIKA ÉRETTSÉGI VIZSGA ÁLTALÁNOS KÖVETELMÉNYEI 1. oldal, összesen: 6 oldal INFORMATIKA ÉRETTSÉGI VIZSGA ÁLTALÁNOS KÖVETELMÉNYEI A vizsga formája Középszinten: gyakorlati és szóbeli. Emeltszinten: gyakorlati és szóbeli. Az informatika érettségi vizsga

Részletesebben

Szoftver-mérés. Szoftver metrikák. Szoftver mérés

Szoftver-mérés. Szoftver metrikák. Szoftver mérés Szoftver-mérés Szoftver metrikák Szoftver mérés Szoftver jellemz! megadása numerikus értékkel Technikák, termékek, folyamatok objektív összehasonlítása Mér! szoftverek, programok CASE eszközök Kevés szabványos

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

B I T M A N B I v: T M A N

B I T M A N B I v: T M A N Műszaki informatika IPA Tesztek+Megoldások B I v: T 2014.02.15 M A N 1/41 Ellenőrző kérdések Alapfogalmi kitérő kérdéssor IPA kérdéssor 2/41 Ellenőrző kérdések 1. 1. Melyik Neumann elv következménye a

Részletesebben

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból ÜTEMTERV Programozás-elmélet c. tárgyhoz (GEMAK233B, GEMAK233-B) BSc gazdaságinformatikus, programtervező informatikus alapszakok számára Óraszám: heti 2+0, (aláírás+kollokvium, 3 kredit) 2019/20-es tanév

Részletesebben

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek JAVA EA+GY 1. gyakolat Programozási nyelvek JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2018/2019. tavaszi félév Tartalom 1 A Java alapjai 2 Java program

Részletesebben

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin 1 A PROGRAMOZÁS ALAPJAI 3 Készítette: Vénné Meskó Katalin Információk 2 Elérhetőség meskokatalin@tfkkefohu Fogadóóra: szerda 10:45-11:30 Számonkérés Időpontok Dec 19 9:00, Jan 05 9:00, Jan 18 9:00 egy

Részletesebben

Programozás alapjai. 10. előadás

Programozás alapjai. 10. előadás 10. előadás Wagner György Általános Informatikai Tanszék Pointerek, dinamikus memóriakezelés A PC-s Pascal (is) az IBM PC memóriáját 4 fő részre osztja: kódszegmens adatszegmens stackszegmens heap Alapja:

Részletesebben

Törley Gábor PROGRAMOZÁSI NYELVEK, KÖRNYEZETEK KIFEJEZŐEREJÉNEK VIZSGÁLATA

Törley Gábor PROGRAMOZÁSI NYELVEK, KÖRNYEZETEK KIFEJEZŐEREJÉNEK VIZSGÁLATA Törley Gábor (pezsgo@elte.hu) PROGRAMOZÁSI NYELVEK, KÖRNYEZETEK KIFEJEZŐEREJÉNEK VIZSGÁLATA Bevezetés Egy nyelv annál kifejezőbb, minél kevesebb szellemi befektetést, időt kíván a programozótól a kódolás

Részletesebben

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok

Részletesebben

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből

Részletesebben

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Bánsághi Anna 2014 Bánsághi Anna 1 of 33 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív

Részletesebben

Tájékoztató. Használható segédeszköz: számológép

Tájékoztató. Használható segédeszköz: számológép A 12/2013. (III. 29.) NFM rendelet szakmai és vizsgakövetelménye alapján. Szakképesítés azonosítószáma és megnevezése 54 523 05 Távközlési technikus Tájékoztató A vizsgázó az első lapra írja fel a nevét!

Részletesebben

A számítástechnika történeti áttekintése

A számítástechnika történeti áttekintése A számítástechnika történeti áttekintése Források: Markó Tamás PHARE támogatással készült jegyzete Wikipedia Google képkereső Prohardver 1 Előzmények Ókor: abacus a képen kínai abakusz látható: szuan-pan

Részletesebben

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem } http://www.ms.sapientia.ro/~mgyongyi

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem } http://www.ms.sapientia.ro/~mgyongyi C programozás Márton Gyöngyvér, 2009 Sapientia, Erdélyi Magyar Tudományegyetem http://www.ms.sapientia.ro/~mgyongyi 1 Könyvészet Kátai Z.: Programozás C nyelven Brian W. Kernighan, D.M. Ritchie: A C programozási

Részletesebben

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok

Részletesebben

Az informatika fejlődéstörténete

Az informatika fejlődéstörténete 1.2.1. Az informatika fejlődéstörténete A különböző számolási, számítási műveletek megkönnyítése és mechanizálása mindig is az emberiség fejlődésének kulcsfontosságú kérdése volt. Az abakusz az első számolóeszköz,

Részletesebben

C programozási nyelv

C programozási nyelv C programozási nyelv Előfeldolgozó utasítások Dr Schuster György 2011 május 3 Dr Schuster György () C programozási nyelv Előfeldolgozó utasítások 2011 május 3 1 / 15 A fordítás menete Dr Schuster György

Részletesebben

Széchenyi István Szakképző Iskola

Széchenyi István Szakképző Iskola A SZAKKÖZÉPISKOLAI SZAKMACSOPORTOS ALAPOZÓ OKTATÁS ISKOLAI PROGRAMJA 9 12. évfolyam Érvényes a 2003-2004-es tanévtől felmenő rendszerben Átdolgozva, utolsó módosítás: 2004. április 26. A szakmacsoportos

Részletesebben

OOP #1 (Bevezetés) v1.0 2003.03.07. 18:39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

OOP #1 (Bevezetés) v1.0 2003.03.07. 18:39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. OOP #1 (Bevezetés) v1.0 2003.03.07. 18:39:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_01-1 - E jegyzet másolata

Részletesebben

A fejlődés megindulása. A Z3 nevet viselő 1941-ben megépített programvezérlésű elektromechanikus gép már a 2-es számrendszert használta.

A fejlődés megindulása. A Z3 nevet viselő 1941-ben megépített programvezérlésű elektromechanikus gép már a 2-es számrendszert használta. Kezdetek A gyors számolás vágya egyidős a számolással. Mind az egyiptomiak mind a babilóniaiak számoló táblázatokat használtak. A helyiérték és a 10-es számrendszer egyesítése volt az első alapja a különböző

Részletesebben

Java és web programozás

Java és web programozás Budapesti Műszaki Egyetem 2015. 02. 11. 2. Előadás Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Mese Néhány programozási módszer:

Részletesebben

Objektum orientált programozás Bevezetés

Objektum orientált programozás Bevezetés Objektum orientált programozás Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 03. 04. OOPALAP / 1 A program készítés Absztrakciós folyamat, amelyben a valós világban

Részletesebben

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék Programozás Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. február 11. Tantárgy célja, szükséges ismeretek Tantárgy célja,

Részletesebben

Rekurzió. Dr. Iványi Péter

Rekurzió. Dr. Iványi Péter Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(

Részletesebben

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix 2. Adattípusonként különböző regisztertér Célja: az adatfeldolgozás gyorsítása - különös tekintettel a lebegőpontos adatábrázolásra. Szorzás esetén karakterisztika összeadódik, mantissza összeszorzódik.

Részletesebben

Mi a programozás? A programozás története ELSŐ FEJEZET

Mi a programozás? A programozás története ELSŐ FEJEZET ELSŐ FEJEZET Mi a programozás? Ha volt már a kezünkben programozásról szóló könyv, akkor pontos képünk lehet arról, hogy mi a programozás. Végül is, miért akarnánk valamit tanulni, ha fogalmunk sincsen,

Részletesebben

Programozás alapjai. 2. előadás

Programozás alapjai. 2. előadás 2. előadás Általános Informatikai Tanszék A számítógépes feladatmegoldás eszközei Adatok (Amiken utasításokat hajtunk végre) Utasítások (Amiket végrehajtunk) Program struktúra Adatok Konstans (a programon

Részletesebben

Algoritmusok, adatszerkezetek, objektumok

Algoritmusok, adatszerkezetek, objektumok Algoritmusok, adatszerkezetek, objektumok 1. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 14. Sergyán (OE NIK) AAO 01 2011.

Részletesebben

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás: Objektum orientált programozás Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 03. 04. OOPALAP / 1 A program készítés Absztrakciós folyamat, amelyben a valós világban

Részletesebben

1. tétel. A kommunikáció információelméleti modellje. Analóg és digitális mennyiségek. Az információ fogalma, egységei. Informatika érettségi (diák)

1. tétel. A kommunikáció információelméleti modellje. Analóg és digitális mennyiségek. Az információ fogalma, egységei. Informatika érettségi (diák) 1. tétel A kommunikáció információelméleti modellje. Analóg és digitális mennyiségek. Az információ fogalma, egységei Ismertesse a kommunikáció általános modelljét! Mutassa be egy példán a kommunikációs

Részletesebben