Tikk-takk
A szekvenciális programnyelvekben - amelyek meghatározott sorrendben hajtják végre az utasításokat, (pl. Basic, Pascal, Maple) a címben szereplő utasítás a leggyakrabban használtak egyike. Azt jelenti, hogy [b]n[/b] új értéke legyen a régi értékénél 1-el nagyobb. Ebben az [b]=[/b] vagy a [b] :=[/b] un. [i]értékadó utasítás[/i], szemben az egyenletekben szereplő = (reláció) jellel. [br][br] A lényeg, hogy a GeoGebra mindent egyszerre kezel, ha egy objektum értéke megváltozik, akkor ez kihat az összes leszármazottjára. Ezért van az, hogy az n=n+1 egyenlőségével nem tud mit kezdeni: azt a hibát írja ki, hogy körkörös definíció. És igaza van! Így nem tudunk ciklust megadni . Ezt a programnyelvet másra találták ki.[br][br]Egy kivétel van, a különböző objektumok scriptjében (szó szerint: script = írás, szöveg) fogadható el ez az utasítás. Ugyanis ott van egy feltétel: vagy kattintásra, vagy az objektum frissítésekor (értékének a megváltozáskor) hajtja végre a scriptbe leírt utasításokat, valahányszor fennáll a végrehajtás feltétele, ami viszont egymást követő (szekvenciális) esemény. [br][br]Ez teszi lehetővé, hogy pl. " fej vagy írást "játsszunk. Addig dobáljuk a pénzérmét, amíg meg nem unjuk, vagy, be nem következik valami kellemetlen esemény, pl. elfogy a pénzünk. Ezt fogjuk most szimulálni.
Bármely programnyelvben viszonylag egyszerű programozási feladatnak számít a fej vagy írás játék szimulálása. A relatív gyakoriság sajátosságainak a szemléltetésére jól használható véletlen szám generátorok vannak a GeoGebrában is, mint ha tényleg játszanánk a pénzérmékkel.[br][br]A GeoGebrában azt nehéz megoldani, hogy egy ilyen kísérletet sokszor el kell végezni ahhoz, hogy azt lássa a felhasználó, hogy a relatív gyakoriság (kedvező esetek száma)/(összes kísérlet száma) a várható valószínűség körül - egyre kevésbé - ingadozik, de mégsem használhatjuk a határérték számításban használt "[u]Bármely[/u] 0<ε -hoz [u]van olyan[/u] N ..." kezdetű mondatot. [br][br]Ezt egy tetszőleges csúszkának, vagy adott pályán mozgó pontnak a scriptjébe írt parancsokkal tudjuk megoldani, ahol csak azt kell vezérelnünk, hogy az objektum animációja addig fusson, amíg le nem állítjuk, vagy nem keletkezik a leállítást kiváltó állapot. [br]Az alábbi appletben ez a[b] Tikktakk[/b] nevű két állapotú csúszka, amely a 0 és 1 számot állítja elő (aminek az értékét nem is használjuk). A program lényege csúszka scriptjében van, amely végrehajtásra kerül minden értékadásnál, vagyis ha mozog. [br][list][*]r=random(0,1) [/*][*]k=k+r[/*][*]n=n+1[/*][*]h=h+2 k-1[/*][*]Animál(Tikktakk, -p<k<p)[/*][/list]Itt [b]r[/b] a véletlenszerűen előállított 0 vagy 1 szám, [b]k[/b] a kedvező esetek száma, [b]n[/b] az összes eset (a kísérletek) száma, [b]h[/b] és [b]p [/b]szerepéről később lesz szó.[br]A Tikktakk nevű csúszkán magasra állítottuk az animáció sebességét, amely tovább fokozható azzal, hogy nem íratjuk ki folyton az eredményeket, és nem mutatjuk egy kör színével, hogy hol áll a kísérlet.[br][br]Maga az animáció a csúszka gombjának a megmozdításával indul, [b]Restart[/b] után is. Az animáció - a szokásos módon - a rajzlap jobb alsó sarkában megjelenő [img]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAbCAYAAABiFp9rAAABV0lEQVRIDe2VMQ6DMAxFe1pOw8rGxMbGBbgAGyMLA4KJjYkt1bPkyE1LKkVtutSShZXY/yfGdm4uk9xiPOu6ur7vXdM0rqqqB2WNvX3fYxB+7yXRcRyu6zoBrutaAMdxdNu2iWJDwh4HwJeYmDwRzfMsAIAAeJ7nZTx7wzB4f2Kv5IEIR07Ytu3bE1pAbkMMsVdknghnbkFA7BaWwNrEEAvGqzR6IvJ85WQBY7YeFqxQhIjK4drk2wonLMvS67IsDrVr+FgBA6ywGoVIKyhMGYBFUXidpsmhdg0fK2CQGTCtCJH2hN3ATiEiDhIwrQgRV6WUQ0klAgtMK56IZgwllQis3xNlSV22YshW3tkalmrLMoIg0jn19aEKWZZnQpsVMmYVyoAM55/68WUv6eFTENLIP6O7dUDSZx99ypWML9WoAxJSq9p74XNg460ts84ufMv+EyVn9g6J2u30fc9yVgAAAABJRU5ErkJggg==[/img] ill.[img]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAnCAYAAAAcsCj6AAAB7UlEQVRYCe2WsavCMBDG/Wuduzq7uuokFNzcBMHNTRxcpKOLg+ikkyB0i/wOr5h4iX2Pvg6PHhSb3N33Jd9dUnuuZeu1zOc6wsYV7yT955Kez2e3Xq/dbDZz4/HYe5jDd71ef6SC2TT3+90tFgshmE6nAlwUhbtcLvLwDhk+FkIsOXXsg/B4PAoQYACXZRnFwbfb7ap4cr+ZR0gCK57P57VXDAG7I4dcypCyipAkdkVialcxMHLIBSMlb0VIHazg0+kU4/iY10WDFTMhpNOQg5qFNhqN3GAwcIfDIXSZY2oKVqx7hVA7zpISwn6/L89kMnG3280k0kkwUGqz2eiU9yuEeqY8z2vwTqjEy+XSPR4PK1zmVquV1NMKEMKYnCRYhBBnWea2262FKUcFTMsqQg61ZTFC3S3+sL5g/RkhDbXf77211iK0OhSU2A6RNFZL7VRvFa/Br5omz/Nkt35tmrrHYjgcftQr3EWtY6EHHylCQ9JUR4bxKmfy4JMUu9poiNSZeyfUqw1JYyY1xKnBrV3ekLb6eVIJ+J5xF/JQD+t+1Vh8xGj8t28heZWkCsIv8lJTbgvAqAnA+heDd+bwEcM7OXXMJNREOo1bX7/mgOvDHL5YNypG+JskDIObGHeETajoYXSSenI0MWhd0ieozScGrHsh8AAAAABJRU5ErkJggg==[/img]jelre kattintva állítható meg ill. folytatható.[br]
... bemutatunk néhány talán kevésbé ismert de hasznosnak tűnő fogást.[br][br]Ennél az egyszerű valószínűségszámítási kísérletnél is felvetődhet egy másik kérdés is: mennyire fordulhatnak elő a játékos számára jó ill. rossz irányba mutató hosszabb sorozatok?[br][br]Ezzel kapcsolatos a valószínűségszámításban a "részeg tengerész tétele" néven ismert összefüggés. Eszerint ott tántorog egy híd közepén a részeg tengerész, aki egyforma eséllyel jobbra, vagy balra lép egyet-egyet. A tétel szerint előbb-utóbb el fog jutni a híd valamelyik végére.[br][br]Ugyanezt így is fogalmazhatjuk: valaki bemegy a kaszinóba fej vagy írást játszani, [b]p[/b] zsetonnal a zsebében.[br]Megígérte (magának?), hogy akkor hagyja abba a játékot, ha a pénzét megduplázza, vagy az egészet elveszíti. A részeg tengerész tétele értelmében ezt a stratégiát választva legjobban tenné, ha egyszerre feltenné az egészet, és már mehetne is haza. Ha egyesével rakja fel a zsetonjait, akkor is pontosan ugyanannyi - azaz 50% - az esélye, hogy a számára kedvező, vagy kedvezőtlen eset bekövetkezzen. (A rulettnél, ahol a piros vagy fekete mezőre lehet tenni, akár egyenként, nagyobb a veszteség esélye, mert ha a 0 "jön ki", akkor a bank elviszi a pirosra és a feketére tett zsetonokat is.)[br][br]Nos ezt (is) szemlélteti a fenti applet: ezt kezeli a [b]p[/b] és [b]h[/b] változó.[br][br]Azt is szemléltetjük, hogy hogyan tántorog a tengerész. (Rá lehet zoomolni az egérgörgővel.) Ettől eltűnik az addigi "nyoma" amely a játékos aktuális egyenlegétől függően piros, vagy zöld.[br][br]Általában így szoktuk az egérgörgővel letörölni a már nem kívánt nyomvonalakat. De erre van egy scriptből vezérelt, vagy a parancssorba beírható "varázsige" is, amit most a kezdő adatokat beállító [b]Restart[/b] gomb scriptjébe írtunk: [b]Nagyítás(1) [/b]Ebbe a parancsba [i]1[/i] helyett más számot írva valóban nagyítani, kicsinyíteni tudjuk a rajzlapot.[br][br]Apró, de olykor hasznos trükk lehet, ha egy objektum - jelen esetben a körlap színe - dinamikusan változik. Itt most a piros szín intenzitását a [b]Ha(rgy<0.5+ε, 1, 0.2)[/b] a zöldét a [b]Ha(rgy > 0.5 - ε, 0.6, 0)[/b] értékek vezérlik, ahol [i][b]rgy=k/n[/b][/i] a relatív gyakoriság,[b][i] ε=0.01[/i][/b] , vagyis a kör színe akkor lesz sárga, ha [b][i]rgy[/i][/b] értéke 0.01-nél közelebb kerül a várható 0.5-es értékhez.[br][br]Talán kevésbé tűnik fel, hogy a rajzlap zoomolásánál, mozgatásánál a körlap nem mozdul. Azért nem, mert a középpontját és egy kerületi pontját a képernyőhöz (és nem a rajzlaphoz) rögzítettük. Ez egy viszonylag ritkán használt GeoGebra utasítás, amiről azonban jó ha tudunk.[br] [br]Pl. itt a [b]K=MásolatCsatolásaNézethez((0,0),1,(0,0),(-10, 10),[color=#ff0000](100, 160)[/color],(0, 0))[/b] utasítással értük el, hogy a kör [i]K[/i] középpontja a képernyő bal szélétől [b]100[/b], a felsőtől [b]160[/b] pixelnyire legyen. Ez egy elég [url=https://wiki.geogebra.org/hu/M%C3%A1solatCsatol%C3%A1saN%C3%A9zethez_parancs]bonyolult utasítás[/url], de a lényege ebből a példából kiolvasható.[br][br] Murphy törvénye szerint minden program addig fejlődik, amíg meg nem haladja a szerzője képességeit. Ezen a programon bizonyára még sokat lehetne cicomázni, de már így is túl nagyra sikerült fújni ezt a kicsi lufit.[br]
Mindenki sokszor játszotta gyerek korában ezt a rejtsük el, ... keressük meg játékot. Az iménti Tikktakk nevű leegyszerűsített csúszka scriptjébe könnyen beépíthetjük a legegyszerűbb kereső algoritmust, a felező módszert.[br][br][b]Feladat: [/b][br]Rejtsünk el a számegyenes (0,10) intervallumán egy véletlen számot, majd keressük meg.[br]Helyesebben: közelítsük meg olyan pontosan, ahogy csak ezt a Geogebra "motorja" lehetővé teszi. [br](Ez a motor elég jó: A GeoGebra 10 [sup]-13[/sup] -ig nagy biztonsággal számol.)[br][br]A program érdemi része mindössze az alábbi néhány utasítás: a [url=http://db.komal.hu/KomalHU/cikk.phtml?id=199981]közismert [/url]oroszlánfogás - intervallum felezés - módszere. Persze ez kiegészül a [b]Restart[/b] gomb és a [b]Tikktakk[/b] csúszka scriptjébe írt utasításokkal:[br][br][b]Restart:[/b][br][list][*]n=1[/*][*]r= 10 Véletlenszám()[/*][*]a= 0[/*][*]b= 10[/*][*]Animál(Tikktakk,true)[/*][/list][br][b]Tikktakk:[/b][br][list][*]n:=n+1[/*][*]a:=Ha(c[/*][*]b:=Ha(c>r,c,b)[/*][*]Animál(Tikktakk,¬OK)[/*][/list][br]Magát a csúszkát nem is kell megjeleníteni, a változók pillanatnyi állapota enélkül is nyomon követhető. Az viszont fontos, hogy magasra állítsuk az animáció sebességét. Általában 25-30 lépés szükséges a ciklus leállásához, vagyis a (c ≟r) =true feltételhez. Ugyanis [math]\frac{10}{2^{30}}\approx10^{-9}[/math], és a GeoGebra a két számot (szakaszt) akkor tekint egyenlőnek, ha a különbségük nem több, mint 10[sup]-8 [/sup]egység.[br]Ugyancsak fontos, hogy a GeoGebra értékes tizedesjegyeinek a számát maximálisra (15-re) állítsuk.
Próbálják meg olvasóik ezt a rövid képletet beírni az internet kereső programjába. [br]Meglepően hamar el fognak jutni egy ma is nyitott matematikai problémához, amely [url=https://en.wikipedia.org/wiki/Collatz_conjecture]Collatz sejtés[/url] címen került be a matematikai köztudatba.[br][br][url=https://en.wikipedia.org/wiki/Lothar_Collatz]Lothar Collatz[/url] (1910-1990) német matematikus fogalmazta meg 1937-ben azt a meglepően egyszerű algoritmust, amelyet az alábbi appletben mutatunk be.
Maga az algoritmus első pillantásra igen egyszerűnek tűnik.[br]Alaphelyzetben az itt is Tikktakk -nak nevezett kétállapotú csúszka animációja még nem működik. Így - lépésenként - könnyebben követhető, hogy mi történik, ha bemenő adat pl. [i]9[/i]. [br]Próbálják ki. Eljutunk az 1-ig, tehát megáll a program. Hány lépés kellett hozzá?[br]Ha már n=1, megjelenik egy "bolondbiztos" beviteli mező. Ebbe írjanak be most 27-et (+Enter)![br][br]Miért "kell" egy beviteli mezőnek - általában minden felhasználói programnak - bolondbiztosnak lennie? Ez a jelző az asztali (iskolai) számítógépek elterjedése idején került be a számítástechnikai szlengbe. Akkor, amikor mindenki programozni tanult, a Collatz algoritmus kiváló gyakorló terepe volt tanárnak, diáknak. Gyakran előfordult, hogy ha a "jobb" diákok meglátták az "Írj be egy 1 -nél nagyobb egész számot! n=? " szöveget, rákönyököltek a klaviatúrára, majd ártatlan ibolyakék szemmel ránéztek a tanárra, hogy "Rossz a program!" Igazuk volt! Próbálják ki, most is így van-e.[br][br]Nos, visszatérve a 27-re, egy idő után a felhasználóban felvetődik az az igény, hogy kapcsoljuk be az animációt. A másik csúszkával tudjuk változtatni a Tikktakk animációjának a sebességét. Lényegében ez volt a célja az applet bemutatásának. De erről később.[br][br]Érdemes kicsit játszani a programmal: írjunk a beviteli mezőbe néhány 1-nél nagyobb egész számot.[br]A kíváncsi ember számára ezek a kérdések vetődhetnek fel:[br][list][*]Egy adott számból kiindulva hány lépésben jutunk el az 1-ig?[/*][*]Eközben a kiindulásul vett szám hányszorosa lesz az a legnagyobb szám, amelyik "megfordul a számítógép fejében"?[/*][*]Találunk-e olyan számot, amelyik igen sok lépés után jutunk el 1-ig? [/*][*][b]Vajon bármely pozitív egész számból kiindulva eljutunk-e 1-ig?[/b][/*][/list][br]Na, ez a legutóbbi kérdés a Collatz sejtés. Még senki nem talált olyan 1-nél nagyobb egész számot, amely nem jutott volna el 1-ig. De egyelőre nem is bizonyította senki, hogy ez minden szóba jöhető számra igaz.[br] Próbálják ki az algoritmust - csak úgy játszásiból - a 837799 -cel. Itt már valóban célszerű felgyorsítanunk a Tikktakk -ot. (Itt jegyezzük meg, hogy [url=https://www.geogebra.org/m/r3avcz63]van[/url] [url=https://www.geogebra.org/m/n8phrj36]több[/url] olyan GeoGebra applet, amely azonnal megadja a választ még ebben az extrém esetben is.)[br][br]Nézzük, hogyan szabályozható az animáció sebessége! Az a [i][b]t [/b][/i]nevű csúszka, ami ezt szabályozza, 0 és 20 közötti számokat állít elő, ennek az 5-szörösét írtuk be [b]Tikktakk\Tulajdonságok\Csúszka\Sebesség[/b] mezőbe. Ide változó is írható. [u]Ez fontos lehetőség.[/u] [br][br]Végül nézzük meg, mi a Tiktakk scriptjébe írt kulcsfontosságú utasítás, amely ezt a számolást végzi.[br]Ez az: [b]n=Ha(Maradék(n,2)≟0,n/2,3n+1)[/b]