Gyakorló feladatok az 1. nagy zárthelyire 2012. október 7. 1. Egyszerű, bevezető feladatok 1. Kérjen be a felhasználótól egy sugarat. Írja ki az adott sugarú kör kerületét illetve területét! (Elegendő 3,14-dal számolni, amely akár egy double típusú változóban is tárolható.) 2. Kérjen be a felhasználótól négy egész számot (az A pontba mutató a és a B pontba mutató b helyvektor koordinátáit)! Írja ki az AB helyvektor koordinátáit! 3. Kérjen be a felhasználótól egy számot! Írja ki, hogy negatív, ha a szám negatív, és írja ki, hogy pozitív, ha pozitív! nullá -t írjon ki, ha a szám 0! 4. Kérjen be a felhasználótól egy egész számot! Írja ki, hogy osztható, ha ez a szám osztható néggyel, egyébként írja ki, hogy nem osztható. 5. Kérjen be a felhasználótól három egész számot (egy háromszög oldalainak hosszát)! Döntse el, hogy létezik-e ilyen háromszög! 1 6. 7. Írja ki a páros számokat 0-tól 100-ig! Írja ki 1-től 100-ig az összes nyolccal osztható számot! 8. Kérje be a felhasználótól egy hónap nevét! Írja ki, hogy ez a hónap melyik évszakban van! 9. Kérje be a felhasználótól egy hónap nevét! megadott hónap! Írja ki, hogy hány napos a 1 Egy háromszög akkor létezik, ha a legnagyobb oldal hossza kisebb, mint a másik két oldal hosszának összege. 1
10. Kérje be a felhasználótól a hét egy napjának nevét, és írja ki, hogy hétvégén vagy hét közben van-e az a nap! 2. Feladatok ciklusokkal 1. Kérjen be a felhasználótól három számot (egy háromszög három oldalának hosszát)! Csak akkor fogadja el a bevitelt, ha a háromszög létezik, egyébként kérje újra! 2. Kérjen be a felhasználótól egész számokat addig, amíg három egymás után beírt szám összege 8 nem lesz! 3. Kérjen be a felhasználótól egy pozitív egész számot, majd írja ki annak összes pozitív osztóját! 4. Kérjen be a felhasználótól egy pozitív egész számot, majd vizsgálja meg, hogy a beírt szám prímszám-e 2! (A vizsgálat szépsége most lényegtelen, viszont az eredménynek korrektnek kell lennie.) 5. Kérjen be a felhasználótól egy pozitív egész számot, és számolja ki annak faktoriálisát 3! 6. Kérjen be a felhasználótól egy pozitív egész számot, és írassa ki a Fibonacci-számsorozat azon elemeit, amelyek kisebbek ennél a számnál! (Fibonacci-számsor: Az első két elem 0 és 1, a további elemeket az előző kettő összegeként kapjuk 4.) 7. Írja ki a felhasználónak 1-től 10-ig az egész számokat úgy, hogy az 1-et egyszer, a 2-t kétszer, a 3-at háromszor stb. írja ki! (Egymás alá írja ki a számokat, de az azonos számok egy más mellé szóközzel elválasztva írja!) 8. Kérjen be a felhasználótól egész számokat! Negatív szám jelentse a bevitel végét. Írja vissza a felhasználónak a negatív szám előtt beírt összes számot a bevitel fordított sorrendjében egymás mellé, szóközökkel elválasztva! A feladathoz nem használhat tömböt, illetve listát vagy bármilyen más gyűjteményt. 2 Azok a pozitív egész számok a prímszámok, melyeknek pontosan kettő osztójuk van. Így minden olyan szám prímszám, amelynek csak az egy és maga a szám az osztója. Az 1 viszont nem prím! 3 Az N szám faktoriálisa (jelölése: N!) az első N darab pozitív egész szorzata: N! = 1 2... N. 4 Fibonacci-számok: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,... 2
9. Írja ki egy tetszőleges uint típusú szám bináris megfelelőjét úgy, hogy bitenkénti operátorokat használ a feladathoz! 3. Összetett feladatok A feladatok megoldása során, ha szükséges, használja a megfelelő programozási tételeket! 1. Kérjen be a felhasználótól egész számokat, addig, amíg egy néggyel oszthatót nem kap! Írja ki az eddig beolvasott számok összegét! 2. Kérjen be a felhasználótól egy évszámot, majd egy hónapot, majd egy napot! Írja ki, hogy ez a nap hányadik napja az évnek! (Vegye figyelembe a szökőéveket, illetve hogy melyik hónap hány napos.) 3. Kérjen be a felhasználótól egy egész számot! Adja meg azt a kettőhatványt 5, amely a felhasználó számához a legközelebb esik, de annál nagyobb. (Ciklussal kell megoldania, nem használhat pl. logaritmusfüggvényt.) 4. Kérjen be a felhasználótól egy egész számot! Adja meg a felhasználó számához legközelebb eső kettőhatványt! (Ciklussal kell megoldania, nem használhat pl. logaritmusfüggvényt.) 5. Kérjen be a felhasználótól 20 darab egész számot! Írja ki, mi volt az a legnagyobb érték, amely két egymás után beadott szám összegéből keletkezett! 6. Kérjen be a felhasználótól két pozitív egész számot, és írja ki azok legnagyobb közös osztóját! (Használja ehhez az euklideszi algoritmust 6.) 7. Kérje be a felhasználótól a bankbetétje összegét, majd a bankszámla típusát (bronze, silver, gold). A különböző típusú bankszámlákra lekötés esetén különböző havi kamatok vonatkoznak (bronze=0.45%, silver =0.6%, gold =0.75%), a kamattal keletkező összeget minden hó végén hozzáadják a lekötött összeghez. Kérje be a felhasználótól, hogy hány hónapig akarja lekötni a pénzét, aztán írja ki neki, mekkora összeg lesz a számláján az időszak végére! 5 Olyan egész szám, amely előállítható 2 egész kitevőjű hatványaként. Pl.: 1, 2, 4, 8, 16, 32,... 6 Ld. első előadás anyaga 3
8. Kérjen be a felhasználótól egész számokat! Negatív szám megadása a bevitel végét jelenti. Számítsa ki (ciklus segítségével; tehát nem használhat sem stringhosszt, sem pedig logaritmust) és írja ki azt, hogy a felhasználó által beírt számok összege hány számjegyű szám! 9. Kérjen be a felhasználótól egy néggyel osztható számot! Amennyiben nem néggyel osztható számot kapott bemenetként, a bekérést maximum háromszor ismételnie kell. Írja ki a kapott szám azon osztóit, amelyek maguk nem oszthatók hárommal! 4. Bonyolultabb összetett feladatok 1. Egy célhardverrel ph-méréseket végzünk különféle élelmiszereken. A ph-mérő műszer 1-től 14-ig terjedő (egész) értékeket képes mérni. Sajnos, a műszer néha hibásan mér: ha egy mérés nem sikerül, azt 0 értékkel jelzi. 40 féle élelmiszert kell vizsgálni, így kezdetben egy 40 elemű üres tömbünk van. (a) Írjon metódust, amely elvégez egy ph-mérést. (Reprezentálja ezt 0-14-ig terjedő véletlenszám kisorsolásával.) Mérjen ph-t mind a 40 élelmiszerre. Ha egy mérésben a műszer 0-t mér, meg kell ismételnie a mérést, de maximum 3 alkalommal! (b) Írja ki a sikeres mérések és a sikertelen mérések számát. (Sikertelen, ahol mindhárom alkalommal 0-t adott vissza a műszer.) (c) Válogassa szét a savas és lúgos mérések sorszámait egy-egy külön tömbbe. (Savas ph: < 7, lúgos ph: > 7, semleges ph: 7.) Írja ki az összes savas, az összes semleges, illetve összes lúgos kémhatású élelmiszer sorszámát. Amennyiben nem volt savas/lúgos/semleges élelmiszer, akkor a felsorolás helyett írja ki, hogy pl. Nem volt savas kémhatású élelmiszer. (d) Vizsgálja a savas, illetve lúgos élelmiszerek tömbjeit a következőképpen: Mennyi volt az átlagos kémhatás? A savas élelmiszerek esetén a 2-nél kisebb, a lúgosak esetén a 9-nél nagyobb értékeket mérési hibára gyanúsnak tekintjük, mert valószínűtlen, hogy élelmiszereknek ilyen ph-juk lenne. Írja ki mind a savas, mind a lúgos tömb esetén a gyanús mérések sorszámait. 4
2. Spamprogramot szeretnénk készíteni. Már írtunk egy programot, a- mely tetszőleges weboldalakról e-mail címeket gyűjt ki, és most szeretnénk a begyűjtött címeket feldolgozni. A bemenet stringek egy tömbje, amelyben vegyesen vannak valós e- mail-címek és hibásak. A bemenetben egy cím akár többször is előfordulhat. Valós e-mail címnek a következő számít: [nem 0 hosszúságú karaktersorozat, amiben pont is lehet]@[nem 0 hosszúságú karaktersorozat, amiben pont is lehet].[nem 0 hosszúságú karaktersorozat] (Ennél szigorúbban nem kell ellenőrizni a címeket, csak a fent leírt feltételnek kell megfelelni.) Példa bemenet: kissg@freemail.hu almos@yahoo.com almos.2@hu.google.com feri@dot:com peter KUKAC dot.com alma@alma.hu alma@alma.hu KISSG@FREEMAIL.HU //nem helyes e-mail cím //nem helyes e-mail cím, de már másodszor, de már másodszor (a) Készítsünk egy olyan tömböt, amiben csak a valós e-mail címek szerepelnek, és minden cím csak egyszer szerepel benne, csupa kisbetűvel! Írjuk ki a képernyőre az e-mail címeket! A fenti bemenetre a kiválogatás után a következő címek maradnak: kissg@freemail.hu, almos@yahoo.com, almos.2@hu.google.com, alma@alma.hu (b) Statisztikai okokból szükségünk van arra, hogy tudjuk: hány hibás formátumú e-mail cím volt az eredeti listában, és hány valós címet dobtunk ki a listáról azért, mert már legalább egyszer szerepelt. Írjuk ki ezt az információt is a képernyőre. (c) Végül állítsuk össze a levél címzését egy stringben a következő módon: e-mail1, e-mail2, email-3, email- 4... és írjuk ki ezt a stringet a képernyőre. 5