A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre. (Véletlen számok, néhány feladat)
Vannak olyan jelenségek, folyamatok, amelyek kimenetelét nem tudjuk (vagy nem akarjuk) előre megjósolni. Ilyen például az, hogy egy szabályos kockát feldobva, az melyik oldalára esik; vagy hogy egy csomag kártyát alaposan megkeverve mi lesz a kártyák sorrendje. A számítógépektől megkívánjuk, hogy ilyen véletlen jelenségek is programozhatók legyenek. A BASIC-nyelvben "véletlen'' számokat a (random = véletlen) függvény meghívásával kaphatunk; a függvényérték és közé esik, és ebben az intervallumban nagyjából egyenletesen oszlik meg. Ez például azt is jelenti, hogy a , az stb. intervallumokba a függvényérték nagyjából egyforma gyakran esik. Igy az kifejezést használhatjuk a kocka feldobása helyett, hiszen értéke , , , , illetve lehet, és mindegyiket nagyjából egyforma gyakorisággal veszi fel. Az alábbi program azt számítja ki, hogy két különböző színű lapot egy dobozból -szer kihúzva, hányszor kapunk más-más színűt. Az első sorban a RANDOMIZE utasításra azért van szükség, mert a gép a véletlen számokat nem "véletlenül'' állítja elő, hanem egy jól meghatározott algoritmussal, így azok értéke futásról futásra nem változna. (Ezért is hívják az ilyen számokat pszeudovéletlen, álvéletlen számoknak, hiszen valójában nem is véletlenek.) A RANDOMIZE utasítás viszont ennek az algoritmusnak a kezdő értékét valamilyen valóban "véletlen'' értékkel állítja be (például az aktuális idő értéke ezredmásodpercekben), s így a függvény futásonként is más-más értéket ad.
Másik programunk egy feladat "játékos megoldására'' mutat példát. A feladat, mely eredetileg az American Mathematical Monthly-ban jelent meg, a következő : Van kilenc különböző méretű palacsintánk. Sütés után egy tányéron, egymás felett helyezkednek el. Az a feladat, hogy a palacsintákat nagyság szerint rendezzük : a legkisebb legyen felül, a következő alatta stb. és a legnagyobb pedig legalul. Ehhez a következőket tehetjük: felülről valahány (akár az összes) palacsintát megfogjuk, majd megfordítva, "fejjel lefelé'' visszatesszük. Például ha a palacsinták eredetileg a következőképpen helyezkedtek el: akkor a felső négy palacsinta megfordítása után a; helyzet : Most már csak a felső öt palacsintát kell megfordítanunk, hogy a kívánt sorrendet megkapjuk
Könnyen belátható, hogy n palacsinta esetén legfeljebb 2n-3 forgatással célhoz érhetünk, de a szükséges forgatások minimális száma még 9 palacsinta esetén sem ismert.
Gyakran előfordul, hogy egy adott program vagy programrészlet matematikai alapjait is meg kell vizsgálni. A most kitűzésre kerülő két feladat is ezt a célt szolgálja. 1. Adott a sík egy P(A;B) pontja. Határozzuk meg az egységnyi sugarú, origó középpontú körre vonatkozó T(X;Y) inverzét. Elemezzük, hogyan hajtja végre ezt a feladatot az alábbi program.
10INPUTA,B20Z=A*A+B*B30IFZ=0THEN7040X=A/Z:Y=B/Z50PRINT,,X='';X,,,Y='';Y60GOTO1070 PRINT ,,IDEÁLIS PONT''80GOTO 10
2. Adott egy n>1, egész szám. Ha n páros, osszuk el kettővel. Ha páratlan, akkor szorozzuk meg 3-mal, és adjunk hozzá 1-et. Ezut folytassuk addig, míg 1-et nem kapunk. Hogyan működik az alábbi program? Hogyan értelmezhetjük a program futásának eredményét? 10 INPUT L, C 90 GOTO 60 20 FOR J=3 TO C STEP 2 100 N=N/2:K=K+1 30 FOR I=2 TO L 110 IF K>10 000 THEN 160 40 N=I 120 IF N >THEN 60 50 K=0 130 PRINT,J, I, K 60 IF N= INT(N/2)*2 THEN 100 140 NEXT J 70 N=J*N+1 : K=K+1 150 NEXT J 80 IF K> 10 000 THEN 160 160 END
|