1 / 77

Programozási tételek

Programozási tételek. Készítette: Pető László. Programozási tételek. A programozási feladatok megoldásuk szempontjából nagy csoportokba, osztályokba sorolhatók. A programozási tételek ilyen csoportok tipikus megoldásaival foglalkoznak. Olyan feladatokkal foglalkozunk, amelyekben.

ksena
Download Presentation

Programozási tételek

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programozási tételek Készítette: Pető László

  2. Programozási tételek • A programozási feladatok megoldásuk szempontjából nagy csoportokba, osztályokba sorolhatók. • A programozási tételek ilyen csoportok tipikus megoldásaival foglalkoznak. • Olyan feladatokkal foglalkozunk, amelyekben

  3. Programozási tételek • egy sorozathoz egy értéket, • egy sorozathoz egy sorozatot, • sorozatokhoz sorozatot vagy • sorozathoz sorozatokat kell rendelni. • A vizsgálni kívánt sorozatot megadhatjuk elemei felsorolásával vagy elemei kiszámítási módjával.

  4. Feladattípusok • összegzés (a sorozat elemeinek összege, szorzata, uniója stb.), • maximum-kiválasztás (a sorozat maximális, vagy minimális értékű elemének kiválasztása), • megszámolás (adott tulajdonságú elemek száma a sorozatban), • kiválogatás (sorozat adott tulajdonságú elemeinek megadása),

  5. Feladattípusok • kiválasztás (a vizsgált sorozat egy adott tulajdonságú elemének megadása, ilyen elem biztosan szerepel a sorozatban), • eldöntés (van-e a vizsgált sorozatban adott tulajdonságú elem), • keresés (a vizsgált sorozat egy adott tulajdonságú elemének megadása, ilyen elem lehet, hogy nincs a sorozatban),

  6. Feladattípusok • unió (két sorozatként ábrázolt halmaz egyesítése), • metszet (két sorozatként ábrázolt halmaz közös elemei), • összefuttatás (két rendezett sorozat egyesítése), • szétválogatás (egy sorozat kétféle tulajdonságú elemeinek különválasztása),

  7. Feladattípusok • rendezés (rendezetlen sorozat elemeinek átrendezése növekvő vagy csökkenő sorrendbe), • visszalépéses keresés (sorozatokból egy-egy elem meghatározása).

  8. Összegzés • Ez a feladattípus egy sorozathoz egy értéket rendel. • A sorozat elemeinek összegét, szorzatát, unióját stb. kell előállítani. • A feladatok egy részénél az így kiszámított értékkel esetleg még egyszerű műveletet kell végezni (pl. osztani az átlagszámításnál).

  9. Az összegzés általános algoritmusa • Eljárás: • S:=kezdőérték • Ciklus I=1-től N-ig • S:=S művelet A(I) • Ciklus vége • Eljárás vége.

  10. Példa (egy 100 elemű tömb elemeinek összege) • Procedure osszegzes; • begin • osszeg:=0; • for i:=1 to 100 do • osszeg:=osszeg+a[i]; • end;

  11. Maximum-kiválasztás • Ebben a feladatkörben adott egy N elemű sorozat. • A feladat ezen sorozat legnagyobb elemének meghatározása (néha csupán az értékére van szükség). • Hasonló feladat - csupán a < relációt kell >-ra cserélni - a minimum-kiválasztás.

  12. A maximum-kiválasztás általános algoritmusa (1.) • Eljárás: • MAXIMUM := A(1) • SORSZAM := 1 • Ciklus I=2-től N-ig • Ha MAXIMUM < A(I) akkor MAXIMUM := A(I) • SORSZAM := I • Ciklus vége • Eljárás vége.

  13. Példa (Egy 100 elemű tömb legnagyobb elemének kiválasztása) • Procedure maximum; • begin • max:=a[1]; • sorsz:=1; • for i:=2 to 100 do • begin • if max < a[i] then • begin • max := a[i]; • sorsz:=i; • end; • end; • end;

  14. A maximum-kiválasztás általános algoritmusa (2) • Eljárás: • SORSZAM := 1 • Ciklus I=2-től N-ig • Ha A(SORSZAM) < A(I) akkor SORSZAM := I • Ciklus vége • MAXIMUM := A(SORSZAM) • Eljárás vége.

  15. Példa (egy 100 elemű tömb legnagyobb elemének kiválasztása • Procedure maximum2; • begin • sorsz:=1; • for i:=2 to 100 do • if a[sorsz] < a[i] then sorsz:=i; • max:=a[sorsz]; • end;

  16. Megszámolás • A következő feladatok megoldása során egy sorozathoz egy számot rendelünk hozzá. • Rendelkezésünkre áll egy N elemű sorozat és egy, a sorozat elemein értelmezett T tulajdonság. • Az a feladatunk, hogy a T tulajdonsággal rendelkező elemeket számoljuk meg. • Ügyeljünk arra, hogy az összegzés céljára szolgáló változó értékét kezdetben 0-ra kell állítani!

  17. A megszámolás általános algoritmusa • Eljárás: • DB:=0 • Ciklus I=1-től N-ig • Ha A(I) T tulajdonságú akkor DB:=DB+1 • Ciklus vége • Eljárás vége.

  18. Példa (Egy 100 elemű tömb elemei közül hány pozitív van) • Procedure pozitiv; • begin • darab:=0; • for i:=1 to 100 do • if a[i] > 0 then darab:=darab+1; • end;

  19. Kiválogatás • Ennél a feladattípusnál egy N elemű A sorozat összes T tulajdonsággal rendelkező elemét kell meghatározni. • Az eredmény egy B(M) sorozat lesz, ahol 0<=M<=N. • M=0, ha az A(N) sorozat egy eleme sem, M=N, ha az A(N) sorozat minden eleme T tulajdonságú.

  20. A kiválogatás általános algoritmusa • Eljárás: • M:=0 • Ciklus I=1-től N-ig • Ha A(I) T tulajdonságú akkor M:=M+1 : B(M):=A(I) • Ciklus vége • Eljárás vége.

  21. Példa (egy száz elemű tömb pozitív elemeit gyűjtsük egy másik tömbbe) • Procedure pozitivtomb; • begin • darab:=0; • for i:=1 to 100 do • if a[i] > 0 then • begin • darab:=darab+1; • b[darab]:=a[i]; • end; • end;

  22. Kiegészítés • A megoldásban gyakran - ha további feldolgozásukra nincs szükség - nem gyűjtjük ki az elemeket, hanem azonnal kiírjuk: • Eljárás: • Ciklus I=1-től N-ig • Ha A(I) T tulajdonságú akkor Ki: I,A(I) • Ciklus vége • Eljárás vége.

  23. Példa (egy 100 elemű tömb pozitív elemeinek kiíratása) • Procedure pozitivki; • begin • for i:=1 to 100 do • if a[i] > 0 then writeln(i,’ ., ‘,a[i]); • end;

  24. Kiválasztás • Adott egy N elemű sorozat és egy, a sorozat elemein értelmezett T tulajdonság. Azt is tudjuk, hogy a sorozatban van legalább egy T tulajdonságú elem. • A feladat az első ilyen elem sorszámának meghatározása.

  25. A kiválasztás algoritmusa • Eljárás: • I:=1 • Ciklus amíg A(I) nem T tulajdonságú • I:=I+1 • Ciklus vége • SORSZAM:= I • Eljárás vége.

  26. Példa (egy tömbben biztosan található első pozitív elem meghatározása) • Procedure elsopoz; • begin • i:=1; • while a[i] <= 0 do • begin • i:=i+1; • end; • sorsz:=i; • end;

  27. Eldöntés • Ez a feladattípus egy sorozathoz logikai értéket rendel. • A logikai érték "igaz"-at vesz fel, ha a sorozatban létezik adott (T) tulajdonságú elem, és "hamis"-at vesz fel, ha ilyen tulajdonságú elem nincs a sorozatban.

  28. Az eldöntés általános algoritmusa • Eljárás: • I:=1 • Ciklus amíg I<=N és A(I) nem T tulajdonságú • I:=I+1 • Ciklus vége • VAN:=(I<=N) • Eljárás vége.

  29. Példa (egy 100 elemű tömbben van-e pozitív) • Procedure vanepoz; • begin • i:=1; • while (i <= 100) and (a[i] <= 0) do • begin • i:=i+1; • end; • van:=(i <= 100); • end;

  30. Keresés • A keresés feladattípus egy sorozathoz egy elemet rendel. • A feladat lényege, hogy a sorozatban egy adott tulajdonságú (T) elemet kell meghatároznunk (magát az elemet vagy a sorozatbeli sorszámát szokás kérni). • Nem biztos, hogy a sorozatban van ilyen elem.

  31. Keresés • A keresés hatékonyságát lényegesen befolyásolhatja, hogy rendezett vagy rendezetlen sorozatban keresünk: logaritmikus, illletve lineáris keresést használunk. • Amelyik feladatban lehet, használjuk ki a sorozat rendezettségét!

  32. A lineáris keresés általános algoritmusa • Eljárás: lineáris keresés • I:=1 • Ciklus amíg I<=N és A(I) nem T tulajdonságú • I:=I+1 • Ciklus vége • VAN:=(I<=N) • Ha VAN akkor SORSZÁM:=I • Eljárás vége.

  33. Példa (egy 100 elemű tömbben hányadik az első pozitív, ha van) • Procedure linearisker; • begin • i:=1; • while (i <= 100) and (a[i] <= 0) do • begin • i:=i+1; • end; • van:=(i<=100); • if van then sorsz:=i; • end;

  34. A logaritmikus keresés általános algoritmusa • Eljárás: logaritmikus keresés • Be: X • AlsoH = 1 FelsoH = n • Ciklus vége • K = (AH+FH)/2 egész része • Ha X<A(K) akkor FH=K-1 • Ha X>A(K) akkor AH=K+1 • Ciklus amíg A(K)=X vagy AH>FH • VAN:=(A(K)=X) • Ha VAN akkor SORSZÁM:=K • Eljárás vége.

  35. Példa (egy 100 elemű rendezett tömbben keressük meg egy tetszőleges elem sorszámát) • Procedure logaritmker; • begin • readln(x); • AlsoHatar:=1; • FelsoHatar:=100; • repeat • Kozep:= (AlsoHatar+FelsoHatar) div 2; • if x<a[Kozep] then FelsoHatar:=Kozep-1; • if x>a[Kozep] then AlsoHatar:=Kozep+1; • until (a[Kozep]=x) or AlsoHatar>FelsoHatar; • van:=(a[Kozep]=x); • if van then sorszam:=Kozep; • end;

  36. Alkalmazás • Gyakrabban találkozhatunk azonban olyan feladatokkal a gyakorlatban, ahol több programozási tétel együttes használatára van szükség. • Szerepel több olyan feladatsor, amelyben az adatok azonosak, s velük kapcsolatban különböző kérdésekre kell választ adni. • Ezek jól használhatók önálló feladatmegoldásra.

  37. Alkalmazás • A következő feladat megoldásánál a már megismert feladattípusok (összegzés, eldöntés, kiválasztás, keresés, megszámolás, maximumkiválasztás és kiválogatás) közül kell kiválasztani azokat, amelyekkel a kívánt eredmény elérhető.

  38. Példa • Adott egy N elemű sorozat, valamint egy a sorozat elemein értelmezett T tulajdonság. • Adjuk meg a sorozat minimálisértékű T tulajdonságú elemeit! • Adott N személyi számból álló sorozat [A(N)]. Adjuk meg az 1968-ban született legfiatalabb ember sorszámát és személyi számát! • Adjuk meg az összes ezen a napon született ember adatait is!

  39. Alkalmazott tételek • Kiválogatás tétele: 1968-ban született emberek. • B(I)= A(I) 2. és 3. számjegye. • Minimum-kiválasztás tétele: legkésőbbi hónapban és napon született ember. • C(I)= B(I) 4-7. számjegye. • Kiválogatás tétele: ugyanezen a napon született emberek.

  40. Megoldás • Procedure szemelyiszam; • begin • min:=1231; • minsor:=0; • for i=1-től n do • if b[i]=68 then • if c[i]<=min then • begin • min:=c[i]; • minsor:=i; • end; • if minsor>0 then • for i=1 to n do • if b[i]=68 and c[i]=min then writeln(a[i],’, ‘,i); • end;

  41. Unió • Eddig olyan feladattípusokkal foglalkoztunk, ahol egy sorozathoz egy értéket, vagy egy sorozatot rendeltünk hozzá. • Ebben a részben viszont több sorozat adott, amelyből egy sorozatot kell valamilyen szempont szerint előállítani. • A matematikából ismerjük két halmaz egyesítésének (uniójának) fogalmát.

  42. Unió • A két halmaz egyesítéséből származó halmazba azok az elemek tartoznak, amelyek legalább az egyikben szerepelnek. • Ebben, és a következő alfejezetben a halmazt speciálisan ábrázoljuk: az elemeit felsoroljuk egy sorozatban. • Ezt a sorrendet felhasználjuk a halmaz elemeinek bejárására.

  43. Unió • Például, ha • az "A" sorozat elemei: e, b, a, f, d, c és • a "B" sorozat elemei: j, f, b, h, d, • akkor a két sorozat uniójába ("C") az e, b, a, f, d, c, j, h • elemek tartoznak.

  44. Az unió általános algoritmusa • Eljárás: • Ciklus I=1-től N-ig • C(I):=A(I) • Ciklus vége • K:=N • Ciklus J=1-től M-ig • I:=1 • Ciklus, amíg I<=N és B(J)<>A(I) • I:=I+1 • Ciklus vége • Ha I>N akkor K:=K+1 : C(K):=B(J) • Ciklus vége • Eljárás vége.

  45. Példa (egy 100 és egy 30 elemű sorozat uniója) • procedure unio; • begin • for i:=1 to 100 do c[i]:=a[i]; • k:=100; • for j:=1 to 30 do • begin • i:=1; • while (i<=100) and (b[j]<>a[i]) do i:=i+1; • if i>n then • begin • k:=k+1; • c[k]:=b[j]; • end; • end; • end;

  46. Metszet • A metszetképzés fogalmával találkoztunk már a matematika órán a halmazműveletek tanulása során. • Két halmaz metszetébe azok az elemek tartoznak, amelyek mindkettőben szerepelnek. • Például, ha • az "A" halmaz elemei: e, b, a, f, d, c és • a "B" halmaz elemei: a, j, f, b, h, d, • akkor a két halmaz metszetébe ("C") a b, f, d elemek tartoznak.

  47. A metszet általános algoritmusa • Eljárás: • K:=0 • Ciklus I=1-től N-ig • J:=1 • Ciklus amíg J<=M és A(I)<>B(J) • J:=J+1 • Ciklus vége • Ha J<=M akkor K:=K+1 : C(K):=A(I) • Ciklus vége • Eljárás vége.

  48. Példa (egy 100 és egy 30 elemű halmaz közös elemei) • Procedure metszet; • begin • k:=0; • for i:=1 to 100 do • begin • j:=1; • while (j<=30) and (a[i]<>b[j]) do j:=j+1; • if j<=30 then • begin • k:=k+1; c[k]:=a[i]; • end; • end; • end;

  49. Összefuttatás • Az alapelve megegyezik az unióképzéssel, de feltételezzük, hogy a két sorozat rendezett, és azt szeretnénk, hogy az egyesítés során keletkezett sorozat is rendezett legyen. • Például, ha • az A sorozat elemei: A, B, C, D, E, F és • a B sorozat elemei: B, D, F, H, J, • akkor a két sorozat összefuttatásával keletkezett sorozatba az A, B, C, D, E, F, H, J elemek tartoznak.

  50. Az összefuttatás általános algoritmusa • Eljárás: • I:=1 : J:=1 : K:=0 • Ciklus amíg I<=N és J<=M • K:=K+1 • Elágazás • A(I)<B(J) esetén C(K):=A(I) : I:=I+1 • A(I)=B(J) esetén C(K):=A(I) : I:=I+1 : J:=J+1 • A(I)>B(J) esetén C(K):=B(J) : J:=J+1 • Elágazás vége • Ciklus vége • Eljárás vége.

More Related