Összetett programozási tételek 3. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 19. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 1 / 37
Felhasznált irodalom Szlávi Péter, Zsakó László: Módszeres programozás: Programozási tételek (Mikrológia 19). ELTE TTK, 2002 Sergyán (OE NIK) AAO 03 2011. szeptember 19. 2 / 37
Összetett programozási tételek 1 Másolás 2 Kiválogatás 3 Szétválogatás 4 Metszet 5 Egyesítés 6 Összefuttatás Sergyán (OE NIK) AAO 03 2011. szeptember 19. 3 / 37
Összetett programozási tételek 1 Másolás 2 Kiválogatás 3 Szétválogatás 4 Metszet 5 Egyesítés 6 Összefuttatás Sergyán (OE NIK) AAO 03 2011. szeptember 19. 4 / 37
Másolás Típusfeladatok 1 Egy osztály tanulóinak átlageredménye alapján határozzuk meg, hogy bizonyítványukba jeles, jó, közepes vagy elégséges kerül-e. (Tegyük fel, hogy bukott tanuló nincs.) Sergyán (OE NIK) AAO 03 2011. szeptember 19. 5 / 37
Másolás Típusfeladatok 1 Egy osztály tanulóinak átlageredménye alapján határozzuk meg, hogy bizonyítványukba jeles, jó, közepes vagy elégséges kerül-e. (Tegyük fel, hogy bukott tanuló nincs.) 2 Egy szöveg minden magánhangzóját cseréljük ki az e betűre. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 5 / 37
Másolás Típusfeladatok 1 Egy osztály tanulóinak átlageredménye alapján határozzuk meg, hogy bizonyítványukba jeles, jó, közepes vagy elégséges kerül-e. (Tegyük fel, hogy bukott tanuló nincs.) 2 Egy szöveg minden magánhangzóját cseréljük ki az e betűre. Közös jellemzők Az eredmény ugyanannyi elemszámú mint a bemenet Sergyán (OE NIK) AAO 03 2011. szeptember 19. 5 / 37
Másolás Típusfeladatok 1 Egy osztály tanulóinak átlageredménye alapján határozzuk meg, hogy bizonyítványukba jeles, jó, közepes vagy elégséges kerül-e. (Tegyük fel, hogy bukott tanuló nincs.) 2 Egy szöveg minden magánhangzóját cseréljük ki az e betűre. Közös jellemzők Az eredmény ugyanannyi elemszámú mint a bemenet Az eredmény i. elemét a bemenet i. eleméből lehet meghatározni Sergyán (OE NIK) AAO 03 2011. szeptember 19. 5 / 37
Másolás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 6 / 37
Másolás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma Kimenet Y : Eredmény tömb Sergyán (OE NIK) AAO 03 2011. szeptember 19. 6 / 37
Másolás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma Kimenet Y : Eredmény tömb Pszeudokód Eljárás Másolás(N, X, Y ) Ciklus i := 1-től N-ig Y [i] := művelet X [i] Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 6 / 37
Másolás Megjegyzések Az eredmény mindig ugyanannyi elemszámú mint a bemenet Sergyán (OE NIK) AAO 03 2011. szeptember 19. 7 / 37
Másolás Megjegyzések Az eredmény mindig ugyanannyi elemszámú mint a bemenet A művelet segítségével az egyszerű másoláson túl az egyes elemekkel egy-egy elemi műveletet is el lehet végezni (pl. másoljuk át a számok abszolutértékeit) Sergyán (OE NIK) AAO 03 2011. szeptember 19. 7 / 37
Másolás Megjegyzések Az eredmény mindig ugyanannyi elemszámú mint a bemenet A művelet segítségével az egyszerű másoláson túl az egyes elemekkel egy-egy elemi műveletet is el lehet végezni (pl. másoljuk át a számok abszolutértékeit) Nem lehet az elemek közötti összefüggést kihasználni Sergyán (OE NIK) AAO 03 2011. szeptember 19. 7 / 37
Másolás Magánhangzók e-re cserélése Eljárás Másolás(N, X, Y ) Ciklus i := 1-től N-ig Ha magánhangzó(x [i]) akkor Y [i] := e különben Y [i] := X [i] Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 8 / 37
Összetett programozási tételek 1 Másolás 2 Kiválogatás 3 Szétválogatás 4 Metszet 5 Egyesítés 6 Összefuttatás Sergyán (OE NIK) AAO 03 2011. szeptember 19. 9 / 37
Kiválogatás Típusfeladatok 1 Egy személyzeti nyilvántartásban emberek neve és személyi száma szerepel, adjuk meg a 20 évnél fiatalabb lányokat. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 10 / 37
Kiválogatás Típusfeladatok 1 Egy személyzeti nyilvántartásban emberek neve és személyi száma szerepel, adjuk meg a 20 évnél fiatalabb lányokat. 2 Adjuk meg egy természetes szám összes osztóját. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 10 / 37
Kiválogatás Típusfeladatok 1 Egy személyzeti nyilvántartásban emberek neve és személyi száma szerepel, adjuk meg a 20 évnél fiatalabb lányokat. 2 Adjuk meg egy természetes szám összes osztóját. 3 Adjuk meg egy osztály azon tanulóit, akik jeles átlagúak. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 10 / 37
Kiválogatás Típusfeladatok 1 Egy személyzeti nyilvántartásban emberek neve és személyi száma szerepel, adjuk meg a 20 évnél fiatalabb lányokat. 2 Adjuk meg egy természetes szám összes osztóját. 3 Adjuk meg egy osztály azon tanulóit, akik jeles átlagúak. Közös jellemzők Hasonĺıtanak a feladatok a keresésre, mert adott tulajdonságú elem(ek)et kell megadni, de nem csak egyet. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 10 / 37
Kiválogatás Típusfeladatok 1 Egy személyzeti nyilvántartásban emberek neve és személyi száma szerepel, adjuk meg a 20 évnél fiatalabb lányokat. 2 Adjuk meg egy természetes szám összes osztóját. 3 Adjuk meg egy osztály azon tanulóit, akik jeles átlagúak. Közös jellemzők Hasonĺıtanak a feladatok a keresésre, mert adott tulajdonságú elem(ek)et kell megadni, de nem csak egyet. Hasonĺıtanak a megszámlálásra is, de nem megszámolni kell az elemeket, hanem megadni/másolni. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 10 / 37
Kiválogatás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma T : Tulajdonság függvény Sergyán (OE NIK) AAO 03 2011. szeptember 19. 11 / 37
Kiválogatás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma T : Tulajdonság függvény Kimenet Y : Eredmény tömb DB: Tömb elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 11 / 37
Kiválogatás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma T : Tulajdonság függvény Kimenet Y : Eredmény tömb DB: Tömb elemeinek száma Pszeudokód Eljárás Kiválogatás(N, X, DB, Y ) DB := 0 Ciklus i := 1-től N-ig Ha T (X [i]) akkor DB := DB + 1 Y [DB] := X [i] Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 11 / 37
Kiválogatás Megjegyzések Az eredmény tömb elemszámát nem lehet előre pontosan meghatározni, de biztos, hogy nincs több eleme mint a bemeneti tömbnek. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 12 / 37
Kiválogatás Megjegyzések Az eredmény tömb elemszámát nem lehet előre pontosan meghatározni, de biztos, hogy nincs több eleme mint a bemeneti tömbnek. X [i] helyett néha csak i-t másoljuk Y -ba, azaz a feltételnek megfelelő elemek indexét tároljuk Sergyán (OE NIK) AAO 03 2011. szeptember 19. 12 / 37
Kiválogatás Ha a bemeneti sorozatra már nincs szükség a későbbiekben, akkor a kiválogatás eredménye a bemeneti sorozat elejére is kerülhet. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 13 / 37
Kiválogatás Ha a bemeneti sorozatra már nincs szükség a későbbiekben, akkor a kiválogatás eredménye a bemeneti sorozat elejére is kerülhet. Ebben az esetben kevesebb memóriát kell lefoglalnunk. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 13 / 37
Kiválogatás Ha a bemeneti sorozatra már nincs szükség a későbbiekben, akkor a kiválogatás eredménye a bemeneti sorozat elejére is kerülhet. Ebben az esetben kevesebb memóriát kell lefoglalnunk. Pszeudokód Eljárás Kiválogatás(N, X, DB) DB:=0 Ciklus i := 1-től N-ig Ha T (X [i]) akkor DB := DB + 1 X [DB] := X [i] Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 13 / 37
Kiválogatás Lehetséges megvalósítás az is, ha a kihagyandó elemeket megjelöljük valamilyen módon. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 14 / 37
Kiválogatás Lehetséges megvalósítás az is, ha a kihagyandó elemeket megjelöljük valamilyen módon. Ebben az esetben is elveszítjük az eredeti sorozatot. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 14 / 37
Kiválogatás Lehetséges megvalósítás az is, ha a kihagyandó elemeket megjelöljük valamilyen módon. Ebben az esetben is elveszítjük az eredeti sorozatot. Pszeudokód Eljárás Kiválogatás(N, X ) Ciklus i := 1-től N-ig Ha (T (X [i])) akkor X [i] := speciális érték Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 14 / 37
Kiválogatás Jeles átlagú tanulók neve Eljárás Kiválogatás(N, X, DB, NEV ) DB := 0 Ciklus i := 1-től N-ig Ha X [i].atlag 4.71 akkor DB := DB + 1 NEV [DB] := X [i].nev Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 15 / 37
Összetett programozási tételek 1 Másolás 2 Kiválogatás 3 Szétválogatás 4 Metszet 5 Egyesítés 6 Összefuttatás Sergyán (OE NIK) AAO 03 2011. szeptember 19. 16 / 37
Szétválogatás Típusfeladatok 1 Adott N darab különböző természetes szám, válogassuk szét a párosakat és a páratlanokat. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 17 / 37
Szétválogatás Típusfeladatok 1 Adott N darab különböző természetes szám, válogassuk szét a párosakat és a páratlanokat. 2 Az osztály tanulóit névsoruk alapján válogassuk szét lányokra és fiúkra. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 17 / 37
Szétválogatás Típusfeladatok 1 Adott N darab különböző természetes szám, válogassuk szét a párosakat és a páratlanokat. 2 Az osztály tanulóit névsoruk alapján válogassuk szét lányokra és fiúkra. 3 Az osztály tanulóinak félévi átlageredményei alapján válogassuk szét jelesekre, jókra, közepesekre, elégségesekre, valamint elégtelenekre. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 17 / 37
Szétválogatás Típusfeladatok 1 Adott N darab különböző természetes szám, válogassuk szét a párosakat és a páratlanokat. 2 Az osztály tanulóit névsoruk alapján válogassuk szét lányokra és fiúkra. 3 Az osztály tanulóinak félévi átlageredményei alapján válogassuk szét jelesekre, jókra, közepesekre, elégségesekre, valamint elégtelenekre. Közös jellemzők Egy sorozathoz több sorozatot rendelünk Sergyán (OE NIK) AAO 03 2011. szeptember 19. 17 / 37
Szétválogatás Típusfeladatok 1 Adott N darab különböző természetes szám, válogassuk szét a párosakat és a páratlanokat. 2 Az osztály tanulóit névsoruk alapján válogassuk szét lányokra és fiúkra. 3 Az osztály tanulóinak félévi átlageredményei alapján válogassuk szét jelesekre, jókra, közepesekre, elégségesekre, valamint elégtelenekre. Közös jellemzők Egy sorozathoz több sorozatot rendelünk Lényegében egymás után kettő (vagy több) kiválogatással megoldhatók a feladatok Sergyán (OE NIK) AAO 03 2011. szeptember 19. 17 / 37
Szétválogatás Típusfeladatok 1 Adott N darab különböző természetes szám, válogassuk szét a párosakat és a páratlanokat. 2 Az osztály tanulóit névsoruk alapján válogassuk szét lányokra és fiúkra. 3 Az osztály tanulóinak félévi átlageredményei alapján válogassuk szét jelesekre, jókra, közepesekre, elégségesekre, valamint elégtelenekre. Közös jellemzők Egy sorozathoz több sorozatot rendelünk Lényegében egymás után kettő (vagy több) kiválogatással megoldhatók a feladatok Két kiválogatással megvalósítani viszont felesleges, mert amely elemeket nem választunk ki a kiválogatásnál az egyik csoportba, azok tartoznak a másik csoportba Sergyán (OE NIK) AAO 03 2011. szeptember 19. 17 / 37
Szétválogatás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma T : Tulajdonság függvény Sergyán (OE NIK) AAO 03 2011. szeptember 19. 18 / 37
Szétválogatás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma T : Tulajdonság függvény Kimenet Y : Egyik eredmény tömb Z: Másik eredmény tömb DBY : Y elemeinek száma DBZ: Z elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 18 / 37
Szétválogatás Bemenet X : Feldolgozandó tömb N: Tömb elemeinek száma T : Tulajdonság függvény Kimenet Y : Egyik eredmény tömb Z: Másik eredmény tömb DBY : Y elemeinek száma DBZ: Z elemeinek száma Pszeudokód Eljárás Szétválogatás(N, X, DBY, Y, DBZ, Z) DBY := 0 DBZ := 0 Ciklus i := 1-től N-ig Ha T (X [i]) akkor DBY := DBY + 1 Y [DBY ] := X [i] különben DBZ := DBZ + 1 Z[DBZ] := X [i] Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 18 / 37
Szétválogatás Megjegyzések Y és Z elemszáma nem határozatható meg előre, így N elemű tömböknek foglalunk helyet a memóriában Sergyán (OE NIK) AAO 03 2011. szeptember 19. 19 / 37
Szétválogatás Az eredmények egyetlen tömbbe is helyezhetők úgy, hogy a T tulajdonságúak az elején, a többi pedig a végén lesznek Sergyán (OE NIK) AAO 03 2011. szeptember 19. 20 / 37
Szétválogatás Az eredmények egyetlen tömbbe is helyezhetők úgy, hogy a T tulajdonságúak az elején, a többi pedig a végén lesznek Pszeudokód Eljárás Szétválogatás(N, X, DBY, Y ) DBY := 0 INDZ := N + 1 Ciklus i := 1-től N-ig Ha T (X [i]) akkor DBY := DBY + 1 Y [DBY ] := X [i] különben INDZ := INDZ 1 Y [INDZ] := X [i] Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 20 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód E = 1 U = 11 Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége seged = i X = informatika Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód E = 2 U = 11 Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége seged = i X = anformatika Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód E = 2 U = 10 Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége seged = i X = anformatikn Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód E = 3 U = 9 Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége seged = i X = aiformatikn Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód E = 3 U = 8 Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége seged = i X = aiformatfkn Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód E = 4 U = 7 Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége seged = i X = aiaormatfkn Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód E = 5 U = 6 Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége seged = i X = aiaormrtfkn Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Az elemek helyben, azaz a bemeneti tömbben történő szétválogatása is megoldható Pszeudokód E = 5 U = 5 Eljárás Szétválogatás(N, X, DB) E := 1; U := N; seged := X [E] Ciklus amíg E < U Ciklus amíg E < U és (T (X [U])) U := U 1 Ha E < U akkor X [E] := X [U]; E := E + 1 Ciklus amíg E < U és T (X [E]) E := E + 1 Ha E < U akkor X [U] := X [E]; U := U 1 Elágazás vége Elágazás vége X [E] := seged Ha T (X [E]) akkor DB := E különben DB := E 1 Elágazás vége Eljárás vége seged = i X = aiaoimrtfkn DB = 5 Sergyán (OE NIK) AAO 03 2011. szeptember 19. 21 / 37
Szétválogatás Páros-páratlan szétválogatás Eljárás Szétválogatás(N, X, DB, Y ) DB := 0 IND := N + 1 Ciklus i := 1-től N-ig Ha páros(x [i]) akkor DB := DB + 1 Y [DB] := X [i] különben IND := IND 1 Y [IND] := X [i] Elágazás vége ciklus vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 22 / 37
Összetett programozási tételek 1 Másolás 2 Kiválogatás 3 Szétválogatás 4 Metszet 5 Egyesítés 6 Összefuttatás Sergyán (OE NIK) AAO 03 2011. szeptember 19. 23 / 37
Metszet Típusfeladatok 1 Adjuk meg két természetes szám osztóinak ismeretében az összes közös osztójukat. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 24 / 37
Metszet Típusfeladatok 1 Adjuk meg két természetes szám osztóinak ismeretében az összes közös osztójukat. 2 Nyáron és télen is végeztünk madármegfigyeléseket a Balatonon. Ismerjük, hogy nyáron, illetve télen mely madárfajok fordultak elő. Állapítsuk meg ezek alapján, hogy melyek a nem költöző madarak. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 24 / 37
Metszet Típusfeladatok 1 Adjuk meg két természetes szám osztóinak ismeretében az összes közös osztójukat. 2 Nyáron és télen is végeztünk madármegfigyeléseket a Balatonon. Ismerjük, hogy nyáron, illetve télen mely madárfajok fordultak elő. Állapítsuk meg ezek alapján, hogy melyek a nem költöző madarak. 3 Négy ember heti szabad estéi ismeretében állapítsuk meg, hogy a héten melyik este mehetnek el együtt moziba. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 24 / 37
Metszet Típusfeladatok 1 Adjuk meg két természetes szám osztóinak ismeretében az összes közös osztójukat. 2 Nyáron és télen is végeztünk madármegfigyeléseket a Balatonon. Ismerjük, hogy nyáron, illetve télen mely madárfajok fordultak elő. Állapítsuk meg ezek alapján, hogy melyek a nem költöző madarak. 3 Négy ember heti szabad estéi ismeretében állapítsuk meg, hogy a héten melyik este mehetnek el együtt moziba. Közös jellemzők Több sorozathoz egyet rendelünk Sergyán (OE NIK) AAO 03 2011. szeptember 19. 24 / 37
Metszet Típusfeladatok 1 Adjuk meg két természetes szám osztóinak ismeretében az összes közös osztójukat. 2 Nyáron és télen is végeztünk madármegfigyeléseket a Balatonon. Ismerjük, hogy nyáron, illetve télen mely madárfajok fordultak elő. Állapítsuk meg ezek alapján, hogy melyek a nem költöző madarak. 3 Négy ember heti szabad estéi ismeretében állapítsuk meg, hogy a héten melyik este mehetnek el együtt moziba. Közös jellemzők Több sorozathoz egyet rendelünk Két sorozat elemei közül azokat kell kiválogatnunk, amelyek mindkettőben előfordulnak Sergyán (OE NIK) AAO 03 2011. szeptember 19. 24 / 37
Metszet Megvalósítási ötlet Válogassuk ki az egyik sorozat (X ) azon elemeit, amelyek a másikban (Y ) is előfordulnak Sergyán (OE NIK) AAO 03 2011. szeptember 19. 25 / 37
Metszet Megvalósítási ötlet Válogassuk ki az egyik sorozat (X ) azon elemeit, amelyek a másikban (Y ) is előfordulnak Ehhez egy kiválogatás és egy eldöntés tételt kell egymásba építeni Sergyán (OE NIK) AAO 03 2011. szeptember 19. 25 / 37
Metszet Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 26 / 37
Metszet Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Kimenet Z: Eredmény tömb DB: Z elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 26 / 37
Metszet Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Kimenet Z: Eredmény tömb DB: Z elemeinek száma Pszeudokód Eljárás Metszet(M, X, N, Y, DB, Z) DB := 0 Ciklus i := 1-től M-ig j := 1 Ciklus amíg j N és X [i] Y [j] j := j + 1 Ha j N akkor DB := DB + 1 Z[DB] := X [i] Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 26 / 37
Metszet Megjegyzések Kis módosítással a metszet tétel nem csak két sorozat közös elemeinek meghatározására alkalmazható Sergyán (OE NIK) AAO 03 2011. szeptember 19. 27 / 37
Metszet Megjegyzések Kis módosítással a metszet tétel nem csak két sorozat közös elemeinek meghatározására alkalmazható Eldöntés: van-e két sorozatnak közös eleme? Sergyán (OE NIK) AAO 03 2011. szeptember 19. 27 / 37
Metszet Megjegyzések Kis módosítással a metszet tétel nem csak két sorozat közös elemeinek meghatározására alkalmazható Eldöntés: van-e két sorozatnak közös eleme? Kiválasztás: adjuk meg a két sorozat egyik közös elemét (ha tudjuk, hogy van ilyen) Sergyán (OE NIK) AAO 03 2011. szeptember 19. 27 / 37
Metszet Megjegyzések Kis módosítással a metszet tétel nem csak két sorozat közös elemeinek meghatározására alkalmazható Eldöntés: van-e két sorozatnak közös eleme? Kiválasztás: adjuk meg a két sorozat egyik közös elemét (ha tudjuk, hogy van ilyen) Keresés: ha van, akkor adjuk meg a két sorozat egyik közös elemét Sergyán (OE NIK) AAO 03 2011. szeptember 19. 27 / 37
Metszet Megjegyzések Kis módosítással a metszet tétel nem csak két sorozat közös elemeinek meghatározására alkalmazható Eldöntés: van-e két sorozatnak közös eleme? Kiválasztás: adjuk meg a két sorozat egyik közös elemét (ha tudjuk, hogy van ilyen) Keresés: ha van, akkor adjuk meg a két sorozat egyik közös elemét Megszámolás: hány közös eleme van a két sorozatnak? Sergyán (OE NIK) AAO 03 2011. szeptember 19. 27 / 37
Metszet Keressük meg X egyik olyan elemét, amely benne van Y -ban is. Közös elem keresése Eljárás MetszetbeliElem(M, X, N, Y, VAN, E) i := 1 VAN :=hamis Ciklus amíg i M és VAN j := 1 Ciklus amíg j N és X [i] Y [j] j := j + 1 Ha j N akkor VAN :=igaz E := X [i] különben i := i + 1 Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 28 / 37
Összetett programozási tételek 1 Másolás 2 Kiválogatás 3 Szétválogatás 4 Metszet 5 Egyesítés 6 Összefuttatás Sergyán (OE NIK) AAO 03 2011. szeptember 19. 29 / 37
Egyesítés (unió) Típusfeladatok 1 Két szám prímosztóinak ismeretében adjuk meg legkisebb közös többszörösük prímosztóit. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 30 / 37
Egyesítés (unió) Típusfeladatok 1 Két szám prímosztóinak ismeretében adjuk meg legkisebb közös többszörösük prímosztóit. 2 Egy iskola két földrajztanára órarendjének ismeretében adjuk meg azokat az órákat, amikor valamelyikük tud egy órát helyettesíteni. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 30 / 37
Egyesítés (unió) Típusfeladatok 1 Két szám prímosztóinak ismeretében adjuk meg legkisebb közös többszörösük prímosztóit. 2 Egy iskola két földrajztanára órarendjének ismeretében adjuk meg azokat az órákat, amikor valamelyikük tud egy órát helyettesíteni. Közös jellemzők Két sorozathoz egy sorozatot rendel Sergyán (OE NIK) AAO 03 2011. szeptember 19. 30 / 37
Egyesítés (unió) Típusfeladatok 1 Két szám prímosztóinak ismeretében adjuk meg legkisebb közös többszörösük prímosztóit. 2 Egy iskola két földrajztanára órarendjének ismeretében adjuk meg azokat az órákat, amikor valamelyikük tud egy órát helyettesíteni. Közös jellemzők Két sorozathoz egy sorozatot rendel Azokat az elemeket keressük, amelyek a két sorozatból legalább az egyikben benne vannak Sergyán (OE NIK) AAO 03 2011. szeptember 19. 30 / 37
Egyesítés (unió) Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 31 / 37
Egyesítés (unió) Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Kimenet Z: Eredmény tömb DB: Z elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 31 / 37
Egyesítés (unió) Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Kimenet Z: Eredmény tömb DB: Z elemeinek száma Pszeudokód Eljárás Egyesítés(M, X, N, Y, DB, Z) Z := X DB := M Ciklus j := 1-től N-ig i := 1 Ciklus amíg i M és X [i] Y [j] i := i + 1 Ha i > M akkor DB := DB + 1 Z[DB] := Y [j] Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 31 / 37
Egyesítés (unió) Kis módosítással készíthetünk olyan algoritmust, amely egy sorozatból halmazt készít, azaz egy sorozatot úgy alakít át, hogy az azonos elemek csak egyszer szerepeljenek. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 32 / 37
Egyesítés (unió) Kis módosítással készíthetünk olyan algoritmust, amely egy sorozatból halmazt készít, azaz egy sorozatot úgy alakít át, hogy az azonos elemek csak egyszer szerepeljenek. Halmazfelsorolás készítés Eljárás HalmazfelsorolásKészítés(N, X, DB, Z) DB := 0 Ciklus i := 1-től N-ig j := 1 Ciklus amíg j DB és X [i] Z[j] j := j + 1 Ha j > DB akkor DB := DB + 1 Z[DB] := X [i] Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 32 / 37
Összetett programozási tételek 1 Másolás 2 Kiválogatás 3 Szétválogatás 4 Metszet 5 Egyesítés 6 Összefuttatás Sergyán (OE NIK) AAO 03 2011. szeptember 19. 33 / 37
Összefuttatás (rendezettek uniója) Típusfeladatok 1 Egy osztály lány-, illetve fiú tanulóinak névsora alapján álĺıtsuk elő az osztálynévsort. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 34 / 37
Összefuttatás (rendezettek uniója) Típusfeladatok 1 Egy osztály lány-, illetve fiú tanulóinak névsora alapján álĺıtsuk elő az osztálynévsort. 2 Egy iskolában négy szakörre járnak tanulók (van aki többre is). A szakkörnévsorok alapján álĺıtsuk el a szakkörre járó tanulók névsorát. Sergyán (OE NIK) AAO 03 2011. szeptember 19. 34 / 37
Összefuttatás (rendezettek uniója) Típusfeladatok 1 Egy osztály lány-, illetve fiú tanulóinak névsora alapján álĺıtsuk elő az osztálynévsort. 2 Egy iskolában négy szakörre járnak tanulók (van aki többre is). A szakkörnévsorok alapján álĺıtsuk el a szakkörre járó tanulók névsorát. Közös jellemzők Az általános egyesítéshez képest itt specialitás, hogy mindegyik sorozat rendezett Sergyán (OE NIK) AAO 03 2011. szeptember 19. 34 / 37
Összefuttatás (rendezettek uniója) Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 35 / 37
Összefuttatás (rendezettek uniója) Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Kimenet Z: Eredmény tömb DB: Z elemeinek száma Sergyán (OE NIK) AAO 03 2011. szeptember 19. 35 / 37
Összefuttatás (rendezettek uniója) Bemenet X : Egyik feldolgozandó tömb Y : Másik feldolgozandó tömb M: X elemeinek száma N: Y elemeinek száma Kimenet Z: Eredmény tömb DB: Z elemeinek száma Pszeudokód Eljárás Összefuttatás(M, X, N, Y, DB, Z) i := 1; j := 1; DB := 0 Ciklus amíg (i M) és (j N) DB := DB + 1 Elágazás X [i] < Y [j] esetén Z[DB] := X [i]; i := i + 1 X [i] = Y [j] esetén Z[DB] := X [i]; i := i + 1; j := j + 1 X [i] > Y [j] esetén Z[DB] := Y [j]; j := j + 1 Elágazás vége Ciklus amíg i M DB := DB + 1; Z[DB] := X [i]; i := i + 1 Ciklus amíg j N DB := DB + 1; Z[DB] := Y [j]; j := j + 1 Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 35 / 37
Összefuttatás (rendezettek uniója) Ha X [M] = Y [N], akkor az utolsó két ciklusra nincs szükség. Ezt a helyzetet magunk is előidézhetjük. Pszeudokód Eljárás Összefuttatás(M, X, N, Y, DB, Z) i := 1; j := 1; DB := 0 X [M + 1] := + ; Y [N + 1] := + Ciklus amíg (i < M + 1) vagy (j < N + 1) DB := DB + 1 Elágazás X [i] < Y [j] esetén Z[DB] := X [i]; i := i + 1 X [i] = Y [j] esetén Z[DB] := X [i]; i := i + 1; j := j + 1 X [i] > Y [j] esetén Z[DB] := Y [j]; j := j + 1 Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 36 / 37
Összefuttatás (rendezettek uniója) Ha nincs a két sorozatban azonos elem, akkor a megvalósítás még egyszerűbb. Pszeudokód Eljárás Összefuttatás(M, X, N, Y, DB, Z) i := 1; j := 1; DB := 0 X [M + 1] := + ; Y [N + 1] := + Ciklus amíg (i < M + 1) vagy (j < N + 1) DB := DB + 1 Ha X [i] < Y [j] akkor Z[DB] := X [i]; i := i + 1 különben Z[DB] := Y [j]; j := j + 1 Elágazás vége Eljárás vége Sergyán (OE NIK) AAO 03 2011. szeptember 19. 37 / 37