¢Rady program*tor+m v BASICu¢Radek ③t%rba, RASTER¢¢Pod Zdekov`m n*tlakem jsem se rozhodl napsat n%kolik rad program*tor+m v BASICu, kter[ mohou zrychlit jejich program. M%l jsem toti( mo(nost shl[dnout mnoho BASICovsk`ch progr*mk+ a ve v%t&in% z nich se objevovaly n%kter[ programov[ konstrukce, kter[ by se daly zna'n% vylep&it. ¢¢¢Snad v ka(d[m programu se vyskytuje '*st s n%jak`m podm)n%n`m nastavov*n)m prom%nn[. V n%kter`ch p@)padech je to v&ak vy@e&eno zna'n% neefektivn%.¢¢P@.¢Je pot@eba podle stla'en[ kl*vesy nastavit prom%nnou B na 0,1,2,..,9.¢Ve v%t&in% program+ najdete toto:¢¢╱pozn. ⇨)sla @*dk+ nejsou podstatn*$¢GET TL¢IF TL=48 THEN B=0¢IF TL=49 THEN B=1¢IF TL=50 THEN B=2¢...¢IF TL=57 THEN B=9¢¢Pokud se na tuto posloupnost podm)nek pod)v*te, zjist)te, (e:¢a$ Prom%nn* TL se bude v(dy 10-kr*t porovn*vat ╱tak(e to bude trvat dost dlouhou dobu$.¢b$ T%chto 10 podm)nek zabere v pam%ti dost m)sta.¢P@itom pozorn%j&)m pohledem zjist)te, (e v`slednou hodnotu prom%nn[ B je mo(n[ z)skat ode'ten)m konstanty od TL.¢Tak(e nyn) u( v(dy jen takto:¢¢GET TL¢IF TL>=48 AND TL<=57 THEN B=TL-48¢¢Pokud mezi porovn*vanou prom%nnou a v`slednou hodnotou neexistuje takov`to p@)m` vztah, zkuste pou()t metodu s tabulkou ╱polem$ hodnot. Zabere sice n%kdy v)ce pam%ti, ale je bezkonkuren'n% nejrychlej&). ¢¢P@.¢Chcete ud%lat ze sv[ho po')ta'e jednoduch` hudebn) n*stroj. D* se to ud%lat t@eba takto:¢¢10 T=PEEK╱753$ : K=PEEK╱764$¢15 F=0¢20 IF K=47 THEN F=121¢30 IF K=46 THEN F=108¢40 IF K=42 THEN F=96¢50 IF K=40 THEN F=91¢60 IF K=45 THEN F=81¢70 IF K=43 THEN F=72¢80 IF K=11 THEN F=64¢90 IF K=13 THEN F=60¢100 IF K=30 THEN F=114¢110 IF K=26 THEN F=102¢120 IF K=29 THEN F=85¢130 IF K=27 THEN F=76¢140 IF K=51 THEN F=68¢150 SOUND 0,F,10,T✓3¢160 GOTO 10¢¢Te⇦ u( jen RUN a na kl*vesy Q,W,E,R,T,Y,U,I m+(ete hr*t b)l[ kl*vesy a na 2,3,5,6,7 'ern[ kl*vesy.¢Ano, bude to fungovat, ale doba odezvy na stla'en) asi nebude nic moc. A te⇦ si je&t% p@edstavte, (e byste cht%li dal&) okt*vu na kl*ves*ch Z,X,..,M. Pak by u( mno(stv) podm)nek bylo jist% ne]nosn[.¢Nov[ @e&en) spo')v* v tom, (e si zjist)te maxim*ln) rozsah porovn*van[ prom%nn[ a podle n) vyrob)te tabulku. V`sledek pak z)sk*te tak, (e vezmete prvek z tabulky s indexem porovn*van[ prom%nn[. Nejl[pe to pochop)te z n*sleduj)c) uk*zky.¢To stejn[ jin`m zp+sobem:¢¢10 DIM P╱51$¢20 RESTORE 500¢25 FOR X=0 TO 51: P╱X$=0: NEXT X¢30 FOR X=1 TO 13: READ A,B: P╱A$=B: NEXT X¢100 T=PEEK╱753$ : K=PEEK╱764$¢110 F=0: IF K<=51 THEN F=P╱K$¢120 SOUND 0,F,10,T✓3¢130 GOTO 100¢500 DATA 47,121,46,108,42,96,40,91,45,81,43,72,11,64,13,60¢510 DATA 30,114,26,102,29,85,27,76,51,68 ¢¢Vysv%tlivky:¢10: Deklarace pole P o 51 prvc)ch¢20: Inicializace pro 'ten) data-@*dk+¢25: Vynulov*n) cel[ho pole¢30: Napln%n) pole hodnotami podle data-@*dk+. V(dy P╱kd kl*vesy$=frekvence odpov)daj)c) t[to kl*vese.¢100: T = je n%jak* kl*vesa stisknut*, K = kd stisknut[ kl*vesy¢110: P@i@azen) frekvence podle pole P╱K$¢120: Spustit zvuk¢130: A po@*d dokola...¢500: V data-@*dc)ch jsou za sebou dvojice ')sel: kd kl*vesy, odpov)daj)c) frekvence¢¢Spust)te to p@)kazem RUN a funguje to stejn%. Jenom(e mnohem rychleji a kdybyste cht%li p@idat rozpozn*v*n) dal&) @ady kl*ves, sta'ilo by p@idat do data-@*dk+ dal&) dvojice, zv%t&it horn) mez smy'ky na @*dku 30, v p@)pad% nutnosti zv%t&it rozsah pole P a s t)m je spojena nutn* zm%na horn) meze smy'ky na @*dku 25.¢A④ v&ak p@id*te dal&)ch kl*ves kolik budete cht)t, program se nezpomal)!!!¢