# 1. hét: egyszerű programok

Czirkos Zoltán, Frey Balázs · 2025.09.22.

Gyakorlófeladatok az előadás anyagához kapcsolódóan.

## 1. Egyszerű beolvasás és kiírás, egész és valós típusok

### Helló világ

Készíts programot, mely kiírja a képernyőre azt a szöveget, hogy „Hello World”!

### Üdvözlés

Készíts programot, amely bekéri a felhasználó nevét, majd üdvözli őt a nevén szólítva!

### Pénzezés

Készíts programot, mely bekéri a felhasználótól, hogy a kasszában hány 100, 200 és 500 Ft-os található. A program számolja ki, hogy mennyi a beírt pénz összege!

### Celsius–Fahrenheit

Készíts programot, amely bekér a felhasználótól egy valós számot (Celsius fok), az eredményt átváltja Fahrenheit értékbe, és kiírja az eredményt a képernyőre (0°C=32°F, 40°C=104°F, lineáris)! Írd meg ugyanezt fordítva is!

### Időtartam

Készíts programot, mely két időpontot kérdez a felhasználótól (óra, perc, másodperc külön), majd kiszámítja a két időpont közötti időtartamot másodpercben, és az eredményt kiírja a képernyőre.

### Háromszög

Készíts programot, mely egy síkbeli háromszög a.) kerületét, b.) területét, c.) szögeit, d.) a három magasság hosszát (ma, mb, mc), képes kiszámítani. A háromszög pontjait (x,y) koordinátáival jellemezzük.

### Négyszög

Készíts programot, melyben a felhasználó megadja egy tetszőleges négyszög csúcsainak koordinátáit, A program pedig kiszámítja a négyszög kerületét. Feltételezzük, hogy a bevitt pontok által meghatározott szakaszok nem metszik egymást. Számíttasd ki a területet is! (Ehhez Hérón képlete használható.)

## 2. Elágazások

### Pozitív, negatív, nulla

Készíts programot, mely a felhasználótól bekért számról megállapítja, hogy az a.) pozitív, negatív vagy nulla, b.) egész vagy nem egész. Az eredményt a képernyőre szöveges válasz formájában írja ki!

### Fizetés

Készíts programot, mely beolvas a felhasználótól egy fizetést, és a fizetés nagyságától függően kiírja, hogy az alacsony, átlagos vagy magas! A kategóriákat a saját preferenciád alapján határozhatod meg! :D

### Turi

Egy turkálóban minden póló darabja 500 Ft. Ha egy vásárlás során valaki több darabot is vesz, a második ára már csak 450 Ft, a harmadik pedig 400 Ft, de a negyedik és további darabok is ennyibe kerülnek, tehát az ár a harmadik vásárlása után már nem csökken tovább.

Írj programot, amely a vásárolt pólók darabszámának ismeretében megmondja, hogy mennyit fizet a vásárló!

### Egyenletrendszer

Készíts programot, mely képes megoldani az alábbi egyenletrendszert:

    ax + by = p
    cx + dy = q

Az adatok: a, c, b, d, p és q. Vizsgáld meg, hogy az egyenletrendszer megoldható-e, illetve függetlenek-e az egyenletek. Ha létezik megoldás, számítsd ki x és y értékét!

## 3. Ciklusok

### Számok kiírása

Az ábrán egy program pszeudokódja látható, amely kiírja a számokat 1-től 20-ig.

    Gondolok egy számra, legyen ez 1.
    Ismétlés, amíg a szám ≤ 20
        Leírom a számot.
        Új sort kezdek.
        Növelem a számot 1-gyel.
    Ismétlés eddig

Írd meg ezt a programot Pythonban `while` ciklussal!

Figyeld meg: ahogy begépeled a `while` utáni `:` kettőspontot, az `Enter` billentyű hatására a gép egyből néhány szóközzel beljebb kezdi a sorokat. Ez kell ahhoz, hogy a következő utasításokat a ciklustörzs részének tekintse a Python.

Emlékezz arra is, hogy a ciklusokban az elvégzendő művelet van a ciklustörzsben (ki akarjuk írni a számokat, tehát a `print`), utána pedig a következő elemre lépés (`x` növelése). Ezt használd mindig így, ez a legjobban követhető!

Megoldás

    szam = 1
    while szam <= 20:
        print(szam)
        szam = szam+1

### Négyzetszámok

Írj programot, amely kiírja az első N darab négyzetszámot! N értékét kérd a felhasználótól!

Írd ki a képernyőre az összes N-nél kisebb négyzetszámot! Vigyázz: ez nem ugyanaz a feladat, mint az előző!

### Gömbök

Készíts programot, mely kiírja az 1 köbméternél kisebb térfogatú, 10 cm-ként növekvő sugarú gömbök térfogatait!

### Hatványozó program

Írj programot, amely hatványozni képes! Kérdezze meg az alapot (valós) és a kitevőt (egész), és írja képernyőre a hatvány értékét!

### Sorozat eleme

Írj programot, ami ki tudja számolni a következő sorozat n-edik elemét: `x0=2`; `xi=2·xi-1+5`. Az n értékét kérd a felhasználótól! Írd meg úgy is, hogy csak az n-edik íródik ki a képernyőre, és úgy is, hogy az első n eredmény!

### Ferde hajítás I.

Egy ágyúból kilőtt golyó `v0` (m/s) kezdeti sebességgel, `alfa` (fok) szöggel indul.

Írj programot, amely bekéri ezeket az adatokat, továbbá egy `t` (mp) időpontot. Írja ki, hogy abban a pillanatban épp hol jár a golyó (`x` és `y` koordináta), továbbá hogy milyen messze van az ágyútól légvonalban!

Ehhez a `math` modul függvényei, a `sin()` és a `cos()` használhatóak. Vigyázz arra, hogy a szöget ezeknek radiánban kell megadni! 1°=π/180 rad. g=9,81 m/s2.

### Ferde hajítás II.

Írd meg most úgy a programot, hogy `t=0,0; 0,1; 0,2; … s` időpontokban (tized másodpercenként) írja ki az ágyúgolyó helyét; egészen addig, amíg be nem csapódik az a földbe (`y≤0`)!

### Ferde hajítás III.

Most az ágyúval nem sík terepen lövünk, hanem egy adott magasságú dombra. Alakítsd át az előző programodat úgy, hogy kérdezze meg az a domb magasságát, aztán addig írja ki a röppálya adatait, amíg az ágyúgolyó a dombba be nem csapódott!

## 4. Összetett vezérlési szerkezetek

### Osztók

Írj egy programot, amely bekér egy számot a standard bemeneten, és kiírja az összes osztóját.

### Összes szám

Írj programot, amely a képernyőre írja a 4, 5 és 6 számjegyekből képezhető összes négyjegyű számot!

### Buszjegyek

Helyettesítsük az 1-9 számjegyekkel az autóbuszjegyen található lyukasztási helyeket! Írj programot, amely kiírja az összes olyan buszjegy "kódját", amely három helyen van kilyukasztva! Törekedj a képernyő minél jobb kihasználására!

### A/0 papír

Egy A/0-s, poszter méretű lap területe 1 m2; a szélessége a magasság √2-ed része. Az A/1-es lap ebből úgy keletkezik, hogy a rövidebb oldalával párhuzamosan középen kettévágjuk (vagyis a hosszabbat felezzük). Az A/2-es az A/1-eshez viszonyul ugyanígy stb. Írj programot, amelyik kiszámolja és kilistázza ezeket a papírméreteket A/0-tól A/6-ig! A program az összeset álló változatban írja ki, ne fekvő tájolással! Pl. az A4-es állóban: 210×297 mm.

(A matek: mekkora ez alapján egy A/0-s lap? Legyen h a lap magassága, w pedig a szélessége! Tudjuk, hogy T=w·h, és azt is, hogy w=h/√2. Ebből T=h·h/√2, amibe az 1 m2-t is behelyettesíthetjük. 1=h·h/√2, √2=h·h, h=√√2. A szélessége pedig w=1 m2/h.)

### Sorozat növekvő lépésekkel

Egy program bekér a felhasználótól két pozitív egész számot, és a kisebbiktől a nagyobbikig növekvő lépésközzel kiírja a számokat. A lépésköz kezdetben 1, és minden lépésben eggyel nő. A program akkor is helyesen működik, ha a felhasználó előbb a felső, aztán az alsó határt adja meg (és fordítva is).
Pl. be: 4 23 ki: 4 5 7 10 14 19
Pl. be: 23 4 ki: 4 5 7 10 14 19

### Szögek

Egy program bekér a felhasználótól két valós számot, melyek két szöget jelentenek °-ban. A program a kisebb szögtől a nagyobbig haladva kiírja a szögeket egy fokonként, és mindegyik szög mellett zárójelbe téve radiánban is kiírja a szöget (1°=π/180 rad). A program akkor is helyesen működik, ha a felhasználó előbb a nagyobb, aztán a kisebb szöget adja meg (és fordítva is).
Pl. be: 11.3 14.9 ki: 11.3 (0.197), 12.3 (0.215), 13.3 (0.232), 14.3 (0.249),
Pl. be: 180 176 ki: 176 (3.07), 177 (3.09), 178 (3.11), 179 (3.12), 180 (3.14),

### Csökkenő sorozat

Egy program bekér a felhasználótól két pozitív valós számot, és a nagyobbiktól induló csökkenő számsorozatot ír ki. A csökkenés lépésköze a kisebbik szám. A csökkenés addig tart, amíg a kiírandó érték nagyobb, mint a kisebbik szám. A program akkor is helyesen működik, ha a felhasználó előbb a nagyobb, aztán a kisebb számot adja meg (és fordítva is).
Pl. be: 1.1 5.2 ki: 5.2 4.1 3.0 1.9
Pl. be: 6.3 2.1 ki: 6.3 4.2

### Egyre több

Egy olyan Python programot kell írnod, amelyik kér egy számot a felhasználótól, majd kirajzol egy háromszöget az oldalt látható módon. A háromszög egyre több számot tartalmaz. Benne a számok mindig egyesével nőnek minden sorban.

Az egyik példában a bemenet `n=5`, ezért a leghosszabb sorban pontosan öt darab szám van: 11 12 13 14 15, előbb 1-től 5-ig lesznek egyre többen. A másik példa az `n=4` esetet mutatja, itt a leghosszabb sor négy számból áll: 7 8 9 10. Ha a felhasználó túl kicsi számot ad, nullát, esetleg negatívat, akkor adj hibajelzést! Használj tabulátor karaktereket a számok között!

    n = 5

     1
     2   3
     4   5   6
     7   8   9  10
    11  12  13  14  15

    n = 4

     1
     2   3
     4   5   6
     7   8   9  10

Tipp

Ezt két egymásba ágyazott ciklussal legegyszerűbb megoldani; egyik a sorokért felel, másik pedig azon belül a számokért. A kiírt számot tárold külön változóban, amely független a ciklusváltozóktól! Mikor kell ezt a kiírt számot növelni?

## 5. Rajzok karakterekből

### Négyzet (téglalap) rajzolása

    ******   ******
    ******   *    *
    ******   *    *
    ******   *    *
    ******   *    *
    ******   ******

    ******
    **   *
    * *  *
    *  * *
    *   **
    ******

Írj programot, amely bekér a felhasználótól egy pozitív egész számot, és kirajzol egy ekkora, * karakterekből álló, teljesen kitöltött négyzetet a képernyőre!

Keret. Oldd meg a feladatot úgy is, hogy csak a négyzet kerete álljon csillagokból, a belseje legyen üres! Erre két logikus megoldás is van: külön programrészben is megrajzolhatod a keretet, de csinálhatod azt is, hogy az n×n-es ciklus belsejében figyeled egy feltétellel, a négyzet belsejében vagy-e, vagy a kereten.

Átló. Alakítsd át a programot úgy, hogy a négyzet átlóját is behúzza! Az előző két átalakítási lehetőség közül ehhez melyiket érdemes választani? Hogyan lehetne ezt a programot megírni úgy, hogy ne használjon elágazásokat, csak ciklust? És hogyan úgy, hogy lényegében két egymásba ágyazott ciklust tartalmaz (y és benne x), amelyeken belül pedig tetszőleges kód lehet?

Megoldás
A biztonság kedvéért szerepeljen itt mindkét megoldás, elsőként a keretes, majd az egymásba ágyazott ciklusos. A keretes megoldás esetén számolunk egy kicsit. Az alsó és felső sor könnyű, mert csak n db csillagot kell kiírni. A középső részt, az átlót úgy oldanánk meg, hogy egy `N=n-2` magas, 45 fokos vonalat rajzolunk, ennek a kódja ilyesmi lenne:

    for i in range(N):
        print(' '*i + '*') # annyi szóköz, ahányadik sor

Ezt csak kiegészítjük egy csillaggal a sor elsején és végén, és máris megvan a középső rész.

    n = int(input())

    print('*'*n) # felső sor
    N=n-2
    for i in range(N):
        print('*' + ' '*i + '*' + ' '*(N-1-i)+'*')
    print('*'*n) # alsó sor

Most nézzük az egymásba ágyazott ciklusos megoldást, amelyben minden pozíciót végignézünk. Itt már nincs szükség külön számolásra, csak arra kell figyelni, hogy mikor írjunk csillagot és mikor szóközt. Alkalmazzuk a koordináta-geometria alapelveit: a négyzet keretén akkor vagyunk, ha x=0 vagy x=n-1 vagy y=0 vagy y=n-1. Az átló pedig akkor van, ha x=y.

    n = int(input())

    for y in range(n):
      for x in range(n):
        # itt jön a koordináta geometria
        #  felső és alsó sor, illetve bal és jobb oszlop, valamint a rajz szerinti átló
        if x == 0 or x == n - 1 or y == 0 or y == n - 1 or x == y:
          print("*", end="")
        else:
          print(" ", end="")
      print()

### Téglalapok

    ooooo ooooo ooooo
    ooooo ooooo ooooo

    ooooo ooooo ooooo
    ooooo ooooo ooooo

Készíts programot, mely egy m oszlopból és n sorból álló mátrixot rajzol a képernyőre, melynek minden eleme egy a×b méretű, "o" betűkből álló téglalap. A téglalapok között k szóköz/sortörés távolságot hagyj ki! Példa: m=3, n=2, a=5, b=2, k=1 értékekre a jobb oldalt látható.

### Csúcsán álló háromszög 1.

    ooooo
     ooo
      o

Írj egy programot, amely kér a felhasználótól egy számot, és utána egy akkora, csúcsán álló egyenlőszárú háromszöget rajzol a képernyőre "o" betűkből, hogy annak éppen a megadott számú sora van! Például 3 esetén:

### Csúcsán álló háromszög 2.

      o
     oo
    ooo
     oo
      o

Írj egy programot, amely kér a felhasználótól egy számot, és utána egy akkora, csúcsán álló egyenlőszárú háromszöget rajzol a képernyőre "o" betűkből, hogy annak éppen a megadott számú sora van! Például 3 esetén:

### Paralelogramma

      ooooooo
     ooooooo
    ooooooo

Írj egy programot, amely kér a felhasználótól egy szélességet és egy magasságot, és utána egy akkora paralelogrammát rajzol a képernyőre "o" betűkből! Például x=7, y=3 esetén:

### Még egy háromszög

    ooooo
     oooo
      ooo
       oo
        o

Írj programot, amely kér egy `n` egész számot a felhasználótól, és utána „o” betűkből egy akkora háromszöget rajzol, amennyi a szám. Pl. `n=5` esetén az alábbi rajz jelenik meg a kimenetén.

### Háztető

        ##
       #  #
      #    #
     #      #
    #        #

Írj programot, amely kér egy `n` egész számot a billentyűzetről, és utána akkora „háztetőt” rajzol kettőskereszt karakterekből, amekkora a szám. Pl. `n=5` esetén az alábbi rajz jelenik meg a kimeneten.

### Szakasz

    xxx
       xxx
          xxx
             xxx
                xxx

Írj programot, amely két számot (`m` és `n`) kér a billentyűzetről, és egy szakaszt rajzol karakterekből összerakva. A szakasz darabjainak a hosszát az első szám adja meg, a sorok számát a második. Pl. `m=3`, `n=5` esetén:

### Két szakasz

    #    #
     #    #
      #    #
       #    #
        #    #

Írj programot, amely beolvas egy egész számot, és egymás mellé rajzol két ferde vonalat, karakterekből összerakva. A második vonal teteje egy karakterrel arrébb kezdődik, mint az első vége. Pl. ha a megadott `n` szám `5`, a kimeneten az alábbi rajz jelenik meg.

### Sakktábla

    XX  XX  XX  XX
    XX  XX  XX  XX
      XX  XX  XX  XX
      XX  XX  XX  XX
    XX  XX  XX  XX
    XX  XX  XX  XX
      XX  XX  XX  XX
      XX  XX  XX  XX
    XX  XX  XX  XX
    XX  XX  XX  XX
      XX  XX  XX  XX
      XX  XX  XX  XX
    XX  XX  XX  XX
    XX  XX  XX  XX
      XX  XX  XX  XX
      XX  XX  XX  XX

Rajzolj a képernyőre sakktáblát, ahogyan az oldalt látható! Hogyan lehet ezt a legtöbb ciklussal, a programban szereplő legrövidebb kiírt szövegekkel megoldani? Vagyis ne szerepeljen a programban ilyesmi:

    print("XX  XX  XX  XX  ");
    print("XX  XX  XX  XX  ");

### Adott méretű négyzet rajzolása

    +--+
    |  |
    |  |
    +--+

Írj egy programot, amelyik bekér egy számot, és utána akkora négyzetet rajzol a +, - és | karakterekből, mint a megadott szám (annyi - és | karakterből áll az oldala). Pl. ha n=2, akkor a jobb oldalt látható négyzet legyen a kimenet!

### Tetszőleges méretű sakktábla

    n=1   **..      n=2 **..**..
          **..          **..**..
          ..**          ..**..**
          ..**          ..**..**
                        **..**..
                        **..**..
                        ..**..**
                        ..**..**

Írj egy programot, amelyik egy egész számot kér, utána pedig . és * karakterekből adott méretű sakktáblát rajzol. Pl. n=1 és n=2 esetén a jobb oldalt látható eredmények.

### Derékszögű háromszög

      /|
     / |
    /  |
    ---+

Írj egy programot, amelyik egy számot kér, és a |, +, - és / karakterekből derékszögű háromszöget rajzol, a megadott méretű (annyi karakterből álló) oldalakkal. n=3 esetén pl.:

### Gyémánt

     /\
    /  \
    \  /
     \/

Írj egy programot, amelyik egy számot kér (n), és n hosszú oldalú „gyémántot” rajzol a képernyőre a / és \ karakterekből. n=2 esetén így néz ki a kimenet:

### Szorzótábla fejléccel

      |  1   2   3   4   5
    --+-------------------
     1|  1   2   3   4   5
     2|  2   4   6   8  10
     3|  3   6   9  12  15
     4|  4   8  12  16  20
     5|  5  10  15  20  25

Tervezz programot pszeudokóddal, amely kiírja a képernyőre az N×N-es szorzótáblát, ahol N értékét a felhasználó adhatja meg. Valósítsd meg Python nyelven! Ügyelj arra, hogy a számok állandó oszlopszélességgel jelenjenek meg (maximum 16×16-as táblát feltételezve), azaz pl. az oldalt látható módon. (Ez abban nehezebb az előadáson bemutatottnál, hogy a szorzótáblának kerete is kell legyen.)

### Táblázat

Készíts programot, mely egy n×n-es táblázat formájában kiírja a pozitív egész számokat 1-től n2-ig. Az n értékét induláskor kérje be a felhasználótól!

### Szinusz

Rajzold ki programból a szinusz függvényt, 90 fokkal elforgatva és `X`-ekből kirakva! A mintát lásd az ábrán. Ehhez a `math` modul függvénye, a `sin()` használható. Figyelj arra, hogy ez a paraméterét radiánban várja, vagyis 1°=π/180 rad.

                   X
                         X
                             X
                                X
                                  X
                                  X
                                X
                             X
                         X
                   X
              X
          X
       X
     X
     X
       X
          X
              X
                   X

Tipp

Mindegyik sorban ki kell írnunk valahány szóközt, és utána egy `X`-et. Hány sor van összesen? Mitől függ az, hogy hány szóközt kell tenni? Először írj erre képletet! Gondold végig, a feladat megoldásában melyik változó lehet egész, és melyiknek kell valósnak lennie!

## 6. Teknőcgrafika

### Egyszerű ábrák, ciklus nélkül

### Összetettebb ábrák, ciklusokkal

Rajzolj cápafogat és piramist! A fogak számát és a piramis magasságát lehessen a programban beállítani egy változóval, vagy kérd azt a felhasználótól!

### Színátmenet

Rajzolj zöld-piros színátmenetet színes négyzetekből! A négyzetek számát kérd a felhasználótól, vagy lehessen a programban beállítani! Ügyelj arra, hogy a legszélső négyzetek mindig ugyanolyan színűek legyenek: a bal szélső teljesen zöld, a jobb szélső teljesen piros, függetlenül a négyzetek számától! Ha kész, rajzold meg ezt két dimenzióban, alulról fölfelé legyen egyre kékebb!

### Sokszög rajzolása

Rajzolj sokszöget! A szögek számát és az oldalhosszt lehessen beállítani, vagy kérd azt a felhasználótól! Rajzold meg a sokszög köré írt körét!

### Szinusz

Rajzolj szinuszgörbét teknőcgrafikával! Ehhez abszolút koordinátákat érdemes használni: lásd a `turtle.goto` leírását.