Programozási alapismeretek. Bevezető



Hasonló dokumentumok
Programozási alapismeretek 1. előadás

Programozási alapismeretek. 1. előadás. A problémamegoldás lépései. A programkészítés folyamata. Az algoritmus fogalma. Nyelvi szintek.

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

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

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

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

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

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

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

A C# programozási nyelv alapjai

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

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

Bevezetés az informatikába

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

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

Adatszerkezetek I. 1. előadás

A C programozási nyelv I. Bevezetés

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

Programozás alapjai (ANSI C)

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

A C programozási nyelv I. Bevezetés

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

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

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

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

A C# PROGRAMOZÁSI NYELV

Algoritmusok, adatszerkezetek, objektumok

Bevezetés a programozásba I.

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

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

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

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.

Java programozási nyelv

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

Programozási alapismeretek 3. előadás

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

Java II. I A Java programozási nyelv alapelemei

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

Webprogramozás szakkör

Informatika terméktervezőknek

Bevezetés a programozásba. 6. Előadás: C++ bevezető

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

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

Programozási nyelvek (ADA)

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

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

C programozás. 1 óra Bevezetés

ELEMI PROGRAMOZÁSI TÉTELEK

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

Maximum kiválasztás tömbben

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

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

Java II. I A Java programozási nyelv alapelemei

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

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

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. Függvények. Függvények(2)

Algoritmizálás és adatmodellezés tanítása 2. 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

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

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

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

Bevezetés a programozásba I.

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

Programozási nyelvek (ADA)

Kifejezések. Kozsik Tamás. December 11, 2016

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

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

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Bevezetés a programozásba

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

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

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

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

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

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Algoritmusok. Dr. Iványi Péter

Informatika tanítási módszerek

Bevezetés a C++ programozásba

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

Programozás alapjai 3.Gy: C elágazások, ciklusok P R O

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

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

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

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

Szelekció. Döntéshozatal

Készítette: Nagy Tibor István

Algoritmusok tervezése

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

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

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

Programzás I gyakorlat

Objektumorientált Programozás I.

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

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?

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

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

Átírás:

Programozási alapismeretek Tananyag: Problémamegoldási stratégiák, az informatikai problémamegoldás alapjai. A problémák megoldásához szükséges informatikai eszközök és módszerek. Programkészítési elvek. Algoritmikus struktúrák és adattípusok. Konstans, változó, típus fogalma. Elemi algoritmusok típusfeladatokra. Összegzés, eldöntés, keresés, számlálás, maximum-kiválasztás, kiválogatás, rendezések. A C++ programozási nyelv alapvető elemei. A Code::Blocks programfejlesztői környezet, szerkesztés, fordítás, futtatás. A programkészítés, mint termék előállítási folyamat. Alapvető tesztelési, hibakeresési módszerek. Vizsgajegyek: 1) csoport ZH: algoritmizálás (specifikáció, algoritmus) 2) csoport ZH: kódolás (specifikáció, algoritmus, kód, számítógép mellett) 3) évfolyam ZH: komplex feladat megoldása számítógép mellett 4) beadandó feladat 5) gyakorlati röpdolgozatok 10 darab Bevezető A programkészítés folyamata: 1. Specifikálás (miből? mit?) specifikáció 2. Tervezés (mivel? hogyan?) adat + algoritmusleírás 3. Kódolás (a gép hogyan?) kód (reprezentáció + implementáció) 4. Tesztelés (hibás-e?) hibalista (diagnózis) 5. Hibakeresés (hol a hiba?) hibahely, ok 6. Hibajavítás (hogyan jó?) helyes program 7. Minőségvizsgálat, hatékonyság (jobbítható-e? hogyan?) jó program 8. Dokumentálás (hogyan működik? használható?) használható program 9. Használat, karbantartás (még mindig jó?) évelő (időálló) program A specifikáció fogalma: Célja: a feladat formális megoldása Összetevői: 1. Bemenő adatok (azonosító, értékhalmaz [mértékegység]) 2. Ismeretek a bemenetről (előfeltétel) 3. Eredmények (azonosító, értékhalmaz) 4. Az eredményt meghatározó állítás (utófeltétel) 5. A használt fogalmak definíció 6. A megoldással szembeni követelmények 7. Korlátozó tényezők Tulajdonságai: 1. Egyértelmű, pontos, teljes 2. Rövid, tömör; formalizált 3. Szemléletes, érthető (fogalmak) Specifikációs eszközök: 1. Szöveges leírás 2. Matematikai megadás Az algoritmus fogalma: Fogalma:Lépések sorozata, amellyel egy feladat kiindulásától a megoldásig jutunk. Összeállítási módjai: Szekvencia (egymás utáni végrehajtás) Elágazás (választás kettő vagy több tevékenységből) Ciklus (ismétlés adott darabszámszor vagy adott feltételtől függően) Alprogram (egy összetett tevékenység, egyedi néven absztrakció)

Példa: a 3 szám lehet-e egy derékszögű háromszög 3 oldala? Specifikáció: Bemenet: x,y,z R (valós számok halmaza) Kimenet: lehet L (logikai értékek halmaza) Előfeltétel: x>0 és y>0 és z>0 Utófeltétel: lehet=(x 2 +y 2 =z 2 ) Itt rögzítettük az átfogót a z-re lehet=((x 2 +y 2 =z 2 ) vagy (x 2 +z 2 =y 2 ) vagy (y 2 +z 2 =x 2 )) Itt nincs rögzítve semmi Algoritmus: A programunk 4 fő részből áll: az adatok deklarálása az adatok beolvasása az eredmény kiszámítása az eredmény kiírása Be: x,y,z [x>0 és y>0 és z>0] lehet:=(x 2 +y 2 =z 2 ) Ki: lehet A deklarációt, az elemi utasításokat egy-egy dobozba írjuk. Később a be- és kimenetet nem algoritmizáljuk! Példa: Addjuk meg a másodfokú egyenlet egy megoldását! Az egyenlet: ax 2 +bx+c=0 Kérdések: Mitől függ a megoldás? bemenet Mi a megoldás? kimenet Mit jelent: megoldásnak lenni? utófeltétel Mindig/Mikor van megoldás? előfeltétel Biztos egy megoldás van? kimenet/utófeltétel Specifikáció: Bemenet: a,b,c R Kimenet: x R, van L Előfeltétel: a 0 Utófeltétel 1 : ax 2 +bx+c=0 Utófeltétel 2 : Utófeltétel 3 : van=(b 2 4ac 0) és van Algoritmus: Program MasodfokuEgyenlet: Változó a,b,c,x:valós van:logikai d:valós Be: a,b,c [a 0] d:=b 2 4ac van:=d 0 Ha van akkor Program Vége.

Algoritmusleíró nyelvek: Szöveges leírás Mondatokkal leírás Mondatszerű elemekkel pszeudokód Rajzos leírás Folyamatábra Struktogram Szekvencia: Utasítás1 Utasítás2 Utasítás3 Elágazás: Struktogram I Igaz-ág utasításai Feltétel Hamis-ág utasításai H Feltétel1 Feltétel2 egyébként Utasítások1 Utasítások2 UtasításokN Ciklusok: Bennmaradás feltétele ciklusmag utasításai ciklusmag utasításai Bennmaradás feltétele cv=tól ig ciklusmag utasításai Fejlesztői környezet (Kódolás) Keretrendszer (IDE): Code::Blocks (Letöltés: www.codeblocks.org, verzió 13.12) Struktogram szerkesztő program: structorizer (Letöltés: http://structorizer.fisch.lu) Alacsony szintű programozási nyelv: Assembly Magas szintű programozási nyelvek: C, C#, C++, Java, Pascal, VB, PHP Script programozási nyelvek: JS, Python, PHP, SH, PS Egyéb programozási nyelvek: SQL, Logo Gyakorlat oktató: Név: Menyhárt László Órakezdés: kedd 08:15 09:45 Email: menyhart@elte.hu (Üzenet küldési forma: [ProgAlap5] 09.17-ei házi) Weboldal: http://progalap.elte.hu Projekt létrehozása: projekt létrehozása (Windows-ra) sablon kiválasztása (Console application) projektnév megadása projekt szülőkönyvtár megadása fordítóválasztás projekt létrehozásának befejezése a kód beírása Build > Build: fordítás Build > Run: a fordított program futtatása

Code::Blocks programfejlesztés fájlfelépítése: Adatokkal kapcsolatos fogalmak Konstans az az adat, amely a műveletvégzés során nem változtathatja meg értékét, mindvégig ugyanabban az állapotban marad. Változó az ilyen adatféleségnek lényegéhez tartozik a változékonyság, más szóval: vonatkozhatnak rá olyan műveletek is, amelyek új értékkel látják el. Tudományosabban fogalmazva: nem egyelemű az állapothalmaza. Értékadás az az utasítás, amely révén a pillanatnyi állapotból egy új (a meghatározottba) állapotba kerül át a változó. (Nyilvánvaló, hogy konstans adatra nem vonatkozhat értékadás, a kezdőértéket meghatározón kívül.) Típus olyan megállapodás (absztrakt kategória), amely adatok egy lehetséges körét jelöli ki az által, hogy rögzíti azok állapothalmazát és az elvégezhető műveletek készletét. Azonosító Az a jelsorozat, amellyel hivatkozhatunk a tartalmára, amely által módosíthatjuk tartalmát. Kezdőérték A születéskor hozzárendelt érték. Konstansoknál nyilvánvaló, hogy deklarációban kapja; változóknál akár deklarációban, akár futáskor szerez értéket magának. A típus Összetettség(strukturáltság) szempontjából beszélhetünk strukturálatlan (vagy skalár, elemi) típusról, ha (az adott szinten) szerkezetet nem tulajdonítunk neki; vagy strukturált (más szóval: összetett) típusról, ha (elemibb) összetevőkre bontjuk. Elemi típusok egész típus Értékhalmaz: 2 31 + 2 31 1 (Min Egész Max Egész, ez 4 byte) Műveletek: +,,, /, Div (egészosztás), Mod (osztási maradék), (unáris mínusz), ^ (pozitív egészkitevős hatványozás) Relációk: =, <,,,, > Ábrázolás: kettes komplemens kódú Változatai: méret és előjel szerint sokféle valós típus Értékhalmaz:???...??? (Min Valós Max Valós nem definiáltak, vagy implementációfüggőek) Műveletek: +,,, /, ^, (unáris mínusz) Relációk: =, <,,,, > Ábrázolás: lebegőpontos ábrázolás (pontosabb lenne, ha e típus racionálisnak neveznénk, mert csak racionális számot képes ábrázolni) logikai típus Értékhalmaz: Hamis Igaz (Min Logikai Max Logikai: Hamis, illetve Igaz) Műveletek: nem, és, vagy (a szokásos logikai műveletek) Relációk: =, <,,,, > (általában = és használjuk) Ábrázolás: 0B = Hamis, 1B = Igaz (esetleg: 1B = Igaz) ahol xb = x érték bináris egészként ábrázolva

karakter típus Értékhalmaz: 0 255 kódú jelek ASCII (Min Karakter Max Karakter: a 0, illetve a 255 kódú karakter) Műveletek: karakter-specifikus nincs (esetleg a Kód:Karakter Egész függvény, és inverze a Kód:Egész Karakter függvény, amelyek a belső ábrázolással hozza kapcsolatba) Relációk: =, <,,,, >(a belső ábrázolásuk alapján nem ABC-sorrend!) Adminisztráció Célszerűen a programok forrása tartalmazzák: 1. a szerző adatait, 2. a feladat szövegét és 3. a feladat specifikációját; valamint 4. használható algoritmusmagyarázatokat; 5. a fejlesztés esetleg még hátralévő teendőit. Kis szívesség a Code::Blocks-tól: A szerző adatai (1.) a sablonba (a template-be) fixen beépíthetők. Programszerkezet main függvény intmain() { lokális adatdeklarációk a függvénytörzs végrehajtható utasításai returnfvérték; } Alaptípusok int egész long egész float valós double valós char karakter string szöveg bool logikai C++ alapok Első program #include<iostream>//kiírás és beolvasás függvény ebben található #include <cstdlib>//ez az exithez kell //könyvtárfájlokat (header-fájlok) az #include <rendszeré> és #include "saját" tudjuk a programba építeni using namespacestd;//így adhatom meg a névteret (csomagot); beolvasás és kiírás szempontjából a nyelvek kétfélék lehetnek: //a nyelv eleve tartalmaz ilyen parancsokat; a nyelv eljáráskönyvtára tartalmaz beolvasó és kiíró függvényeket intmain() { stringnev;//a string egy tetszőleges hosszúságú karaktersorozat constunsigned shortjokor = 18;//konstans deklarálása unsigned shortkor;//ez egy egész típus deklarálása cout<<"udvozollek!"<< endl;//így írok ki egy sort a konzol képernyőre cout<<"hogy hivnak? : "; cin>>nev;//beolvasás cout<<"szia "<<nev<<"!"<< endl;//sorvégi törés 2 lehetősége: endl, "\n" cout<<"hany eves vagy? : "; cin>>kor; if (kor<jokor) {//ez egy reláció (logikai kifejezés), továbbiak: ==,!=, <=, >=, > cout<<"tul fiatal vagy!"<< endl; exit(1); //ezzel kilépek a programból (hibaértékkel) } else { cout<<"ok"<< endl; } return0;//ha végigfut a program és elér a főfüggvény végéig,akkor hiba nélkül kilép }

Hibák fajtái: Fordítás során kiírt hibák javítása o Hibaüzenet értelmezése o A hiba okának kiderítése o A hiba keletkezési helyének keresése o A hiba kijavítása Futtatás során fellépő hibák javítása o Tesztelés o A hiba keletkezési helyének keresése o A hiba kijavítása Hibakeresés, hibajavítás A kétirányú elágazás használata Feladat: Egy ember vércsoportját (Rh negatív vagy pozitív) egy génpár határozza meg. Mindkét gén lehet "+" vagy "-" típusú. A "++" és a "+-" típusúak az "Rh pozitívok", a "--" típusúak pedig "Rh negatívok". Írjunk programot, amely megadja egy ember vércsoportját a génpárja ismeretében!" Specifikáció: Bemenet: x, y K (K - karakterek halmaza) Kimenet: v S (S - karakter-sorozatok halmaza) Előfeltétel: x, y {"+"," "} Utófeltétel: (x="+" vagy y="+") akkorv="rh+" és (x=" " és y=" ") akkorv="rh " Algoritmus: I x="+" vagy y="+" H v:= "Rh+" v:= "Rh " Kétirányú elágazások egymásba ágyazása Feladat: Egy ember vércsoportját (A, B, AB vagy 0) egy génpár határozza meg. Mindkét gén lehet a, b vagy 0 típusú. A vércsoport meghatározása: A={aa,a0,0a}; B={bb,b0,0b}; AB={ab,ba}; 0={00}. Írjunk programot, amely megadja egy ember vércsoportját a génpárja ismeretében! Specifikáció: Bemenet: x, y K (K - karakterek halmaza) Kimenet: v S (S - karakter-sorozatok halmaza) Előfeltétel: x, y {"a","b","0"} Utófeltétel: (x="a" és y "b" vagy x "b" és y="a") akkor v="a" vagy (x="b" és y "a" vagy x "a" és y="b") akkor v="b" vagy (x="a" és y="b" vagy x="b" és y="a") akkor v="ab" vagy (x="0" és y="0") akkor v="0" Algoritmus: kétirányú elágazások egymásba ágyazásával I x="a" és y "b" vagy x "b" és y="a" H v:="a" I x="b" és y "a" vagy x "a" és y="b" H v:="b" Algoritmus: sokirányú elágazással x="a" és y "b" vagy x "b" és y="a" I x="a" és y="b" vagy x="b" és y="a" H v:="ab" x="b" és y "a" vagy x "a" és y="b" v:="0" x="a" és y="b" vagy x="b" és y="a" x="0" és y="0" v:="a" v:="b" v:="ab" v:="0"

Algoritmus: segédváltozók bevezetésével (lokális változók deklarálása) vana:= x="a" vagy y="a" vanb:= x="b" vagy y="b" I vana H I vanb H I vanb H v:="ab" v:="a" v:="b" v:="0" kétirányú: if (Feltétel) { Utasítás I } else { Utasítás H } sokirányú (egymásba ágyazott kétirányúk): if (Feltétel 1 ) { Utasítás 1 } elseif (Feltétel 2 ) { Utasítás 2 } elseif ( ) { } elseif (Feltétel N ) { Utasítás N } else { Utasítás } sokirányú (speciális): switch (kifejezés) { case érték 1 : Utasítás 1 ; break; case érték N : Utasítás N ; break; default: Utasítás; break; } Elágazások használata (C++) Vércsoport (A,B,AB,0) feladat kódolása

A konzol input kódolása az előfeltétel alapján Előfeltétel: Helyes(x) ahol a Helyes(x) egy x-től függő logikai kifejezést rövidít most Ugyanez egyszerűbben: Szintaktikus és szemantikus ellenőrzés Értelemszerűen csak bizonyos típusú változóba történő olvasásnál alkalmazható (pl. valamely szám típusúba)

Ugyanez egyszerűbben: Ciklusok használata (for ciklus)

Tömbök használata

Tovább 3. előadás