Szúdoku megoldás-OOP - Programozás tanítása

Tartalomhoz ugrás
Szúdoku feladat megoldása
folytatás a meglévő osztállyal

3. feladat

Olvassa be a feladvanyok.txt állományban lévő adatokat és tárolja el egy olyan adatszerkezetben, ami a további feladatok megoldására alkalmas! Határozza meg és írja ki a képernyőre a minta szerint, hogy hány feladvány található a forrásállományban!
A gombra kattintva megtekintheti, hogy hová helyezze a forrásállományt, milyen osztályra van szüksége állományok kezeléséhez.
Objektumlista, de hol?
Elsőként el kell dönteni, hogy hol legyen a következő lista.
List<Feladvany> feladvanyok = new List<Feladvany>();
Lehetőségek:
  • A Main osztálymetóduson belül akkor érdemes elhelyezni, ha nem kívánunk olyan metódust létrehozni, amelyik használná a listát.
  • Elhelyezhetjük a Main-en kivül a Program osztályban, mint "osztályváltozót" statikus adattagot. Ebben az esetben bármely osztályon belüli metódus elérheti. Figyeljünk viszont arra, hogy static jelzőt írjunk elé, mivel így lesz "osztályváltozó", másképpen mivel osztálymetódusból példányváltozó nem érhető el, nem tudnánk használni.

ReadAllLines - A paramétere egy szöveges állomány elérési útja és neve. Visszatérési értéke a beolvasott szöveges állomány sorait tartalmazó tömb.
.Select - A kollekció minden eleméhez (amik most stringek) hozzárendel egy objektumot. A Feladvany osztály konstruktora az adott elemet (most string)  kapja paraméterként.
.ToList - A kollekció elemeit listává szervezi.

4. feladat

Kérjen be a felhasználótól egy 4..9 intervallumba eső (4 ≤ x ≤ 9) egész számot! A beolvasást addig ismételje, amíg a megfelelő értékhatárból érkező számot nem kapjuk! Határozza meg, és írja a képernyőre, hogy ebből a méretből hány feladvány található a forrásállományban!
Amikor valamilyen feltétel teljesülése esetén meg kell ismételni a beolvasást, érdemes hátul tesztelő ciklust használni! A feltételben felsoroljuk az összes olyan rossz esetet, amikor ismétlésre van szükség. Ezek most: szam < 4 || szam > 9
Console.ReadLine - A billentyűzetről olvas be és stringet ad vissza.
Ebben az esetben ezt még számmá kell alakítani.
A feladvanyok.Count(obj => obj.Meret == szam) egy megszámolásos algoritmust valósít meg. A feltételnek eleget tevő obejktumok számát adja meg. A feltétel szövegesen a következő: az objektumban tárolt feladvány hossza (Meret) egyenlő-e a korábban bekért számmal?

5. feladat

Válasszon ki véletlenszerűen egy feladványt, amely az előző feladatban bekért méretű! A kiválasztott feladványt jelenítse meg a képernyőn a minta szerint! Ha nem sikerült véletlenszerű feladványt kiválasztani, akkor dolgozzon a legelső beolvasott feladvánnyal!
Hozzunk létre egy segédlistát valogatott néven, ami csak azokat az objektumokat tartalmazza, amelyek megfelelnek a feltételnek!
.Where - A kiválogatásban lesz a segítségünkre. Feltételként -hasonlóan az előző feladathoz- a méretre teszünk megkötést.
Random - A véletlenszámok generálását biztosító osztály.
Next(paraméter) - Paramétereként azt az egész számot adjuk meg, amit már nem akarunk a véletlenszerű kiválasztás végén viszont látni. A véletlenszerű kiválasztásban szereplő számok 0 .. (paraméter-1)
A véletlenszámgenerátor objektumot inicializálja, majd ki kell választani egy random elemet a leválogatott listából! Ezt úgy tehetjük meg, hogy az elem eléréséhez szükséges indexet generáljuk véletlenszerűen.
Mivel nem tudhatjuk előre, hogy a leválogatott lista hány elemű lesz, ezért a lista elemeinek számát használjuk fel a Next paramétereként. Ez ráadásul összhangban van azzal, hogy a lista indexelése 0-val indul.

6. feladat

Határozza meg és írja a képernyőre a kiválasztott feladvány kitöltöttségét %-os formában a minta szerint! A kitöltöttségen a kitöltött mezők arányát értjük az összes mező számához viszonyítva! A százalékos értéket egész számra kerekítve jelenítse meg!
Egy megszámláló algoritmusra van szükség, ahol a feladványban előforduló '0' -tól különböző karakterek számát szeretnénk meghatározni. Kihasználjuk azt, hogy a karakterláncok karaktertömbként is kezelhetők, így a valasztott nevű karaktertömbbön alkalmazni tudjuk a .Count megszámlálásos algoritmust.
.Count - Visszaadja a megadott feltételnek eleget tévő elemek számát. Most a feltétel az, hogy a karakterlánc soron következő karaktere különbözik-e '0' karaktertől?

7. feladat

A Feladvany osztály megfelelő metódusát felhasználva jelenítse meg a kiválasztott feladványt a konzolon!

8. feladat

Válogassa ki és írja ki fájlba az adott méretű feladványokat! Ha például a felhasználó a 4-es méretet adta meg, akkor a kimeneten egy sudoku4.txt állományba kerüljenek a 4x4-es méretű feladványok! Az állományban soronként egy feladvány kerüljön!
Felhasználjuk a korábban létrehozott valogatott nevű listát (5-ös feladat)
A korábban már használt .Select segítségével egy String listát készítünk a valogatott nevű lista objektumaiból.

WriteAllLines - Két paraméterre van szüksége, az első a szöveges állomány elérési útja és neve, a második a kiírandó sorokat tartalmazó adatstruktúra. Jelen esetben ez egy stringekből álló lista.
Vissza a tartalomhoz