====== Algoritmusok és programozás ====== Az alábbiakban egy rövid feladatgyűjteményt közlünk azok számára, akik a programozás alajaival szeretnének megismerkedni. A feladatokhoz a legtöbb esetben C# nyelvű megvalósítást is elérhetővé tettünk, de az összeállítás célja nem egy programozási nyelv bemutatása és tanítása lenne, hanem olyan ismeretekre próbálunk rákérdezni, amelyek bármilyen választott programozási nyelv esetén szükségesek. ==== Algoritmusok ==== Válogatás a hazai programozási versenyek algoritmizálási feladatai közül, feladattípusok szerint csoportosítva. [[informatika:programozas:algoritmusok:feladatok|Algoritmusok értelmezését, követését, javítását gyakoroltató feladatok]] ==== Beolvasás, kiírás, értékadás ==== - **Hello World!** Készíts programot, mely kiír egy üdvözlő szöveget! - **Goodbye Joe!** Készíts programot, mely bekéri a felhasználó nevét, majd név szerint elbúcsúzik tőle! - **Are you Jack Black? Welcome Jack!** Készíts programot, mely bekéri a felhasználó vezeték- és keresztnevét, majd ezeket többször felhasználva ír ki üdvözlő szöveget ([[informatika:programozas:dotnet:c-sharp:feladatok_io|C#]]) ==== Feltételes utasítás, elágazás ==== - **Köszönjek?** Kérdezze meg a felhasználót, hogy köszönjön-e le a program és ha a válasz "igen", akkor írja ki: "Viszont látásra!". - **Kiskorú...** Készíts programot, mely bekéri a felhasználó életkorát, majd kiírja, hogy a felhasználó megnézheti-e a "piros karikás" (18 év alattiaknak nem ajánlott) filmet! - **Cselekvőképes** Készíts programot, mely a beolvasott életkor alapján kiírja, hogy a felhasználó cselekvőképtelen (<14 éves), korlátozottan cselekvőképes (14-18 éves), vagy nagykorú (>18 éves)! ([[informatika:programozas:dotnet:c-sharp:feladatok_if|C#]]) ==== Számlálásos ciklus ==== - **Egy fecske nem csinál nyarat!** Kérjen be egy 1 és 10 közé eső egész számot, majd írja ki a megadott számszor az ismert szólást! - **Megmondtam már...** Kérjen be egy 1 és 10 közé eső //N// egész számot, majd írja ki 1-től a megadott számig a "Megmondtam már //N//-szer, hogy semmit sem mondok el kétszer!" szöveget. - **Piramis** Kérjen be egy //N// pozitív egész számot, majd "rajzoljon" karakterekkel (pl. #) //N// sor magas piramist (1, 3, 5... 2*//N//-1 karakter hosszú sorokból). - **Serleg** Az előző feladat módosításával rajzoljon serleget egy fejjel lefelé álló és egy normál helyzetű piramis összeillesztésével! Oldja meg, hogy a két piramis csúcsa közös legyen! - **Karácsony** Rajzoljon egymáshoz illeszkedő, egyre nagyobb méretű piramisokból összeálló fenyőfát. - **elefazssiV** Kérjen be egy rövid szöveget, majd írja ki visszafele! ([[informatika:programozas:dotnet:c-sharp:feladatok_for|C#]]) ==== Feltételes ciklus ==== - **Gondoltam egy számot...** Generáljon egy véletlen egész számot 1 és 20 között, majd kérjen be tippeket egész addig, míg a felhasználó el nem találja a gondolt számot! - **Menekülő út...** Az előző feladatot egészítse ki úgy, hogy ha a felhasználó 0 értéket ad meg, akkor kilépjünk a programból! - **Kisebb-nagyobb** A számkitalálást segítse azzal, hogy minden tipp esetén visszajelzi, hogy a megadott számnál kisebb, vagy nagyobb a "gondolt" szám! - **Évszám** Kérjen be egy évszámot! A bekérést mindaddig ismételje, amíg a felhasználó nem ad meg érvényes XX-XXI. századi évszámot! - **Dupla-szóköz** Kérjen be egy szöveget, majd cserélje benne a dupla szóközöket szimpla szóközre mindaddig, amíg található a szövegben többszörös szóköz! ([[informatika:programozas:dotnet:c-sharp:feladatok_while|C#]]) ==== Gyakorló feladatok ==== - ** Számoljunk... ** Kérjünk be pozitív egész számokat egészen addig, amíg a felhasználó 0-t nem ad meg. Anélkül, hogy az összes számot eltárolnánk válaszoljunk a következőkre: Hány számot olvastunk be? Melyik volt a legnagyobb/legkisebb beolvasott szám? Mennyi a beolvasott számok átlaga? Rendezett-e a beírt számsor, ha igen, akkor csökkenő, növekvő, vagy konstans? - ** Háromszög ** Kérjünk be három szakaszhosszt. Állapítsuk meg, hogy a megadott szakaszokból szerkeszthető-e háromszög! Ha igen, akkor adjuk meg a háromszög kerületét és területét (használjuk a Heron-képletet)! - ** Piskóta ** Kérjük be egy kerek piskóta-torta méreteit (átmérő, magasság), és a ráteendő krém vastagságát cm-ben. Számoljuk ki, hogy mennyi krémre van szükség a torta bevonásához, ha 5% ráhagyással dolgozunk. - ** Mr. X ** Kérjünk be pozitív egész számokat és rajzoljunk a képernyőre adott méretű X-eket. A program lépjen ki 0-ra. - ** Téglalap ** Kérjünk be két pozitív egész számot. Ha kifér a képernyőre, akkor rajzoljunk ki a megadottaknak megfelelő méretű téglalapot. A téglalap mindig fekvő pozíciójú legyen! Írjuk ki a téglalap területét és kerületét, valamint a két oldal közötti abszolút eltérést. - **Kódolás** Adjuk meg az alábbi algoritmusok programkódját a választott programozási nyelven: Ki: Hány óra van? Be: ora Ha ora > 22 akkor Ki: Jó éjszakát! különben Ha ora > 18 akkor Ki: Jó estét! különben Ha ora > 10 akkor Ki: Jó napot! különben Ha ora > 4 akkor Ki: Jó reggelt! különben Ki: Jó éjszakát! Ki: Fibonacci számok a = b = 1 Ki: a Ki: b Ciklus i:=3-tól 20-ig c = a+b Ki: c a = b b = c Ciklus vége Ki: A világon 10 féle ember van: aki ismeri a kettes számrendszert és aki nem. Ki: Hányféle ember van tehát? Be: válasz Ciklus amíg válasz <> 2 Ki: Nem jó válasz. Hányféle ember van (decimálisan)? Be: válasz Ciklus vége [[informatika:programozas:dotnet:c-sharp:gyakorlas1|C#]] ===== Vektorok, mátrixok, tömbök ===== A legtöbb programozási nyelvben találunk lehetőséget olyan összetett adatszerkezetekre, melyek rögzített számú, azonos típusú elem tárolására adnak lehetőséget. Az ilyen adatszerkezeteket egy dimenziós esetben **vektornak**, két dimenzió esetén **máttrixnak**, általánosan **tömbnek** nevezzük. Az alábbi feladatok ezen adatszerkezetek használatára épülnek. ==== Hoci a számlát! ==== Kérjük be számlaadatokat - napnevet és összeget - egy munkahét öt napjára vonatkozóan! A számlák beolvasása bármilyen sorrendben történhet és a 'vége' szóra fejeződjön be. Feltételezzük, hogy 100-nál nem lesz több beolvasandó számla. Adjuk meg ezek után a napi bevételek összegét és a bevételek százalékos eloszlását! A százalékos eloszlást szemléltessük oszlopdiagramon is! ==== Mit csinálok? Szigetek... ==== Repülőgéppel Európából Amerikába haladva adott távolságonként megmérjük az alattunk lévő felület tengerszint feletti magasságát. Ez az óceán felett 0, szárazföldek és szigetek felett pozitív egész érték. A mérések már Európa felett elkezdődnek és Amerika felett érnek véget. A mérési adatok maximális száma legyen 70. - Mekkora volt a legmagasabb mért pont magassága? - Rajzoljuk ki mérési eredményeket arányos méretű oszlopokkal egymás mellé úgy, hogy a legmagasabb oszlop legfeljebb 20 sor magas legyen, miközben a legalacsonyabban fekvő szárazföld esetén is kirajzolunk legalább egy egységnyi magas oszlopot. - Hány szigetet találtunk út közben? - Mekkora a leghosszabb sziget hossza? Hányadik sziget a leghosszabb? - Milyen hosszan haladt az út során víz felett összesen a repülő? - Mekkora a szárazföldek átlagos magassága? - Két tömbbe gyűjtsük ki az átlagos magasság feletti szakaszok kezdő és végpontjait! - Gyűjtsük ki az út során érintett szigetek hosszait. Írjuk ki őket csökkenő sorrendben! - Keressük meg a leghosszabb emelkedő szakaszt! Hol kezdődik? Hol ér véget? Milyen hosszú? - Repültünk-e el szakadék felett az út során? (Szakadéknak nevezzük az olyan helyet, ahol két szomszédos szárazföldi rész között 50m-nél nagyobb a különbség.) - Érintettünk-e hasadékot? (Két szakadék közötti "völgy".) - A legmeredekebb ugrás emelkedő, vagy lejtő (a repülő útirányából nézve)? [[informatika:programozas:dotnet:c-sharp:feladatok_array|C#]] ==== Statisztika ==== Kérjünk be pozitív egész számokat! Elemezzük az adatsort a tanult statisztikai mutatókkal (átlag, módusz, medián, terjedelem, szórás, átlagos minimális eltérés...) **Megjegyzés**: a módusz és a medián keresésének egyik módja lehet, ha először rendezzük az adatsort. ====== Gauss-féle eliminációs eljárás ====== A Gauss elimináció a lineáris egyenletrendszerek egy általános megoldási algoritmusa, ahol az egyenletrendszer együthetóit mátrix alakban adjuk meg, majd ezt a mátrixot transzformáljuk több lépésben átlós, illetve egység mátrix alakra, miközben az egyenletek konstansait tartalmazó oszlopvektorban előállnak az egyenletrendszer megoldásai. [[informatika:programozas:feladatok:gauss]] ====== Kidolgozaott verseny-feladatok ====== Az alábbiakban egy-két mintát adunk a rangos hazai versenyek feladataiból. ===== OKTV ==== [[informatika:programozas:oktv:2012]] ===== Nemes Tihamér ===== * [[informatika:programozas:nemes:2012]] * [[informatika:programozas:nemes:2010]] ===== Érettségi ===== * [[informatika:programozas:erettsegi:2008-05]] * [[informatika:programozas:erettsegi:2012-05]] * [[informatika:programozas:erettsegi:2013-10]]