1. hét: egyszerű programok

Czirkos Zoltán, Nagy Gergely, Pohl László · 2021.09.23.

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

1. A program kerete

Helló világ

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

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

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ó.)

3. 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ó!

Másodfokú egyenlet

Írd át úgy a labor másodfokú egyenlet programját, hogy vegye az figyelembe a diszkrimináns előjelét, és jelezze külön azt is, ha nincs megoldás, vagy ha pontosan egy valós megoldás van! Ha tanultál már komplex számokról, oldd meg úgy is a feladatot, hogy komplex gyökök esetén azokat írja ki a program!

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 egyeneletek. Ha létezik megoldás, számold ki x és y értékét!

4. Ciklusok

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!

Köbgyök

Newton módszere a köbgyök számítására azon alapszik, hogy ha van egy tippünk a szám köbgyökére, akkor

szám/tipp2+2·tipp
─────────────────
        3

jobb közelítés. Írj az előadáson bemutatott „Hérón módszere” programhoz hasonlót köbgyök számítására!

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.h 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!

5. Összetett vezérlési szerkezetek

Osztók

Írj C 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!

Számtani sorozat

Kis ZH volt

Egy program bekér a felhasználótól három valós számot, kiírja, hogy az első szám negatív vagy nemnegatív, majd az első számtól indulva, a második szám által meghatározott lépésközzel halad a harmadik számig, a számsorozat elemeit kiírja.
Pl. be: 3.2 0.6 5.1 ki: nemnegativ 3.2 3.8 4.4 5.0
Pl. be: -1.7 1.0 2.5 ki: negativ -1.7 -0.7 0.3 1.3 2.3
Feltételezheted, hogy az első szám kisebb, mint a harmadik, és a második szám pozitív. Ezek ellenőrzésével nem kell foglalkoznod.

Sorozat növekvő lépésekkel

Kis ZH volt

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

Kis ZH volt

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

Kis ZH volt

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

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.)

6. Összetett rajzolós feladatok

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!

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 C 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.)

Adott méretű négyzet rajzolása

+--+
|  |
|  |
+--+
Kis ZH volt

Írj C 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!

Gyémánt

 /\
/  \
\  /
 \/
Kis ZH volt

Írj C 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:

Derékszögű háromszög

  /|
 / |
/  |
---+
Kis ZH volt

Írj C 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.:

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

ooooo
 ooo
  o
Kis ZH volt

Írj C 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
Kis ZH volt

Írj C 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
Kis ZH volt

Írj C 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
Kis ZH volt

Í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ő

    ##
   #  #
  #    #
 #      #
#        #
Kis ZH volt

Í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
Kis ZH volt

Í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

#    #
 #    #
  #    #
   #    #
    #    #
Kis ZH volt

Í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:

printf("XX  XX  XX  XX  \n");
printf("XX  XX  XX  XX  \n");

Tetszőleges méretű sakktábla I.

Az előző feladatban a sakktáblán minden mező két karakter méretű volt: széltében és hosszában két x betű vagy két szóköz. Írd meg úgy a programot, hogy ezt a felhasználó adhassa meg!

Tetszőleges méretű sakktábla II.

n=1   **..      n=2 **..**..
      **..          **..**..
      ..**          ..**..**
      ..**          ..**..**
                    **..**..
                    **..**..
                    ..**..**
                    ..**..**
Kis ZH volt

Írj C 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.

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ó.

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?

Láda

+---+
|\  |
| \ |
|  \|
+---+

Írj programot, amely +, |, -, és \ karakterekből egy, a felhasználó által adott méretű ládát rajzol! Figyelj a visszaper karakter kirajzolására: azt "\\" formában kell megadni. Ez a feladat megoldható kizárólag ciklusok alkalmazásával: próbáld meg így! Hova hány darab szóköz kell?

Szinusz

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

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

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!