TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009
Programozási tételek (1.) Vannak olyan típusfeladatok, amelyeket igen hasonlóan kell megoldani. Például: ◦ átlagszámítás egy sorozat elemein ◦ bizonyos feltételnek megfelelő elemek megszámolása ◦ legkisebb / legnagyobb elem meghatározása ◦ adott elem megkeresése Ezen feladatok megoldására általános algoritmusokat adunk, amelyeket programozási tételeknek nevezünk.
Programozási tételek (2.) A továbbiakban legyen: ◦ v: tetszőleges elemtípusú vektor ◦ n: egész (a vektor tényleges, valódi elemszáma) ◦ adott tulajdonság: a feladat szövegéből következő logikai függvény (pl. egy adott szám páros, nagyobb mint 1000, egyenlő egy konkrét értékkel, stb.) A vektor elemtípusa lehet struktúra is, de a tételt mindig a rekord egy mezőjére kell felírni.
Összegzés tétele (algoritmus) Adott a v[1..n] vektor, amelynek elemein értelmezhető az összeadás művelete. Számítsuk ki a vektor elemeinek összegét (ossz változó)! Algoritmus: ossz := 0 ciklus i:=1-től n-ig ossz := ossz + v[i] ciklus vége. Mire kell figyelni a kódolásnál? ◦ A kezdőérték nem biztos, hogy 0. ◦ C# nyelvben a tömb indexelése 0-tól indul.
Összegzés tétele (kód) Kód: int ossz = 0; for (int i=0; i<n; i++) { ossz += v[i]; } Alkalmazás: átlagszámítás összegzés után double atl = ossz / (double)n;
Megszámlálás tétele (algoritmus) Adott a v[1..n] vektor, amelynek elemein értelmezhető az adott tulajdonságfüggvény. Számoljuk meg, hogy a vektorban hány darab, az adott tulajdonságnak megfelelő elem található (db változó)! Algoritmus: db := 0 ciklus i:=1-től n-ig ha v[i] adott tulajdonságú akkor db := db + 1 ciklus vége. Mire kell figyelni a kódolásnál? ◦ Mindig adjunk 0-t kezdőértéknek! ◦ C# nyelvben a tömb indexelése 0-tól indul.
Megszámlálás tétele (kód) Kód (például legyen a tulajdonságfüggvény, hogy az adott elem páros): int db = 0; for (int i=0; i<n; i++) { if (v[i]%2 == 0) { db++; } } Konkrét feladat esetén csak a pirossal jelölt feltételt kell másra kicserélni!
Minimum- és maximumkiválasztás tétele (algoritmus) Adott a v[1..n] vektor, amelynek elemein értelmezhető a kisebb / nagyobb reláció. Válasszuk ki a vektor legkisebb / legnagyobb elemét! A min változó jelentse a minimum helyét, azaz indexét! Algoritmus: min := 1 ciklus i:=2-től n-ig ha v[i]<v[min] akkor min := i ciklus vége. Mire kell figyelni a kódolásnál? ◦ C# esetén 0 kezdőértékkel kell indulnunk. ◦ Maximumkiválasztásnál a reláció megfordul.
Minimum- és maximumkiválasztás tétele (kód) Kód: int min = 0; for (int i=1; i<n; i++) { if (v[i]<v[min]) { min = i; } } Struktúrából álló tömb esetén a feltételvizsgálat például így nézhet ki: if (v[i].terulet<v[min].terulet)
Lineáris keresés tétele (algoritmus) Adott a v[1..n] vektor, amelynek elemein értelmezhető az adott tulajdonságfüggvény. Keressük meg a vektor első adott tulajdonságú elemét! Az l logikai változó legyen igaz, ha sikerült találni ilyen elemet, és ekkor az i tartalmazza az első adott tulajdonságú elem indexét. Algoritmus: i := 1 ciklus amíg i<=n és NEM(v[i] adott tulajdonságú) i := i+1 ciklus vége. l := (i<=n)
Lineáris keresés tétele (algoritmus) Mire kell figyelni a kódolásnál? ◦ C# esetén 0 kezdőértékkel kell indulnunk, és i<=n helyett mindenhol i<n szerepel. ◦ C# nyelvben a tagadás a ! operátor segítségével írható. ◦ Speciális esetben, ha a tulajdonság egyenlőségvizsgálat, akkor annak tagadását a != jellel vizsgálhatjuk.
Lineáris keresés tétele (kód) Kód (például legyen a tulajdonságfüggvény, hogy az adott elem páros): int i = 0; while (i<n && v[i]%2 != 0) { i++; } bool l = (i<n); Konkrét feladat esetén csak a pirossal jelölt feltételt kell másra kicserélni!