Szorgalmi feladatok

A feladatok megoldásai az admin portálon adhatók be. A szorgalmi feladatokkal egy pontversenyben is részt lehet venni. Alapbeállítás szerint anonim módon jelensz meg a táblázatban. Ha szeretnél névvel megjelenni vagy teljesen eltűnni, az admin portálon beállíthatod.

A verseny állásának megtekintéséhez is be kell jelentkezni.

Halmaz típus rendezett, dinamikus tömbön (10 megoldás)

Nézzük a második heti gyakorlat végére előállt egyszerű, statikus tömbbel foglalkozó halmazt!

Ezzel az egyik, gyakorlaton is tárgyalt probléma, hogy nem dinamikusan foglalja a számokat. A másik, hogy a keresés benne O(n), pedig rendezett tömbön lehetne O(log n) időben keresni. A feladat ezeket megjavítani.

Írd át a Halmaz típust és az azt kezelő függvényeket, hogy rendezett, dinamikus tömböt tartsanak! A dinamikus memóriakezeléshez használd a C++ módszerét (new, delete)! A függvények fejlécén ne változtass! Melyik függvény mennyit gyorsul ezáltal?

Figyelj a metszetképzésre is! A gyakorlaton előállt megoldás O(n*m) időben dolgozik, de elég egyszer végigmenni a két halmaz tömbjén egyszerre, így lehet O(n+m) is.

Pontozás:

  • 1 pont: dinamikus tömb
  • 1 pont: rendezett számsor a tömbben

Tiltott szavak: malloc; free

Elfogadott megoldások: 10 darab.
Szerezhető: 2 pont. Leadási határidő: 2019-02-25 04:00:00.

Háromértékű logika (4 megoldás)

Forrás: Példatár

Az InfoC oldal adminisztrációs része háromértékű logikát használ a tárgykövetelmények teljesülésének jellemzéséhez. A szokásos IGEN és NEM mellett egy harmadik érték is lehetséges: LEHET. Így a félév közben sem mutat fals eredményt az eredmények táblázata.

A három érték jelentését könnyű megfogni a laborjelenlétek példáján. 14 hét van, 4-et lehet hiányozni. Ha valakinek 4-nél több hiányzása van, már nem kaphat jegyet: NEM. Ha 10-nél több jelenléte összegyűlik, akkor a hátralévő időben akármennyit hiányzik, már biztosan teljesül a követelmény: IGEN. Amúgy még nem lehet tudni, ha a félév közepén vagyunk: LEHET. A félév végén, a csoport lezárásakor az összes LEHET átváltozik NEM értékűre.

A háromértékű logikához logikai függvényeket is kellett definiálni. A logikai ÉS kapcsolat működése: ha mindkét érték IGEN, akkor az eredmény is IGEN; ha bármelyik érték NEM, akkor az eredmény NEM, amúgy pedig LEHET. Az igazságtáblát felrajzolva látszik, hogy ha nincs LEHET érték, akkor ez egyenértékű a Boole-féle kétértékű logikai ÉS függvénnyel.

A feladatok a következők:

  1. Definiálj felsorolt típust (HaromErtekuEnum), amely IGEN, NEM, LEHET értékű lehet.
  2. Definiálj egy osztályt (HaromErteku), amely egy ilyen enum értéket tartalmaz.
  3. Legyen ennek konstruktora (amelyik mindig inicializálja valamilyen értékre a változót). Oldd meg, hogy kompatibilis tudjon ez lenni a beépített bool-okkal! Pl. a HaromErteku x = true; definíciónak működnie kell.
  4. Lehessen ezeket összehasonlítani == és != operátorokkal!
  5. Definiáld a logikai VAGY és TAGADÁS műveleteket is a háromértékű logikára. A VAGY működése az ÉS-hez igen hasonló és egyértelmű, a TAGADÁS azonban többféleképp is helyes lehet. Arra figyelj, hogy LEHET érték nélkül egyenértékűek legyenek a Boole-féle igazságtáblával!
  6. Valósítsd meg C++-ban az &&, ||, ! operátorokat a háromértékű logikára!
  7. Valósítsd meg a kiíró operátort!
  8. Teszteld az elkészült megoldásod!

Gondolkodtató kérdések:

  • Vajon van értelme annak, hogy a bool → HaromErteku mellett HaromErteku → bool konverzió is legyen?
  • Működnek a && és || operátorok, ha valamelyik operandusuk bool?
  • Mi a helyzet a háromértékű logikai típushoz definiált && és || operátorok rövidzár tulajdonságával?
  • Melyik operátorokat lehet globális függvényként megírni, ha az osztálynak nem írunk gettert? Amelyik lehet globális, az legyen is globális!

Elfogadott megoldások: 4 darab.
Szerezhető: 1 pont. Leadási határidő: 2019-03-02 04:00:00.

Prímtényezős felbontás (4 megoldás)

  • Írj függvényt, amely paraméterként egy egész számot kap, visszatérési értékként pedig a szám prímtényezőit adja vissza növekvő sorrendben!
  • Írj függvényt, amely átvesz két prímtényezős felbontást, ahogyan azt az előző függvény adta, és visszaadja a legkisebb közös többszörös prímtényezős felbontását!
  • Írj függvényt, amely egy prímtényezős felbontást megkapva előállítja a számot!
  • Írj programot, amely kér két számot a felhasználótól, és a fenti függvények használatával kiírja a legkisebb közös többszörösüket!

Használd a beépített tárolókat, ne írj sajátot!

Elfogadott megoldások: 4 darab.
Szerezhető: 1 pont. Leadási határidő: 2019-03-12 04:00:00.

Split és join (4 megoldás)

  • Írj függvényt (split), amelyik egy sztringet felbont sztringek tömbjére egy adott karakter mentén. Például "alma körte barack" és ' '{"alma", "körte", "barack"}. Figyelj arra, hogy több elválasztó karakter is lehet a szavak között, például több szóköz.
  • Írj függvényt (join), amelyik sztringek tömbjét fűzi össze, az adott sztringet közéjük téve! pl. {"alma", "körte", "barack"} és ", ""alma, körte, barack".
  • Írj függvényt, amelyik szétbontja a beírt, szóközökkel elválasztott szavakat egy tömbre, majd egyesíti azokat vesszőkkel – pont, mint a fenti példákban!

Használd a beépített tárolókat, ne írj sajátot!

Elfogadott megoldások: 4 darab.
Szerezhető: 1 pont. Leadási határidő: 2019-03-12 04:00:00.

Verem láncolt listával (2 megoldás)

4. heti gyakorlófeladat

  • 1 pontért: 1-6. részfeladatok.
  • 2 pontért: 7. részfeladat is.

Elfogadott megoldások: 2 darab.
Szerezhető: 2 pont. Leadási határidő: 2019-03-26 04:00:00.