Google Classroom
GeoGebraGeoGebra Classroom

Tikk-takk

n= n+1

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 n új értéke legyen a régi értékénél 1-el nagyobb. Ebben az = vagy a := un. értékadó utasítás, szemben az egyenletekben szereplő = (reláció) jellel. 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. 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. 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.

Fej vagy írás

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. 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 "Bármely 0<ε -hoz van olyan N ..." kezdetű mondatot. 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. Az alábbi appletben ez a Tikktakk 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.
  • r=random(0,1)
  • k=k+r
  • n=n+1
  • h=h+2 k-1
  • Animál(Tikktakk, -p<k<p)
Itt r a véletlenszerűen előállított 0 vagy 1 szám, k a kedvező esetek száma, n az összes eset (a kísérletek) száma, h és p szerepéről később lesz szó. 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. Maga az animáció a csúszka gombjának a megmozdításával indul, Restart után is. Az animáció - a szokásos módon - a rajzlap jobb alsó sarkában megjelenő ill.jelre kattintva állítható meg ill. folytatható.

Ha már itt tartunk...

... bemutatunk néhány talán kevésbé ismert de hasznosnak tűnő fogást. 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? 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. Ugyanezt így is fogalmazhatjuk: valaki bemegy a kaszinóba fej vagy írást játszani, p zsetonnal a zsebében. 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.) Nos ezt (is) szemlélteti a fenti applet: ezt kezeli a p és h változó. 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. Á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ó Restart gomb scriptjébe írtunk: Nagyítás(1) Ebbe a parancsba 1 helyett más számot írva valóban nagyítani, kicsinyíteni tudjuk a rajzlapot. 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 Ha(rgy<0.5+ε, 1, 0.2) a zöldét a Ha(rgy > 0.5 - ε, 0.6, 0) értékek vezérlik, ahol rgy=k/n a relatív gyakoriság, ε=0.01 , vagyis a kör színe akkor lesz sárga, ha rgy értéke 0.01-nél közelebb kerül a várható 0.5-es értékhez. 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. Pl. itt a K=MásolatCsatolásaNézethez((0,0),1,(0,0),(-10, 10),(100, 160),(0, 0)) utasítással értük el, hogy a kör K középpontja a képernyő bal szélétől 100, a felsőtől 160 pixelnyire legyen. Ez egy elég bonyolult utasítás, de a lényege ebből a példából kiolvasható. 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.

Hideg → langyos → forró → tűz, tűz....

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. Feladat: Rejtsünk el a számegyenes (0,10) intervallumán egy véletlen számot, majd keressük meg. Helyesebben: közelítsük meg olyan pontosan, ahogy csak ezt a Geogebra "motorja" lehetővé teszi. (Ez a motor elég jó: A GeoGebra 10 -13 -ig nagy biztonsággal számol.) A program érdemi része mindössze az alábbi néhány utasítás: a közismert oroszlánfogás - intervallum felezés - módszere. Persze ez kiegészül a Restart gomb és a Tikktakk csúszka scriptjébe írt utasításokkal: Restart:
  • n=1
  • r= 10 Véletlenszám()
  • a= 0
  • b= 10
  • Animál(Tikktakk,true)
Tikktakk:
  • n:=n+1
  • a:=Ha(c
  • b:=Ha(c>r,c,b)
  • Animál(Tikktakk,¬OK)
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 , é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-8 egység. Ugyancsak fontos, hogy a GeoGebra értékes tizedesjegyeinek a számát maximálisra (15-re) állítsuk.

3n+1

Próbálják meg olvasóik ezt a rövid képletet beírni az internet kereső programjába. Meglepően hamar el fognak jutni egy ma is nyitott matematikai problémához, amely Collatz sejtés címen került be a matematikai köztudatba. Lothar Collatz (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. 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. 9. Próbálják ki. Eljutunk az 1-ig, tehát megáll a program. Hány lépés kellett hozzá? Ha már n=1, megjelenik egy "bolondbiztos" beviteli mező. Ebbe írjanak be most 27-et (+Enter)! 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. 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. Érdemes kicsit játszani a programmal: írjunk a beviteli mezőbe néhány 1-nél nagyobb egész számot. A kíváncsi ember számára ezek a kérdések vetődhetnek fel:
  • 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?
  • Vajon bármely pozitív egész számból kiindulva eljutunk-e 1-ig?
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. 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 van több olyan GeoGebra applet, amely azonnal megadja a választ még ebben az extrém esetben is.) Nézzük, hogyan szabályozható az animáció sebessége! Az a t 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 Tikktakk\Tulajdonságok\Csúszka\Sebesség mezőbe. Ide változó is írható. Ez fontos lehetőség. 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. Ez az: n=Ha(Maradék(n,2)≟0,n/2,3n+1)