OOP I. Egyszerő algoritmusok és leírásuk Készítette: Dr. Kotsis Domokos
Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendı anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelezı irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges. 2007.10.20. 2
Algoritmus készítése Elemi lépésekre kell bontani. Az összes lehetséges eseményt számba kell venni. Véges sok lépésben érjen véget. 2007.10.20. 3
Blokkdiagram Teendı Ezt kell tenni Döntés i Így van? n Sorrend 2007.10.20. 4
Rablók I. Bunkót kézbe Leshelyre ki Lesés i Kirablás Jön karaván? n És ha nem volt a karavánnál pénz? Kocsma Haza 2007.10.20. 5
Rablók II. Bunkót kézbe Leshelyre ki Lesés i Kirablás Jön karaván? n És ha nem is jött karaván? n Elég a pénz? i Kocsma Haza 2007.10.20. 6
Rablók III. Bunkót kézbe Leshelyre ki n Este van? i Lesés i Jön karaván? n Ez már jó, de kusza. Kirablás n Elég a pénz? i Kocsma Haza 2007.10.20. 7
Struktogram Szekvencia Ezt kell tenni. Azután ezt. Utána ezt. Elágaztatás Ha igaz Állítás Ha hamis Újra? Ciklus Nincsenek nyilak! Teendık Újra? Teendık 2007.10.20. 8
Rablók IV. Bunkót kézbe Leshelyre ki Amíg nincs este és nem elég a pénz n Lesés Lesés i Jön a karaván? n kirablás Kirablás Várakozás i Van elég pénz? n Kocsma Haza Haza 2007.10.20. 9
Feladat Készítsen algoritmust a másodfokú egyenlet megoldására. (ax 2 + bx + c = 0) a 0? i n b 2 4ac? b 0? i n i n b 2 > 4ac? c 0? x 1,2 i = b ± 2 b 2a 4ac x = n b 2a Nincs valós gyök x = c b i Ellentmondás n Azonosság 2007.10.20. 10
Szöveges leírás I. Szekvencia Elágaztatás Ez a sor nem kötelezı A végén ;, az egész sorozatot tegyük kapcsos zárójelek közé: {ez legyen; az legyen;} Ha (feltétel) {ez legyen;} egyébként {az legyen;} 2007.10.20. 11
Szöveges leírás II. Ciklus 1. amíg (feltétel) {ezek ismétlıdjenek;} Ciklus 2. tedd {ezek ismétlıdjenek;} amíg (feltétel) 2007.10.20. 12
Szöveges leírás III. Szekvencia A végén ;, az egész sorozatot tegyük kapcsos zárójelek közé: {ez legyen; az legyen;} Elágaztatás if (feltétel) {ez legyen;} else{az legyen;} Ez a sor nem kötelezı 2007.10.20. 13
Szöveges leírás IV. Ciklus 1. while (feltétel) {ezek ismétlıdjenek;} Ciklus 2. do {ezek ismétlıdjenek;} while (feltétel) 2007.10.20. 14
Feladat Készítsük el az alábbi feladat megoldásának struktogramját és szöveges leírását: Beolvasunk egész számokat. Ha negatív az éppen beolvasott szám, akkor számítsuk ki az eddig beolvasott számok átlagát! Tegyük fel, hogy ismert egy beolvasó és egy kiíró parancs. 2007.10.20. 15
Feladat Készítsük el az alábbi feladat megoldásának struktogramját és szöveges leírását: Beolvasunk egész számokat. Ha negatív az éppen beolvasott szám, akkor számítsuk ki az eddig beolvasott számok átlagát, de a számításból hagyjuk ki a legnagyobbat és a legkisebbet! Tegyük fel, hogy ismert egy beolvasó és egy kiíró parancs. 2007.10.20. 16
Algoritmus végrehajtása számítógépen Neumann elvő számítógép: Processzor Operatív memória I/O 2007.10.20. 17
Parancsok, adatok A számítógépben minden adat és utasítás bináris módon ábrázolódik, a felhasználás dönti el, parancs, vagy adat, és ha adat, minek tekintsük, hogyan értelmezzük. A deklarációval rendelkezhetünk arról, hogy egy-egy adatot hogyan értelmezzünk 2007.10.20. 18
Egyszerő adattípusok Számok Egész Valós Karakterek, stringek Logikai értékek 2007.10.20. 19
Egész (fixpontos) számok Bináris (kettes számrendszerbeli) számok. Elıjeles, elıjel nélküli. Mérete a byte (= 8 bit) többszöröse. Kis számtartomány ábrázolható, de pontos. Elnevezés jellemzıen: integer,int az elıjeles, u betővel (unsigned) az elıjel nélküli. 2007.10.20. 20
Valós (lebegıpontos) számok Karakterisztika, mantissza ábrázolás. Nagy számtartomány, nem pontos. A karakterisztika mérete az ábrázolás Határait, A mantissza mérete a pontosságot határozza meg. Elnevezés jellemzıen: real, float, double. (Ez utóbbi hosszabb, pontosabb.) 2007.10.20. 21
Karakterek, stringek Karakter: régebben egy byte, újabban UNICODE. Elnevezés jellemzıen: char. String: karaktersorozat (karakterfüzér). Elnevezés jellemzıen: string. 2007.10.20. 22
Logikai értékek Igaz (true), vagy hamis (false) érték. Elnevezés jellemzıen: bool, boolean. 2007.10.20. 23
Értékek használata I. Az értékeket változókban tárolhatjuk, A legtöbb nyelvnél meg kell adni a változó típusát (deklarálás): Pl. egy egész típusú változó: int i; Ennek adhatunk értéket: i=3; Mindezt késıbb magyarázzuk részletesen. 2007.10.20. 24
Értékek használata II. Pl. egy valós típusú változó: float x; Ennek is adhatunk értéket: x=3.14; Pl. egy karakter típusú változó: char c; Ennek adhatunk értéket: c= c ; Mindezt késıbb magyarázzuk részletesen. 2007.10.20. 25
Értékek használata III. Az értékeket változókban tárolhatunk, A legtöbb nyelvnél meg kell adni a változó típusát (deklarálás): Pl. s egy string típusú változó: string s; Ennek adhatunk értéket: s= kutya füle ; Mindezt késıbb magyarázzuk részletesen. 2007.10.20. 26
Értékek használata IV. Használhatunk konstansokat is: A számokat egyszerően, a karaktereket, a stringeket jelek között beírhatjuk. Logikai esetben a true, ill. false szavakat használjuk. Mindezt késıbb magyarázzuk részletesen. 2007.10.20. 27
Felületes segítség 1. A programot az alábbi keretbe írjuk: class mindegy { static void Main() ide jön a program } /* és */ között megjegyzéseket írhatunk. Mindezt késıbb magyarázzuk részletesen. 2007.10.20. 28
Felületes segítség 2. A számítógép számára elemi utasítások pl. az alapmőveletek, továbbá egyes elemi funkciók pl. a s=system.console.readline(); beolvas s-be (s string) egy karakter sorozatot, a System.Console.Write(a); System.Console.WriteLine(a); kiírja a értékét (az utóbbi sort is emel). Mindezt késıbb magyarázzuk részletesen. 2007.10.20. 29
Felületes segítség 3. A programokat bármely text editorban (pl. Notepad) megírhatjuk, a program neve valami.cs legyen. A programot (pl. Total Commander-bıl) a cmd paranccsal meghívott ablakból, a csc valami.cs parancssorral indíthatjuk, ha jó, elkészül a valami.exe ami elindítható. (Ehhez a Path rendszerváltozónak tartalmaznia kell a \WINDOWS\Microsoft.NET\Framework\v2.0.50727\ hivatkozást.) Mindezt késıbb magyarázzuk részletesen. 2007.10.20. 30
Feladat Készítsük el az alábbi feladat megoldásának programját: Beolvasunk egész számokat. Ha negatív az éppen beolvasott szám, akkor számítsuk ki az eddig beolvasott számok átlagát! A beolvasott s string-et pl. egy (célszerően valós) k számmá kell konvertálni. Ez pl. a k=float.parse(s) kifejezéssel lehetséges. Mindezt késıbb magyarázzuk részletesen. 2007.10.20. 31
Deklarácók, elsı érték adások static void Main() { float szumma,utolsó; int darab; szumma=0; darab=0; string s1; s1=system.console.readline(); utolsó=float.parse(s1); 2007.10.20. 32
Fı ciklus, eredmény kiíratás while (utolsó>=0) { szumma=szumma+utolsó; darab=darab+1; s1=system.console.readline(); utolsó=float.parse(s1); } if (darab>0) System.Console.WriteLine(szumma/darab); else System.Console.WriteLine("Nincs elég adat!"); System.Console.ReadLine(); } 2007.10.20. 33
Feladat Készítsük el az alábbi feladat megoldásának programját: Beolvasunk egész számokat. Ha negatív az éppen beolvasott szám, akkor számítsuk ki az eddig beolvasott számok átlagát, de a számításból hagyjuk ki a legnagyobbat és a legkisebbet! 2007.10.20. 34
Deklarácók, elsı érték adások { static void Main() { float szumma,utolsó,max,min; int darab; szumma=0; darab=0; max=0; string s1; s1=system.console.readline(); utolsó=float.parse(s1); min=utolsó; 2007.10.20. 35
Fı ciklus while (utolsó>=0) { szumma=szumma+utolsó; darab=darab+1; if (utolsó>max) max=utolsó; if (utolsó<min) min=utolsó; s1=system.console.readline(); utolsó=float.parse(s1); } 2007.10.20. 36
Eredmény kiíratás } } if (darab>2) System.Console.WriteLine((szumma-max-min)/(darab-2)); else System.Console.WriteLine("Nincs elég adat!"); System.Console.ReadLine(); 2007.10.20. 37