9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Hasonló dokumentumok
Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Egyszerű programozási tételek

Algoritmizálás, adatmodellezés tanítása 1. előadás

ELEMI PROGRAMOZÁSI TÉTELEK

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Programozási Módszertan definíciók, stb.

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Programkonstrukciók A programkonstrukciók programfüggvényei Levezetési szabályok. 6. előadás. Programozás-elmélet. Programozás-elmélet 6.

Programozási tételek. Dr. Iványi Péter

PROGRAMOZÁSI TÉTELEK

Térinformatikai algoritmusok Elemi algoritmusok

Informatikai tehetséggondozás:

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

Algoritmizálás és adatmodellezés tanítása 2. előadás

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Összetett programozási tételek

Algoritmizálás, adatmodellezés tanítása 1. előadás

Térinformatikai algoritmusok Elemi algoritmusok

Programozási segédlet

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Algoritmizálás, adatmodellezés 1. előadás

Sorozat érték típusú programozási tételek

Az összetett programozási tételek is egy tőről fakadnak

Objektumorientált Programozás VI.

Bevezetés az informatikába

Programozási tételek. PPT 2007/2008 tavasz.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Objektum Orientált Programozás VII.

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Algoritmizálás, adatmodellezés tanítása 2. előadás

A félév során előkerülő témakörök

Programozási módszertan

Egyszerű programozási tételek

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Algoritmizálás és adatmodellezés 2. előadás

Programozási alapismeretek 3. előadás

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Algoritmusok helyességének bizonyítása. A Floyd-módszer

10. gyakorlat Tömb, mint függvény argumentum

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Sorozatok. 5. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Sorozatok p. 1/2

Bevezetés a programozáshoz I. Feladatok

Algoritmizálás és adatmodellezés tanítása 6. előadás

PROGRAMOZÁSMÓDSZERTAN

Algoritmizálás és adatmodellezés tanítása 3. előadás

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Programozás alapjai (ANSI C)

Bevezetés a programozásba I.

Programozási módszertan. Mohó algoritmusok

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

Maximum kiválasztás tömbben

Adatszerkezetek II. 10. előadás

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Általános algoritmustervezési módszerek

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Algoritmuselmélet 1. előadás

Informatikai tehetséggondozás:

Kiterjesztések sek szemantikája

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Algoritmusok. Hogyan csináljam?

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Informatikai tehetséggondozás:

Láncolt listák Témakörök. Lista alapfogalmak

Számjegyes vagy radix rendezés

Programozás Minta programterv a 1. házi feladathoz 1.

PROGRAMOZÁSMÓDSZERTAN

Algoritmizálás, adatmodellezés tanítása 6. előadás

Multihalmaz, intervallumhalmaz

A C# programozási nyelv alapjai

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

7.4. A programkonstrukciók és a kiszámíthatóság

2010. október 12. Dr. Vincze Szilvia

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Halmaz típus Értékhalmaz:

Számláló rendezés. Példa

Informatikai tehetséggondozás:

3. előadás. Programozás-elmélet. A változó fogalma Kiterjesztések A feladat kiterjesztése A program kiterjesztése Kiterjesztési tételek Példa

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

0-49 pont: elégtelen, pont: elégséges, pont: közepes, pont: jó, pont: jeles

A = fx j P (x) igazg ; A = fx j 1 x 7; x prímszámg : A [ B = fx j x 2 A, vagy x 2 Bg ; [a::b] := [a; b] \ Z

Programozás alapjai 9.Gy: Struktúra 2.

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Átírás:

Programozási tételek Programozási feladatok megoldásakor a top-down (strukturált) programtervezés esetén három vezérlési szerkezetet használunk: - szekvencia - elágazás - ciklus Eddig megismertük az alábbi fogalmakat: - állapottér (A = A 1... A n ) - változó (a i A i ) - feladat (F A A) - program (S A A ) - programfüggvény (a programfutás eredménye) (p (S) A A)

Programozási tételek Egy S program megoldja az F feladatot, ha D F D p(s) és a D F : p (S) (a) F (a). A megoldás ellenőrzésére és a programhelyesség részleges bizonyítására bevezettük az elő- és utófeltétel, valamint a leggyengébb előfeltétel fogalmát: Legyen Q, R : A L két állítás, S program. A {Q} S {R} szimbólummal jelöltük azt, hogy a [Q] esetén p (S) (a) [R]. A [Q] előfeltétel halmazt felfoghatjuk az állapottér azon részeként, amelyre meg akarjuk a feladat megoldását kapni. Az elérő eredmény megadására szolgál az [R] utófeltétel halmaz. A {Q} S {R} szimbólummal jelölt implikáció igazolása jelenti a parciális programhelyesség igazolását. Az lf (S, R) leggyengébb előfeltétel a legbővebb Q előfeltételt jelenti.

Programozási tételek Egy feladat megadása (specifikációja) a következőképpen történhet: - bemenő (input) adatok - kimenő (output) adatok - a feladatban használt fogalmak definíciója - az eredmény kiszámítási szabálya - a bemenő adatokra kirótt feltételeket (előfeltételek) - a kimenő adatokra kirótt feltételek (utófeltételek).

Programozási tételek Lényeges észrevétel: a feladatok osztályokba sorolhatók a feladat jellege szerint és a feladatosztályokhoz a teljes feladatosztály megoldó algoritmusokat tudunk készíteni. Ezeket a tipus feladatokat programozási tételeknek nevezzük, mert igazolható, hogy megoldásaik a feladat garantáltan helyes megoldásai. A programozási tételek ismeretében a legtöbb feladat megoldása során csak a megfelelő programozási tételt kell alkalmazni. Így elvileg helyes (de nem mindig optimális) megoldást kapunk. A feladatok olyanok, hogy egy, vagy több adatsokasághoz relünk valamilyen eredményt. Egyszerűség kedvéért feltesszük, hogy ezek sorozatok, amelyeket tömbbel ábrázolhatunk. Vizsgált feladatosztály típusok: - egy sorozathoz egy értéket relő feladatok - egy sorozathoz egy sorozatot relő feladatok - egy sorozathoz több sorozatot relő feladatok - több sorozathoz egy sorozatot relő feladatok.

Elemi programozási tételek A feladatok általános alakja: Input : n N 0, x H n, F : H G Output : S G Q : R : S = F (x 1,..., x n ) Egy bemenő sorozattól függő S értéket kell meghatároznunk. A feladatcsoporthoz több feladattípus tartozik.

Sorozatszámítás Néhány példa: F1. Adjuk meg n alkalmazottból álló osztály bértömegét a bérek ismeretében! F2. Egy m elemű betűsorozat betűit füzzük össze egyetlen szövegtipusú változóba! F3. A Balatonnál k madarász végez megfigyeléseket. Mindegyik megadta, hogy milyen madarakat látott. Készítsünk algoritmust, amely megadja a Balatonnál látott madarakat! F4. Adjuk meg az első n természetes szám szorzatát! A feladatokban közös: adatok sorozatához relünk egy értéket, amelyet, egy az egész sorozaton értelmezett függvény ad meg (n szám összege, m betű konkatenációja, k halmaz uniója, n szám szorzata).

Sorozatszámítás Az algoritmus: Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei} F 0 : elemtipus 1 {a művelet nulleleme} S : elemtipus 2 {az eredmény}

Sorozatszámítás Input : n N 0, x H n, F : H G Output : S G Q : F 0 G (nullelem) és f : G H G és F (x 1,..., x n ) = f (F (x 1,..., x n 1 ), x n ) és F () = F 0 R : S = F (x 1,..., x n ) A feladat lehetséges variációi: F =,,,,,, & (konkatenáció) F 0 = 0, 1, [], alaphalmaz, igaz, hamis,. A megoldás indukció segítségével: - i = 0 esetre tudjuk az eredmény: F 0, - ha (i 1)-re tudjuk az F i 1 eredményt, akkor az i-re az eredményt F i = f (F i 1, x i ) adja (i = 1,..., n).

Sorozatszámítás A feladatot megoldó algoritmus: sorozatszámítás(n, x, s) s := F 0 for i = 1 : n s := f (s, x (i))

Sorozatszámítás Az F1. feladat esetén az eljárás: Az F2. feladat esetén az eljárás: sorozatszámítás(n, x, s) s := 0 for i = 1 : n s := s + x (i) sorozatszámítás(m, x, sz) sz := {üres szöveg} for i = 1 : m sz := sz&x (i)

Sorozatszámítás Az F3. feladat esetén: Végül az F4. feladat esetén: unio(k, X, H) H := [] for i = 1 : k H := H X (i) sorozatszámítás(n, x, p) p := 1 for i = 1 : n p := p x (i)

Eldöntés A feladat annak eldöntése, hogy a) van-e a sorozatban adott tulajdonságú elem b) a sorozat mindegyik eleme relkezik-e ezzel a tulajdonsággal. Az a) esetben a feladat alakja: Input : n N 0, x H n, T : H L Output : VAN L Q : R : VAN ( i (1 i n) : T (x i )) Az algoritmus: Függvény: T : elemtípus L

Eldöntés Változók: n : egész a feldolgozandó sorozat elemszáma x : tömb (1..n:elemtipus) a feldolgozandó sorozat elemei VAN : logikai az eredmény A feladattípus megoldására az előző programozási tétel is alkalmas az F =, f =, F 0 = hamis megfeleltetéssel: eldöntés(n, X, S) S := hamis for i = 1 : n S := S T (x (i))

Eldöntés Vegyük észre, hogy ha egyszer S igaz lesz, akkor igaz is marad. Tehát nem kell a ciklust végig számolni. Eszerint az igazi megoldó algoritmus: eldöntés(n, x, VAN) i := 1 while (i n) ( T (x (i))) i := i + 1 VAN := (i n) A b) esetben a megoldást az adja, hogy átfogalmazzuk: i : 1 i n : T (x i ) i : 1 i n T (x i ). A sorozatszámítás itt az F =, f =, F 0 = igaz értékekkel lehet alkalmazni.

Eldöntés A megoldó algoritmus: eldöntés(n, x, MIND) i := 1 while (i n) (T (x (i))) i := i + 1 MIND := (i > n)

Eldöntés Példa: Döntsük el, hogy egy adott sorozat monoton növekedő-e! Esetünkben T (x i ) (x i x i+1 ) és ezért a ciklus csak (n 1)-ig mehet. A megoldás: eldöntés(n, x, MONOTON) i := 1 while (i n 1) (x (i) x (i + 1)) i := i + 1 MONOTON := (i > n 1)

Kiválasztás A feladat sorozat adott tulajdonságú elemének (indexének) megadása, amelynek létezését feltesszük: Input : n N, x H n, T : H L Output : SORSZ N Q : i (1 i n) : T (x i ) R : (1 SORSZ n) T (x SORSZ ) Az algoritmus: Függvény: T : elemtípus L Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei} SORSZ : egész {az eredmény}

Kiválasztás A megoldás hasonlít az előző feladattípushoz: kiválasztás(n, x, SORSZ) i := 1 while T (x (i)) i := i + 1 SORSZ := i Feladat: A program az első T tulajdonságú elemet adja meg. Hogyan kell módosítani, hogy az utolsó ilyet adja meg?

Lineáris keresés A feladat adott tulajdonságú elem megadása egy sorozatban, ha van ilyen. Ha nincs, akkor ezt a tényt kell megadni. Tehát az előző két tétel mindegyikét tartalmazza: Input : n N, x H n, T : H L Output : VAN L, SORSZ N Q : R : VAN ( i (1 i n) : T (x i )) (VAN = (1 SORSZ n) T (x SORSZ )) Az algoritmus: Függvény: T : elemtípus L

Lineáris keresés Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei} VAN : logikai {az eredmény - van-e megfelelő elem} SORSZ : egész {az eredmény -a megfelelő elem sorszáma} A megoldó algoritmust az eldöntés algoritmusa adja kiegészítve a kiválasztási algoritmus megfelelő részével: keresés(n, x, VAN, SORSZ) i := 1 while (i n) ( T (x (i))) i := i + 1 VAN := (i n) if VAN then SORSZ := i

Megszámolás A feladat annak meghatározása, hogy hány adott tulajdonságú elem van egy sorozatban: Input : n N 0, x H n, T : H L, χ : H {0, 1} χ (x) = 1, ha T (x) és χ (x) = 0, ha T (x) Output : DB N 0 Q : R : DB = n i=1 χ (x i) Az algoritmus: Függvény: T : elemtípus L Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei} DB : egész {az eredmény -a megfelelő elemek száma}

Megszámolás A feladat egy sorozatszámítás (tkp. összegzés a χ függvény értékeire). A megoldó algoritmus: megszámolás(n, x, DB) DB := 0 for i = 1 : n if T (x (i)) then DB := DB + 1

Maximumkiválasztás A feladat az, hogy válasszuk ki egy sorozat legnagyobb (legkisebb) elemét: Input : n N 0, x H n, H rezett halmaz ( <, reláció) Output : MAX N Q : n 1 R : 1 MAX n i (1 i n) : x MAX x i Az algoritmus: Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei} MAX : egész {a maximális értékű elem sorszáma}

Maximumkiválasztás A sorozatszámításnál F (x 1,..., x n ) = max (x 1,..., x n ) és f (x, y) = max (x, y) függvényeket használjuk és az F 0 = x 1 választást (Nem neutrális elem, de az indexeléssel kompenzáljuk)! A megoldó algoritmus: maximumkiválasztás(n, x, MAX ) MAX := 1 for i = 2 : n if x (MAX ) < x (i) then MAX := i

Maximumkiválasztás Ha a maximális értéket is akarjuk, akkor az algoritmus: maximumkiválasztás(n, x, MAX, MEXERT ) MAX, MAXERT := 1, x (1) for i = 2 : n if MAXERT < x (i) then MAX, MAXERT := i, x (i) A legkisebb érték meghatározásához a < relációt át kell írni a > relációra (A változóneveket is célszerű átírni a MIN, MINERT nevekre).