Bevezetés a programozásba Tartalomjegyzék



Hasonló dokumentumok
Távoktatás PROGRAMOZÁSI ALAPFOGALMAK ÉS ALGORITMUSOK

Programozás alapjai (ANSI C)

Java programozási nyelv

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Programozási segédlet

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

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

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

Programozási nyelvek 6. előadás

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Algoritmusok. Dr. Iványi Péter

Programozási tételek. Dr. Iványi Péter

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

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

Történeti áttekintés

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

Programozás alapjai Bevezetés

Egyszerű programozási tételek

PROGRAMOZÁSI TÉTELEK

Bevezetés a programozásba I.

AZ ALGORITMUS. az eredményt szolgáltatja

Algoritmusok, adatszerkezetek, objektumok

Assembly programozás: 2. gyakorlat

Az algoritmusok alapelemei

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

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

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

A számrendszerekrl általában

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

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

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

ELEMI PROGRAMOZÁSI TÉTELEK

Algoritmusok tervezése

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

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

Széchenyi István Szakképző Iskola

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

LEBEGŐPONTOS SZÁMÁBRÁZOLÁS

1. Jelölje meg az összes igaz állítást a következők közül!

Bevezetés a programozásba. 5. Előadás: Tömbök

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

Informatika érettségi vizsga

Programzás I gyakorlat

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

The Architecture of Computer Hardware and Systems Software: An InformationTechnology Approach 3. kiadás, Irv Englander John Wiley and Sons 2003

2. Fejezet : Számrendszerek

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

C programozás. 1 óra Bevezetés

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A C# programozási nyelv alapjai

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

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?

Felvételi tematika INFORMATIKA

Nézzük tovább a lexikai egységeket!

Algoritmizálás, adatmodellezés 1. előadás

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

A program valamilyen feladat, probléma megoldására készül, általános szerkezete: INPUT ALGORITMUS OTUPUT

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

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

Adatszerkezetek 1. Dr. Iványi Péter

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

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

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

I. el adás, A számítógép belseje

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Készítette: Nagy Tibor István

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

Bevezetés az informatikába

Adatok ábrázolása, adattípusok

Vektorok. Octave: alapok. A fizika numerikus módszerei I. mf1n1a06- mf1n2a06 Csabai István

Bevezetés a C programozásba

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Tamás Péter (D. 424) Mechatronika, Optika és Gépészeti Informatika Tanszék (D 407)

ÁTVÁLTÁSOK SZÁMRENDSZEREK KÖZÖTT, SZÁMÁBRÁZOLÁS, BOOLE-ALGEBRA

Aritmetikai utasítások I.

Struktúra nélküli adatszerkezetek

SZÁMRENDSZEREK KÉSZÍTETTE: JURÁNYINÉ BESENYEI GABRIELLA

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

A programozás alapjai

Objektumorientált paradigma és a programfejlesztés

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

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

Programozás I gyakorlat

3. gyakorlat. Kettes számrendszer: {0, 1} Tízes számrendszer: {0, 1, 2,..., 9} 16-os (hexadecimális számrendszer): {0, 1, 2,..., 9, A, B, C, D, E, F}

Az informatika kulcsfogalmai

Térinformatikai algoritmusok Elemi algoritmusok

Informatika tanítási módszerek

Java II. I A Java programozási nyelv alapelemei

Web-programozó Web-programozó

Harmadik gyakorlat. Számrendszerek

Hatékonyság 1. előadás

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

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

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Átírás:

Bevezetés a programozásba Tartalomjegyzék Bevezetés a programozásba...1 Tartalomjegyzék...1 A hardver és a szoftver jelentségének változása...2 A hardver és a szoftver kapcsolata: a számítógépek m#ködése...2 Számítógépek...2 A program végrehajtásának menete...2 A programozás alapjai...3 A gépi kód...3 Programozási nyelvek, fordító/értelmez...3 Programozási hibák, hibakeresés...3 A programozási nyelvek és módszerek változása...4 Programozási nyelvek...4 Csoportosításuk, jellemzésük...4 A fontosabb programnyelvek...5 A programozási módszerek...6 Adatok...7 Elemi (egyszer#) adattípusok...7 Összetett adatok...9 Változók...9 Algoritmikus programozás...10 Algoritmus...10 Algoritmus leíró módszerek:...10 Mondatszer# leírás (pszeudokód)...11 Folyamatábra (blokkdiagram)...12 Az alapvet vezérlési szerkezetek összehasonlítása...15 Elágazások...15 Ciklusok...15 Példa algoritmus készítésre...16 Elemi algoritmusok...18 Algoritmusok, amelyek egy sorozatból egy adatot állítanak el:...18 Elemek összegzése...18 Lineáris keresés...18 Maximum kiválasztása...18 Megszámlálás...19 Algoritmusok, amelyek egy sorozatból egy másik sorozatot állítanak el:...19 Kiválogatás...19 Rendezések...19 Minimum-elven alapuló rendezés...20 Buborék rendezés...20 Javított buborékos rendezés...21 Tovább javított buborékos rendezés...21 1

A hardver és a szoftver jelentségének változása A számítástechnika hajnalában (1950-es évek) a hardvernek sokkal nagyobb volt a jelentsége, hiszen akkoriban magának a számítógépnek, mint szerkezetnek az összeállítása és m#ködtetése jelentette a legnagyobb problémát. Akkoriban csak a hozzáért szakemberek jutottak számítógép közelébe, így nem is volt cél, hogy kimondottan felhasználóbarát programokat írjanak. Ahogy a technológia fejldött, úgy a számítógép (a hardver) egyre megbízhatóbbá és olcsóbbá vált, így fokozatosan eljutott a kisebb cégekhez, s mára a hétköznapi emberig. Tehát a felhasználók köre megváltozott: profi szakemberek helyett most gyermekek, tanárok, orvosok, titkárnk, pékek, és takarítónk ülnek a gépek eltt, és minden joggal elvárják, hogy a számítógépet a saját különböz céljaikra a lehet legkényelmesebben lehessen felhasználni, a legkevesebb tanulással. De mivel a számítógép hardvere csupán egy halom vas és m#anyag, ami önmagától semmi értelmes dologra nem képes, a fent említett hatalmas felhasználói igényeket a programoknak (szoftvereknek) kell biztosítani. A számítástechnika története során tehát a hangsúly áthelyezdött a hardverrl a szoftverre. Mára a szoftvergyártás (vagyis a programozás) jelents iparággá ntt. A hardver és a szoftver kapcsolata: a számítógépek m ködése Számítógépek A számítástechnika fejldése során számtalan különböz próbálkozás született arra, hogy miként lehetne a számításokat valamilyen géppel elvégeztetni. Mindközül a Neumann-elv gépek bizonyultak a legsikeresebbnek, a modern elektronika pedig megteremtette a digitális technológia alkalmazásának m#szaki feltételeit. A Neumann-elv# számítógépek lényege, hogy mind az adatok, mind az elvégzend feladat (kódolt utasítások formájában) a memóriában van eltárolva. A digitális szó azt jelenti, hogy mindent számokként ábrázolunk, és azokat dolgozzuk fel. A ma körülöttünk lév számítógépek mind ilyen elven m#ködnek, ezért ettl a ponttól számítógépen Neumann-elv# digitális számítógépet értünk. A program végrehajtásának menete A memória minden bájtja sorszámmal (címmel) rendelkezik, így a memória bármely rekesze (1 vagy több bájtja) megcímezhet, és így a processzor által közvetlenül elérhet. A CPU (központi feldolgozó és vezérl egység, a,,processzor'') feladata, hogy végighaladjon a program utasításain, és az elírt sorrendben végrehajtsa azokat. Az utasítások m#veleteket végeznek az adatokon. A processzor a következ lépésekben hajtja végre az utasításokat: 1. a soron következ utasítás gépi kódját lehívja a memóriából a CPU-ba, 2. dekódolás: megállapítja, hogy milyen adatokkal milyen m#veletet kell elvégezni, 3. beolvassa a memóriából a szükséges adatokat, végrehajtja az elírt utasítást, az eredményt pedig, ha szükséges, visszaírja a memóriába 2

A programozás alapjai A gépi kód A memóriában az utasítások kódolva tárolódnak, az adott processzor,,nyelvén'' (a különböz processzoroknak különböz utasításai vannak). Utasítás alatt itt egyszer#, elemi utasítást kell érteni, pl. 2 szám összeadása, szorzása, egy szám másolása egyik memóriarekeszbl a másikba. Minden utasításnak van egy kódja (ez lényegében egy szám). Az adott utasításhoz meg kell adni, hogy milyen adatokkal számol, pl. az általa használt adatok memóriacímét (azt a sorszámot, amely memória rekeszben elhelyezkedik). Így lehet a programot számokkal kódolni. Az így kapott kód a gépi kód. A programozás tehát lényegében ennek a gépi kódnak a megalkotása. Programozási nyelvek, fordító/értelmez Gépi kódban programozni nagy odafigyelést igényl, fáradtságos munka, amit nehéz megtanulni, könny# elhibázni. Ezért már korán rájöttek, hogy a programozó munkáját minél jobban meg kell könnyíteni. Ennek érdekében programozási nyelveket dolgoztak ki, hogy ne számokkal kelljen programozni, hanem sokkal ember-közelibb módon, olyan nyelven, amelyben számok (kódok és címek) helyett angol szavak szerepelnek. Egy ilyen nyelvet azonban nem,,ért meg'' a gép, ezért ezt le kell fordítani a gép nyelvére. Ehhez szükség van egy olyan segédprogramra, amely az általunk megírt programot gépi kóddá alakítja (ez a fordító, compiler), vagy lépésenként végrehajtja (ez az értelmez, interpreter). fordító (compiler) a program forrásszövegébl egy gépi kódú jellemzje programot (pl. OBJ) állít el, vagyis a programot lefordítja a gép nyelvére. szintaktikai (alaki) hibák kisz rése az elkészült program végrehajtási sebessége program hordozhatóság a fejlesztés nehézsége értelmez (interpreter) a program forrásszövegét sorról sorra ellenrzi, értelmezi, és végrehajtja. fordítási idben (+) futási idben (-) gyorsabb (+) lassabb (-) rosszabb (-) jobb (+) nehézkesebb (-) egyszer#bb (+) Programozási hibák, hibakeresés Természetesen egy magas szint# nyelven írt program írása közben is véthetünk hibákat. Ez lehet: szintaktikai hiba (alaki): a program nem felel meg az adott nyelv szabályainak. Pl. elírás, elfelejtettünk egy zárójelet... Az ilyen hibákat viszonylag könny# megtalálni. szemantikai hiba (tartalmi): a program lefordul, elindul, de nem azt csinálja, amit kell, esetleg menet közben le is áll a hiba miatt. Az ilyen hibák sok gondot okoznak, s poloska módjára búvnak meg a programban, ezért ezeket a hibákat a poloska angol megfelelje után bug-nak nevezik. Az ilyen hibák megtalálása és kiírtása (debuggolás)sokkal nehezebb feladat, erre külön segédprogramok (debugger-ek) állnak rendelkezésünkre. 3

A programozási nyelvek és módszerek változása A számítástechnika története során a programok készítésének módszerei és eszközei is fejldtek A fbb állomások: gépi kód az adott gép processzorának,,nyelvén'' : számok (utasítás- és operandus kódok) sorozata assembly nyelv a gépi kód emberibb változata, ahol minden gépi kódú utasításnak egy kis angol neve van magas szint nyelvek (pl. PASCAL, C, C++, Java) könny# bennük ismétlési és döntési szerkezeteket, valamint alprogramokat készíteni integrált fejleszt eszközök olyan programfejleszt környezetek, amelyek megkönnyítik a programozásnál megszokott szerkesztés-fordítás-hibakeresés munkaciklust: a szövegszerkeszt (editor), fordító (compiler), és hibakeres (debugger) egy helyen találhatók és jól együttm#ködnek. vizuális fejleszteszközök olyan integrált programfejleszt környezetek, melyekben sok programozói feladat szinte néhány egérkattintásra egyszer#södök: pl. megrajzoljuk a leend program dialógus ablakjainak elemeit, a fejleszt eszköz pedig automatikusan legenerálja a megfelel kódot: (vagyis megírja helyettünk a program egy részét) dokumentációt készít... Programozási nyelvek Csoportosításuk, jellemzésük A nyelv által megoldandó probléma alapján 2 nagy csoportra oszthatjuk: leíró jelleg nyelvek egy állandó állapotot (tényeket) fogalmazhatunk meg bennük, nem pedig cselekvést. Pl. HTML (procedurális) programnyelvek algoritmikus cselekvést (tennivalók sorozatát) fogalmazunk meg bennük. Ilyen elven m#ködnek a Neumann elv# számítógépek. Innentl nyelven elssorban ilyen programnyelvet értünk. A nyelv absztrakciós szintje alapján is 2 nagy csoportra oszthatjuk: alacsony szint nyelvek nehezebb a programírás, de a lefordítandó program közelebb áll a gép nyelvéhez (a gépi kódhoz), így nehezen hordozható (más típusú gépekre), viszont több beleszólásunk van a gépközeli dolgokba. Pl. assembly. magas szint nyelvek könnyebb programot írni (pontosabban egy emberközeli probléma megfogalmazása könnyebb). A nyelv által nyújtott kényelem és a gép utasításkészlete közötti #rt a fordító vagy értelmez programnak kell áthidalnia. Pl. C, Java. 4

A fontosabb programnyelvek A ma is él, legelterjedtebb általános nyelvek: assembly gépi kódú programozást segít nyelv a megírt program nehezen hordozható ma már fleg az operációs rendszerek készíti, ill. a hardvergyártók programoznak ilyenben. PASCAL eredetileg a struktúrált programozás tanulónyelvének szánták továbbfejlesztett változata, a TURBO PASCAL a modulok, illetve ma már az OOP-t is támogatja a valós életben a C miatt nem tudott érvényesülni, illetve a DELPHI-ben él tovább DELPHI alapja az objektum-orientált Turbo Pascal f erssége a korszer# és hatékony vizuális fejlesztfelület f korlátja, hogy egy céghez (Borland), és egy platformhoz (Windows) kötdik. C közép szint# nyelvként szokták emlegetni, mert hatékony és könny# programozni minden (fontos) géptípusra van C fordító -> hordozható nyelv régen minden általánosat C-ben írtak, ma a helyét egyre jobban átveszi a C++, ami objektum orientált módszert (OOP) tesz lehetvé. ahol megmarad, az a rendszerprogramozás. C++ a C nyelv objektum-orientált továbbfejlesztése ma már a legtöbb géptípusra van C++ fordító is -> jól hordozható nyelv napjainkban minden (általános) programot ebben írnak Java egy képzeletbeli (virtuális) Java-gép programnyelve szintaktikája nagyon hasonlít a C++ -éhoz a nyelv szabványos részét képezik a leggyakrabban kell alapkönyvtárak, mint pl. a grafika, felhasználói felület, hálózat programozás, adatbáziskezelés. Java nyelven lehet appleteket írni, amelyek beszúrhatók HTML oldalakba is tökéletesen hordozható nyelv az Internet-programozás f nyelve. Érdekességképpen néhány régebbi programnyelv, amelyek elterjedtek voltak, de ma már csak elvétve találkozni velük: FORTRAN (FORmula TRANslator) tudományos számítások legmagasabb szint# adatstruktúra a tömb ma fleg nagygépeken, vagy régi programok mélyén használják COBOL emberközeli szintaktika adatbáziskezelés ma (szinte kizárólag) nagygépen használják 5

PROLOG ( = PROgramming in LOGic) matematikai logikán alapuló programozás logikai problémák megoldásánál hatékony, de másra nehézkesen használható mesterséges intelligencia kutatás LISP ( = LISt Processing) listafeldolgozás funkcionális programozás mai programok mélyén: pl. Emacs, AutoCAD SMALLTALK az els igazi objektum-orientált programozási nyelv interpreteres megoldás A programozási módszerek Moduláris programozás Strukturált programozás Objektumorientált programozás Moduláris programozás Jellemz"i: Top-down dekompozíció, majd Bottom-up kompozíció. Top-down dekompozíció: Top-down = felülrl lefelé (lebontás), A megoldandó feladat komplexitását kell csökkenteni, ezért osszuk fel részfeladatokra a feladatot. Ha a részfeladatok is túl bonyolultak, osszuk azokat is részfeladatokra, és tegyük mindaddig, amíg a részek átláthatóak nem lesznek. Ha ezeket leprogramozzuk, ezek lesznek a modulok. Ettl moduláris a programozás. Bottom-up kompozíció: Bottom-up = lentrl felfelé (összeépítés) Lentrl fölfelé felépítjük a programot. Nincs módszer és nincs technika arra, hogy az önmagában tökéletesen jól m#köd modulokból hogyan lehet jó programot összeállítani. A program helyességére nem tud pozitív választ adni. Moduláris programozás moduljai: Adatmodul vezérlmodul I/O modul A modulok szabványosíthatók, modulkönyvtárakban elhelyezhetk. Strukturált programozás Böhm és Jacopini tétele: Egy tetszleges algoritmus felépíthet a következ elemekbl: 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. Szekvencia: Szelekció: Iteráció: 6

Átveszi a Top-down-t. A csak szekvenciából, szelekcióból és iterációból felépül programot strukturált programnak nevezzük. Minden strukturált (imperatív) program szerkezete egy szekvencia azzal a megkötéssel, hogy csak egy belépési és egy kilépési pontja van. A ciklusból való kiugrást (GOTO) nem használja. A szekvencián belül használható a szelekció és az iteráció is. Dijkstra dolgozta ki a strukturált programozás általános módszerét. Objektumorientált programozás Ez a módszer az objektum bevezetésével megszünteti a program kódjának és adatainak szétválását. Az objektumok felhasználásával egyszer# szerkezet#, jól kézben tartható programok készíthetk. Adatok Mivel a programok utasításai adatokon dolgoznak, ismerkedjünk meg elször ezekkel! Minden adattípusnál meg kell nézni, hogy milyen értékeket képes tárolni, hogyan ábrázolja a számítógép, és végül milyen m#veleteket végezhetünk velük. Elemi (egyszer ) adattípusok Numerikus (szám) típusok: fixpontos típus, és lebegpontos típus. Egész (fixpontos) típus: Ábrázolása kettes számrendszerben történik. Egy kettes számrendszerbeli számjegy - egy bit. Az ábrázolható számtartomány attól függ, hogy hány biten (n) történik a tárolás: ábrázolható számtartomány eljel nélküli 0 2 n -1 eljeles -2 n-1 2 n-1-1 Ha csak nem-negatív számokat kellene ábrázolni: 0 2 16-1 a 2 bájtos tartomány. 16 bites eljeles egész esetében ez -2 15...2 15-1, vagyis -32768 32767. A mai gépek általában 8, 16, 32, 64 biten tárolják az egész számokat. A negatív számokat olyan formában célszer# tárolni, hogy a gépi kivonás összeadással legyen helyettesíthet, mert akkor a számítógépnek csak az összeadást kell tudnia elvégezni. Az eljeles egész számok ábrázolására Neumann János dolgozta ki a kettes komplemens képzés (más néven nullára történ kiegészítés) módszerét. Komplemens képzés: a bináris szám minden jegyét átfordítjuk a másik jegyre. Például: 0101 0001 1010 1110 (Ezt egyes komplemensnek is szokás nevezni.) Ha a komplemenshez még 1-et hozzáadunk kettes komplemens alak jön létre. Pl.: 89 = 0101 1001 1010 0110 komplemens + 1 1010 0111 kettes komplemens Vegyük észre, hogy ha a számot és kettes komplemensét összeadjuk, akkor az adott méretben (példánkban 8 biten) az eredmény 0 lesz! 0101 1001 +1010 0111 10000 0000 7

Vessük össze ezt azzal a matematikában megismert ténnyel, hogy bármely számhoz a negatívját hozzáadva az eredmény 0 lesz! Tehát 89 kettes komplemense lesz a -89. A számítógépek többnyire a kettes komplementer képzésen alapuló eljárással végzik a kivonást. Negatív számok tárolása: láttuk az elbbiekben, hogy az x 0 esetben -x az x kettes komplemenseként állítható el. Lássunk egy 16 bites példát (x=12 16 biten ábrázolva): 0000 0000 0000 1010 1111 1111 1111 0101 komplemens 1111 1111 1111 0110 kettes komplemens (-x=-12) Még van egy probléma: hogyan tudjuk eldönteni, hogy egy ilyen szám pozitív-e vagy pedig egy másik pozitív szám kettes komplemense? A felírásból sehogy! Ezért megegyeztünk abban, hogy a nem negatív számok csak az alsó 15 bitet foglalják el, ilyen módon ezek kettes komplemensének legfels bitje 1 lesz, azaz ezek lesznek a negatív számok. A 0000 0000 kettes komplemense is 0. Az 1000 0000 negatív szám kettes komplemense : 1000 0000. Tehát a k 16 bites egész: - 32 768 k 32 767 Valós (lebegpontos) típus ábrázolható számtartomány egyszeres pontosságú 10-38 10 38 dupla pontosságú 10-307 10 307 A fixpontos számábrázolásnak 2 hátrányos tulajdonsága van: - kicsi az ábrázolható számtartomány - a pontosság ersen korlátozott: ha a szám végére képzeljük a tizedespontot, az egészek közötti értékek a gép számára nem léteznek. Azaz : 1/3=0 vagy 5/3=1 stb. A lebegpontos számábrázolás a számok hatványkitevs felírásán alapszik. Pl. 1800000000=1.810 9 1100011101.011=0.11000111010112 7 azaz Mp k A képletben k a számrendszer alapszáma (példánkban 10 ill. 2). Hogy egyértelm# legyen a felírás M<1 és a tizedesponttól jobbra álló els jegy nem 0. A lebegpontos szám a számítógépen a bináris számok hatványkitevs alakja. Ehhez a számot ún. kettes normál alakra kell hozni. Pl. /-12.25/ = 1100.01 2 =0.1100012 4 A szám kettes normál alakjának karakterisztikája 4 = 100 2 így a szám kettes normál alakban: -0.1100012 100 Az ábrázolás a következ módon történik: - els bit a szám eljele, - 7 biten a karakterisztika torzítva, - végül 3 bájton a mantissza. Karakter (character) típus ábrázolása kódolás 7/8 bit ASCII 2 byte UNICODE 8

A karakterek ábrázolása számítógépen a kódjukkal (bináris szám) történik! Szabványos kódrendszerek (ASCII, EBCDIC, UNICODE) a számítástechnika alappillérei. A kódrendszerek lényege, hogy minden karakterhez kölcsönösen egyértelm# megfeleltetéssel hozzá van rendelve egy 8 vagy 16 bites kódérték. A karaktereket a kódjukkal azonosítjuk. Összetett adatok Tömb Adott számú (általában azonos típusú) adat együttese. Dimenzió szerint: 1 dimenziós: vektor 2 dimenziós: mátrix több dimenziós Például számokból álló 5 elem# egydimenziós tömb: 12-3 0-3 1 Indexelés: A tömb minden elemének van egy sorszáma, ami azonosítja az elemet. Ezt indexnek nevezzük. Rekord/ Struktúra Több, különböz típusú adat együttese. Az összegy#jtött adatok a rekord/struktúra mezit képzik. Objektum A rekordok/struktúrák továbbfejlesztése: az adattagokon (adatmezkön) kívül tagfüggvényeket (metódusokat) is tartalmaznak. Változók Programozás-technikai megközelítésben a változó egy névvel ellátott tároló hely a számítógép memóriájában. A változó értéke ennek a tároló helynek a pillanatnyi tartalma. A változó jellemzi: név típus tárbeli kezdcím érték A változókban tároljuk az adatokat, így egy változó típusa a benne tárolt adat típusával azonos. Tehát lehetnek elemi változók (egész, valós, karakter, mutató) és összetett változók (tömb, struktúra). A változók kezelésének elve: Adatterület a memóriában Név Típus Tárcím a egész 1526 b valós -112,86 c karakter M Ha valaki megértette már a változók használatát a programozásban, akkor megértette a programozás lényegét. (E. W. Dijkstra) 9

Algoritmikus programozá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 algoritmussal szemben támasztott legfontosabb követelmények: legyen idben és lépésszámban véges; legyen egyértelm : ugyanazon bemen adatokra minden esetben ugyanazt az eredményt szolgáltassa; legyen általános: ne csak egy konkrét feladatot oldjon meg, hanem lehetleg minél szélesebb problémaosztályt! (Pl. ne csak egy konkrét másodfokú egyenletet, hanem bármilyen másodfokú egyenletet oldjon meg!) Az egyes lépésekben elvégezhet" m(veletek Neumann-elv( számítógépek esetében: egyszer# utasítások: értékadás függvényhívás összetett utasítások: utasítás blokk (több utasítás egyben) vezérlési szerkezetek (program menetének befolyásolásához használhatók) elágazások: döntési szerkezetek ciklusok: ismétlési szerkezetek Bármilyen programozási módszert alkalmazunk és bármilyen nyelven írjuk is meg a programot, elször meg kell terveznünk a probléma megoldására szolgáló elemi lépések sorozatát, azaz az algoritmust! Algoritmusok tervezésére, leírására, szemléltetésére többféle eszköz létezik Algoritmus leíró módszerek: folyamatábra (blokkdiagram) mondatszer# leírás (pszeudokód) struktogram Jackson módszer A következkben 2 algoritmus leíró módszer kerül ismertetésre: a mondatszer# leírás és a folyamatábra. Mindkét esetben a legfontosabb szerkezetek jelöléseit adjuk meg: 1. adat be- és kivitel; 2. értékadás; 3. utasítássorozat (szekvencia); 4. feltételes elágazás (szelekció); 5. ismétlési szerkezet (iteráció); 6. eljárás vagy függvény megadása (deklaráció); 10

Mondatszer leírás (pszeudokód) Az anyanyelvi megfogalmazáshoz hasonló, de annál tömörebb leírási mód. Az élnyelv pontatlanságait próbáljuk vele kizárni, de még egyszer#en értelmezhet marad. 1. BE: változók [az adatokkal szemben állított követelmények] KI: kifejezések [a kiírás formájára vonatkozó követelmények] 2. Értékadás: változó=kifejezés Az utasítás hatására a változó felveszi a kifejezés aktuális értékét. 3. Utasítás sorozat: Egymás alá írással adjuk meg az egymás után végrehajtandó utasításokat. 4. Feltételes elágazások: a) Egyágú HA feltétel AKKOR utasítás (Ha a feltétel teljesül, akkor az utasítás végrehajtásra kerül, ha nem teljesül, akkor az után folytatódik a program. Az utasítás helyén több utasítás is állhat.) b) Kétágú Ha feltétel AKKOR utasítás 1 KÜLÖNBEN utasítás 2 (Ha a feltétel teljesül, akkor az utasítás 1 kerül végrehajtásra, ha nem akkor az utasítás 2. Mindkét esetben az után folytatódik a program.) c) Többágú ELÁGAZÁS feltétel 1 ESETÉN utasítás 1 feltétel 2 ESETÉN utasítás 2... feltétel n ESETÉN utasítás n EGYÉB ESETBEN utasítás (Ha az i-edik, feltétel i teljesül, akkor az utasítás i kerül végrehajtásra, ha egyik feltétel sem teljesül, akkor az utasítás. Bármely esetben az után folytatódik a program. A feltételeknek egymást kizárónak kell lennie, azaz legfeljebb egy teljesülhet közülük.) 5. Ismétlési szerkezetek (ciklusok): a) Elöltesztel" CIKLUS AMÍG feltétel ciklusmag (Amíg a feltétel teljesül, addig a ciklusmag végrehajtásra kerül, ha már nem teljesül, akkor a után folytatódik a program.) 11

b) Hátultesztel" CIKLUS ciklusmag AMÍG feltétel (A ciklusmag mindaddig végrehajtásra kerül, amíg a feltétel teljesül. Ha már nem teljesül, akkor a után folytatódik a program. Egyszer a ciklusmag mindenféleképpen végrehajtódik!) 6. Eljárás vagy függvény megadás: ELJÁRÁS eljárás_neve (paraméterek) utasítások 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 utasítás sorozat PROGRAM VÉGE (A C programokban ennek a kitüntetett szerep( eljárásnak a main() függvény felel meg, amely a belépési pont.) Folyamatábra (blokkdiagram) Az egyik legkorábban kialakult megadási mód. Alapjeleit maga Neumann János dolgozta ki. Az egyes szerkezeti elemek között nyilakkal jelöljük a végrehajtási sorrendet. Ennek köszönheten igen vadul ugráló programok is születhetnek, minden átgondolt szerkezet nélkül. Az értékadó utasítás illetve valamilyen eljárás téglalapba, az egy vagy többágú kiválasztás rombuszba vagy lapos hatszögbe, az adatáramlás paralelogrammába, a vezérl utasítások körbe kerülnek. Az ismétlési szerkezeteket elrejtve tartalmazza az ábra. Csak nagy odafigyeléssel és következetességgel érhetjük el a strukturáltságot. 1. Adat be- és kivitel: BE: változó KI: kifejezés 2. M veletvégzés: változó= kifejezés 12

Lehet értékadó, de másfajta utasítás is. Példánkban utasításként az értékadás szerepel: a változó felveszi a kifejezés aktuális értékét. 3. Utasítás sorozat: A nyilak által meghatározott irányban haladva kell végrehajtanunk az utasításokat. 4. Feltételes elágazás: I feltétel H utasítás1 utasítás2 Ha a feltétel teljesül, akkor az utasítás 1 kerül végrehajtásra, ha nem, akkor az utasítás 2. Mindkét esetben folytatódik a program. Megfelel a kétágú feltételnek. Egyágú esetén nincs utasítás a hamis ágban. A többágú elágazás is összeépíthet ebbl. 5. Ismétlési szerkezet: A hátul tesztel ciklus a következképpen építhet fel: ciklusmag feltétel I H 13

A ciklusmag mindaddig végrehajtásra kerül, amíg a feltétel teljesül. Ha nem teljesül, akkor folytatódik a program. (Egyszer a ciklusmag mindenféleképpen végrehajtódik!) 6. Eljárás megadás: eljárásnév utasítások Külön blokkdiagramot készítünk számára. Az eljárás hívása az eljárásnév ovális dobozba írásával történik. A program egy kitüntetett szerep# eljárás, kezdpontja a START, végpontja a VÉGE: START eljárásnév utasítások VÉGE 14

Az alapvet vezérlési szerkezetek összehasonlítása Elágazások Egyágú elágazás: blokkdiagram Kétágú elágazás: blokkdiagram I Ha feltétel akkor utasítások Elágazás vége algoritmus leíró nyelv algoritmus leíró nyelv H I Ha feltétel akkor utasítások különben utasítások Elágazás vége Ciklusok Elöl tesztel"s ciklus: Elször megvizsgálja a feltételt (belépési feltétel), és csak akkor hajtja végre a ciklusmagban lév utasításokat, ha a feltétel igaz. Vegyük észre, hogy ha kiinduláskor már hamis a belépési feltétel, akkor egyszer sem fut le a ciklustörzs. blokkdiagram algoritmus leíró nyelv H Ciklus amíg feltétel ciklusmag Ciklus vége Hátul tesztel"s ciklus: Elször végrehajtja a ciklusmagban lév utasításokat, majd megvizsgálja a feltételt, és ha ez igaz, akkor újra végrehajtja a ciklustörzset. Vegyük észre, hogy a ciklusmag mindenképp lefut egyszer. blokkdiagram algoritmus leíró nyelv I H Ciklus ciklusmag amíg feltétel Ciklus vége 15

Példa algoritmus készítésre Egy egyszer# feladat megoldásával szemléltetjük a két algoritmus leíró módszert. Feladat.: adjuk össze 1-tl 100-ig a számokat! A feladat megoldása elöl tesztel ciklussal: START A=1 S=0 n A<100 A<101 Ki:S az összeg S=S+A STOP i A=A+1 PROGRAM A=1 S=0 CIKLUS AMÍG A<=100 S=S+A A=A+1 Ki:S [Az összeg 1-100] PROGRAM VÉGE 16

A feladat megoldása hátul tesztel ciklussal: START A=1 S=0 S=S+A A=A+1 A<101 i n Ki:S az összeg STOP PROGRAM A=1 S=0 CIKLUS S=S+A A=A+1 AMÍG A<=100 Ki:S [egész, Összeg 1-100] PROGRAM VÉGE 17

Elemi algoritmusok A számítógépes feladatmegoldás során az algoritmus megtervezésekor bizonyos elemi tevékenységek gyakran felmerülnek megoldandó feladatként. Az ezeket megoldó elemi algoritmusokat (programozási tételeket) mutatjuk meg a következkben. Az algoritmusokat mondatszer# leírással adjuk meg. Algoritmusok, amelyek egy sorozatból egy adatot állítanak el: Elemek összegzése Adott egy N elem# tartalmazza. ELJÁRÁS ÖSSZEGZÉS (A[],N,S) S= 0 I=0 CIKLUS AMÍG I< N S= S +A[I] I=I+1 Lineáris keresés A számsorozat. Határozzuk meg az elemek összegét! A végeredményt az S Adott egy N elem# A sorozat, és egy, az elemein értelmezett, T tulajdonság. Döntsük el, hogy van-e olyan eleme a sorozatnak, amely rendelkezik a T tulajdonsággal, és ha van, akkor hányadik! (Ha nincs ilyen tulajdonságú elem, akkor a sorszám értéke legyen -1!) ELJÁRÁS Lineáris_ keresés (A[],N,T,SORSZAM) SORSZAM=-1 I=0 CIKLUS AMÍG I < N ÉS A[I] NEM T tulajdonságú I= I+1 Ha I < N akkor SORSZAM=I Maximum kiválasztása Az elbbi feladat egy speciális eseteként, egy adott sorozat legnagyobb (vagy esetleg legkisebb) elemének megkeresése is gyakran elfordul. Adott N elem# A számsorozatból keressük ki a legnagyobb elemet! ELJÁRÁS MAXIMUM (A[],N,MAX) MAX= A[0] I=1 CIKLUS AMÍG I < N HA MAX< A[I] AKKOR MAX=A[I] I=I+1 18

Megszámlálás A tulajdonság elfordulása mellett az is kérdés lehet, hogy hány elem rendelkezik ezzel az adott tulajdonsággal. Legyen adott egy N elem# A sorozat és egy, az elemein értelmezett, T tulajdonság. Határozzuk meg a T tulajdonsággal rendelkez elemek számát! ELJÁRÁS MEGSZÁMLÁLÁS(A[],N,DB) DB= 0 I=0 CIKLUS AMÍG I < N Ha A[I] T tulajdonságú AKKOR DB= DB+1 I=I+1 PÉLDA: Ha a sorozat: 1, 3, 5, 7 a tulajdonság a párosság, akkor DB=0. Ha a sorozat: 1, 2, 4, 8 a tulajdonság a párosság, akkor DB=3. Algoritmusok, amelyek egy sorozatból egy másik sorozatot állítanak el: Kiválogatás Egy sorozat elemei közül azokat válogatjuk ki egy új sorozatba, amelyek megfelelnek egy adott tulajdonságnak. Legyen adott egy N elem# A sorozat és egy, az elemein értelmezett, T tulajdonság. Gy#jtsük ki a B sorozatba az A sorozat T tulajdonságú elemeit! A készül sorozat elemszáma DB lesz. (Ha az A sorozatban nincs T tulajdonságú elem, akkor DB 0 lesz!) Rendezések ELJÁRÁS KIVÁLOGATÁS (A[],N,T,B[],DB) DB=0 I= 0 CIKLUS AMÍG I < N HA A[I] T tulajdonságú AKKOR B[DB]=A[I] DB=DB+1 I=I+1 Gyakran a rendezett elemekkel való m#veletvégzés sokkal hatékonyabb, mint rendezetlen elemek esetében. Ezért nagyon fontosak a sorozat elemeit más sorrendbe elállító algoritmusok. A kívánt rendezési irány lehet növekv vagy csökken Valamennyi ismertetésre kerül rendezési algoritmusban a növekv sorrend elérése a cél. A többféle rendezési módszer közül a legismertebbek algoritmusát adjuk meg. A rendezéseket mindig helyben, új sorozat létrehozása nélkül kell megoldani. Ha két sorozattag között a reláció nem a kívánt rendezettség szerinti, akkor a tagok felcserélésére van szükség. 19

Két elem cseréjét a következkben az alábbi módon jelöljük: EGYIK A csere megvalósításához egy segéd változót használunk: MÁSIK. EGYIK MÁSIK jelentése tehát: segéd= egyik egyik= másik másik= segéd Minimum-elven alapuló rendezés A minimumkereséses rendezés lényege az, hogy egy adott intervallumban - amely kezdetben a teljes sorozat - megkeressük a legkisebb elemet, s azt tesszük az els helyre. A következ lépésben eggyel sz#kítjük az intervallumot (megnöveljük a sorozat alsó határát jelöl indexet), és ismét a legkisebb elemet visszük elre. Végül a rendezend adatok elfogynak, a sorozat végére érünk. A mindenkori legkisebb elem keresése lineáris módszerrel történik. (Ha a kívánt sorrend a csökken rendezettség, akkor a maximum-elv# rendezési algoritmust használjuk, ami csak a relációban különbözik.) ELJÁRÁS Minimum_elv (A[], N) I=0 CIKLUS AMÍG I < N-1 J=I+1 CIKLUS AMÍG J < N HA A[I] > A[J] AKKOR A[I] A[J] J=J+1 I=I+1 Buborék rendezés A buborék rendezés mindig két szomszédos elemet vizsgál, s ha azok a kívánt rendezettségnek nem megfelel relációban vannak, felcseréli ket, majd tovább lépve újabb elempárt vizsgál. Az elejétl a végéig ismételten végigpásztázva az egész sorozatot, eljutunk a rendezett állapotig, amikor már nincs szükség cserére. A bels ciklus egy lefutása után a legnagyobb elem az utolsó helyre kerül. ELJÁRÁS BUBORÉK_ELV(A[],N) I=1 CIKLUS AMÍG I < N J=0 CIKLUS AMÍG J < N-I HA A[J] > A[J+1] AKKOR A[J] J=J+1 I=I+1 A[J+1] 20

Javított buborékos rendezés Ha a buborékos rendezésnél egy teljes bels ciklus lefutása alatt egyetlen csere sem volt, akkor a sorozat már rendezett. Ilyenkor feleslegesek a további összehasonlítások. A CSERE változó jelzi azt, hogy a bels ciklusban kellett-e cserélni. A bels ciklus indulása eltt, elkészítésként, a változót nullázzuk, és csak akkor lesz újra 1 az értéke, ha cserére volt szükség. Tehát, ha az összes szomszédos elem-pár a kívánt rendezettségnek megfelel relációban van, akkor a CSERE változó értéke 0 marad. ELJÁRÁS JOBB_BUBORÉK(A[],N) CSERE = 1 CIKLUS AMÍG CSERE ==1 CSERE = 0 J=0 CIKLUS AMÍG J<N-1 HA A[J]>A[J+1] AKKOR A[J] J=J+1 CSERE =1 A[J+1] Tovább javított buborékos rendezés Mivel a bels ciklus egyszeri lefutása után a legnagyobb elem az utolsó helyen áll, ezt az elemet már felesleges vizsgálni. Ebben az algoritmusban a bels ciklus minden alkalommal eggyel kevesebb elemre fut le, mert a DB változót a bels ciklus befejezdése után csökkentjük. ELJÁRÁS LEGJOBB_BUBORÉK(A[],N) CSERE = 1 DB = N CIKLUS AMÍG CSERE == 1 CSERE = 0 J=0 CIKLUS AMÍG J< DB -1 HA A[J]>A[J+1] AKKOR A[J] J=J+1 DB = DB-1 CSERE =1 A[J+1] 21