Cél Olyan programokat írjunk, amelyek: ● helyesek: pontosan a feladatot oldja meg ● megbízhatóak: nem romlanak el működés közben ● karbantarthatóak: ha kell valamin változtatni, az könnyen menjen ● újrafelhasználhatóak: ne kelljen mindig semmiről kezdenünk ● hatékonyak: csak annyi erőforrást használnak, amennyi feltétlenül szükséges ● hordozhatóak: több konfiguráción is használhatóak legyenek ● barátságosak: könnyen kezelhetőek, átláthatóak
PPKE-ITK Bevezetés a programozásba 1. 1. gyakorlat: Programozási alapok, alapok PlanG utasítások, kifejezések, típusok © 2008.09.08. Giachetta Roberto
[email protected] http://digitus.itk.ppke.hu/~groberto 2
3
2008.09.08.
A program
Programozási nyelv
● Matematikailag: állapotterek felett értelmezett reláció ● Informatikailag: utasítások sorozata, amely műveleteket hajt végre adott értékekkel ● A futtatható programok (exe, com, …) gépi kódot tartalmaznak, amely általában operációs rendszer, illetve gépspecifikus (azaz csak egy géptípuson adott operációs rendszeren tud futni), futni) mivel számítógép a saját gépi kódjában várja az utasításokat (ezt tudja értelmezni a processzor), és működést az operációs rendszeren keresztül végzi ● Régen (pl. lyukkártyás gépeknél) csak ez állt rendelkezésre, majd az 1950-es években megjelentek az első programozási nyelvek (FORTRAN, LISP, ALGOL, ….)
● Egy eszköz, amivel könnyebben tudunk programozni, és nem kell közvetlenül gépi kódot írnunk ● Egy új szintet definiál, ami a gépi kódot leegyszerűsített módban adja meg a programozó számára (így sokkal többet programozhatunk sokkal hatékonyabban) ● Programkódot kell írnunk, amely egy adott nyelvnek megfelel ● A programozási nyelvek osztályozása: ● alacsony szintű (assembly): közelebb áll a gépi kódhoz, de már nyelvileg megfogalmazott (gépfüggő) utasítások ● magasabb szintű: gépi architechtúrától független utasításkészletű nyelv, amely tovább egyszerűsíti az assembly kódot, és további lehetőségeket biztosít a programozó számára
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
4
A fordítóprogram
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
A fordítóprogram
● A magasabb szintű nyelven megírt programból előbb assembly kódot, majd abból gépi kódot állítunk elő, ez a fordítóprogram dolga ● A fordítást a követően a futtatható állományok gépközeli kódot tárolnak (ez általában gépi kódot jelent, de lehet valamilyen átmeneti nyelv) ● A fordító ellenőrzi ellenőrzi, hogy a programunk megfelel-e megfelel e a programnyelv szintaktikájának, az itt keletkezett hibákat fordítási hibának nevezzük ● Mást (például változók értékei, mutatók címei,…) nem tud ellenőrizni, és követni, a programozó feladata az, hogy ilyen hibák ne kerüljenek a programba (ehhez tesztelés, debuggolás szükséges, amik a szoftvertechnológia témakörébe tartoznak) 5
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
Magas szintű programozási nyelven megírt kód
Assembly kód
f dí á fordítás Gépi kód
Futtatható állomány
6
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
1
7
Programok szerkezete
Programok szerkezete
● Egy program futás közben a memóriában helyezkedik el, az tárolja a programkódot, valamint azokat az értékeket, amivel a program dolgozik ● minden érték egy adott memóriacímen helyezkedik el, ezzel meghatározható, hivatkozni rá a memóriacímmel túl bonyolult lenne, ezért inkább külön megnevezést alkalmazunk minden egyes érték elérésére (pl. a, szam, ertek_1, …) ● Az értékek két fajtáját különböztetjük meg: ● változó: értékét megváltoztathatjuk a program működése során ● konstans: egyszer adhatunk neki értéket, és ezt az értékét nem tudjuk megváltoztatni a program során (pl. ∏)
● Az értékeknek típusa van: meghatározza, mit tehetünk bele, milyen műveleteket értelmezhetünk rajta ● nem minden nyelvben, de a legtöbben van ● a szokásos típusok: egész, valós, logikai, karakter, szöveg ● A legtöbb nyelvben a programozó alkothat saját típusokat, illetve a már létezőkből összetett típusokat is ● A programkódok rendre két részből állnak: ● deklarációs rész: itt határozzuk meg, milyen változók, konstansok szerepelnek a programban ● törzsrész: ez a program által végrehajtott utasítássorozat ● egyes programozási nyelvekben a két rész nincs elkülönítve, a törzsrészben bármikor elhelyezhetünk deklarációkat (ilyen pl. a C++)
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
8
Programok készítésének menete
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
Programok készítésének menete
● A programozás nem csak kódolásból, hanem több lépésből áll ● A programokat (általában) nem hasra ütésre készítjük a feladatokhoz, hanem minden esetben egy előzetes elemzést végzünk a feladaton, ennek eredménye: ● egyszerű programokra: meghatározzuk, hogy mi kerüljön a program bemenetére és mit szeretnénk látni a kimenetén (ezt nevezik specifikációnak) ● bonyolultabb programokra: a készülő program várható szerkezetének feltérképezése (rendszerterv), majd a kész program egy egyszerűsített váza (programmodell) ● Csak ezt követően lehet a megfelelő programkódot előállítani, vagyis implementálni a programot 9
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
Feladat elemzés Rendszerterv Specifikáció P Programmodell d ll implementálás
Program egyszerű program 10
A PLanG
bonyolult program
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
A PLanG
● Lővei László fejleszti ● Letölthető: http://digitus.itk.ppke.hu/~lovei ● Java-ban íródott, ezért kell Java futtatási környezet (Java SE Development Kit, letölthető: http://java.sun.com) ● Célja: programozás oktatása kezdőknek ● Egy fordítóprogram, és fejlesztői környezet, amely saját programozási nyelvecskét alkalmaz ● Funkciói: eredmény kiírása, futtatás nyomkövetése lépésenként (azaz megtudhatjuk, egy sor feldolgozása miként történik), memória nyomkövetése lépésenként (láthatjuk változóink értékváltozásait) ● Programozás alapszabályát (CTRL+C/V) alkalmazhatjuk
Eszköztár
Nyomkövető
Program Fordítóablak
Be- és kimenet 11
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
12
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
2
13
PLanG kezelőfelület
PLanG kezelőfelület
● Program: ide gépeljük be az utasításokat a szintakszisnak megfelelően, ez kerül fordításra, majd futtatásra ● Nyomkövető: a program lépéseit követhetjük nyomon, itt láthatjuk, változóink milyen értékeket vesznek fel futás közben, és hogyan foglalják a memóriát ● Fordítóablak: fordítási üzenetek, illetve, ha hibát talál a programban fordítás során során, akkor azok ide kerülnek ● Bemenet: beolvasandó értékek, ha a programba szeretnénk magunk megadni értékeket futás közben ● Kimenet: kiírás helye, ide kerülnek a program által kiírt értékek
● Eszköztár: ● fájl megnyitása/mentése: elmenthetjük és betölthetjük az általunk írt programkódot ● programszöveg értelmezése (fordítás imitálása, valójában nem fordít a program, nem állít elő gépi kódot) ● futtatás/leállítás (menet közben is meg lehet szakítani a program futását) ● beállítások: betűtípus, lépésszám (ciklus maximális futási hosszát is beállíthatjuk)
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
14
PLanG kulcsszavak
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
PLanG kulcsszavak
● Minden nyelvnek vannak fenntartott szavai (jelei), amelyek meghatározott célt szolgálnak, ezek a PLanG-ban: ● PROGRAM - program kezdete ● VÁLTOZÓK - változók deklarációjának kezdete ● PROGRAM_VÉGE - program vége ● BE - a bemenetről történő beolvasás ● KI - kiírás kií á a ki kimenetre t ● EGÉSZ, VALÓS, LOGIKAI, KARAKTER, SZÖVEG, TÖMB, FÁJL - változótípusok ● NEM - logikai negáció ● IGAZ, HAMIS - logikai összekötők ● ÉS, VAGY – logikai összekötők ● := – értékadás 15
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
● ● ● ● ● ● ● ● ● ● ● ● 16
PLanG kulcsszavak
** – megjegyzés =, /=, <, >, <=, >= – relációk +, -, /, *, | |, ^, DIV, MOD – műveletek - – szám negáció RND – véletlen szám generálás SIN, COS, TAN, LOG, EXP – matematikai függvények KEREK EGÉSZ – kerekítés/egészrész KEREK, k kí é / é é valósnál ló ál @ - indexelés KIS, NAGY – betűméret váltás BETŰ, SZÁM – karaktertípus lekérdezés SV – sorvége jel BEFÁJL, KIFÁJL – fájlmegnyitás
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
PLanG programok szerkezete ● A programoknak nevet kell adni, amit az első sorban írunk a program kulcsszó után ● A programok elején a deklarációs rész található, amit a programtörzs követ, a kettő között nem kell semmilyen kulcsszót tenni ● A deklarációs részt a változók kulcsszó jelöli ● A programtörzs végét a program_vége kulcsszó jelöli
● MEGNYIT – fájl megnyitása ● LEZÁR – fájl bezárása ● VÉGE – vége van-e a fájlnak
PROGRAM programnév VÁLTOZÓK: ... ** változók deklarációja ** programtörzs: ... PROGRAM_VÉGE 17
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
18
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
3
19
PLanG programok szerkezete
Az első program
● A program nevében és a változónevekben bármilyen ékezetes, alfanumerikus karaktert használhatunk, de csak betűvel kezdődhet (pl. a120 megfelelő, de 1a20 már nem) ● A nagy és kisbetűket nem különbözteti meg a PLanG (illetve mindig megformázza a szöveget, hogy ne legyenek ilyen problémák) ● Megjegyzéseket (** ( után) bármelyik sor végén, végén vagy külön sorban elhelyezhetünk, és bármit írhatunk a sor végéig ● Szöveget idézőjelben (”) adunk meg, ebben bármilyen karakter szerepelhet, a szöveg pedig bármennyi karaktert tartalmazhat ● Karaktert szimpla idézőjelben (‘) adhatunk meg ● Több szöveget is konkatenálhatunk, vessző segítségével
Feladat: írjuk ki a „Hello, World!” feliratot a kimenetre ● a kiíratásnál megadjuk a szöveget, amit ki szeretnénk íratni ● a programban ezen kívül más sorra nincs szükség ● adjuk a programnak a hello_world nevet
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
Specifikáció: ● bemenet: b nincs i ● kimenet: „Hello, World!” felirat Megoldás: PROGRAM hello_world KI: ”Hello, World!” ** ez a lényegi rész PROGRAM_VÉGE 20
Az első program
● Másféle megoldás is adható, amely ugyanazt az eredményt adja:
● A programkódot fordítjuk, majd futtatjuk ● először értelmezzük a programunkat, ha jól írtuk be, a fordító nem ad hibát ● futtatással megkapjuk az eredményt a kimeneti ablakban, a fordítási ablakban „a program véget ért” üzenettel ● a nyomkövető ablakban megjelennek a lépések, minden sor végrehajtása egy lépés (a deklaráció nem tartozik bele), ezeken lépkedhetünk is, a fordítóablakban megkapjuk az aktuális lépést ● Ha hibásan írjuk meg a programot, természetesen nem futtathatjuk ● a hiba valószínűsíthető helyét látjuk, váltsunk vissza szerkesztő módba, majd javítsuk a hibát
● a kiíratást két sorban adtuk meg, de mivel nem írtunk sortörést, egy sorba kerül az eredmény ● általában igaz, hogy egy problémára sokféle program adható, minél bonyolultabb a feladat, annál többféle
23
2008.09.08.
Az első program
PROGRAM hello_world KI: ”Hello,” KI: ” World!” PROGRAM_VÉGE
21
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
22
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
Kifejezések
A második PLanG program
● A program törzsrészében az értékekkel műveleteket végezhetünk (összeadás, és, szinusz, …), amelyek eredménye egy újabb érték lesz, az ilyen műveleteket nevezzük kifejezéseknek ● Amikor egy kifejezés lefut, és keletkezik az új érték, azt a kifejezés kiértékelésének nevezzük ● Pl.: Pl : ● 1 + 8 (a bemenet két egész szám, az eredmény egy egész szám) ● a mod 1267 (ha a egy egész változó, vagy konstans, az eredmény egy egész szám) ● X vagy igen (ha x egy logikai változó, vagy konstans, az eredmény egy logikai élrék) ● 3 >= 1 (logikai értéket ad, amely igaz lesz)
Feladat: írassuk ki a 124 + 123 összegét ● A kimenetre egy kifejezést adunk, amelye a program elvégez a kiírás előtt
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
Specifikáció: ● bemenet: nincs ● kimenet: ki t 247 Megoldás: PROGRAM második KI: 124 + 123 PROGRAM_VÉGE
24
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
4
25
PLanG típusok
PLanG típusok
● A PLanG-ban (ahogy a legtöbb programozási nyelvben) az értékek (változók, konstansok) típussal rendelkeznek: ● LOGIKAI: olyan változó, amely logikai értéket reprezentál, IGAZ és HAMIS értéket vehet fel, és logikai műveletek értelmezhetőek rajta (ÉS, VAGY, NEM), illetve az egyenlőségvizsgálatok logikai eredményt adnak ● EGÉSZ: egész szám a következő műveletekkel: összeadás összeadás, kivonás, szorzás, osztás, egész osztás, maradékképzés, negáció, abszolút érték, hatványozás ● VALÓS: valós (lebegőpontosan ábrázolt) szám, az előbbiek mellett a matematikai függvények, az egészrész képzés, és a kerekítés értelmezhetőek rajta, de a maradékképzés és az egész osztás nem
● KARAKTER: betűk, számjegyek, írásjelek, szóköz és sorvége jel (SV), utóbbi kivételével szimpla idézőjelben, amelyet lehet nagybetűvé, és kisbetűvé konvertálni, illetve lekérdezni, hogy szám-e, vagy betű-e ● SZÖVEG: több karakter egymásutánja dupla idézőjelben, lehet összefűzni, szövegrészt lekérdezni, illetve karaktert keresni és lekérdezni a szövegből ● FÁJL: külön megadhatunk kimeneti és bemeneti fájlokat, amelyeket megnyithatunk, olvashatunk, írhatunk, és bezárhatunk, továbbá lekérdezhetjük, hogy végére értünk-e a fájlnak
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
26
A harmadik PLanG program
A harmadik PLanG program
Feladat: adjuk meg egy egész szám rákövetkezőjét ● be kell olvasnunk egy számot a bemenetről ● meg kell növelnünk az értékét eggyel ● ki kell íratnunk a megnövelt értéket ● szükségünk lesz egy változóra, amibe a bemenő értéket eltároljuk, legyen a neve: a, a típusa: egész ● a beolvasandó b l dó értéket é ték t a program indítása i dítá előtt lőtt meg kell k ll adni d i a bemeneti ablakban
Megoldás:
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
● Ha hibás típusú értéket teszünk be (pl. egész helyett valósat, vagy szöveget), vagy nem írunk be értéket a program futtatása előtt, akkor futási hibát kapunk ● Ha több számot szeretnénk beolvasni, akkor nem kell új sorba írnunk őket, elég egymás után szóközzel elválasztva ● Amikor megnöveljük az értékét, előbb végrehajtódik az összeadás, és a kapott érték kerül a kimenetre 28
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
A harmadik PLanG program
Értékadás
● Szöveget is írhatunk a kiíratáshoz, hogy látványosabb legyen, akkor a kiíráskor összeillesztjük a szöveget a számmal:
● Használhatunk egy másik változót (legyen ez b), amibe előbb betesszük az új értéket, majd kiíratjuk azt ● Ehhez értékadást (:=) kell használnunk, ● az értékadásnak van bal oldala, és jobb oldala ● az ott található értékeket nevezzük balértéknek, illetve jobbértéknek ● balérték csak változó lehet! ● jobbérték tetszőleges kifejezés lehet ● A változókat vesszővel választjuk el egymástól, ha ugyanolyan típusúak, nem kell mindegyiknek megadni a típusát, csak az utolsónak (ekkor az összes előtte lévő ugyanolyan típusú lesz)
PROGRAM harmadik_v2 VÁLTOZÓK: a: EGÉSZ BE: a KI: ”A rákövetkezője: ”, a + 1 ** itt összekonkatenáljuk a kiírandó dolgokat PROGRAM_VÉGE
29
2008.09.08.
PROGRAM harmadik VÁLTOZÓK: a: EGÉSZ BE: a KI: a + 1 PROGRAM_VÉGE
Specifikáció: ● bemenet: egy egész szám (a) ● kimenet: a szám rákövetkezője (a + 1)
27
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
30
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
5
Értékadás
Értékadás
Specifikáció: ● bemenet: egy egész szám (a) ● kimenet: a b egész szám eggyel nagyobb az a-nál
● Értékadással növelhetjük ugyanannak a változó értékét kiíratás előtt, és ezt követően íratjuk ki az új értéket ● Ekkor a változó egyszerre lesz jobb érték, illetve bal érték az értékadásnál
PROGRAM harmadik_v3 VÁLTOZÓK: a, b: EGÉSZ BE: a b := a + 1 ** a bal oldalon szerepel az új változó, ** amibe a jobb oldali kifejezés értékét ** betesszük KI: ”A rákövetkezője: ”, b PROGRAM_VÉGE
31
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
PROGRAM harmadik_v4 VÁLTOZÓK: a: EGÉSZ BE: a a := a + 1 ** a jobb oldalon a régi érték van, a balon ** az új érték lesz KI: ”A rákövetkezője: ”, a PROGRAM_VÉGE
2008.09.08.
32
Példák
Példák
Feladat: adjuk meg egy szám szinuszát.
Feladat: írjuk ki, hogy a beolvasott karakter szám-e.
Specifikáció: ● bement: egy valós szám (sz) ● kimenet a szám színusza
Specifikáció: ● bement: egy karakter (char) ● kimenet: igaz, ha a karakter szám, különben hamis
M ldá Megoldás:
M ldá Megoldás:
PROGRAM szinusz VÁLTOZÓK: sz: VALÓS BE: sz KI: ”A szám színusza: ”, SIN sz PROGRAM_VÉGE
33
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
34
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
Példák
Példák
Feladat: olvassunk be egy egész és egy valós számot, és írjuk ki a hányadosukat. ● egy egész és egy valós számot olvasunk be egymás után, az első számot osztjuk a másodikkal ● a beolvasásnál egyszerre két értéket olvasunk be, azokat vesszővel választjuk el a kódban, szóközzel a bemeneti ablakban ● egy harmadik értékbe írjuk az eredményt, amelyre használjunk valós változót
Megoldás:
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
PROGRAM betű_e VÁLTOZÓK: char: KARAKTER BE: char KI: SZÁM char ** eredménye logikai érték lesz PROGRAM_VÉGE
2008.09.08.
2008.09.08.
PROGRAM hányados VÁLTOZÓK: a: EGÉSZ, b, c: VALÓS ** most már több típusú változónk is van BE: a, b ** egymás után olvasunk be két számot a ** bemenetről c := a / b KI: ”A számok hányadosa: ”, c PROGRAM_VÉGE
Specifikáció: ● bemenet: egy egész szám (a) és egy valós szám (b) ● kimenet: a két szám hányadosa a harmadik (c) számban 35
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
36
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
6
Példák
Példák
Feladat: osszunk el két számot maradékosan úgy, hogy a maradékot is megadjuk, és, hogy az első szám több, mint tízszerese-e a másodiknak. ● használjuk a DIV és MOD műveleteket, illetve egy logikai kifejezést ● a hányadosról lekérdezzük, hogy nagyobb-e 10-nél ● az eredmények d é k eltárolására ltá lá á két egész é éés egy llogikai ik i éérték ték
Megoldás: PROGRAM egész_osztás VÁLTOZÓK: a,b,c,d: EGÉSZ, l: LOGIKAI BE: a,b c := a DIV b ** egész értékű hányados d := a MOD b ** maradék l := (c >10) ** logikai értékű kifejezés KI: ”A hányados: ”, c, ”, a maradék: ”, d, ” a hányados több, mint tízszerese a nevezőnek: ”, l ** több mindent iratunk ki egyszerre PROGRAM_VÉGE
Specifikáció: ● bement: két egész szám (a, b) ● kimenet: a két szám hányadosa (c) és maradéka (d), illetve, hogy a hányados nagyobb-e 10-nél (l)
37
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
38
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
Feladatok 1. 2. 3. 4. 5.
39
Adjuk meg egy logikai érték negáltját. Adjunk össze egy egész és egy valós számot. Adjuk meg, hogy egész szám pozitív-e. Adjuk meg két való szám szorzatát kerekítve. (*) Adjuk meg két egész szám abszolút értékének különbségét.
1. gyakorlat: Programozási alapok, PlanG utasítások, kifejezések
2008.09.08.
7