Információs Technológia



Hasonló dokumentumok
C programozás. 1 óra Bevezetés

Java programozási nyelv

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Programozás alapjai C nyelv 1. gyakorlat

Programozás alapjai C nyelv 1. gyakorlat

Assembly Utasítások, programok. Iványi Péter

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

Digitális rendszerek. Utasításarchitektúra szintje

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

Java II. I A Java programozási nyelv alapelemei

Mintavételes szabályozás mikrovezérlő segítségével

Algoritmusok. Dr. Iványi Péter

A C# programozási nyelv alapjai

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

A C programozási nyelv II. Utasítások. A függvény.

A programozás alapjai

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

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

Java II. I A Java programozási nyelv alapelemei

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

Programzás I gyakorlat

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

Programozás alapjai (ANSI C)

code segment para public 'code' assume cs:code, ds:code, es:nothing, ss:nothing

Adatbázis rendszerek. dr. Siki Zoltán

Programozási nyelvek JAVA EA+GY 1. gyakolat

Balaton Marcell Balázs. Assembly jegyzet. Az Assembly egy alacsony szintű nyelv, mely a gépi kódú programozás egyszerűsítésére született.

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

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

Programozási nyelvek (ADA)

Assembly utasítások listája

Információtartalom vázlata

Előszó avagy Murphy és az optimizmus. Tartalomjegyzék

Programozási nyelvek 6. előadás

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Máté: Assembly programozás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

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

Imperatív és procedurális programozás a Javában

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

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Stack Vezérlés szerkezet Adat 2.

Komputeralgebra Rendszerek

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Programok értelmezése

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

BASH script programozás II. Vezérlési szerkezetek

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?

C programozási nyelv

assume CS:Code, DS:Data, SS:Stack Start mov dl, 100 mov dh, 100 push dx Rajz

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Adatszerkezetek 1. Dr. Iványi Péter

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

Labor gyakorlat Mikrovezérlők

Programozás II. 2. Dr. Iványi Péter

FUNKCIONÁLIS PROGRAMOZÁS

Programozás 1. Dr. Iványi Péter

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Az algoritmusok alapelemei

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

Algoritmizálás + kódolás C++ nyelven és Pascalban

Szkriptnyelvek II. Perl programok

Bevezetés a C++ programozási nyelvbe

Labor gyakorlat Mikrovezérlők

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

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

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

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

Digitális technika VIMIAA01 9. hét

Elôszó a magyar kiadáshoz A Kiadó Elôszó

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

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

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

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

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

A TANTÁRGY ADATLAPJA

A C programozási nyelv III. Pointerek és tömbök.

Szoftvertechnológia alapjai Java előadások

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

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

Adatok ábrázolása, adattípusok

ME Szoftverfejlesztés

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

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

S z á m í t ó g é p e s a l a p i s m e r e t e k

A C programozási nyelv III. Pointerek és tömbök.

Assembly. Iványi Péter

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

Máté: Assembly programozás

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Algoritmusok, adatszerkezetek, objektumok

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

Imperatív programozás

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

Adatbázis és szoftverfejlesztés elmélet

A 32 bites x86-os architektúra regiszterei

Átírás:

Információs Technológia Programozási nyelvek kialakulása, a C nyelv Fodor Attila Pannon Egyetem Műszaki Informatika Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2009 szeptember 17.

Történeti áttekintés Programozási nyelvek Történeti áttekintés Blaise Pascal (1623-1662) mechanikus 6 digites összeadó/kivonó gép Charles Babbage (1792-1871) Analitical Engine a mai digitális számítógépek előfutára, A tervek jók voltak (A kor technológiai színvonalán elkészítésükre nem volt esély.) Ada Byron (1815-1852) Az első példaprogramok az Analitical Engine-re Hermann Hollerith (1860-1929) Elektromos, lyukkártya alapú gép népszámlálási adatok feldolgozására 1896-ban megalapítja a Tabulating Machine Company-t (1924-től IBM) Howard Aiken (IBM 1943) MARK I. telefonreléken alapuló gép 18m hosszú, 2.5m magas gép, kb 300 ms egész összeadási sebesség Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 2 / 39

Történeti áttekintés Programozási nyelvek Történeti áttekintés Neumann János (1946) "Elozetes gondolatok egy számító berendezés logikai tervéről" című tanulmány EDVAC (1951) ezen alapuló gyakorlati megvalósítás 1951 Mikroprogramozás elve 1971 Intel 4004 1985 Intel iapx386 Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 3 / 39

Számítógépek programozása Szoftverekkel szemben támasztott követelmények feladat specifikáció szerinti végrehajtása lehető legrövidebb futási idő lehető legkisebb helyfoglalás (memória, HDD) program feltétlen megbízhatósága gyors és olcsó kivitelezés határidők pontos betartása hibátlan programozás könnyű kezelhetőség könnyű karbantarthatóság (maintability) egyszerű továbbfejleszthetőség (extensibility) programnak a programozó személyiségétől való függetlensége (egoless programming) Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 4 / 39

Szoftverek minősége Programozási nyelvek Számítógépek programozása Olvashatóság: a programnak világosan és érthetően kell kódolva lennie, tiszta logikával Modularitás: mennyire van részekre bontva a program, és az egyes részek mennyire látnak el külön feladatokat Strukturáltság Helyesség (correctness): a programnak pontosan a specifikációja szerint kell működni Robosztusság (robustness): szelsőséges (nem specifikált) feltetelek közötti működési mód, a szoftver a legváratlanabb esetekben sem okozhat jelentős kárt Módosíthatóság (extendibility): a szoftver más környezetben kis kiigazításokkal is működik Újrahasználhatóság (reuseability): szoftver, vagy egyes részeinek felhasználása más problémák megoldására Kompatibilítás (compatibility): más szoftverekkel való együttműködés, Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 5 / 39

Szoftverek minősége 2. Programozási nyelvek Számítógépek programozása Könnyű használhatósag: a szoftver használatának gyors és könnyű elsajátítása, emberközeli és logikus szoftverkezelés Hatékonyság Hordozhatóság Tesztelhetőség Integritás Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 6 / 39

A programfejlesztés lépései Programfejlesztés elmélete Specifikáció Tervezés Algoritmus választás Adatszerkezet választás Nyelv választása Kódolás Teszt specifikáció Tesztelés Dokumentálás Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 7 / 39

Monolitikus programozás (-1970) Egy programozó egy program programoknak nincs szerkezete A moduláris programozás előnyei a részprogramok könnyen áttekinthetők könnyebben megírható és tesztelhető több modul írható egy időben (párhuzamos problémamegoldás) könnyebben javítható a modulok szabványosíthatók modulkönyvtárakban tárolható modulok újrafelhasználhatók Tervezési módszerek Top-Down a feladatot részfeladatokra bontjuk, majd azokat további részfeladatokra, míg kezelhető méretű részproblémákhoz nem jutunk Button-Up a részfeladatokból kell összeépíteni a programot nincs módszer a modulok összefűzésére, nincs módszer annak bebizonyítására, hogy a modulok együtt jól fognak dolgozni. Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 8 / 39 Programozási nyelvek Programfejlesztés elmélete A programozás módszertana, Tervezési módszerek

Programozási paradigmák Programfejlesztés elmélete Az imperatív programozási paradigma Az imperatív (más néven procedurális) programozási paradigma a legelterjedtebb, a legrégibb; erősen kötődik a Neumann-féle számítógép-architektúrához. Két fő jellemzője a parancs és az állapot. A program állapotát a leggyakoribb paranccsal, az értékadással - azaz a változók frissítésével - változtathatjuk meg. Például: ALGOL, C, C++, Clipper, Matlab, PHP, Pascal A deklaratív programozási paradigma A deklaratív stílusban programozónak csak azt kell megmondania, hogy mit akarunk, az algoritmust az értelmező- vagy fordítóprogram állítja elő. A deklaratív programozás két válfaját szokás megkülönböztetni: a logikai és a funkcionális programozást. Például: Haskell, Lisp, SML, Scheme Objektum-orientált Aspektus-orientált Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 9 / 39

Programozási paradigmák 2. Programfejlesztés elmélete Üzenet-orientált Függvény-orientált Adatfolyam-orientált Esemény-orientált Szimbolikus Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 10 / 39

Program, Algoritmus Programozási nyelvek Programfejlesztés elmélete Program = Algoritmus + Adatstruktúra Algoritmus Tevékenységek és döntések egy sorozata Algoritmus megadása Szóban Folyamatábrával Struktogrammal Mondatszerű leírással (pszeudokód) Programszerkezetek soros (szekvencia) elágazás (szelekció) ciklikus (iteráció) szerkezetet (Rekurzió) Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 11 / 39

Számítógépek programozása Számítógépek programozása Gépi kódban mindent a minden egyes CPU utasításnak szerepelnie kell Könyvtárak a közös feladatokra Kötegelt feldolgozás Kezdeti operációs rendszerek Input/Output File kezelés Mai operációs rendszerek Több felhasználó Több task Védelem Hálózat Grafikus felület Valós idejű operációs rendszerek Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 12 / 39

Gépikódú utasítások csoportosítása Gépikód, Assembly RISC/CISC Egyszerű gyorsan végrehajtható műveletek Adatok mozgatása (mov, ld, st, in, out) Aritmetikai műveletek (add, sub, mul, div) Logikai műveletek (and, or) Vezérlésátadó műveletek (jmp, jz, jnz, call, ret) Veremkezelő műveletek (push, pop) Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 13 / 39

Gépikód Programozási nyelvek Gépikód, Assembly Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 14 / 39

Assembly példaprogram Gépikód, Assembly Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 15 / 39

Assembly példaprogram Gépikód, Assembly assume ds:potyi,cs:potyi,es:potyi org 100h Start: mov ax,0b800h mov es,ax jmp potyog potyog: mov si,4079 ini: mov byte ptr es:[si],24 dec si cmp si,3999 jnz ini mov di,3998 mov si,4079 mov cx,25 vissza: mov bx,word ptr es:[di] mov word ptr es:[di],0720h cmp bl,32 je space xor ax,ax mov al,byte ptr es:[si] dec byte ptr es:[si] push bx mov bx,ax shl bx,7 shl ax,5 add ax,bx sub si,4000 shl si,1 Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 16 / 39

Assembly példaprogram (folytatás) Gépikód, Assembly add ax,si shr si,1 add si,4000 pop bx push di mov di,ax mov word ptr es:[di],bx pop di space: sub di,2 dec si pushf push ax mov al,255 var: mov ah,255 var2: dec ah jnz var2 dec al jnz var pop ax popf cmp si,3999 jnz vissza mov si,4079 dec cx jnz vissza xor ah,ah int 16h masol2: mov ax,4c00h int 21h potyi ends End Start Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 17 / 39

Operációs rendszer A hardver, az operációs rendszer és a programok kapcsolata Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 18 / 39

Operációs rendszer feladatai Operációs rendszer File kezelés Tárgazdálkodás Felhasználói felület Perifériák kezelés Hálózatkezelés Ütemezés Védelem Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 19 / 39

Programozási nyelvek B, BCPL (1970) - típus nélküli nyelvek FORTRAN, ALGOL UNIX (1969) A kezdeti fejlesztések az AT&T-ben 1969 és 1973 között Dennis Ritchie és Brian Kerninghan. (A legkreatívabb időszak, Ritchie-nek köszönhetően 1972-ben volt. Azért lett "C" a nyelv neve, mert egy korábbi, "B" nevű programozási nyelv sok tulajdonságát "örökölte".) 1973-ban újraírják C nyelven (Ez volt az egyik első operációs rendszer mag, mely nem assembly nyelven íródott. Kb. 8000 C sor + kb.700 sor assembly nyelven) A C nyelvet a legkülönbözőbb gépeken implementálták 1989-ben az ANSI C szabvány (Az Amerikai Nemzeti Szabványügyi Hivatal (American National Standards Institute) megalakította az X3J11 bizottságot 1983-ban és ez után született meg a szabvány.) Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 20 / 39

C nyelv jellemzői Programozási nyelvek Magas szintű nyelvekre jellemző adatszerkezetek és vezérlési struktúrák Hatékony gépközeli megfogalmazás Rendszerprogramozási nyelv Függvényorientált, egyszintű Rekurzív függvény hívási lehetőség Kevésbé szigorú típusellenőrzés Standard függvénykészlet, ami nem része a nyelvnek de elengedhetetlen Nyelvi szinten közvetlenül nem támogatja a dinamikus adatszerkezeteket Nyelvi szinten nem támogatja a konkurens programozást és az ahhoz tartozó szinkronizációs mechanizmusokat Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 21 / 39

C fordító Programozási nyelvek A fordítás több lépcsőben történik Előfordítás (PP) Közbülső kód generálása (C0) Assembly-re fordítás (C1) Gépi kódra fordítás (Ass) Gépi kód összeszerkesztése (Linker) Közbülső kód minden olyan információt hordoz, ami a kódgeneráláshoz szükséges. C1 átírása egy új architektúrához rövid idő alatt kivitelezhető Implementálni kell a könyvtári függvényeket, melyek többnyire C nyelven vannak megírva. Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 22 / 39

Változó, azonosító, A C nyelv típusai Változókban tároljuk az adatokat A változókat azonosítóval nevezzük el A változó típusa meghatározza: az értékkészletet a konstansokat a művelethalmazt Egyszerű típusok karakter egész valós felsorolás Összetett vagy származtatott típusok tömb struktúra unió függvény mutató bitmező Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 23 / 39

A C nyelv alapelemei Programozási nyelvek azonosítók kulcsszavak konstansok string literálok operátorok írásjelek Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 24 / 39

A C nyelv jelkészlete Programozási nyelvek Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 25 / 39

Azonosítók Programozási nyelvek Azonosítók Bizonyos összetevőkre névvel hivatkozunk Első karakter: _ (alsóvonás) vagy betű Kis és nagy betű között különbséget tesz (Case sensitive) Például: azonosito _alap azonosito123 Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 26 / 39

Kulcsszavak Programozási nyelvek Nem módosíthatóak Más célra nem használhatóak Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 27 / 39

Konstansok Programozási nyelvek Egész konstans Decimális: Pl.: 187, -123, 0 Oktális (első jegy 0) Pl.: 012, -032, 0 Hexadecimális (előtag 0x vagy 0X) Pl.: 0x123, 0X23, 0 Karakter konstansok Egyszeres idézőjelek ( ) közé zárt egy vagy több karaktert Pl.: 1, d Lebegőpontos konstansok Olyan decimális szám, amely (előjeles) valós számot reprezentál Pl.: 15.675, 1.23e12 Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 28 / 39

String konstansok (string literálok) Kettős idézőjelek közé zárt karaktersorozat Például: "string constans" "string constans \n" Tárolás a memóriában: a konstans végén \0 (záró karakter = 0) Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 29 / 39

Operátorok Programozási nyelvek Az operandusok feldolgozását előíró szimbólumok Egy vagy több karakterből áll Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 30 / 39

Írásjelek a C nyelvben Programozási nyelvek Olyan szimbólumokat jelölnek amelyeknek csak szintaktikai szerepe van azonosítók elkülönítése kód egyes részeinek kijelölése semmilyen műveletet sem definiálnak Néhány írásjel egyben operátor is lehet!!! [] tömb kijelölése, méretének megadása () paraméter- és az argumentum lista kijelölése {} blokkok vagy függvény behatárolása * mutató típus jelölése a deklarációban, függvény argumentumok elválasztása : címke elválasztása ; utasítás végének jelölése # előfordító direktíva jelölése Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 31 / 39

A nyelv kifejezési Programozási nyelvek operátorokkal összekapcsolt operandusokból állnak (+ értékadás és a függvényhívás) Kifejezés: Pl. a+b a=b v1=v2=z-5 szam=1 fuggveny(a, b) Kifejezés-utasítás: kifejezés ; utasítás(;) Pl. a+b; a=b; v1=v2=z-5; szam=1; fuggveny(a, b); Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 32 / 39

Programvezérlő szerkezetek Utasítás csoportok kialakítása (Blokk): { } definíciók és deklarációk utasítások Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 33 / 39

Programvezérlő szerkezetek 2. Kétirányú elágazás if (feltétel) utasítás; if (feltétel) utasítás1; else utasítás2; if (feltétel) { utasítás1 utasítás2 } else { utasítások... } Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 34 / 39

Programvezérlő szerkezetek 3. switch (Több irányú elágazás) switch ( egész kifejezés ) { case konstans1 : utasítás1_1; utasítás1_2... break; case konstans2 : utasítás2_1;... break; default: utasítás_d_1; break; } Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 35 / 39

Programvezérlő szerkezetek 4. while ciklus while ( feltétel ) utasítás; while ( feltétel ) { utasítás1; utasítás2; } Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 36 / 39

Programvezérlő szerkezetek 5. for ciklus for ( inicializáló kifejezés ; feltétel ; léptető kif. ); for ( inicializáló kifejezés ; feltétel ; léptető kif. ) utasítás; for ( inicializáló kifejezés ; feltétel ; léptető kif. ) { utasítás1; utasítás2; } Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 37 / 39

Programvezérlő szerkezetek 6. do-while ciklus do utasítás while ( feltétel ); do { utasítás1; utasítás2; } while ( feltétel ) Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 38 / 39

Programvezérlő szerkezetek 7. Ciklus működésének szabályozása break kilép az őt közvetlenül tartalmazó ciklusból (while, do, for) ill. switch utasításból continue az őt közvetlenül tartalmazó ciklus magjának további részét átlépi, azaz a feltételvizsgálattal (while, do) illetve a léptetéssel (for) folytatja Fodor Attila (Pannon Egyetem) Információs technológia 2009 szeptember 17. 39 / 39