keyboard_arrow_up

Gyakorló feladatok 1.

Programozási alapismeretek 2025.08.21

Feladatok

1. Adjuk meg egy hónapnévről a sorszámát!

        // TÉTEL: Kiválasztás //

        // SPECIFIKÁCIÓ //
        Be: honev ∈ S, 
            honapok ∈ S[1..12] = ["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"]
        Ki: sorszam ∈ N
        Ef: ∃i ∈ [1..12]: (honev = honapok[i])
        Uf: sorszam = KIVÁLASZT(i>=1, honev = honapok[i])


        // VISSZAVEZETÉS //
        ind ~ sorszam
        (1 ~ 1)
        T(elemek[i]) ~ honev = honapok[i]


        //ALGORITMUS //
        ind := 1
        Ciklus amíg nem honev = honapok[i]
            ind := ind + 1
        Ciklus vége


        Forrás: 4. előadás 17. o.
    
2. Adjuk meg az éves statisztika alapján, hogy hány napon fagyott!

        // TÉTEL: Megszámolás //

        // SPECIFIKÁCIÓ //
        Be: napdb ∈ N, homersekletek ∈ Z[1..napdb]
        Ki: fagyott ∈ N
        Ef: -
        Uf: fagyott = DARAB(i=1..napdb, homersekletek[i] <= 0)


        // VISSZAVEZETÉS //
        db ~ fagyott
        1..elemszám ~ 1..napdb
        T(elemek[i]) ~ homersekletek[i] <= 0


        //ALGORITMUS //
        Változó
            i: Egész
        fagyott := 0
        Ciklus i=1-től elemszám-ig
            Ha homersekletek[i] <= 0 akkor fagyott := fagyott + 1
        Ciklus vége


        Forrás: 3. előadás 70. o.
    
3. Egy maratonon felírtuk az egyes versenyzők idejét "óra perc" formátumban, adjuk meg, hogy az egyes versenyzők hány perc alatt futották le a maratont!
Résztvevő nélkül nem indul maraton. Az egyes idők nem kisebbek 1 percnél és nem nagyobbak 10 óránál.

        // TÉTEL: Másolás //

        // SPECIFIKÁCIÓ //
        Be: vdb ∈ N, idok ∈ Ido[1..vdb], Ido=(ora:N x perc:N)
        Ki: percek ∈ N[1..vdb]
        Ef: vdb > 0 és ∀i ∈ [1..db]: (1 <= (idok[i].ora*60 + idok[i].perc) <= 600)
        Uf: percek = MÁSOL(i=1..vdb, idok[i].ora*60 + idok[i].perc)


        // VISSZAVEZETÉS //
        fvelemek ~ percek
        1..elemszám ~ 1..vdb
        f(elemek[i]) ~ idok[i].ora*60 + idok[i].perc


        //ALGORITMUS //
        Változó
            i: Egész
        Ciklus i=1-től vdb-ig
            percek[i] = idok[i].ora*60 + idok[i].perc
        Ciklus vége
    
4. Lakáskeresés közben több ingatlan bérleti árát is feljegyeztük, adjuk meg, hogy volt-e olyan, ami a büdzsénkbe belefér!

        // TÉTEL: Eldöntés //

        // SPECIFIKÁCIÓ //
        Be: adb ∈ N, arak ∈ N[1..adb], budzse ∈ N
        Ki: van ∈ L
        Ef: -
        Uf: van = VAN(i=1..adb, arak[i] <= budzse)


        // VISSZAVEZETÉS //
        (van ~ van)
        1..elemszám ~ 1..adb
        T(elemek[i]) ~ arak[i] <= budzse


        //ALGORITMUS //
        Változó
            i: Egész
        i := 1
        Ciklus amíg i <= adb és nem arak[i] <= budzse
            i := i + 1
        Ciklus vége
        van := i <= adb
    
5. Adjuk meg valahány napi statisztika alapján a leghidegebb nap hőmérsékletét!

        // TÉTEL: Minimumkiválasztás //

        // SPECIFIKÁCIÓ //
        Be: napdb ∈ N, hom ∈ Z[1..napdb]
        Ki: minert ∈ Z
        Ef: napdb > 0
        Uf: (,minert) = MIN(i=1..napdb, hom[i])


        // VISSZAVEZETÉS //
        (minind ~ -)
        (minért ~ minert)
        1..elemszám ~ 1..napdb
        elemek[i] ~ hom[i]


        //ALGORITMUS //
        Változó
            i: Egész
        minert := hom[1]
        Ciklus i=2-től napdb-ig
            Ha hom[i] < minert akkor minert := hom[i]
        Ciklus vége


        Forrás: ~ 3. előadás 77. o.
    
6. Adjuk meg kik kaptak kettest a matematika dolgozatukra!

        // TÉTEL: Kiválogatás //

        // SPECIFIKÁCIÓ //
        Be: tdb ∈ N, jegyek ∈ Jegy[1..tdb], Jegy=(nev:S x jegy:N)
        Ki: db ∈ N, kettesek ∈ S[1..db]
        Ef: ∀i ∈ [1..tdb]: (1 <= jegyek[i].jegy <= 5)
        Uf: (db, kettesek) = KIVÁLOGAT(i=1..tdb, jegyek[i].jegy = 2, jegyek[i].nev)


        // VISSZAVEZETÉS //
        (db ~ db)
        kivelemek ~ kettesek
        1..elemszám ~ 1..tdb
        T(elemek[i]) ~ jegyek[i].jegy = 2
        elemek[i] ~ jegyek[i].nev


        //ALGORITMUS //
        Változó
            i: Egész
        db := 0
        Ciklus i=1-től tdb-ig
            Ha jegyek[i].jegy = 2 akkor
                db := db + 1
                kettesek[db] := jegyek[i].nev
            Elágazás vége
        Ciklus vége


        Forrás: ~ 4. előadás 38. o.
    
7. Egy tanuló év végi latin jegyei alapján adjuk meg, hogy dícséretes ötös lesz-e az osztályzata!
Évente legalább négy jegyet kell kapni egy-egy diáknak. Az osztályzás 5-ös skálán folyik.
Dícséretest abban az esetben ad a tanár, ha minden jegye ötös egy tanulónak.

        // TÉTEL: Mind eldöntés //

        // SPECIFIKÁCIÓ //
        Be: jegydb ∈ N, jegyek ∈ N[1..jegydb]
        Ki: kituno ∈ L
        Ef: jegydb >= 4 és ∀i ∈ [1..jegydb]: (1 <= jegyek[i] <= 5)
        Uf: kituno = MIND(i=1..jegydb, jegyek[i] = 5)


        // VISSZAVEZETÉS //
        mind ~ kituno
        1..elemszám ~ 1..jegydb
        T(elemek[i]) ~ jegyek[i] = 5


        //ALGORITMUS //
        Változó
            i: Egész
        i := 1
        Ciklus amíg i <= jegydb és jegyek[i] = 5
            i := i + 1
        Ciklus vége
        mind := i > jegydb
    
8. Kíváncsiak voltunk, hogy mennyi kalóriát fogyasztunk átlagosan, adjuk meg a vizsgált időszak átlagos kalóriabevitelt a napi adatok alapján!

        // TÉTEL: Összegzés //

        // SPECIFIKÁCIÓ //
        Be: napdb ∈ N, kaloriak ∈ N[1..napdb]
        Ki: atlag ∈ R
        Ef: ∀i ∈ [1..napdb]: (kaloriak[i] >= 0)
        Uf: atlag = SZUM(i=1..napdb, kaloriak[i]) / napdb


        // VISSZAVEZETÉS //
        szum ~ atlag
        1..elemszám ~ 1..napdb
        elemek[i] ~ kaloriak[i]


        //ALGORITMUS //
        Változó
            i: Egész
        atlag := 0
        Ciklus i=1-től napdb-ig
            atlag := atlag + kaloriak[i]
        Ciklus vége
        atlag := atlag / napdb
    
9. Mozizásaink során feljegyeztük mely filmeket néztük meg, adjuk meg hanyadiknak láttuk a "Jurassic World"-öt!

        // TÉTEL: Keresés //

        // SPECIFIKÁCIÓ //
        Be: fdb ∈ N, filmek ∈ S[1..fdb]
        Ki: van ∈ L, ind ∈ N
        Ef: -
        Uf: (van, ind) = KERES(i=1..fdb, filmek[i] = "Jurassic World")


        // VISSZAVEZETÉS //
        (van ~ van)
        (ind ~ ind)
        1..elemszám ~ 1..fdb
        T(elemek[i]) ~ filmek[i] = "Jurassic World"


        //ALGORITMUS //
        ind := 1
        Ciklus amíg ind < fdb és nem filmek[i] = "Jurassic World"
            ind := ind + 1
        Ciklus vége
        van := ind <= fdb
    
10. Ebben a hónapban számos könyvet elolvastunk, az oldalszámukat felírtuk. Adjuk meg hanyadik és milyen hosszú volt a leghosszabb!

        // TÉTEL: Maximumkiválasztás //

        // SPECIFIKÁCIÓ //
        Be: kdb ∈ N, oldalak ∈ N[1..kdb]
        Ki: maxind ∈ N, maxert ∈ N
        Ef: -
        Uf: (maxind, maxert) = MAX(i=1..kdb, oldalak[i])


        // VISSZAVEZETÉS //
        (maxind ~ maxind)
        (maxért ~ maxert)
        1..elemszám ~ 1..kdb
        elemek[i] ~ oldalak[i]


        //ALGORITMUS //
        Változó
            i: Egész
        maxind := 1
        maxert := oldalak[1]
        Ciklus i=2-től kdb-ig
            Ha oldalak[i] > maxert akkor
                maxert := oldalak[i]
                maxind := i
            Elágazás vége
        Ciklus vége
    

További linkek

Programozási tételek ELTE specifikáció szerkesztője

Források

Horváth Győző, Horváth Gyula, Szlávi Péter, Törley Gábor: Programozási alapismeretek 3. előadás (ppt) (előadó: Törley Gábor)

Horváth Győző, Horváth Gyula, Szlávi Péter, Törley Gábor: Programozási alapismeretek 4. előadás (ppt) (előadó: Törley Gábor)