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 paradigma, adattípus fogalma, változók Amiről szólesz: Amiről szólesz: A C programozási nyelv Kifejezések, kalkuláció verem alkalmazásával, RPN (Reverse Polish Notation), vezérlési szerkezetek (elöl- és hátultesztelő ciklusszervezés, igazságértékre ill. egész típusokra alapozott választásos vezérlésszervezés) 1
Amiről szólesz: Amiről szólesz: A Struktúrált programozás alapjai, top-down és bottom-up programtervezés, programszegmensek, név-, érték-, referencia szerinti paraméterátadás Összetett típusok: halmazok, vektorok, konglomerátumok, szekvenciális és véletlen elérésű adatállományok Amiről szólesz: Amiről szólesz: Klasszikus vektoralgoritmusok: eldöntés, keresés, kiválasztás, leválogatás, rendezés, összefésülés, rekurzió: az elegancia veszélyei, a rekurzió megvalósításának processzor oldali támogatása Dinamikus adatszerkezetek: listák, fák, listák különleges alkalmazásai: sorok, prioritásos sorok, verem, fák tipikus alkalmazásai: K-ágú fák: bináris rendezőfa, bejárás, kiegyensúlyozás, Amiről szólesz: Amiről szólesz: Adatbázisokban alkalmazott adatszerkezetek, több kulcs szerinti rendezett táblák, indexek használata, hash kódolás Az eseményvezérelt (állapotváltozóra alapozott) program modell, adatfeldolgozás, visszalépéses algoritmus, tipikus feladatok 2
Ajánlott irodalom Ajánlott irodalom Benkő Tiborné Dr. Poppe András Együtt könnyebb a programozás C N. Wirth algoritmusok + adatstruktúrák = programok Ajánlott irodalom W. Amsbury Data Structures from Arrays to Priority Queues Programozás: előírni a számítógépnek, hogy mit csináljon Paradigmák: Programozási paradigmák: Imperatív Deklaratív azok az elvek, amelyek mentén a problémát megközelítjük - struktúrált - logikai - funkcionális 3
számítógép külvilág processzor processzor memória perifériák műveletvégző egység regiszterek memória perifériák végrehajtható kód ember-gép kapcsolat eszközei adatok háttér tárolók számítógép külvilág processzor Algoritmus: perifériák gépiesen (gondolkodás nélkül) végrehajtható lépések véges sorozata, amely elvezet a megoldáshoz memória 4
Módszer (eljárás): gépiesen (gondolkodás nélkül) végrehajtható lépések sorozata, amely elvezet a megoldáshoz Mielőtt az algoritmust kódolni kezdjük, meg kell győződni róla, hogy helyes, teljes és véges Valóban azt a feladatot oldja meg, amire szánjuk. Minden lehetséges esetben megoldja. Véges sok lépésben befejeződik. Nem elég kipróbálni, bizonyítani kell! Példa: Próba: Egy szám köbgyökét úgy kapjuk, ha elosztjuk 4-gyel. 8 : 4 = 2 2 2 2 = 8 1 kísérlet nem kísérlet! -8 : 4 = -2-2 -2-2 = -8 Na még egyet! 12 : 4 = 3 3 3 3 = 27 5
6
7
8
9
10
11
12
13
14
15
16
A kezelhetetlen probléma definíciója - Azok a problémák amelyek a futási idő tekintetében a feladat méretének exponenciális függvényével jellemezhetők, vagy - Memória szükséglet tekintetében polinomiálisak számítástechnikai szempontból kezelhetetlenek 17
Gépközeli programozás: Algoritmusok kódolása: STRUKTÚRÁLATLAN és STRUKTÚRÁLT eszközökkel Struktúrálatlan és struktúrált eszközök egyaránt megengedettek Magas szintű nyelvi programozás: Magas szintű nyelvi programozás: Struktúrálatlan eszközök kerülendők Struktúrált eszközökből építkezünk A nyelvek használatukat lehetővé teszik (= tartalmaznak olyan elemeket, amelyek segítségével szükség esetén megvalósíthatók) A nyelvek használatukat támogatják (= olyan elemeket tartalmaznak, amelyek a megvalósítást közvetlenül elősegítik) A programok építőkockái: A programok építőkockái: ELEMI TEVÉKENYSÉG ÖSSZETETT TEVÉKENYSÉG 18
A programok építőkockái: A programok építőkockái: ÖSSZETETT TEVÉKENYSÉG KIFEJTÉSE DÖNTÉSI PONT Megvalósulás a processzor utasításkészletében: Megvalósulás a processzor utasításkészletében: SZUBRUTIN HÍVÁS SZUBRUTIN BELÉPÉSI PONT VISSZATÉRÉS Megvalósulás a processzor utasításkészletében: A struktúrált programok építőkockái: FELTÉTELES VEZÉRLÉSÁTADÁS TEVÉKENYSÉG AZ ÁLLAPOTSZÓ EGY BITJE SZERINT BELSŐ STRUKTÚRÁJA LEHET! 19
A struktúrált programok építőkockái: A struktúrált programok építőkockái: SZEKVENCIA? A struktúrált programok építőkockái: ELÖL TESZTELŐ CIKLUS A struktúrált programok építőkockái: HÁTUL TESZTELŐ CIKLUS A struktúrált programok építőkockái: IGAZSÁGÉRTÉKRE ALAPOZOTT VÁLASZTÁS A struktúrált programok építőkockái: EGÉSZ TÍPUSRA ALAPOZOTT VÁLASZTÁS 20
A struktúrált programok építőkockái: EGÉSZ TÍPUSRA ALAPOZOTT VÁLASZTÁS A struktúrált programok építőkockái: IGAZSÁGÉRTÉKRE ALAPOZOTT VÁLASZTÁS X X = α α β λ tevékenység 1 tevékenység 2 tevékenység 11 tevékenység 1 A struktúrált programozás alaptétele: Minden algoritmusnak létezik struktúrált programja Az algoritmus leírásában megengedett elemek: elemi tevékenység szekvencia elágazás (döntés függvényében) becsatlakozás A struktúrált program leírásában megengedett elemek: elemi tevékenység szekvencia ciklus (elöl- és hátultesztelő) választás (igazságértékre alapozott) Ekvivalens átalakításokkal minden egy bemenetű és egy kimenetű gráf megengedett alakra hozható. 21
Matematikai értelemben nem teljesen korrekt, de elfogadott a következő szemléletes bizonyítás. A problémát a struktúlálatlan vezérlésátadások okozzák. Vezessünk be egy segédváltozót! A program kezdetekor állítsuk nullára! Minden becsatlakozást számozzunk meg! Amikor számozott ponthoz érkezünk, állítsuk be a változó értékét, és a tevékenységet hagyjuk abba! Ciklusban keressük a folytatás helyét, és mindig a kívánt ágat hajtsuk végre! Példa: A C B N Y Példa: A N Y Példa: X 0 N Y C B X 0 1 2 A C B X 1 X 2 X 2 X 1 X 3 X<3 22