Feladat: "Készits demográfiai szimulációs programot, amelyikben kétféle nemû állat szerepel,
s mindkettõhöz különböz paraméterek tartoznak."
Azaz kell: korcsoportonkénti eloszlás,
Adott: egy fajta állat, két nemben, szaporodási stratégia, van szaporodasi strategia,
a korabbi korcsoportok megmaradnak
Létszámmódosítás (véletlenszámok):
- egy adott korú egyed milyen valószínüséggel-el hal meg?
- milyen valószínüséggel születnek új egyedek (pl. nulla evesen)?
Indítás: A program a neve leírásásval (pl: "a:\infa2be1") indítható.
Futtatási környezet: IBM PC, PC DOS 7.0 (vagy avval kompatibilis operációs rendszer).
A program (bemenete): A program elõször megkérdezi az maximális helyek syámát, majd a népsûrûséget. (Illetve, ha nem találja az egavga.bgi file-t, akkor annak az elérési útját).
A továbbiakban a program az alsó-menüsoron nagybetûvel jelzett billentyûk segítségével vezérelhetõ.
Fõbb lehetõségetk:
N: normál mód (ezt alapesetben nem jelzi ki, csak az eltérést)
L: lépésenkénti megerõsítést kér
C ún. csendes mód (nincs se ábra, se grafikon - itt korfa)
S: segítség-képernyõ megjelenítése
M: paraméterek módosítása
(felhasználóként nem változtatható: maximális életkor, születési/halálozási valószínûség)
P: pihenés, szünet (billentyû-lenyomásra vár)
F: állapot mentése file-ba (a visszaállítás még nem mûködik)
J: járvány (a népesség véletlenül kiválasztott fele kihal)
K: kilépés a programból
Ha legalább az egyik nem egyedek elfogynak (vagy a követkeyõ lépésben fogynának el), akkor a program jelzi, hogy kihaltak, továbbá felkínálja a lehetõséget az újrakezdésre.
Hibalehetõségek: Ha egy adatot indításkor rosszul kap meg, akkor még legfeljebb kétszer ismét bekéri.
Ha az "egavga.bgi" file-t nem találja (elvileg ez kizárt, mert ugyanabban a könyvtárban vannak
és ott kezdi a program elõször keresni),és nem is kapja meg a helyes elérési útvonalát, akkor a program nem indul el.
A program lehetséges kimenetei:
ábra: Induló képernyõ:
A szimulációban elemeinek darabszáma? (6..50) 25
... milyen sûrûséggel? (0..9) 0
... milyen sûrûséggel? (0..9) 4
Az egavga.bgi helye? C:\TP\70\BE\egavga.bgi
ábra: Futás közben (a grafikon a korfa):
Feladat: "Készits demográfiai szimulációs programot, amelyikben kétféle nemû állat szerepel,
s mindkettõhöz különböz paraméterek tartoznak."
Indítás: A program a neve leírásásval (pl: "a:\infa2be2") indítható.
Fejlesztõi környezet: IBM PC, PC DOS 7.0 (vagy avval kompatibilis operációs rendszer),
Turbo Pascal (legalább) 6.0 fejlesztõi környezet,
TP unit-ok: Crt (a képernyõhöz), Dos (a file-okhoz), Graph (a grafikához).
A program teszteléskor helyesen futott OS/2 4.5 (eComStation Prev 1) és PC-DOS 7.0 alatt
Hatékonysági tesztesetek jelenleg nincsenek.
A program felépítésérõl:
Fontosabb típusok, változók
Konstansok
pmax=8; (paraméterek száma)
kormax=290; {1..290} (a maximálsi életkor)
Típusok
Telem=rekord (egy egyed)
nem:egész (milyen nemû); szin:egész (miképp' ábrázolja a szimulációs tér)
kor:egész (mennyi idõs)
Tomb=tömb[1..50,1..30]: Telem; (a szimulációs tér)
PrString=String[23]; (a paraméterek nevei)
Tparam=rekord - a paramétertömb (nevek, értékek)
név:szöveg[23]; érték:egész;
ParamT=tömb[1..pmax]: Tparam; (a paramétertömb)
Hullt=tömb[0..580]: valós (az elhullási valószínûség: nemeknként, koronként)
Változók:
mxi,mxj:integer; (a tényleges létszám /hosszában, széltiben)
nepsûrûseg:valós; cse(ndes-e),le(pesben-e):logikai
T: tomb, P: ParamT (ténylegesen ezekkel dolgozik a program - illetve majdnem)
Szimulációs lépés:
Idõ kiírása
Paraméterek kiírása(az idõközben megváltozott értékek)
A "Tömb" értékeinek változtatása (öregedés; elhullás; szaporodás; elhullás)
(Ha nem csendes módban van a program, akkor:)
Ábra-rajzolás (a szimulációs téren ábrázolja a "tömböt")
Grafikon rajzolása (itt gyakorlatilag a korfáról van szó)
Stratégiák
Születés: véletlenszerûen választ a program (max.hely-szer) egy elemet (T[i,j]), majd egy szomszédját (T[k,l]). Ha különbözõ nemûek, akkor veszi az elsõnek (T[i,j]) egy véletlenszomszédját, ami ha üres (T[m,n].nem=3), akkor oda születik az új, egy évesen.
Halálozás: Ciklus 1-tõl létszámig
sv:=véletlenszám
Ha sv<(T[akt].halálozási valószínüsége) akkor törli (T[akt].nem:=3)
Ciklus vége
Öregedés: Mindegyik állat életkorát eggyel növeli.
(A halálozási valószínüség jelenleg: 0,6 20 év alatt és maxkor-20 felett, továbbá 0,3 különben)
Az algoritmusnak a tényleges szimulációt érintõ része
Ciklus...
Ciklus...
Billentyûre_vár(c)
Elágazás c szerint (...)
Ciklus amíg ((c='K') vagy (c='F')) (kilépés / file-mûvelet - például mentés)
Ha (c='F') akkor mentés
Ha (c='K') akkor (akarja_e_folytatni(ha nem akkor legvége:=igaz))
Ciklus amíg (legvége)
A programban aránylag sokszor használt PrHely függvény:
Függvény PrHely (P:Paramétertömb, K:betû):egész
A függvény megkeresi (keresés-tétel) P-ben, melyik az a paraméter, amelyik kezdõbetûje "K".
Függvény vége.
Fejlesztési lehetõségek:
Az elmentett állapotot vissza lehetne állítani (az eljárást - ami már benne van - ki kellene javítani)
Több paramétert módosíthatna a felhasználó.
Megjegyzés: A felhasználó által nem módosítható paraméterek: (élettér, file, név)
maximális életkor (globális konstans: infdef.inc, maxkor)
paraméterek száma (globális konstans, infdef.inc, pmax)
a paraméterek nevei (globális változók /illetve konstatnsok/, infinic.inc, PrFeltolt eljárás) halálozási valószínûség (globális változók, infinic.inc, TömbNulláz/HullFelt eljárás)
felsõ címsor (globális vltozók, infproba.pas, átadott szöveg-értékek)
alsó menüsor részei (nevek: globális konstans, infdef.inc, "pA" - ahol : "A" a kezdõbetû forróbillentyûk: lokális változó-értékek, infelj.inc, BillreVár eljárás) stratégiák (globális eljárások, infstrat.inc, az eljárások nevei)
Eddigi tesztesetek eredménye: (Az eddigi tesztesetek véletlenszámokkal történtek.)
Az kezdeti paraméterek nem feltétlen azonosak a tényleges indulási paraméterekkel.
Nem megfelelõ típusú paraméter-értékkel nem lehet a programok "kiakasztani".
Budapest, 2001. május 18-28.