Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 190. feladat (2008. szeptember)

I. 190. Egy téglalap alakú edényben lévő olvadék kristályosodását, fagyását szimulációval szemléltetjük. Az edényt gondolatban egybevágó négyzet alakú részekre bontjuk, és az olvadék egyes részeinek állapotát egy N×M-es táblázatban tároljuk. Az edényben lévő olvadt anyagot 0, a kristályt pedig 1 jelöli a táblázat megfelelő celláiban. Az olvadék adott állapotában a kristályosodás azokban a cellákban megy végbe, ahol az olvadt anyag 8 szomszédja közül legalább 3 kristály.

Példa a szomszédságra:

A kristályosodás folyamatának párhuzamosságát azzal biztosítjuk, hogy minden szimulációs lépésben az összes cellát megvizsgáljuk, és ha szükséges, az olvadt részt kristályosra változtatjuk. Az előbbi példában a középső 0 érték 1-re változik, mert három vele szomszédos cellában van kristály. Hasonlóan az első sor negyedik cellája is 1-re változik. A többi cella állapota ebben a szimulációs lépésben nem változik.

Készítsünk szimulációs programot, amely a bemeneti adatállományban megadott kristályokat tartalmazó olvadék teljes kikristályosodásának lépésszámát a standard kimenetre kiírja.

A program parancssori argumentuma legyen az olvadék mátrixát leíró adatállomány neve. A fájl első sorában két pozitív egész szám szerepel: az első a táblázat sorainak N számát (3\leN\le200), a második a táblázat oszlopainak M számát (3\leM\le200) adja meg. Az ezt követő N db sor mindegyikében M db érték szerepel, amely a megfelelő cellák állapotát (0 vagy 1) írja le.

A program kimenete egy pozitív egész szám, amely azt adja meg, hogy hány lépésben kristályosodik ki a teljes olvadék, vagy ha a szabályok figyelembevételével ez nem történik meg, akkor az ,,A kristályosodás leállt'' felirat.

Beküldendő a program forráskódja (i190.pas, i190.cpp, ...), valamint a program rövid dokumentációja (i190.txt, i190.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.

(10 pont)

A beküldési határidő 2008. október 15-én LEJÁRT.


Megoldás menete:

A megoldás során két tömböt (T1 és T2) használunk a szimulációstér aktuális és következő állapotának tárolásához (lásd mintamegoldás). Az Elokeszit eljárás a folyadékot ábrázoló 0-kal veszi körbe a cellák halmazát, így a kristály szomszédok megszámlálása nem igényel külön eljárást a mátrix szélén. A folyadék 0 és a kristály 1 ábrázolása a kristály szomszédok számának meghatározását egyszerű összegzésre vezeti vissza. Elég a Szomszedszamlalas() függvényt csak a folyadék, 0 tartalmú cellák esetén használnunk. A Szimulacio eljárást addig hajtjuk végre, amíg változás történik. Ha az 1-esek, azaz kristályok száma megegyezik a cellák számával, akkor a minden folyadék kikristályosodott, különben a kristályosodás előbb leállt.

Típushibák:

Sok beküldött program a standard bemenet és kimenet használata helyett fájlból olvasta és fájlba írta az eredményt. Nagy adatmennyiségekkel így nem lehet tesztelni a megoldásokat. Nem kellett megjeleníteni minden lépés után a szimulációsteret. Ez nagy méretnél nem is lehetséges karakteres felbontásnál. A be- és kimenettel több probléma volt. Több program szóközöket várt a bemeneti adatok között, illetve a futás végén billentyűleütésre várt. Amennyiben a feladat szövegében a be- és kimenetet pontosan definiáljuk, úgy a program a bemenetet mindig a specifikált formában fogja kapni, így azt nem kell ellenőrizni, illetve a kért kimeneten kívül semmi mást nem kell kiírni.

Siegler Gábor

Megoldás:

kristalyosodas.dpr


Statisztika:

25 dolgozat érkezett.
10 pontot kapott:Dévényi Attila, Englert Péter, Erdős Gergely, Fár Attila Gergő, Földes Imre, Gaizer Bence, Hunyady Márton, Jákli Gábor, Kővágó Zoltán, Molnár Gábor, Nagy 111 Miklós, Póta Kristóf, Szabó 313 Gábor, Uray Marcell János.
9 pontot kapott:Pap 999 Dávid.
8 pontot kapott:3 versenyző.
7 pontot kapott:1 versenyző.
5 pontot kapott:2 versenyző.
4 pontot kapott:2 versenyző.
3 pontot kapott:1 versenyző.
1 pontot kapott:1 versenyző.

A KöMaL 2008. szeptemberi informatika feladatai