Utolsó ... előre fuss!
Az imént arra láttunk példát, hogy miként kezelhető a GeoGebrában az olyan "esemény"-sorozat, amelyről nem tudjuk előre, hogy mikor ér véget.
- Röviden: Iteráció Az informatikában iterációnak nevezzük valamely eljárás ismétlődő végrehajtását. Az iteráció esetén a programozónak saját kezűleg kell gondoskodni a leállásról, különben az iteráció végtelen ciklussá válhat. (Ez a Google rövid válasza az "iteráció fogalma" kérdésre.)
Az (alap)feladat:
Melyik az a legkisebb 4-re végződő természetes szám, amelynek az utolsó jegyét elhagyva és a szám elé írva a szám 4 -szeresét kapjuk?
A feladat általános iskolások számára is kitűzhető, bár kell hozzá egy nem szokványos ötlet:
Próbáljuk írásban elvégezni a feladatban kitűzött szorzást!
. . . . 4 * 4 . . . . 6 4 * 4
. . . . 6 . . . 5 6
Az utolsó jegy 4-szerese lesz a szorzat utolsó jegye, amely egyben az eredeti szám utolsó előtti jegye, így folytathatjuk a szorzást mindaddig...
... amíg a szorzat elején meg nem jelenik a 4-es számjegy úgy, hogy nincs a szorzásban átvitelre váró tízes. Így a keresett szám 120564 *4 = 4102056. A feladat kitűzésében azért volt szükség a "legkisebb" kikötésre, mert enélkül az írásbeli szorzás addig folytatható, amíg meg nem unjuk.
Ehelyett próbálkozzunk egy szerény általánosítással.
A (kissé általánosabb) feladat:
Melyik az a legkisebb n-re végződő természetes szám, amelynek az utolsó jegyét elhagyva és a szám elé írva a szám n -szeresét kapjuk, ahol n = 2, 3, ..., 9 ?
Gyanútlanabb olvasóink, akik hozzáfognak az írásbeli szorzáshoz az előző ötletet kihasználva, csakhamar rá fognak jönni, hogy más számjegy nagyobb kitartást igényel, hosszabb lesz a keresett szám, már ha egyáltalán létezik. Ez a probléma már számítógépért - inkább programozási ötletért - kiált. Ezért foglalkozunk vele.
Javasoljuk olvasóinknak, hogy először vegyék szemügyre az alábbi applet - talán meglepő - eredményeit, ezt követően próbálják elemezni, hogy miként kaphatjuk meg ezeket a többnyire igen nagy számokat.
Az algebra ablakot és a táblázatkezelőt vizsgálva látszik, hogy miután a ◀ ▷ gombokkal megadjuk n értékét, majd ezt a számjegyet átírjuk a táblázatkezelő A1 mezőjébe, az A oszlopban rendre megjelennek a keresett szám jegyei, B -ben az aktuális számjegy n-szeresének a tizesei C -ben az egyesei, amelyek egyben a következő sor A oszlopába kerülnek.
Vagy nem. Akkor nem, ha az adott sor B oszlopába 0, a C oszlopába n kerül. Ezt a táblázat D oszlopába írt logikai változó "figyeli".
Így a táblázatkezelő második sorában kialakítottuk a ciklus ismétlődő részét az un. ciklus magot, amit csak "le kell húzni" a szükséges mezőig (úgy, mint az excel programokban).
Azok számára, akiknek ebben nincs kellő gyakorlatuk:
- Jelöljük ki az egérrel a 2. sor A, B, C, D mezőjét, ekkor megjelenik a kijelölt rész jobb alsó sarkában egy jel.
- Ezt megfogva húzzuk le legalább a 60-adik sorig, ezzel minden sorban a négy mező kapcsolata ugyanaz lesz, mint amit a második sorban kialakítottunk.
- Az N=A1:A60 és k=D1:D60: parancsokkal listákba exportáljuk e két oszlop elemeit, eltávolítjuk az adott n esetén üresen maradó elemeket, végül a kiíráshoz megfordítjuk a számjegyek N sorozatát.
Tikk-takk
"A módszer olyan fogás amit kétszer alkalmazunk." / Pólya György/
Az alábbi appletben is bevezetünk egy tiktakk nevű rövid (mindössze kétállapotú) csúszkát, amelynek a - frissítéstől (mozgásától) függő - scriptjében helyezzük el a ciklus magját, amelyet ugyanott előállított logikai változó vezérel. Ebben lényegében négy szám(jegy) változik, ugyanúgy, mint az előző applet táblázatkezelőjében. Az újdonság az, hogy ezek a számokkal az írásbeli szorzás algoritmusát követve jobbról balra haladva számjegyekből álló szövegként előállítjuk a keresett számot, annak az n-szeresét, miközben külön kiírva megjelenítjük az írásbeli szorzásnál kapott "átvitt" számot. n kiválasztása ugyancsak a ◀ ▷ gombokkal oldható meg, az algoritmus a csúszka mozgatásával , vagy az algoritmus sebességének a megválasztásával követhető nyomon. Az ördög -mint mindig - a "Részletek"-ben van. A célunk éppen az alkalmazott technikai fogásoknak a bemutatása.A fenti GeoGebra applet változói és az ezekkel végzett műveletek az algebra ablakban , valamint az n és a tiktakk nevű változók scriptjeiben vannak.
A scriptekben csak azokkal a változókkal végezhetők műveletek, amelyek ugyanazon a néven szerepelnek az algebra ablakban is. (Figyelni kell arra, hogy ha az algebra ablakban új nevet kap egy változó, akkor ehhez "kézzel" lehet csak hozzáigazítani a scriptben szereplő nevet, ott nem változik meg automatikusan.
Az algebra ablaknak csak azokat a változóit soroltuk fel, amelyeket a scriptek is használnak.
Az algebra ablakban megadott A, B , C és D számok kezdő értékeit az n szám scriptjében adtuk meg. Az iterációt, és az iteráció végét jelző logikai értéket a tiktakk scriptje tartalmazza.
Az algoritmus lényege - ugyanúgy mint az első appletben - az, hogy a "kézbe vett" A számjegy n-szerese az az egy- vagy kétjegyű D szám, amelynek a számjegyeit szétválasztjuk: C az egyesek B a tízesek száma. Majd ezekből az írásbeli szorzás szabályait követve ismét előállítjuk a következő D szorzatot.
Figyeljük meg a tiktakk scriptjében a műveletek sorrendjét: előbb felhasználjuk D-t B és C meghatározásához, C érékét átadjuk A-nak, majd A és B értékéből kap új értéket D.
Az algebra ablakban felsorolt változók közül emeljük ki azokat, amelyek lehetővé tették az olykor igen nagy számok megjelenítését.
Itt már nyilvánvalóan nem magukat a számokat, hanem e számokból képzett betűket és szöveget jelenítettük meg. Például a C egyjegyű számot számjegy- azaz betű - formátummá a c=UnicodeBetűvé(C+48) utasítás alakítja át. Ezt "írtuk az elejére" az s és e nevű szövegeknek. Mindeközben a csupán szóközökből álló h változó hosszát úgy alakítottuk, hogy a keresett s szorzandó és e szorzat, valamint a tízes átvitelét jelző m számjegy minden lépésnél a helyére kerüljön.
Hogyan működik a GeoGebra négy Unicode... függvénye? Miért kellett éppen 48-at adnunk a C számhoz, hogy megkapjuk a c számjegyet? Miként kezeli a GeoGebra az egymáshoz csatolt betűket és szavakat? Ezekre a kérdésekre egy erről szóló önálló anyagban próbálunk válaszolni.
Rövidebben....
... és kicsit gyorsabban is.
Akit nem érdekel (eléggé), hogy miként kaptuk a keresett számokat, csak a számolás végeredményére kíváncsi, itt van a rövidített változat, Az appletet letöltve azonban szemügyre vehetjük a leegyszerűsített, és így talán áttekinthetőbb algoritmust.
A főnix számok
Megjegyezzük még, hogy fönix számoknak, vagy ciklikus számoknak szokás nevezni azokat a számokat, amelyeket valamilyen matematikai műveletnek alávetve valamilyen más ciklikus sorrendben kapjuk vissza az eredeti szám számjegyeit.
Itt most nyolc főnix számot állítottunk elő amellett, hogy a GeoGebra eszköztárának finomságaira próbáltunk felhívni olvasóink figyelmét.