Logo‎ > ‎Feladatok‎ > ‎Funkcionális programozás‎ > ‎

Grafikai feladatok listakezeléssel

KÍGYÓ

Készíts egy olyan Logo eljárást, amely a paraméterként megkapott szöveg alapján rajzolja ki a kígyót! (Országos Logo verseny egy feladata alapján)

kígyó "ftjtbbtbtjv 30

Az első paraméter a kígyó alakját írja le, a második a méretet határozza meg. A betűk jelentése:

 
 
 
 
 
 f - a kígyó feje  t - a teste b - balcsavar   j - jobbcsavar  v - farka

KÖRDIAGRAM

Készítsünk programot (kördiagram :l :m), amely a listában megadott értékeket kördiagramon ábrázolja!
A körcikkek véletlen színnel legyenek kitöltve!

Készítsük el a kördiagram robbantott változatát!

A paraméterek száma eggyel növekszik (kördiagramrob :l :m :arány). Az :arány paraméter azt fejezi ki, hogy a körcikkek sugarának hányad részével toljuk szét a cikkeket.

UTCA

Készítsük el egy utca egyik oldalának tervrajzát a tervet tartalmazó lista alapján!
Készítsük el a ház :m, a háztömb :m :hsz, a zebra :m és a park :m eljárásokat. Majd ezeket felhasználva a következő utcát rajzoló utca :sor :m eljárást, ahol az :m a méretet, a :sor az utca felépítését meghatározó listát határozza meg!
ház 30
háztömb 30 2
zebra 30
park 30
A háztömböt, illetve a parkot járda vegye körül! (A színeket tetszőlegesen választhatjuk meg!)
Az utca tervét tartalmazó lista elemei:
hx – háztömb, ahol x 1 és 9 közötti egész szám
z – zebra
p – park

utca [h2 z h3 z p z h2] 33

ROBOT

Egy egyszerű robot a végrehajtandó parancsokat egy listában kapja. Négy utasítást ismer csupán.: egységnyit megy előre, hátra, jobbra vagy balra az E, H, J vagy B utasítás hatására.
Készítsük el a robot :l szót, amely a lista utasításai szerint rajzol!

robot "EEEJJEEBHBEBHBEBHHJJHHH
Egyszerűsítsük az utasítássorozatot!
Egyszerűsítés, ha két szomszédos ellentétes irányú utasításpárt elhagyunk. Ilyen ellentétes utasításpár EH, HE, JB és BJ.
Példa:
egyszerű "EEBJHHBEHEHJE Eredmény: "EEHHBJE egyszerűsítés "EEBJHHBEHEHJE Eredmény: "E
Az egyszerűsítést addig végezzük, amíg a sorozat rövidül.
Írjunk olyan parancsot, amellyel az utasítássor végrehajtása után a legkevesebb utasítással lehet a kezdőpontba visszajutni!
Az oda- és visszaút eltérő színű és vastagságú legyen!

körút "EEEJJEEBHBEBHBEB
A robot kékkel rajzolja az utasítássort, majd pirossal a legrövidebb visszautat. A visszautat az eredeti utasítássor vízszintes és függőleges elmozdulásainak számlálásával, majd ebből a parancssor előállításával határozza meg. Az oda- és a visszautat is a robot parancs rajzolja ki.
A parancslistát alakítsuk át úgy, hogy a több azonos, változatlan irányba tett elmozdulásokat helyettesítsük kéttagú listák sorozatával!
Példa: tömör "EEEJJEEB Eredmény: [[E 3] [J 2] [E 2] [B 1]]
Készítsük el az átalakított listát kirajzoló szót visszaalakítás nélkül!

tömörrajz [[E 3] [J 1] [E 2] [B 4] [H 2] [J 1] [H 3]]
Készítsünk olyan függvényt, amely az új formátumú utasítássort visszaalakítja a régire!
Példa: régire [[E 3] [J 2] [E 2] [B 1]] Eredmény: "EEEJJEEB
TÜKRÖZÉS

Készítsünk rajzoló eljárást tükrözés :alak :parancs néven!
A teknőcöt a JBEH parancsokkal vezéreljük. J hatására jobbra, B hatására balra fordul 90 fokkal, E hatására előre lép egyet, H hatására pedig hátra. Az :alak a J, B, E és H karakterekből álló szó.
A :parancs azt határozza meg, hogy mi történjen az alakzattal:
R – kirajzolja az :alak-nak megfelelő ábrát
Y – az y tengelyre vonatkozó tükörképet rajzolja
X – az x tengelyre vonatkozó tükörképet rajzolja
O – az origóra vonatkozó tükörképet rajzolja
Példa:
tükrözés "eeeeeejeejeejeej "r
tükrözés "eeeeeejeejeejeej "y
tükrözés "eeeeeejeejeejeej "x
tükrözés "eeeeeejeejeejeej "o

BRAILLE-ÍRÁS

A vakok és látássérültek írásrendszere a Braille-írás. Minden jel a papír síkjából kiemelkedő hat pont kombinációja. A Braille-jeleket sorokban nyomják a papírba és úgy olvassák, hogy az ujjakat végigvezetik a sorokon. A betűknek megfelelő jeleket a Braille cellában pontokkal alakítják ki.

A Braille cella pontjainak számozása
Készítsünk a Braille-ábécé egy jelét a betű kódja alapján kirajzoló programot (Betű :kód)!
Példa: Betű "101111 Eredménye: amely az y betű kódja.

A 0 az üres és az 1 a pontot tartalmazó helyet kódolja. A Braille-pontokat piros színű körökkel ábrázoljuk!
Készítsünk eljárást (írás :mondat :abc), amely a Braille-ábécé betűinek kódolását tartalmazó lista alapján a mondat szavait a képernyőre tudja rajzolni!

Az ábrán látható jelek egy részét használjuk fel a lista elkészítéséhez.
Példa: írás [levest kérek ebédre] abc Eredmény:

SEJTAUTOMATA

A sejtautomata általában sok azonos sejtből (cellából) áll. Az elemek néhány állapotot vehetnek fel. Az egyes sejtek állapotai változnak az idővel (lépésszámmal) attól függően, hogy maga a kérdéses sejt és közvetlen szomszédjai milyen állapotban vannak. Valamennyi sejt egyszerre (párhuzamosan) változtatja állapotát. Az egydimenziós automata sejtjei két állapotot, 1-et és 0-át vehetnek fel. A sejtautomata állapotait, generációit soronként jelenítjük meg. Egy sejt következő generációbeli állapotát két szomszédjának és önmaga állapotának együttese határozza meg. Az automata első és utolsó cellájában mindig 0 van.

A környezeti állapot 23=8 féle lehet. Minden állapothoz megadhatjuk, hogy a következő generációra mit eredményezzen.

Szokásos elnevezés, hogy az Eredmény sort, mint bináris számot felfogva, megadják decimálisan az értékét, a szabályt, ezért nevezik pl. a fenti szabályt 30-asnak. A lehetséges szabályok száma 28=256. A kezdőállapot és a szabály együtt határozza meg az eredményt. Az eredmény lehet stabil végállapotú, periodikus, véletlen és egyikbe se sorolható. Sok közöttük az önhasonló.
Készítsünk programot (sejtautomata :kezdőállapot :szabály :lépésszám), amely a sejtautomata generációit grafikusan jeleníti meg!
A cellák négyzet alakúak és állapotuktól függően különböző színűek legyenek. Az első sor az induló, majd a többi az egymás utáni generációkat tartalmazza.
Példa: egy önhasonló eredmény

L-SYSTEM

Aristid Lindenmayer (1925-1989) magyar származású holland biológus, matematikus. Az 1968-ban kidolgozott módszer eredeti célja a növényi fejlődés tanulmányozása volt.
Szöveges képletekkel (generatív nyelvtannal) leírható vonalas fraktálokkal foglalkozott. Szimbólumai a toll mozgásirányának és lépései hosszának információit hordozzák.
Kezdő axióma, szög és formula kell a fraktál rajzolásához.
Egyik legismertebb vonalas fraktál a Koch-görbe.
Axióma: F
Formula: F=F+F--F+F
Szög: 60

Mi történik, ha az axiómát bővítjük?
A Formula a rekurzív helyettesítés szabályát adja.
Axióma: F--F--F
Formula: F=F+F--F+F
Szög: 60

Milyen eszközeink vannak az L-System vizsgálatához?
Logo rendszer (Imagine) hagyományosan a teknőcgrafikához
Inkscape rajzolóprogram egy erre a problémakörre fejlesztett funkciója
Nem is annyira a fraktál rajzolása érdekes most, hiszen ez gyakori feladat, hanem a karakteres ábrázolás a lényeges. A feladatot szövegkezelési problémára vezethetjük vissza.
Válasszuk a legegyszerűbb eszközkészletet!
Szimbólumok: f, p, m
A kezdő axiómából elindulva, az alkalmazandó formula iterációs mélységnek megfelelően ismételt behelyettesítésével állíthatjuk elő a szükséges sorozatot.
A szimbólumokból álló sorozat elemenkénti feldolgozásával rajzolhatjuk meg a kívánt fraktált.
Például:
Axióma Formula Szint Sorozat
Koch-görbe
F
FpFmFmFpF
2
FpFmFmFpFpFpFmFmFpFmFpFmFmFpFmFpFmFmFpFpFpFmFmFpF
F
FpFmFmFpF
3
FpFmFmFpFpFpFmFmFpFmFpFmFmFpFmFpFmFmFpFpFpFmFmFpFpFpFmFmFpFpFpFmFmFpFmFpFmFmFpFmFp FmFmFpFpFpFmFmFpFmFpFmFmFpFpFpFmFmFpFmFpFmFmFpFmFpFmFmFpFpFpFmFmFpFmFpFmFmFpFpFpFm FmFpFmFpFmFmFpFmFpFmFmFpFpFpFmFmFpFpFpFmFmFpFpFpFmFmFpFmFpFmFmFpFmFpFmFmFpFpFpFmFm FpF
Megoldás
A sorozatot a megadott számú helyettesítéssel állíthatjuk elő.
Az :n-edik szint az :n-1-edik szint eredményét alkalmazza axiómának.
eljárás előállít :axioma :formula :n
 ha :n = 1 [eredmény helyettesítés :axioma :formula]
 eredmény előállít (helyettesítés :axioma :formula) :formula :n-1
vége
A helyettesítés során az axióma elemein kell vé-gigmenni és az aktuális szimbólumtól függően más-más elemet, illetve formulát kell a részered-ményhez (részsorozathoz) fűzni.
eljárás helyettesítés :axioma :formula
 hak üres? :axioma [er :axioma]
    [elágazás (első :axioma)
        [f F [er szó :formula helyettesítés en :axioma :formula]
         p  [er szó "p           helyettesítés en :axioma :formula]
         m  [er szó "m          helyettesítés en :axioma :formula]
        ]
    ]
vége
A rajz szó a sorozat szimbólumait, mint teknőcparancsokat hajtja végre.
eljárás rajz :sor :hossz :szög
 ha nem üres? :sor [elágazás első :sor
                      [f [előre  :hossz]
                       p [jobbra :szög]
                       m [balra  :szög]
                      ]
                    rajz en :sor :hossz :szög
                   ]
vége