6. gyakorlat¶
3. ZH¶
A gyakorlat elején 30 percben kerül megírásra a 3. zh. A feladat(ok) témái:
- függvények megírása, bemenet/kimenet kezelés nélkül
- tömbök használata, kezelése
Deklarációk érvényessége¶
Blokkok¶
Blokknak nevezünk két kapcsos zárójel {
és }
közé zárt programrészt.
Egy blokkon belül minden változónév (azonosító) csak egyszer deklarálható.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Globális és Lokális változók¶
Globális változó: minden blokkon kívül, a forráskód "legfelső szintjén", a függvények "mellett" deklarált változó. A deklarációját követően mindenhol látszik, mindenhonnan használható.
Lokális változó: valamilyen blokkon (függvényen) belül deklarált változó. Csak az adott blokkon belül látszik (illetve a blokk gyerekblokkjaiban is elérhető).
Feladat (f0014)
Feladat:
Próbáld ki, fordul-e a globals.c
program, ha a main
függvényben megpróbálod
felhasználni a lokalis
változót! Mi történik, ha a globalis
-t csak a
fuggveny()
után deklaráljuk?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
Válaszok
A lokalis
változó a fuggveny
nevű függvény blokkjában lett deklarálva, így csak abban látható, abban használható.
Vagyis a program nem fog lefordulni, mert a main
függvényben nem látható a lokalis
változó.
Ha a globalis
változót a fuggveny
nevű függvény után deklaráljuk, akkor hasonló a helyzet:
mikor a fordító a függvényben meglátja a globalis
nevű azonosítót, akkor (még) nem tudja, hogy ez micsoda, tehát hibát fog jelezni.
Deklarációk¶
Függvényekben és beágyazott blokkokban létrehozhatunk ugyanolyan nevű változót, mint amilyen korábban valamilyen felsőbb szinten (a kérdéses blokkon kívül) már deklarálva van. Ez az újabb deklaráció el fogja rejteni a korábbi azonos nevű felsőbb szintű változót a kérdéses blokkban:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Megjegyzés
A régi-új változó újabb (a kérdéses blokkon belüli) deklarációjában nem kell a változót ugyanolyan típusúnak deklarálnunk, mint felsőbb szinten volt: bármilyen típusúnak deklarálhatjuk.
Óvatosan!
A változók mértéktelen újradeklarálása nagyon megnehezíti a program értelmezését és a hibakeresést. Szóval, csak óvatosan!
Feladat
Próbáld meg fordítás nélkül megtalálni a hibá(ka)t a következő programban, majd javítsd (őket)!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Megoldás
- A 13. sorban a
masodik
változó nem látható, mert már kívül vagyunk az őt deklaráló blokkon (5-9 sorok). - A 16. sorban a
masodik
változó nem látható, mert már kívül vagyunk az őt deklaráló blokkon (5-9 sorok). - A 17. sorban a
harmadik
változó nem látható, mert már kívül vagyunk az őt deklaráló blokkon (10-15 sorok).
A lokális és globális változók használatára az alábbi videó ad részletes magyarázatot:
Hibajavítás¶
Tipp
A gcc-vel való fordításkor mindig használjuk a -Wall
kapcsolót.
Ez bekapcsolja az összes fordítási warningot (mármint azok figyelését).
Nem kötelező, de sokszor segít; rámutat valószínűleg hibás pontokra a programban.
Feladat (f0026)
Feladat:
Adott a blokk.c
program, amelyben van plusz két blokk. Mindegyik deklarál
egy-egy saját változót. Próbáld meg lefordítani a programot, és a hibaüzenet
alapján a kiírató utasításokból vedd ki azoknak a változóknak a kiírását (de
csak azokét!), amelyekre az adott ponton nem lehet hivatkozni. Maga a
kiíratás (az L00
alakú sorszám kiírása) akkor is maradjon meg, ha esetleg
mindhárom változó kiírását eltávolítod belőle.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
gcc hibaüzenetek
1 2 3 4 5 6 7 8 9 10 11 |
|
gcc hibaüzenetek az első javítás után
1 2 3 4 5 6 7 8 |
|
gcc hibaüzenetek a második javítás után
1 2 3 4 5 6 7 8 |
|
gcc hibaüzenetek a harmadik javítás után
1 2 3 4 5 6 7 8 |
|
gcc hibaüzenetek a negyedik javítás után
1 2 3 4 5 6 7 8 |
|
Megoldás (m0026.c)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
A hibajavítás folyamatát és gondolatmenetét az alábbi videó is szemlélteti:
Feladat (f0029)
Feladat:
Deklarálj és inicializálj egy egész, egy valós és egy karakter változót. Írasd ki mindhárom értékét egészként, valósként és karakterként is! Figyeld meg a fordítási warning-okat és a futási eredményt is!
Lehetséges megoldás (m0029.c)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
Lehetséges válaszok
- Nem is kapunk mindenhol warningot, csak ha a konverziós specifikáció és a megadott érték egész-valós párt alkot.
- Az első
printf
(29. sor) végrehajtásakor nincs probléma, visszakapjuk a 3 változó értékét. - A második
printf
esetén (30. sor), ahol mindent egészként íratunk ki csak az első elem fog stimmelni, a másik kettő nem. - A harmadik
printf
-nél (31. sor) vagy semmi sem stimmel (64 bites architektúrán ez várható), vagy csak a valós érték (32 bites architektúrán). - A negyedik
printf
-nél (32. sor) is furcsa eredményt ad, a 'P
' karakter megjelenhet a második értékként (64 bit), de lehet a harmadik helyen is (32 bit); a többi érték mindenesetre nem stimmel.
Feladat (f0066)
Feladat:
Az osszeg-while.c
és osszeg-do-while.c
programok feladata egy 0 végű egész
számsorozat összegének kiszámítása. Mik a programok hibái? Hogyan és miért
működnek rosszul ha összeg helyett szorzatot kell számolniuk?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Lehetséges válaszok
- Az első program 14. sorában az
x
változót úgy használjuk fel awhile
feltételében, hogy korábban még nem inicializáltuk. Ilyenkor a memória állapotától függő, véletlenszerű értéket vesz fel azx
változó, így előfordulhat például, hogy ha ez az érték éppen 0, akkor a ciklus le se fut. - A beolvasott értéket mindkét programban mindenképpen hozzáadjuk az összeghez, mielőtt ellenőriznénk, hogy a végjel volt-e az. Mivel 0 a végjel, összeadásnál ez nem okoz gondot, szorzásnál viszont lenullázná a végeredményt.
Feladat (f0276)
Feladat:
A teljesítménytúrák olyan szervezett túrák, amelyeken egy adott útvonalat kell megadott időn belül teljesíteni. Az indulásra (a torlódás elkerülése végett) egy több órás időintervallumot szokás megadni. Az útvonalon ellenőrző pontokat szokás felállítani. A Magyar Természetbarát Szövetség Gyalogos teljesítménytúrák szervezési szabályzata szerint az egyes ellenőrzőpontok nyitvatartását úgy kell meghatározni, hogy a legfeljebb 6km/h és legalább 4km/h sebességgel haladó, a rajtra megadott időintervallumban induló túrázók mindenéppen nyitott ellenőrzőpontokat találjanak.
A feladat egy olyan program elkészítése, amely segít meghatározni az egyes pontok (beleértve a cél, azaz az utolsó ellenőrzőpont) nyitvatartását. Az input két időpont óra:perc pontossággal, az indulás legkorábbi és legkésőbbi lehetséges időpontja; majd több valós szám, amik sorban az egyes ellenőrzőpontok közötti távolságokat jelentik (km-ben). Az utolsó érték 0, ez jelzi, hogy nincs több ellenőrzőpont. A program kimenete az egyes ellenőrző pontokhoz tartozó nyitási és zárási időpont, negyedórára "kiterjesztve" a túrázóknak kedvező módon. Ez azt jelenti, hogy ha egy adott ellenőrzőponhoz például a 9:13:19-11:02:11 -es időpontok tartoznának, akkor az ellenőrzőpont 9:00-től 11:15-ig lesz nyitva. Az ellenőrzőpontok száma (a céllal együtt) nem lesz több 20-nál.
Megvalósítás:
A programban az időpontokat egy olyan függvény számolja, amelyiknek négy paramétere van: a rajt kezdőidőpontja, a rajt végidőpontja, az ellenőrzőpontok száma, és egy valós tömb, amely a ellenőrzőpontok rajttól mért távolságát tartalmazza (km-ben). A kiíratást ez a függvény végezheti.
A tömb feltöltéséért, az input kezeléséért a főprogram feleljen.
Ötletek
- Az időpontra érdemes
struct
-ot csinálni, másodperc alapon. - Fix 20 méretű tömböt elég foglalni.
- Tömbfeltöltés: az inputban relatív távolság van megadva, a tömbben abszolút kell majd.
- Jól jöhet egy olyan függvény, ami megadja, hogy egy útszakaszt valamilyen sebességgel mennyi idő alatt lehet megtenni.
- Az időpont két irányban való "kiterjesztését" végezheti egy-egy külön függvény.
- Érdemes az időpontok összeadására is külön függvényt írni.
- Egy adott ellenőrzőpontnál a rajt kezdő- illetve végidőpontja alapján ki kell számolni, hogy 6 illetve 4 km/h sebességgel mikor érhetnek oda, és ezt lefelé illetve felfelé negyedórára kell kerekíteni.
Lehetséges megoldás (m0276.c)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
|
Feladatok¶
Feladat (f0034)
Problémafelvetés:
Írj egy programot ami három kétdimenziós koordináta-párból kiszámítja egy háromszög kerületét és területét!
Specifikáció:
A program inputja három pár valós szám, amelyek \(x_1, y_1, x_2, y_2, x_3, y_3\) sorrendben a háromszög \(A(x_1,y_1), B(x_2,y_2)\) és \(C(x_3,y_3)\) csúcsainak koordinátái. A program outputja két sor. Az elsőben a "T = " szöveg után a háromszög területe, a második sorban a "K = " szöveg után a háromszög kerülete szerepel. Mindkét számot 10 karakteren jobbra igazítva 3 tizedesjegy pontossággal kell kiíratni. A beolvasás előtt a program elején ki kell írni egy rövid tájékoztatót arról, hogy a program milyen adatot kér be.
Algoritmustervezés:
A terület és kerület kiszámítására készítsünk egy-egy függvényt, amik a három oldalhosszból kiszámolják a megfelelő adatokat. Az oldalhosszakat pedig a pontok páronkénti távolságának kiszámításával kapjuk meg, amit szintén egy függvény végezhet el. A főprogramra így a be- és kimenet kezelése, valamint a függvények közötti adatáramlás megvalósítása marad.
Lehetséges megoldás (videó)
A specifikációtól eltérve, de a következő videó lényegében ezt a feladatot oldja meg:
Feladat (f0038)
Problémafelvetés:
Írj egy programot ami az él hosszából kiszámolja mind az 5 szabályos test (tetraéder, hexaéder, oktaéder, dodekaéder, ikozaéder) felszínét és térfogatát, majd html formátumban táblázatos formában (5 sor, soronként a test neve, felszíne, térfogata) 6 tizedesjegy pontossággal kiírja az adatokat.
Megvalósítás:
A html fájl, mely egyetlen táblázatot tartalmaz, valahogy így néz ki:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
A sortörések helye nem számít, de minden nyitó <tag>
-hez kell egy lezáró
</tag>
is, ráadásul a zárójelezési szabályoknak megfelelően. A <html>
a html
oldalt, a <body>
a konkrét tartalmat, a <table>
a táblázatot, a <tr>
egy
sort, a <td>
pedig a soron belül egy cellát jelöl. Ha a program kimenetét a
shell-ben átirányítod (a > segítségével) egy fájlba, az eredményt meg tudod
nézni egy böngészővel.
Feladat (f0054)
Problémafelvetés:
Egy facölöp egyik végét csonka kúp alakúra, másik végét forgáskúp alakúra formálták. (Így egy forgástestet kaptunk.) A középső, forgáshenger alakú rész hossza \(L_1\) cm és átmérője \(D_1\) cm. A csonka kúp alakú rész magassága \(L_2\) cm, a csonka kúp fedőlapja pedig \(D_2\) cm átmérőjű. Az elkészült cölöp teljes hossza \(L\) cm. Az elkészült cölöpök felületét vékony lakkréteggel vonják be.
- a) Hány \(m^3\) fára volt szükség N darab cölöp gyártásához, ha az egyes cölöpök gyártáskor négyzetes hasáb formájú gerendákból indultak ki, melyek hossza pontosan \(L\), szélessége és magassága pedig \(D_1\)?
- b) A felhasznált alapanyag hány százaléka hulladék?
- c) Hány \(m^2\) felületet kell belakkozni, ha N cölöpöt gyártottak?
A program kimenete egy HTML oldal, melyben egy két oszlopos és három soros táblázat van. Az első oszlop három sorában az "alapanyag", "hulladék" és "lakk" feliratok, a második oszlop soraiban pedig a megfelelő kiszámított értékek, mértékegységgel ellátva. A végeredmény böngészőben megjelenítve valami ilyesmi legyen:
1 2 3 4 5 |
|
Feladat (f0166)
Problémafelvetés:
Készíts egy programot, amely egy tetszőleges nagyságú (maximum 9999 jegyű) számról a jól ismert oszthatósági szabályok felhasználásával eldönti, hogy a szám osztható-e a [2..12] intervallumba eső számok bármelyikével.
Algoritmustervezés/Megvalósítás:
A felhasználható oszthatósági szabályok:
- 2: az utolsó számjegy oszthatóságát kell vizsgálni
- 3: a számjegyek összegének oszthatóságát kell vizsgálni
- 4: az utolsó két számjegy által alkotott szám oszthatóságát kell vizsgálni
- 5: az utolsó számjegy oszthatóságát kell vizsgálni
- 6: 2-vel és 3-mal való oszthatóságot kell vizsgálni
- 7: a szám végétől (jobb szélétől) kezdve az eleje felé hármasával csoportosítva a számjegyeket a kapott háromjegyű számok alternáló összegének oszthatóságát kell vizsgálni
- 8: az utolsó három számjegy által alkotott szám oszthatóságát kell vizsgálni
- 9: a számjegyek összegének oszthatóságát kell vizsgálni
- 10: az utolsó számjegy oszthatóságát kell vizsgálni
- 11: a számjegyek alternáló összegének oszthatóságát kell vizsgálni
- 12: 3-mal és 4-gyel való oszthatóságot kell vizsgálni
Egy 9999 jegyű szám nem fér bele a C nyelv egyetlen létező egész adattípusának értékkészletébe sem, így számként nem tudjuk egyben kezelni. Sztringként viszont minden további nélkül eltárolható. Ezek után az oszthatósági szabályoknak megfelelően kell leellenőrízni a sztringet. Érdemes az egyes szabályokat külön-külön függvénykben úgy megvalósítani, hogy az oszthatóság ellenőrzése a sztringet ne módosítsa. A függvények nem kiírják az eredményt (ez a főprogram, vagy egy kifejezetten a kiírást szolgáló függvény feladata lenne), hanem egy logikai értéket adnak vissza.
Lehetséges megoldás (m0166.c)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
|
Feladat (f0175)
Feladat:
Egészítsd ki úgy a simplemaths.c
programot, hogy megfelelően működjön. A
program feladata az inputon soronként megadott egyszerű matematikai
műveletek elvégzése lenne. A függvények megvalósítása a main()
függvény után
következzen. A program az alábbi műveleteket ismerné (ahol E nemnegatív
decimális egész, V pedig valós számokat jelöl:
fact E
: kiszámolja E faktoriálisátsqr V
: kiszámolja V négyzetétcube V
: kiszámolja V köbétadd V1, V2
: kiszámolja a V1 + V2 összegetsub V1, V2
: kiszámolja a V1 - V2 különbségetmul V1, V2
: kiszámolja a V1 * V2 szorzatotper V1, V2
: kiszámolja a V1 / V2 hányadostdiv E1, E2
: kiszámolja az E1 / E2 egészosztás hányadosátmod E1, E2
: kiszámolja az E1 / E2 egészosztás maradékátexit
: kilép a programból
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
További gyakorló feladatok¶
Feladat (f0027)
Amikor elindítjuk a programunkat, akkor a linux tulajdonképpen meghívja, kiértékeli a main() függvényt. A main által kiszámított értéket a "Volt-e hiba?" kérdésre adott válaszként értelmezi. C-ben a 0 érték logikailag hamis értéket jelent, ezért a linux a 0 értéket fogja jó futásként értelmezni ("NEM volt hiba."). C-ben a nem 0 érték logikailag igazként értelmezendő, így a linux az 1 visszatérési értéket futási hibaként kezeli ("IGEN, volt hiba.").
Feladat:
Írd meg a HelloWorld programodat kétféleképpen: a main függvény végén a return utasítás az egyik esetben 0, a másik esetben 1 értéket adjon vissza. (A kiíratás is lehet "Hello 0!" és "Hello 1!", hogy futtatáskor láthatóbb legyen az eredmény, de a program működését ez lényegében nem befolyásolja.) A programokat fordítsd le hello0 és hello1 néven. Mi az eredménye az alábbi linux parancsoknak?
1 2 3 4 5 6 |
|
Feladat (f0096)
Problémafelvetés:
Írj olyan programot, mely kiírja az összes kétoperandusú logikai művelet
(==
, !=
, <
, <=
, >
, >=
, &&
, ||
) értékét egy html oldalon belül elhelyezett
táblázatban. A kimenet egy ehhez hasonló, de html-ben kódolt táblázat,
természetesen a megfelelő értékekkel kitöltve:
1 2 3 4 5 6 7 8 |
|
Feladat (f0105)
Problémafelvetés:
Lakásra gyűjtünk. Havonta félre tudunk tenni X összeget, amely a tőkét gyarapítja. A tőkénkre a bank K% éves kamattal havonta fizet kamatot (minden hónapban (K/12)%-ot) és ezt hozzáírja a tőkéhez. A tőkénkhez szintén a hónap végén az állam is hozzáteszi az adott havi X befizetésünk A%-át, de maximum M összeget. Hány hónapig kell félretennünk, hogy a hónap végére összegyűlt tőke fedezze a lakás Y árát? Az X és Y pozitív valós érték (valamennyit félre tudunk tenni havonta, és a lakást nem adják ingyen), a K, A, és M pedig nemnegatív valós értékek (vagyis lehet, hogy sem kamatot, sem állami támogatást nem kapunk, de a tőkénk nem csökken).
Feladat (f0106)
Problémafelvetés:
Lakásra gyűjtünk. Havonta félre tudunk tenni X összeget, amely a tőkét gyarapítja. A tőkénkre a bank K% éves kamattal havonta fizet kamatot (minden hónapban (K/12)%-ot) és ezt hozzáírja a tőkéhez. A tőkénkhez szintén a hónap végén az állam is hozzáteszi az adott havi X befizetésünk A%-át, de maximum M összeget. A hónap végén a bank a tőkéből levon egy fix V számlavezetési díjat. Hány hónapig kell félretennünk, hogy a hónap végére összegyűlt tőke fedezze a lakás eredetileg Y, de havonta I% inflációval növelt árát? (Az infláció csak a lakásárra vonatkozik.) Az X és Y pozitív valós érték (valamennyit félre tudunk tenni havonta, és a lakást nem adják ingyen), a K, A, M, és I nemnegatív valós értékek (vagyis lehet, hogy nincs kamat, állami támogatást sem kapunk, de a bank is vezetheti ingyen a számlánkat), az I pedig valós érték (azaz megengedett a negatív infláció). Egyáltalán, adott értékek mellett van-e legalább matematikai esélyünk összeszedni a pénzt?
Feladat (f0114)
Problémafelvetés:
Készíts egy programot, ami a fogyasztás és a hónap alapján kiszámítja az adott hónapban fizetendő gázárat, ha tudjuk, hogy a gázár sávosan változik: (1) az első 1000 egység ára 100¤/egység; (2) a második 1000 egység ára már 200¤/egység; (3) egyébként a gázár 300¤/egység; és (4) a téli hónapokban (nov, dec, jan, feb) a gázárat 1.2 -vel szorozzák.
Feladat (f0172)
Problémafelvetés:
Készíts olyan programot, mely előállítja egy adott intervallumba eső véletlen számokból álló számsorozat diszkrét differenciáját.
Specifikáció:
Az input három egész szám: N, MIN és MAX. N az elkészítendő minta sorozat elemszáma, MIN a sorozat elemeinek alsó, MAX a felső korlátja (mindkét korlát előfordulhat a sorozatban).
Az output egyetlen sor, az N értéke majd további N darab egész érték, egy-egy szóközzel elválasztva. Ez utóbbiak a minta sorozatból számolt diszkrét differencia sorozat elemei.
Algoritmustervezés/Megvalósítás:
A diszkrét differencia egy a mintával egyező hosszú vektor, ahol az első elem megegyezik a minta első elemével, az i. elem pedig a minta i. és i-1. elemének különbsége.
Feladat (f0173)
Problémafelvetés:
Készíts olyan programot, mely egy sorozat diszkrét differenciájából előállítja az eredeti sorozatot.
Specifikáció:
Az input egy N egész szám, a sorozat mérete, majd további N darab egész érték, a diszkrét differencia sorozat elemei.
Az output egyetlen sor, benne a diszkrét differencia sorozatból visszaállított eredeti minta sorozat elemei, egy-egy szóközzel elválasztva.
Algoritmustervezés/Megvalósítás:
A diszkrét differencia egy a mintával egyező hosszú vektor, ahol az első elem megegyezik a minta első elemével, az i. elem pedig a minta i. és i-1. elemének különbsége.
Feladat (f0176)
Problémafelvetés:
Szükségünk lenne egy programra, amely térbeli és síkbeli geometriai alakzatok kerületét, területét, felszínét, térfogatát, és egyes egyéb jellemzőit képes kiszámolni az alakzat néhány adata alapján. A program interaktív, soronként lehet neki egy kérdést megadni a megfelelő paraméterekkel, amire "válaszol". A program által ismerendő kérdések (ahol a % egy valós, nemnegatív értéket jelöl):
circ A %
: egy kör területe a sugara alapjáncirc C %
: egy kör kerülete a sugara alapjánsquare A %
: egy négyzet területe az oldalhossza alapjánsquare C %
: egy négyzet kerülete az oldalhossza alapjánsquare D %
: egy négyzet átlója az oldalhossza alapjánrect A % %
: egy téglalap területe a két oldalhossza alapjánrect C % %
: egy téglalap kerülete a két oldalhossza alapjánrect D % %
: egy téglalap átlója a két oldalhossza alapjántri A %
: egy szabályos háromszög területe az oldalhossza alapjántri C %
: egy szabályos háromszög kerülete az oldalhossza alapjánpent A %
: egy szabályos ötszög területe az oldalhossza alapjánpent C %
: egy szabályos ötszög kerülete az oldalhossza alapjánpent D %
: egy szabályos ötszög átlója az oldalhossza alapjánhex A %
: egy szabályos hatszög területe az oldalhossza alapjánhex C %
: egy szabályos hatszög kerülete az oldalhossza alapjánhex d %
: egy szabályos hatszög kisátlója az oldalhossza alapjánhex D %
: egy szabályos hatszög nagyátlója az oldalhossza alapjánsphere V %
: egy gömb térfogata a sugara alapjánsphere A %
: egy gömb felszíne a sugara alapjáncube A %
: egy kocka térfogata az élhossza alapjáncube V %
: egy kocka felszíne az élhossza alapjáncube D %
: egy kocka testátlója az élhossza alapjánbrick V % % %
: egy téglatest térfogata a három élhossza alapjánbrick A % % %
: egy téglatest felszíne a három élhossza alapjánbrick D % % %
: egy téglatest testátlója a három élhossza alapjántetra V %
: egy szabályos tetraéder térfogata az élhossza alapjántetra A %
: egy szabályos tetraéder felszíne az élhossza alapjánhexa V %
: egy szabályos hexaéder térfogata az élhossza alapjánhexa A %
: egy szabályos hexaéder felszíne az élhossza alapjánocta V %
: egy szabályos oktaéder térfogata az élhossza alapjánocta A %
: egy szabályos oktaéder felszíne az élhossza alapjándodeka V %
: egy szabályos dodekaéder térfogata az élhossza alapjándodeka A %
: egy szabályos dodekaéder felszíne az élhossza alapjánikoza V %
: egy szabályos ikozaéder térfogata az élhossza alapjánikoza A %
: egy szabályos ikozaéder felszíne az élhossza alapjánexit
: kilép a programból