Feladat: I.190 Korcsoport: - Nehézségi fok: -
Füzet: 2008/szeptember, 359 - 360. oldal  PDF  |  MathML 
Témakör(ök): Feladat

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

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 (3N200), a második a táblázat oszlopainak M számát (3M200) 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ó.