1. előadás - Problémamegoldás
Teljes(ebb) jegyzetért: See PPT
Meta
Előadó: Horváth Győző
Kezdés: 12:15
Feladatmegoldás
Programozási tételek, programozási alapok
Követelmények
Célok
- Módszeres feladatmegoldás számítógép segítségével
- Eszközök bonyolultabb feladatok helyes megoldásához
- Programozási tételek
- Programozási alapok
Követelmények
- Folyamatos számonkérésű tárgy
- See Weboldal
- CsoportZH-k, ÉvfolyamZH-k javíthatóak
Gyakorlaton 5-10 perc röpdolgozat (0-2 pont, 10 darab)
- A1: algorithmizálás
- A2: Gépes, működő módon leimplementálni
- C1/C2/C3: Beadandó gyakorlati feladat
- 2 hét határidő
- Ck: Komplex beadandó
- Nehezebb
- Jól kidolgozott:
- terv dokumentáció
- kód
- B1/B2: Évfolyam ZH-k. Alg és kód.
Ax és Bx javítható.
Programkészítés folyamata
- Specifikálás
- miből? mit?
- Specifikáció
- Tervezés
- mivel? hogyan?
- Algoritmus-leírás
- Kódolás
- a gép hogyan?
- reprezentáció / implementáció
- Tesztelés
- Bugs???
- diagnózis
- Hibakeresés
- Bugs, de hol????
- Hibajavítás
- No more bugs?
- okok, hibahelyek
- Minőségvizsgálat
- Javítható, dehogyan?
- jó program
- Dokumentálás
- Hogyan működik
- használható program
- Használat, Karbantartás
- Még mindíg jó?
- évelő (időtálló) program
Példa feladat
A 13 éves Dávid, a 10 éves Matyi és a 8 éves Veronika egy szép napos délutánon 100m2.es családi házuk kertjében játszanak. A farakásnál találnak egy-egy botot, amelyeket sarkaikkal összeillesztenek, és így egy háromszöget kapunk. Dávid aki felsőbe jár, váltig állítja, hogy ez egy derékszögű háromszög. Matyi, akinek viszont nagyon jó műszaki érzéke van, nem hiszi. A három gyerek berohan, hogy Apától kérjen segítséget a kérdés eldöntésében. Mit mond Apa?
Lényegelemzés
- Felesleges információ szelektálása
- Lényeg kiemelése
- Absztrakció
Példa elemzése
Feladat: 3 szám lehet-e egy derékszögű háromszög 3 oldala?
- 3; 4; 5 -> igen
- 2,6; 4; 5,8 -> nem
Változók elnevezése(?)
"Megkapni": három számot
- Pontosabban: három valós számot
- Még pontosabban: a, b, c valós számokat
"Visszaadni": logikai értéket
- Pontosabban:
bool
Megszorítások
- "Megkapni": a, b, c valós számok
- Mindent elfogadok? Negatív oldalak?
"Megkapni": a, b, c pozitív valós számokat
Specifikáció
Célja
A feladat formális megragadása
Összetevői
- Bemenő adatok (azonosító, értékhalmaz)
- Ismeretek a bemenetről (előfeltétel)
- Eredmények
- Az eredményt meghatározó állítás (utófeltétel)
- A használt fogalmak definíciói
- A megoldással szembeni követelmények
- Korlátozó tényezők
Tulajdonságai
- Egyértelmű
- Tömör
- Érthető
Eszközei
- Szöveges leírás
- Matematikai leírás
Példa
Specifikáció:
- Bemenet: x, y, z ∈ ℝ (valós számok halmaza)
- Kimenet: lehet ∈ 𝕃 (logikai értékek halmaza)
- Előfeltétel: x>0 és y>0 és z>0
- Utófeltétel: lehet=(x2+y2=z2)
Specifikáció = függvény
- Bemenet: x,y,z ∈ ℝ
- a függvény értelmezési tartománya: R\R\R=R^3 (amelynek egyes komponenseire lehet hivatkozni a specifikációban x-szel, y-nal, z-vel)
- Kimenet: lehet ∈ 𝕃
- a függvény értékkészlete: L (amelyre hivatkozhatunk a specifikációban lehet-tel)
- Előfeltétel: x>0, y>0, z>0
- a függvény értelmezési tartományának szűkítése (R3-ról R3+-ra)
- Utófeltétel: lehet=(x2+y2=z2)
- mi igaz a végeredményre: a "kiszámítási szabály"
Algoritmus
Elemi tevékenységek
értékadás, beolvasás, kiírás
Algoritmus összeállítás módja
- Szekvencia (egymás utáni végrehajtás)
- Elágazás (választás több tevékenység közül)
- Ciklus (ismétés)
- Alprogram (összetett tevékenyés,g absztrakció)
Specifikáció és megvalósítás
A feladat specifikációja valós világbeli objektumokhoz rendel valamilyen valós világbeli eredményt. Emiatt valós világbeli dolgokkal (pontosabban azok absztrakciójával, pl. valós számok halmaza) foglalkozik.
A feladat számítógépes megoldása emiatt több lépésből áll
A valós világbeli objektumokat leíró adatokat be kell juttatni a számítógépbe, annak memóriájában tárolni kell – ezek lesznek a megoldásbeli változók, amelyek típusa a számítógépes világ által elfogadott/megvalósított típusokból állhat (azaz pl. a számítógépes valós számok halmaza a matematika valós számhalmazának egy véges része lehet) – a specifikációban szereplő neveket (egyelőre) azonos nevű memóriabeli változókkal azonosítjuk.
Programok 3 fő lépése
- Adatbevitel
- Számolás
- Kiírás
Kód: keret
namespace haromszog {
internal class Program {
static void main(string[] args) {
// Deklaráció
double a, b, c;
bool lehet;
// Beolvasás
Console.WriteLine("a = ");
double.TryParse(Console.ReadLine(), out a);
Console.WriteLine("b = ");
double.TryParse(Console.ReadLine(), out b);
Console.WriteLine("c = ");
double.TryParse(Console.ReadLine(), out c);
// Feldolgozás
lehet = (a*a + b*b == c*c);
// Kiírás
Console.WriteLine("Lehet derékszögű háromszög: {0}", lehet);
}
}
}
Deklaráció
| Matematikai jele | Neve | Típusa C#-ban |
|---|---|---|
| ℤ | Egész szám | int |
| ℕ | Természetes szám | uint |
| 𝕃 | Logikai | bool |
| ℝ | Valós szám | float |
| 𝕊 | Szöveg | string |
| ℂ | Karakter | char |