Graf funkcie Y=F(X)

     Nasledujuci program je urceny pre ZX Spectrum a kompatibilne pocitace a sluzi na zobrazovanie grafov matematickych funkcii typu Y=F(X). Po spusteni program pozaduje zadat matematicku funkciu, ktoru ma zobrazit a interval X-hodnot, na ktorom sa ma zadana funkcia zobrazit. Nakoniec treba este zadat delenie tohto intervalu - t.j. na kolko dielikov sa ma tento interval pri vypocte rozdelit. Taka optimalna hodnota je napriklad 64. Zadavat viac ako 256 nema vyznam, lebo grafika Spektra aj tak jemnejsie delenie uz nedokaze zobrazit.
     Po zadani vsetkych hodnot sa urci interval v ktorom lezia vsetky Y-hodnoty grafu. Hranice intervalu budu minimalna a maximala Y-hodnota.
     Po urceni hranic sa nakoniec vykresli samotny graf zadanej funkcie. Po vykresleni grafu program caka na stlacenie klavesy. Ked uzivatel stlaci klavesu, program sa spusti odznovu a cely cyklus sa opakuje.

     Teraz si mozno polozite jednu otazku: Toto je rubrika nazvana "Zazraky v basicu", preto by tu mali byt len nejake zvlastne alebo niecim vynimocne programy. Co je na tomto programe vynimocne ? Ved tieto veci vie aj hociaky iny bezny program na zobrazovanie matematickych funkcii ! Musim vam dat plne za pravdu. Tento program nevie o nic viac nez ine bezne matematicke programy. Zazracna na tomto programe je iba jedina vec - cely je napisany v jednom jedinom basicovom riadku ! Nakoniec sa o tom mozete sami presvedcit:

10 POKE 23624,7: POKE 23693,7: POKE 23697,0: INPUT AT 22,NOT PI;AT NOT PI,NOT PI;"Zadaj funkciu: f(x)="; LINE z$'"Interval (od-do)"'"od:"; od'"do:"; do'"Os x bude delena na n dielikov. n=";n: PRINT '"Funkcia f(x)=";z$'"Interval: (";od;",";do;")"'"n=";n: LET krok=(do-od)/n: LET min=1.7e+38: LET max=-min: FOR x=od TO do STEP krok: LET y=VAL z$: PRINT AT 21,NOT PI;"x=";x,: LET max=max*(max>y)+y*(y>=max): LET min=min*(min<y)+y*(y<=min): NEXT x: CLS : LET yy=158: PLOT NOT PI,8: DRAW PEEK PI,NOT PI: DRAW NOT PI,yy: DRAW -PEEK PI,NOT PI: DRAW NOT PI,-yy: PRINT "max=";max;AT 21,NOT PI;"min=";min;#0;AT NOT PI,NOT PI;"od=";od;TAB 29-LEN STR$ do;"do=";do: PLOT NOT PI,88: LET xx=NOT PI: FOR x=od TO do STEP krok: DRAW (x-od)/(do-od)*250-PEEK 23677,(VAL z$-min)/(max-min)*156+9-PEEK 23678: NEXT x: BEEP .1,40: PAUSE PI: PAUSE NOT PI: CLS : GO TO 10: REM Busy soft 1989 Vsimli ste si, ze tento program ma len jeden riadok ???

     To, ze je program napisany iba v jednom riadku vylucuje pouzitie prikazu IF-THEN. Vsimnite si preto, akym sposobom sa urcuje minimalna a maximalna Y-hodnota. Jediny prikaz, ktory riadi smer vykonavania programu (okrem sluciek FOR-NEXT) je prikaz GOTO na konci programu.
     Tento program ma jednu malu chybicku. Ak mu date zobrazit nejaku konstantnu funkciu (kde maximalna a minimalna Y-hodnota sa rovnaju) tak program pri pokuse o vypocet Y-suradnice v prikaze DRAW skonci s chybou delenie nulou. Na prvy pohlad sa zda, ze bez pouzitia IF-THEN to nie je mozne osetrit, ale da sa to. Skuste porozmyslat ako.
     Na zaver jedna mala rada. Keby ste sa rozhodli si tento program opisat do pocitaca, asi by ste narazili na urcity problem. A to ten, ze program ma asi dve a pol obrazovky a napisat taky dlhy riadok naraz je sice principialne mozne, ale reakcie editora na stlacenie klavesy su uz tak pomale, ze to ide riadne na nervy. Navyse by ste videli iba prvu obrazovku a zvysok textu by ste museli pisat "naslepo", pretoze editor na Spektre 48k dokaze zobrazit iba prvu obrazovku z takeho dlheho riadku a este ktomu by po kazdej stlacenej klavese vydaval varovny ton signalizujuci chybu (systemova premenna RASP).
     Majitelia Spektra 128k sa asi teraz potesia, vsak editor v 128k basicu dokaze behat po riadku vsetkymi styrmi smermi a to rychlostou nezavislou od dlzky tohto riadku. Ale aj tych musim sklamat - editor v 128k basicu sice dokaze bez problemov napisat takyto dlhy riadok, ale uz ho nedokaze "zozrat" (po cca 500 znakoch ho proste usekne).
     Preto jediny rozumny sposob ako tento program dostat do pocitaca je napisat ho na viac riadkov a potom v Beta Basicu prikazom JOIN tieto riadky pospajat do jedneho. Tymto sposobom som ho napisal aj ja.