Govorite li bejzik?

Ovo poglavlje predstavlja osnovnu školu najčešće korišćenog programskog jezika - bejzika - kojim govore svi kućni računari. Namenjeno je prvenstveno onima kojima je ovo prvi praktični dodir sa programiranjem što, naravno, ne znači da i oni koji poznaju bejzik neće iz nejga moći nešto da nauče. Iako računar nije neophodan za razumevanje bejzika, nije loše imati neki pri ruci. Prateći ovu školu zasigurno ćete naići na neke sekvence i instrukcije koje će u vama probuditi dileme: zašto je nešto rešeno "ovako" kada se moglo lakše rešiti "onako". Najbolji način da rešite sve probleme tog tipa (i uverite se da se "onako" nešto moglo bolje ili lošije uraditi) je da na računaru isprobate sve varijante. Na taj način ćete najpre naučiti programiranje: pokušajte da pišete programe ma koliko pri tome grešili. Računaru vaše greške neće smetati - za njega je izvršavanje tačnog i pogrešnog programa isti posao. U programiranju se, više nego igde drugde, uči na greškama. Na sreću, ovde greške ne izazivaju nikakvu štetu!

Većina stonih računara (osim onih najskupljih) povezuje se sa standardnim televizorom ili monitorom. Na samom računaru uočavate jedino tastaturu koja može biti mehanička (kod skupljih modela) ili senzorska (kod jeftinijih računara). Senzorsku tastaturu ćete prepoznati po tome što se tasteri ne kreću ili se neznatno pomeraju. Sa desne ili zadnje strane računara se, obično, nalazi nekoliko priključaka. Jedan od njih je namenjen napajanju - u njega se priključuje ispravljač koji ste dobili uz računar. Jedan priključak služi za povezivanje računara sa televizorom uz pomoć posebnog kabla, koji je takođe deo opreme koju ste dobili uz računar.

Uključiti, ali kako?

Neki računari će početi da rade čim ih povežete sa napajanjem (preko ispravljača), dok drugi imaju poseban prekidač za uključivanje. Iako ste računar povezali sa televizorom i uključili mu napajanje, an ekranu ćete, verovatno, videti samo "sneg". Da biste dobili uobičajeno READY (znak da je računar spreman da prima vaše naredbe), potrebno je da izaberete odgovarajući TV kanal. Za ovo će verovatno biti potrebna konsultacija sa vašim uputstvom za upotrebu računara; TV kanal se nalazi negde na UHF području (kod Sinclairovih modela kanal 36), ali varira od računara do računara. Kada se na ekranu pojavi READY (kod Spectruma zaštitni znak u donjem delu ekrana), možete da prebirate po tastaturi.

Pored priključaka za povezivanje sa mrežom i televizorom, na računaru se nalaze dva ili tri priključka za povezivanje sa kasetofonom. Uz računar ste dobili i odgovarajući kabl. To je obično pedesetak centimetara dugačak kabl sa po dva utikača na svakom kraju. Jedan od njih se uključuje u utičnicu kasetofona ispod koje piše MIC, a drugi u utičnicu ispod koje piše EAR (ove oznake mogu da budu različite od kasetofona do kasetofona; prva označava mikrofon, a druga spoljni zvučnik ili slušalicu). Drugi par utikača se povezuje sa odgovarajućim utičnicama na računaru, pri čemu treba paziti da se ne pogreši - ukoliko je jedan od crvenih utikača povezan sa utičnicom kasetofona ispod koje piše MIC, drugi crveni džek treba da bude povezan sa utičnicom na računaru ispod koje se nalazi isti napis. Bolji računari imaju i treći par utikača koje ćete poznati po tome što su nešto uži od preostala dva para. Ovi džekovi se priključuju u utičnice ispod kojih piše "REMOTE" i omogućavaju računaru da kontroliše uključivanje i isključivanje kasetofona.

Demonstraciona kaseta

Uz računar ste, eventualno, dobili kasetu sa demonstracionim programima. Iako sam još ne umete da pišete programe, možete se zabavljati sa programima koje su drugi sastavili i tako upoznati neke mogućnosti vašeg računara. Da unesete takav program u računar, premotajte demonstracionu kasetu na početak, otkucajte CLOAD (LOAD bi moglo da se prevede sa "unesi", a C označava da se unosi sa kasete; kod nekih računara ova naredba može da bude i drukčija, na primer LOAD kod Sinklerovih modela) i pritisnite taster na kome piše ENTER (ili NEWLINE ili RETURN; ovaj taster ćete prepoznati s obzirom na to da se, kod svih računara, razlikuje od svih ostalih po veličini ili dizajnu; više o ovom tasteru ćemo govoriti kasnije). Zatim pritisnite taster PLAY na kasetofonu. Zavisno od računara, u toku unošenja programa dešavaće se različite stvari. Svaki računar, nekim promenama na ekranu signalizira da se program unosi; ukoliko je sve na ekranu mirno, verovatno niste podesili dovoljnu jačinu zvuka na kasetofonu - pokušajte da je povećate. Isključite i ponovo uključite računar, premotajte traku na početak i ponovite čitav postupak. Posle nekoliko pokušaja (a broj pokušaja je obižno obrnuto srazmeran ceni računara i kasetofona), računar će ispravno uneti program i na ekranu ispisati READY. Zaustavite kasetofon i otkucajte RUN, pa ponovo pritisnite ENTER. Od tog momenta računar će početi da izvršava program i mi ne možemo da kažemo šta će se desiti - verovatno će na ekranu biti ispisana neka uputstva za upotrebu programa i korisniku će biti naloženo da pritiska neke tastere za dalja uputstva ili za početak rada.

Prvo snimanje...

Prateći našu školu, napisaćete i neke programe i poželeti da ih snimite na kasetu da biste kasnije ponovo radili sa njima (ili, kako programeri kažu, na njima - poslednja fraza podrazumeva rad na daljem poboljšanju programa). Da biste snimili program na traku, uzmite praznu kasetu, stavite je u kasetofon i pritisnite tastere za snimanje na njemu. Zatim otkucajte SAVE, pritisnite taster na kome su nacrtani znaci navoda (na ekranu će pisati SAVE"), a zatim otkucajte ime programa. Neki računari dopuštaji imena programa od samo jednog slova, dok se kod drugih, kao imena, mogu koristiti čitave rečenice. To nije mnogo važno - najbolje je programima davati kratka imena koja se lako pamte. Pošto ste otkucali ime programa, pritisnite ponovo taster sa znacima navoda, a zatim ENTER.

Ponovo će sadržaj ekrana početi dinamično da se menja, a snimanje vaših programa (ako ste još početnik) će biti vrlo kratko, baš kao i sami programi. Ukoliko se radi o značajnom programu, možete da ga snimite dva puta kako biste bili sigurni da neće nastupiti problemi sa njegovim učitavanjem.

...i kucanje programa

Ako ste pretplaćeni na neki kompjuterski časopis, u njemu ćete često nalaziti interesantne programe. Kada poželite da otkucate neki od njih, pre svega proverite da li je taj program pisan za vaš računar i da li je za njegovu upotrebu potrebna neka periferijska oprema koju vi nemate. Ako program nije pisan za vaš računar, najbolje da, bar za prvo vreme, odustanete od njegovog unošenja. Prepravka programa nekada može da bude zametniji posao od pisanja novog programa, jer se treba uklopiti u logiku drugog programera. Nešto više o ovoj temi govorićemo u poglavlju koje je namenjeno iskusnijim programerima.

Kada pronađete program za vaš računar koji želite da otkucate, moraćete malo da razmislite o načinu na koji se vašem računaru saopštavaju naredbe. Program treba uvek unositi bez ikakvih promena - ukoliko vam nešto nije jasno, ne razmišljajte mnogo o tome. program objavljen u časopisu je svakako više puta testiran i u njemu nema grešaka (osim, možda, štamparskih, koje će svakako biti ispravljene u sledećem broju). Svaka linija ima svoj broj koji treba otkucati. Pošto ste otkucali linijski broj, unosite sadržaj same linije. Kod nekih računara morate da kucate sva slova naredbi (na primer, naredbu PRINT kcuate slovo po slovo), dok drugi imaju tzv. "dodeljene naredbe" - da biste otkucali PRITN dovoljno je da pritisnete taster P u pravom trenutku. Najbolji su oni računari koji omogućavaju da se naredbe kucaju slovo po slovo ili, po želji korisnika, da se koriste tasteri kojima su dodeljene neke funkcije.

Na nekim tasterima je napisano više simbola, a izbor pravog se postiže pomoću posebnog tastera na kome piše SHIFT. Neki računari imaju nekoliko SHIFT tastera koji su označeni raznim bojama, dok svaki drugi taster ima i potri-četiri funkcije koje zavise od toga koji je od SHIFT tastera bio pritisnut. Kucanje programa na ovakvim računarima je u početku vrlo naporno jer je potrebno mnogo traženja po tstaturi, ali se korisnik, kasnije, navikne na njihov raspored.

Iako se može kupiti mnogo knjiga sa govotovim programima i još mnogo više programa na kasetama, pre ili kasnije svaki korisnik računara poželi da napiše neki "svoj" program. To je rkeativan posao koji zahteva određeni nivo poznavanja osobina ražunara i programskog jezika na kom se program piše (u našem slučaju programski jezik je bejzik). Iako je za pisanje programa potrebno utrošiti određeno vreme, sam posao je zabavan i dinamičan i često predstavlja bolju zabavu od igranja sa svim kupljenim kompjuterskim igrama. Sledeće stranice su namenjene onima koji žele da napišu svoj prvi program.

Prve reči

Kao što znamo, čitav "razgovor" sa računarom se obavlja preko tastature. Na njoj korisnik, slovo po slovo, kuca naredbe koje su, jednostavno, kratke rečenice na engleskom koje govore kompjuteru šta treba da uradi. Kao što se u običnom govoru na kraju svake rečenice stavlja tačka, tako se u bejziku, na kraju naredbe, pritiska poseban taster koji je (kao što smo rekli) označen sa ENTER, NEWLINE, RETURN, EXECUTE ili nekim drugim napisom (mi ćemo, u daljem tekstu, koristiti oznaku ENTER pošto se javlja kod najvećeg broja računara). Pritisak na ENTER (=ubaci, izvrši instrukciju) govori računaru da je korisnik otkucao ono što je imao da kaže i da je sada na kompjuteru da analizira i izvrši naredbu.

Čak ni u svakodnevnom životu svaki niz slova (pa čak ni svaki niz reči) nije rečenica. Da bi govorna rečenica bila jasna, moraju da se poštuju određena pravopisna pravila. Isto važi i za programske jezike, samo su ovde pravopisna pravila mnogo strožija. Svaka rečenica mora da bude sintaksno potpuno ispravna da bi je računar razumeo. Jedno pogrešno slovo i na ekranu će biti ispisano SYNTAX ERROR (sintaksna greška), ili samo znak pitanja, pa će korisnik morati ponovo da otkuca naredbu, ali ovoga puta na ispravan način. Za početnika je, kao što smo rekli, bitno da shvati da ove pogreške ne oštećuju računar; zato slobodno probajte naredbe bez obzira na česte greške.

Pored READY, na ekranu se na početku rada pojavljuje simbol nazvan "kurzor". Kurzor označava mesto na kom će se pojaviti sledeći karakter koji pritisnemo. Pritisnimo, na primer, slovo P. Na ekranu je prikazano to slovo, a kurzor se pomerio za jedno mesto u desno od slova P. Nastavimo da pritiskamo tastere RINT i na ekranu će se naći prva BASIC reč koju smo "izgovorili" - PRINT. Sada pritisnimo ENTER i primetimo da se na ekranu ponovo pojavilo READY, ali pomereno dole za jedan red. Šta se dogodilo? Računar je shvatio da smo zahtevali da on nešto "štampa" na ekranu (PRINT=štampaj, ali ovde znači i "prikaži") ali, pošto nismo napisali šta treba da se štampa, prikazao nam je prazan red i dao do znanja da možemo da nastavimo.

Pokušaćemo ponovo. Otkucajmo PRINT ali, posle toga, otvorimo znake navoda. Znaci navoda označavaju tekst koji računar treba doslovno da prenese na ekran. Zatim pritisnimo slovo P, pa jedan razmak, pa slovo U, pa još jedan razmak i na kraju slovo Z. S obzirom na to da je tekst završen, pritisnemo ponovo znak navoda i ENTER. Računar nas je poslušao: na ekranu je ispisao P U Z. U prvi mah će vam izgledati teško da razumete reči u kojima su slova č, ć, š i ž (kojih nema u engleskom alfabetu) zamenjena sa c, s i z, ali ćete se ubrzo i na to navići.

Pošto je sve ovako dobro prošlo, mogli bismo i da nastavimo. Otkucajmo ponovo PRINT i otvorimo znake navoda, a zatim otkucajmo XYZ, pa zatvorimo znake navoda i pritisnimo ENTER. Računar izvršava još jedan naš nalog i ispisuje XYZ. Apetit počinje da nam raste - zašto računar ne bi uradio i nešto korisno? Otkucajmo PRINT "1+2-3=" pa opet pritisnimo ENTER. Na ekranu piše 1+2-3=. Ovo je prvo malo razočaranje koje nam je računar priredio: mi smo očekivali da izračuna koliko je 1+2-3, a on je samo ponovio problem. Zašto? Rekli smo da naredba PRINT računaru nalaže da ono što se nalazi između znakova navoda doslovno prenese na ekran. 1+2-3= ne predstavlja aritmetički izraz - to su samo alfanumerici (bojevi) kao što su bili i dosadašnji P U Z i XYZ. U znak protesta kucamo PRINT "RAZOCARAN" i pritiskamo ENTER. Na ekranu piše samo RAZOCARAN - izgleda da naša osećanja računaru ne znače baš mnogo.

Ako na opisani način nastavite da izdajete računaru naredbe, ubrzo će čitav ekran biti popunjen tekstom. Neki računari će tada početi da ubacuju nove redove, dok će prvi redovi nestajati sa ekrana dok će drugi prijavljivati grešku. U svakom služaju, možete da obrišete čitav sadržaj ekrana tako što ćete otkucati CLS i pritisnuti ENTER.

Sve naredbe koje smo do sada upotrebljavali izvršavale su se onoga momenta kada pritisnemo ENTER. Kompjuter poznaje još jednu vrstu naredbi - program. Programske instrukcije se prepoznaju po tome što bavezno počinju tzv. linijskim brojem. Linijski broj se nalazi ispred instrukcije i saopštava računaru da instrukciju koja sledi zapamti i izvrši je tek kada mu to na poseban način bude naređeno. Kompjuter, jasno, može da zapamti veliki broj instrukcija koje se ređaju po svojim linijskim brojevima (najpre će u memoriji računara da bude smeštena instrukcija sa linijskim brojem 10, a zatim instrukcija sa brojem 20, bez obzira što su one možda otkucane obrnutim redom). Pokušajmo da napišemo program. Otkucajmo 10 PRINT "/ / / / / /" i, kao i obično, pritisnimo ENTER. Ništa se posebno nije dogodilo - instrukcija nije izvršena već je smeštena negde u memoriji računara. Sada možemo, instrukciju po instrukciju, da otkucamo čitav program koji će na ekranu iscrtati stilizovano lice robota:

10 PRINT "//////"
20 PRINT "------"
30 PRINT "|(..)|"
40 PRINT "| -L |"
50 PRINT "VVVVVV"
60 END

Da bismo izvršili program, otkucajmo RUN (=izvrši) i pritisnimo ENTER. S obzirom na to da naredba RUN nije imala linijski broj, računar će je odmah "poslušati", a to će dovesti do izvršavanja našeg programa. Trenutak kasnije sa ekrana će nam se smešiti stilizovani lik robota.

Može da vam se desi da pri kucanju programa negde pogrešite. Ukoliko primetite grešku pre nego što ste pritisnuli ENTER i tako smestili naredbu u memoriju računara, možete da se poslužite tasterom koji je označen sa RUBOUT DELETE, ili, jednostavno, strelicom ulevo. Pritisak na ovaj taster briše poslednje otkucano slovo. Uzastopnim pritiscima na njega možete da obrišete proizvoljan broj slova i ispravite greške. Ukoliko ste pritisnuli ENTER i tek onda primetili da postoji greška u naredbi, moraćete da se poslužite drugom metodom: otkucajte ponovo istu naredbu sa istim linijskim brojem, ali ovoga puta bez greške. Pritisnite ENTER. Kako u memoriji računara ne mogu da se nalaze dve naredbe sa istim linijskim brojem, prva (pogrešna) naredba biće obrisana i zamenjena onom koju ste upravo otkucali.

Skladištenje podataka

U rečnicima obično piše da je računar "elektronski uređaj za obradu podataka". Da bi kompjuter celishodno obrađivao informacije, one moraju da mu budu saopštene na način koji će omogućiti njihovo jednostavno i brzo pronalaženje i menjanje. Da bi računar mogao da pronađe traženu informaciju, ona mora, pre svega, da ima ime. Zamislimo, na primer, veliku poštu koja treba da, u što kraćem roku, otpremi pisma u razne gradove. Najjednostavniji način da se to uradi je formiranje pregradaka. U svaki pregradak se smeštaju pošiljke upućene u neki grad (na primer, u prvi pregradak se smeštaju pisma za Beograd, u drugi za Novi Sad i slično). Dežurni službenik uzima jedno po jedno pismo, čita sa omotnice mesto u koje je ono upućeno i smešta je u odgovarajući pregradak. Po završetku ovakvog razvrstavanja, pisma iz svakog pregratka se upućuju na odgovarajuća mesta, gde se sortiraju prema opštinama i, kasnije, ulicama.

Slična je situacija i sa memorijom računara. Svakom broju ili reči koju treba zapamtiti treba da se da neko ime. "Imena" za brojeve su A, B, C,..., Y, Z (ako ovo nije dovoljno mogu da se koriste i imena AI, D8, ZO i slično), a za reči - A$, B$,..., Y$, Z$. U memoriji računara mogu istovremeno i ravnopravno da se nalaze i brojevi i reči; ako postoji broj obeležen slovom A, nema nikakve smetnje da postoji i reč nazvana A$.

Pošto reč "ime" ima mnogo sekundarnih značenja i nije pogodna za primenu, programeri su usvojili da se A, B, Z, A$ nazivaju promenljive. Termin je usvojen zbog toga što se sadržaji "pregradaka" neprekidno menjaju tokom razvrstavanja (ili, u konkretnom slučaju, zato što se sadržaji promenljivih menjaju u toku izvršavanja programa). Promenljive koje imenuju brojeve (A, S, Z1) se nazivaju numeričke, a promenljive koje imenuju reči (A$, B$,...) - alfanumeričke promenljive.

Na početku svakog programa treba, na odgovarajući način, smestiti neophodne podatke. Za to nam služi naredba LET (u bukvalnom prevodu LET znači "neka"). Naredba LET A=6 ima sledeće dejstvo: računar najpre oformljuje "pregradak u memoriji" koji se zove A i u njega smešta broj 6. Slično dejstvo ima i preostalih nekoliko naredbi. Po izvršavanju ovog kratkog programa, raspored podataka u memoriji će biti kao na slici.

Situacija postaje složenija kada na odgovarajuće mesto treba da se stavi neki tekst. Tekst se, kao i do sada, označava navodnicima na njegovom početku i kraju, a promenljiva kojom je označen tekst mora na kraju svog imena da ima simbol za dolar. Ukoliko želite da izgovorite A$ (na primer dok telefonom diktirate prijatelju neki program), recite "a dolar" ili "a string". Druga verzija nije baš u duhu našeg jezika, ali je opšte prihvaćena među programerima.

Često će nam biti potrebno da naložimo računaru da na ekranu prikaže sadržaj neke promenljive. Za to, kao i do sada, koristimo naredbu PRINT ali, umesto da u njoj navodimo tekst koji treba prikazati, navešćemo ime promenljive koja sadrži taj tekst. Ovaj kratki program ilustruje kako se to radi. Najpre je promenljivoj B dodeljen sadržaj 365. Obratite pažnju da smo napisali LET B=365, a ne LET B="365". Da smo uradili ovo drugo, računar bi prijavio grešku jer je B numerička promenljiva, a za računar bi broj 365 bio tekst pošto se nalazi pod navodnicima.

10 LET B=365
20 LET D$="DANA U GODINI"
30 LET L$="AKO NIJE PRESTUPNA"
40 PRINT B
50 PRINT C$
60 PRINT L$

Kada smo otkucali ovaj program (ne smemo da zaboravimo da pritisnemo ENTER posle svake naredbe), poželećemo da ga izvršimo. Za to će nam poslužiti već dobro poznata naredba RUN. Otkucaćemo, dakle, RUN i pritisnimo ENTER. Trenutak kasnije na ekranu će biti prikazan željeni tekst. Možemo ponovo da otkucamo RUN i pritisnemo ENTER i računar će da ponovi čitav postupak. Na ovom primeru se vidi zašto su programi korisni: jednom smo se namučili da sastavimo program (u našem slučaju to nije bilo baš mnogo teško), a zatim možemo da ga izvršavamo mnogo, mnogo puta. Naravno, korist od ovog programa nije prevelika, ali ne smemo da zaboravimo da pravimo tek prve korake u bejziku:

RUN
365
DANA U GODINI
AKO NIJE PRESTUPNA

Nekim računarima naredba LET nije potrebna, pa je LET L=O, potpuno ekvivalentno sa L=O, dok je operativni sistem drugih tako napravljen da je ova naredba neophodna. Kao i uvek, ima računara koji se nalaze "negde na sredini": naredba LET im je potrebna samo u nekim slučajevima. No, svi računari koji rade na bejziku imaju jednu zajedničku karakteristiku - naredba LET im nikada ne smeta. Zato je za početnike dobro da je uvek koriste i tako izbegnu sve potencijalne probleme.

Neki računari dopuštaju da imena promenljivih budu čitave reči (npr. BRZINA, CENA, DATUM i slično). No, i kod tih kompjutera ne smeju da se korite baš sve reči: PRINT, RUN, LET i druge BASIC naredbe ne smeju da budu imena promenljivih da ne bi došlo do zabune. Zato korisnici računara koji imaju ovu mogućnot treba da budu posebno pažljivi: da dobro upoznaju sve bejzik naredbe ili da, za imena promenljivih, koriste srpskohrvatske reči. Ako ne žele da se izlažu nikakvom riziku, mogu da koriste imena promenljivih od jednog slova - i takvih, bar za početak, ima dovoljno.

Naredba INPUT

Svi programi koje smo do sada sastavili izvršavali su se uvek na isti način, pa od njih nije bilo velike koristi. Sledeća naredba koju ćemo upoznati omogućava da, pri svakom izvršavanju programa, damo računaru različite podatke koje će on dalje obrađivati. Ta naredba je INPUT (INPUT=unesi).

Naredba INPUT mora da bude praćena imenom neke promenljive da bi računar znao kako da nazove broj (reč) koji će korisnik otkucati. Naredba INPUT A (INPUT A$), na primer, izaziva privremeni prekid izvršavanja programa i pojavu upitnika na ekranu. Ovaj upitnik upozorava korisnika da otkuca neki broj (reč) i da, kao i običn, pritisne ENTER. Računar nastavlja sa radom i od tog momenta se broj (reč) koju je korisnik otkucao, u računarevoj memoriji, naziva A (A$).

U programu može da se nađe više naredbi INPUT - prema potrebama programera. Isto tako, računar može više puta da izvršava naredbu INPUT A pri čemu će stari sadržaj "faha" nazvanog A biti zaboravljen pri svakom izvršavanju ove naredbe. U daljem tekstu ćemo dati nekoliko primera. Ukoliko se odlučite da otkucate i izvršite neke od datih programa, nema nikakve potrebe da uvek iskreno odgovarate na pitanja koja vam računar postavlja. Ako svaki put kada vas računar pita za ime odgovarate na isti način, naredba INPUT gubi svaki smisao (smisao naredbe INPUT je da se pri svakom izvršavanju programa računaru daju drugi podaci, a svako ima samo jedno ime). Zato dajte mašti na volju i kucajte sva moguća imena, šale i drugo. Računaru je to svejedno a on, ako za to nije programiran (a sastavljanje takvih programa je i dalje van dometa našeg znanja), neće primetiti da ga "lažemo" i da se "šalimo na njegov račun". Programiranje se najlakše uči kroz igru. Ukoliko imate bilo kakve dileme o tome kako se koristi naredba INPUT, ili ako su u vašem uputstvu za upotrebu računara spomenute još neke njene osobine, pokušajte sve verzije i odaberite onu koja vam je za praktičnu primenu najpogodnija.

10 INPUT G
20 INPUT B$
30 PRINT G
40 PRINT B$
50 END

Kratak program koji je dat na slici objašnjava kako računar reaguje na naredbu INPUT. Prvi upitnik se pojavljuje na ekranu kada računar naiđe na naredbu 10 INPUT G. Korisnik zatim kuca neki broj koji se, od tog momenta, u memoriji računara obeležava sa G. Zatim se na ekranu pojavljuje novi upitnik koji je izazvan naredbom 20 INPUT B$. Ovoga puta korisnik treba da otkuca neku reč s obzirom na to da je B$ ime za reč. Važno je da primetimo da, kada treba da otkucamo reč, možemo da otkucamo i broj (rekli smo da se reči sastoje od slova i brojeva), ali da ne smemo da otkucamo reč kada računar očekuje broj. Ukoliko pokušamo, računar će prijaviti neku grešku (najčešće TYPE MISMACH=pogrešan tip promenljive).

10 PRINT "KAKO SE ZOVES?"
20 INPUT N$
30 PRINT "KOLIKO IMAS GODINA?"
40 INPUT A
50 PRINT N$
60 PRINT "IMA"
70 PRINT A
80 PRINT "GODINA"
90 END

Pošto ste otkucali program dat na ovoj slici, otkucajte RUN i pritisnite ENTER. Zatim najpre otkucajte vaše ime i starost ili neko šaljivo ime i nemoguću starost kao u našem primeru. Izvršite program još nekoliko puta (svaki put morate da otkucate RUN i pritisnete ENTER) i svaki put unosite druge brojeve i reči. Pokušajte i da, ne kucajući odgovor, pritisnete ENTER. Razni računari različito reaguju na ovu "provokaciju"!

Aritmetički izrazi

Cilj aritmetičkih izraza je, kao što im i ime govori, da navedu kompjuter da nešto izračuna. Aritmetički izraz se sastoji od nekoliko promenljivih i konstanti koje su odvojene znakovima aritmetičkih operacija, zagradama i (eventualno) nazivima specijalnih funkcija. Aritmetički izraz, sam za sebe, nema nikakvog smisla jer računaru treba reći šta da uradi sa brojem koji je dobio izračunavanjem tog izraza. Taj broj se najčešće prikazuje ili "pamti", koristeći neku novu promenljivu.

Aritmetički izrazi se najčešće pišu na u matematici uobičajen način uz dve razlike: umesto znaka za množenje koristi se zvezdica (*), a umesto znaka za deljenje kosa crta (/). Da vidimo kako se to radi u praksi.

Ukoliko nam je potrebno da izračunamo vrednost nekog izraza, nema potrebe da pišemo program. Dovoljno je da otkucamo PRINT (ne stavljajući linijski broj ispred ove naredbe) i da navedemo čitav brojni izraz. Na kraju, kao i obično, pritiskamo ENTER i računar prikazuje vrednost izračunatog izraza. U okviru izraza mogu da se koriste i specijalne funkcije (kvadratni koren, logaritam, eksponencijalna funkcija, trigonometrijske funkcije i slično), koje su nabrojane u vašem uputstvu za upotrebu računara. Početnici najčešće koriste kvadratni koren koji se u BASIC-u obeležava sa SQR. Broj čiji se koren traži mora da se nađe iza SQR i to u zagradi. U zagradi može da se nađe i čitav aritmetički izraz - računar će najpre izračunati vrednost tog izraza, a zatim naći kvadratni koren te vrednosti.

Za početnike mnogo veći problem predstavlja korišćenje naredbe LET za dodeljivanje vrednosti nekog aritmetičkog izraza nekoj promenljivoj. Ako, na primer, napišemo LET A=B-2, računar će najpre izračunati koliko je B-2 (što zavisi od vrednosti koja je ranije dodeljena promenljivoj B), a zatim će dobijeni broj zapamtiti i, u daljem radu, zvati ga A. Ukoliko je, na primer, B bilo 10 (što znači da je u ranijem toku programa računar izvršio naredbu LET B=10), A će dobiti vrednost 8 (10-2=8). To je prilično jasno, ali šta sa naredbom koja kod laika predstavlja "užas" i pokazuje "koliko je programiranje neegzaktno": LET X=X+1? Besmisleno je, jasno, reći da je X jednako X+1 s obzirom na to da to nije ispunjeno ni za jednu vrednost X. No ovu, naredbu treba shvatiti drukčije: računar najpre iz "faha" u memoriji koji se zove X uzima vrednost broja koji je tu "zapamćen", toj vrednosti dodaje jedan i pamti rezultat u istom "fahu" gde se broj nalazio i pre. Verovatno se sećate da smo rekli da promenljive menjaju vrednosti u toku izvršavanja programa. Ukoliko je X imalo vrednost 10, ono, primenom naredbe LET X=X+1 dobija vrednost 11. Dakle, znak jednakosti u aritmetičkim izrazima ne treba tumačiti kao tvrdnju da su neka dva broja jednaka, nego kao naredbu da se nekoj promenljivoj dodeli neka vrednost. Na to nas stalno podseća naredba LET, iako ona, kod nekih računara, nije obavezna.

Još nešto o naredbi PRINT

Do sada smo naučili kako da koristimo PRINT da prikažemo brojeve, reči i sadržaje nekih promenljivih. Svako ko je, čitajući dosadašnji tekst, pokušao da napravi neki samostalan program zažalio je što nema mogućnosti da na ekranu prikaže više promenljivih i tekstova u istom redu i tako programu da više dinamičnosti. BASIC to omogućava - za to nam služi znak ; koji uklapamo u naredbu PRINT.

Znak ; se stavlja između imena dve promenljive ili između imena promenljive i teksta koji treba da se prikažu u istom redu. U svakom redu može da stane (zavisno od računara) 30-80 znakova, što znači da morate da komponujete tekst tako da ceo stane u jedan red, ili da bude podeljen u dva reda na logičan način. Na slici je dat primer naredbi koje prikazuju neku vrstu jelovnika. Da bi one mogle da se izvrše, potrebno je promenljivim dodeliti vrednosti (to radimo pomoću naredbe LET) date u levom uglu slike.

Svemirska potera

Posle ovoliko učenja, red je da primenimo stečeno znanje i napišemo prvi ozbiljniji bejzik program. To će biti igra za dva igrača koju smo nazvali "Svemirska potera".

Pre početka igre svaki od igrača crta tabelu 20x20 na listu papira sa kvadratićima. Jedan od igrača predstavlja stranog uljeza, a drugi komandanta vasionskog broda koji treba da ga zarobi. Svaki igrač, pre početka igre, smešta svoj svemirski brod na neko od polja table i to prvi igrač na njenoj levoj polovini, a drugi igrač na desnoj. Ni jedan od igrača, jasno, ne zna koordinate polja njegovog protivnika. Zatim igrači redom daju koordinate svoga broda računaru, a on ispisuje koliko su brodovi udaljeni (jedinica za merenje udaljenosti je jedan kvadratić). Zatim prvi igrač pomera svoj brod na neko od devet susednih polja i kuca njegove koordinate. Isto radi i drugi igrač, a zatim kompjuter prikazuje novu udaljenost brodova. Igra se nastavlja sve dok se brodovi ne nađu na manje od 1,5 kvadratića udaljeni jedan od drugog. U tom slučaju igra se prekida i smatra se da je drugi igrač pobedio. Ukoliko igra potraje, na primer, 60 poteza, a drugi igrač ne pobedi, smatra se da je prvi pobedio.

Pri analiziranju ovog programa obratite posebnu pažnju na naredbe čiji su linijski brojevi 50 i 100 - ove dve naredbe brišu ekran računara kako sledeći igrač ne bi pročitao gde je prethodni postavio svoj vasionski brod. Naredba 110 je "srce" čitavog programa - ona izračunava udaljenost brodova. Pri tome je korišćena dobro poznata formula za nalaženje rastojanja dve tačke u Dekartovom koordinatnom sistemu (d=sqr(x1-x2)2+(y1-y2)2).

10 PRINT "X KOORDINATA ULJEZA?"
20 INPUT A
30 PRINT "Y KOORDINATA ULJEZA?"
40 INPUT B
50 CLS
60 PRINT "X KOORDINATA BRANIOCA?"
70 INPUT C
80 PRINT "Y KOORDINATA BRANIOCA?"
90 INPUT D
100 CLS
110 LET X=SQR((A-C)*(A-C)+(B-D)*(B-D))
120 PRINT "TRENUTNO RASTOJANJE JE"
130 PRINT X; " ZVEZDANIH JEDICICA"
140 PRINT "PRIPREMITE SE ZA DAVANJE NOVIH POZICIJA"
150 GOTO 10

Poređenje brojeva

Igrajući "Svemirsku poteru" zapitali ste se više puta zbog čega igrači moraju da broje poteze i razmišljaju da li je rastojanje brodova manje od 1,5 kvadratića. Zašto ne bi računar o tome vodio računa i, kada za to dođe vreme, sam proglasio pobednika? Da bi to postalo moguće, moramo da upoznamo još dve vrste naredbi: naredbe za poređenje brojeva i naredbe za ostvarivanje ciklusa.

Svi programi koje smo do sada napisali izvršavali su se onim redom kojim su naredbe otkucane (uvek se prvo izvršavala naredba 10, zatim naredba 20 i slično). U nekim slučajevima korisno je promeniti tok izvršavanja programa i preskočiti neke naredbe, a neke druge izvršiti i po nekoliko puta, zavisno od ispunjenja nekih uslova. Za ispitivanje ispunjenja nekih uslova služe nam anredbe IF i THEN (IF znači ako a THEN onda).

10 PRINT "KAKVO JE VREME?"
20 INPUT W$
30 IF W$="KISA" THEN PRINT "PONESI KISOBRAN!"
40 IF W$="SUNCANO" THEN PRINT "DIVNO!"
50 END

Na slici je prikazan najjednostavniji primer upotrebe naredbe IF. Na početku programa računar pita kakvo je vreme i odgovor koji je korisnik otkucao "pamti" pod imenom W$. Zatim nailazi na naredbu 30 u kojoj se ispisuje da li je reč koju je korisnik otkucao (i koja je zapamćena kao W$) KISA. Ukoliko je odgovor na ovo pitanje potvrdan, računar će izvršiti naredbu koja se nalazi iza THEN (u našem slučaju računar na ekranu prikazuje PONESI KISOBRAN). Ukoliko je odgovor na pitanje "da li je reč koju je korisnik otkucao KISA" odrečan, računar preskače ono što je napisano iz THEN naredbe i izvršava sledeću naredbu. To je još jedna IF naredba pomoću koje računar ispituje da li je korisnik, možda, otkucao reč SUNCANO. Ukoliko jeste, na ekranu se prikazuje računarev komentar i program završava sa radom. Ukoliko reč koju je korisnik otkucao nije ni KISA ni SUNCANO računar ne izvršava nijednu od naredbi koja se nalazi iza THEN i jednostavno prestaje sa radom, ne prikazavši ništa.

U prethodnom primeru je korišćena naredba IF kojom smo poredili da li su neke dve reči jednake. Naredba IF može da se koristi i za mnogo što-šta drugo, u zavisnosti od znaka koji se nalazi između brojeva (reči) koje se porede. Ti znaci mogu da budu:

= Jednakost
<> različito; naredba iza THEN se izvršava samo ako su brojevi (reči) različiti;
> veće; naredba iza THEN se izvršava samo ako je prvi broj veći od drugog; neki računari omogućavaju da se na ovakav način porede i reči i tada je "manja" reč ona koja je pre po abecednom redu;
< manje; oblik suprotan prethodnom;
<= manje ili jednako; naredba iza THEN se izvršava samo ako je prvi broj manji od drugog ili su oni jednaki. 
>= veće ili jednako; naredba iza THEN se izvršava samo ako je prvi broj veći od drugog ili su oni jednaki.

U primeru koji je dat na slici računar najpre pita korisnika za starost, a zatim daje komentar njegovog odgovora.

10 PRINT "KOLIKO IMAS GODINA"
20 INPUT A
30 IF A>16 THEN PRINT "PRESTAR"
40 IF A<16 THEN PRINT "PREMLAD"
50 IF A=16 THEN PRINT "KOLIKO TREBA!"
60 END

Naredba GO TO

Ovu naredbu programeri-početnici najlakše shvataju. Iza nje se mora nalaziti linijski broj neke naredbe. U tom slučaj naredba GO TO radi baš ono što joj ime i kaže (GO TO=idi na) - nastavlja izvršavanje programa od naredbe čiji je linijski broj naveden. Naredba GO TO 100 izvršava program od linije čiji je broj 100 (ukoliko ta linija ne postoji, neki računari prijavljuju grešku, a drugi nastavljaju izvršavanje programa od prve linije čiji je broj veći od 100).

Naredba GO TO je prva "opasna" naredba koju smo upoznali. Zamislite da se u vašem programu, nehotice, nađe naredba 100 GO TO 100. Računar će neprekidno izvršavati tu naredbu i vraćati se na nju. Vi ni na koji način nećete biti obavešteni da računar obavlja ovaj Sizifov posao osim što ćete primetiti da se vaš program predugo izvršava. Šta da radite u tom slučaju? Možete, jasno, da isključite računar iz struje, ali će time i čitav program biti obrisan. No, negde na tastaturi se nalazi i taster koji je obično obeležan sa BREAK (BREAK=slomi; u ovom slučaju prekini). Pritisak na ovaj taster izaziva prekid izvršavanja programa. Računar obično ispisuje koju je programsku liniju izvršavao kada ste mu naredili da prekine sa radom, pa možete lako da proverite šta sa njom nije bilo u redu.

10 INPUT K$
20 IF K$="DA" THEN GOTO 100
30 IF K$="NE" THEN GOTO 200
...
100 PRINT "OTKUCALI STE DA"
110 GOTO 210
200 PRINT "OTKUCALI STE NE"
210 END

Naredba GO TO može da se nađe i iza naredbe THEN. Ako je uslov koji je ispitivan u okviru naredbe IF ispunjen, izvršavanje programa se nastavlja od programske linije čiji je broj naveden iz GO TO. Ukoliko uslov nije ispunjen, naredba iza THEN (u ovom slučaju GO TO) se jednostavno preskače i računar nastavlja izvršavanje programa od naredbe koja se nalazi iza IF.

Ovaj jednostavni program omogućava korisniku da ispita računarevo znanje matematike. Računar najpre pita korisnika za dva broja, a zatim ga pita šta treba da se uradi sa ovim brojevima. Korisnik kuca reč koja označava traženu računarsku operaciju (može da se unese SABERI, ODUZMI, POMNOŽI, PODELI ili PREKINI). Računar zatim ispituje koju je reč korisnik otkucao, izvršava traženu računsku operaciju i prikazuje rezultat na ekranu. Posle prikazivanja rezultata računar nailazi na naredbu GO TO 10 i vraća se na sam početak, očekujući damu korisnik postavi novi problem. Prekid rada ovog programa je obezbeđen - korisnik samo treba da otkuca bilo koja dva broja i da onda, kada računar pita šta treba da radi sa brojevima, otkuca PREKINI. Računar, poslušno, prekida sa radom. Drugi način da se prekine izvršavanje programa je već opisani taster BREAK.

Ciklusi i procedure

U programima je često potrebno da se jedna sekvenca ponovi nekoliko puta. (Čitavo ovo razmatranje je potrebno da bismo omogućili da računar određuje pobednika u igri "Svemirksa potera"; Računar, naime, treba da 60 puta ponovi pitanje o koordinatama protivnika i da, ako igra do tog momenta nije završena, proglasi prvog igrača za pobednika). U programiranju se deo programa koji se ponavlja određen broj puta naziva ciklusom. Ciklus je, dakle, grupa instrukcija u programu koja se izvršava određeni broj puta posle čega se izvršavanje programa nastavlja instrukcijama koje slede posle ciklusa. Nastuprot ciklusu, odomaćen je termin procedure za deo programa koji se izvršava beskonačno mnogo puta. Reč "beskonačno", naravno, treba shvatiti uslovno: procedura se izvršava sve dok korisnik, da bi je zaustavio, ne pritsine spasonosni taster BREAK. Kod programera-početnika ciklusi se lako pretvaraju u procedure - dovoljna je mala greška i računar neće imati dobro uputstvo o izlasku iz ciklusa, pa će se njegov rad pretvoriti u beskonačnu proceduru. Ne treba, međutim, misliti da su proceduru uvek posledice greški programera. Program koji pretvara računar u štopericu predstavlja primer korisno upotrebljene procedure: računar neprekidno pokazuje tekuće vreme sve dok ga korisnik ne zaustavi.

Osnovna karakteristika ciklusa je, dakle, preciziranje nekog uslova, posle čijeg ispunjavanja računar završava ciklus. Ovaj uslov (u programiranju ga nazivaju izlazni kriterijum) ilustrovan je u prethodnom primeru - računar prikazuje rezultate sabiranja, oduzimanja, množenja i deljenja brojeva koje korisnik kuca sve dok ovaj ne otkuca PREKINI, posle čega računar završava sa radom.

Najčešće je potrebno da se neki deo program ponovi unapred određeni broj puta. Za to služe naredbe FOR i NEXT. Naredba FOR zahteva da bude napisana na određeni način koji će postati jasan iz datog primera. Računar najpre 8 puta ispisuje 2 PLUS 2 JE 5, a zatim dodaje SAMO SAM SE SALIO. Kako je to postignuto? Naredba FOR J=1 TO 8 (u prevodu "od J jednako 1 do 8) nalaže računaru da izvrši sledeće naredbe za vrednosti promenljive J 1, 2, 3, 4, 5, 6, 7 i 8. Sledeća naredba nam je dobro poznata - PRINT prenosi tekst između navodnika na ekran. Sledi naredba je NEXT J (NEXT J=sledeće J). Ona označava kraj ciklusa i ima višestruko dejstvo: najpre se sadržaj promenljive J povećava za jedan, a onda računar ispituje da li je J postalo veće od 8 (setimo se da je naredba FOR glasila FOR J=1 TO 8). Ukoliko je odgovor na ovo pitanje odrečan, izvršava se ponovo čitav ciklus. Ali, ukoliko je J postalo veće od 8, ciklus se završava i računar nastavlja od naredbe 50, koja nalaže prikazivanje komentara i prestanak rada.

10 FOR J=1 TO 8
20 PRINT "2 PLUS 2 JE 5"
30 NEXT J
40 PRINT
50 PRINT "SAMO SAM SE SALIO!"
60 END

Naredba FOR ima još jedan oblik: FOR TO...STEP. Iza STEP mora da se nalazi broj (ili ime promenljive) koja označava za koliko će se, pri svakom nailasku na naredbu NEXT, menjati sadržaj kontrolne promenljive. Da smo, u prethodnom primeru, upotrebili naredbu 10 FOR J=1 TO 8 STEP 2, ciklus bi se izvršavao za J=1,3,5 i 7, što znači da bi se na ekranu samo 4 puta pojavio tekst "2 PLUS 2 JE 5". Ovaj korak (STEP=korak) može da bude i negativan, kao što se vidi u sledećem primeru. U programu se nalaze dva ciklusa. Računar najpre prebrojava koliko mu je dana školskog raspusta preostalo (7, 6,... 1) i javlja da će "eksplodirati" kada mu vreme istekne. Zatim stupa na scenu sledeći ciklus koji ništa i ne radi - njegov cilj je da uspori rad programa i da korisniku na znanje šta će se dogoditi. Zatim naredba PRINT "BOOOOM" simulira eksploziju. Računaru, jasno, neće ništa biti čak ni posle ovako žestokog pucnja.

10 CLS
20 FOR J=7 TO 1 STEP -1
30 PRINT "OSTALO JE JOS "; J; " DANA RASPUSTA"
40 NEXT J
50 PRINT "EKSPLODIRACU!"
60 FOR J=1 TO 1000
70 NEXT J
80 PRINT "BOOOOOM!"
90 END

U prethodnom primeru videli smo da dva ciklusa mogu da se nađu jedan iza drugog. Nema, međutim, nikakve prepreke da se jedan ciklus nađe unutar drugog. U sledećom primeru vidimo da se ciklus koji kontroliše promenljiva I izvršava tri puta i da se, u toku svakog izvršavanja ciklusa I, izvrši po tri puta ciklus koji kontroliše promenljiva J. Na ekranu vidimo kako su se menjali sadržaji promljivih u toku izvršavanja ciklusa.

10 PRINT "I", "J"
20 FOR I=1 TO 3
30 FOR J=1 TO 3
40 PRINT I,J
50 NEXT J
60 NEXT I
70 END

Već smo pomenuli upotrebu računara kao digitalnog časovnika. To nam omogućava sledeći program: računar na ekranu neprekidno ispisuje tekuće vreme od momenta kada je program startovan. Naravno, časovnik će u početku raditi mnogo brže nego što je potrebno. Da biste ga doterali, morate da dodate linije 50 FOR I=1 TO 100 i 60 NEXT I koje će produžiti vreme izvršavanja svakog ciklusa. Broj 100 je stavljen primera radi - morate da procenite brzinu rada vašeg računara i da podesite broj prema toj brzini. Za ovo će vam biti potrebno dosta strpljenja i - prava štoperica.

10 CLS
20 FOR M=0 TO 59
30 FOR S=0 TO 59
40 PRINT M; ":";S
70 CLS
80 NEXT S
90 NEXT M

Na sledećoj slici je prikazan primer najčešće greške koju početnici prave. Rekli smo da jedan (ili čak nekoliko) ciklusa može da se nalazi unutar drugog. Međutim, ciklusi ne smeju da se "seku", kao što je to slučaj kod datog programa. Ukoliko napravite ovakav program, rezultati su nepredviljivi (zavise od računara i nekih drugih parametara), ali je jedno sigurno - program neće funkcionisati onako kako ste želeli.

10 FOR I=1 TO 4
20 FOR J=1 TO 4
30 PRINT I
40 PRINT J
50 NEXT I
60 NEXT J

Svemirska potera 2

Sada znamo dovoljno da napravimo pravi program za igru "Svemirske potere". Program će, jasno, biti u mnogome sličan prethodnom, ali će ovog puta računar biti u stanju da odredi koji je igrač pobedio. Ukoliko ste pažljivo čitali dosadašnji tekst, verovatno ćete moći i sami da sastavite ovaj program. Ukoliko vam to ne uspe, pročitajte našu verziju. Možda će vam njenom analizom postati jasne neke pojedinosti koje do sada niste razumeli.

10 FOR I=1 TO 60
20 PRINT "X KOORDINATA ULJEZA?"
30 INPUT A
40 PRINT "Y KOORDINATA ULJEZA?"
50 INPUT B
60 CLS
70 PRINT "X KOORDINATA BRANIOCA?"
80 INPUT C
90 PRINT "Y KOORDINATA BRANIOCA?"
100 INPUT D
110 CLS
120 LET X=SQR((A-C)*(A-C)+(B-D)*(B-D))
130 PRINT "TRENUTNO RASTOJANJE JE"
140 PRINT X; " ZVEZDANIH JEDICICA"
150 IF X<1.5 THEN GOTO 230
160 PRINT "PRIPREMITE SE ZA DAVANJE NOVIH POZICIJA"
170 NEXT K
180 PRINT "BRANILAC NIJE USPEO DA UNISTI ULJEZA"
190 GOTO 210 200 PRINT "BRANILAC JE STIGAO ULJEZA"
210 END

Potprogrami

Potprogram je neka vrsta mini-programa koji predstavlja deo glavnog programa. On obavlja neki konkretan zadatak koji treba da se izvrši veći broj puta. Kada je glavnom programu neophodno da se taj zadatak obavi, on jednostavno "poziva potprogram" i, po njegovom izvršavanju, nastavlja sa radom. Potprogrami su neobično korisni - ne samo da glavni program postaje kraći i pregledniji nego se štedi i na memoriji i omogućava takozvano (strukturalno programiranje".

Ovaj kratki strip (uz prateći program) ilustruje potrebu za potprogramima. Zamislimo da treba robotu da damo uputstvo da ode u samoposlugu i kupi neku stvar. Uputstvo za odlazak u samoposlugu je relativno složeno; zašto da ga ponavljamo svaki put kada nam je potrebna neka sitnica? Zar ne bi bilo jednostavnije jednom za svagda naučiti robota kako se ide u samoposlugu, a kasnije mu samo govoriti šta treba da kupi? To je, kao što se iz programa vidi, omogućila upotreba potprograma.

10 PRINT "STA TREBA DA KUPIM"
20 INPUT X$
30 GOSUB 100
40 PRINT "JOS NESTO?"
50 INPUT M$
60 IF M$="NE" THEN GOTO 999
70 GOTO 10
100 PRINT "PRODJI KROZ VRATA, SKRENI KONTRADESNO"
110 PRINT "PONOVO SKRENI KONTRADESNO"
120 PRINT "UDJI U RADNJU, KUPI ", X$
130 PRINT "VRATI SE KUCI"
140 RETURN
999 END

Potrebu za potprogramima ćemo ilustrovati na još jednom primeru. Ovoga puta program će biti nešto složeniji, pa ćemo utrošiti nešto više prostora da ga objasnimo. Igra koju program omogućava se, kod Amerikanaca, naziva "Jive Turkey" (brbljiva ćurka) i predstavlja jednu od retkih igara u kojoj treba kompjuter naučiti da "laže". Na početku igre kompjuter "zamišlja" broj između 0 i 999 i izaziva igrača da pogodi taj broj. Igrač pokušava da pogodi broj, a računar ga obaveštava da li je broj koji je igrač otkucao veći ili manji od "zamišljenog" broja. No, tu računar nije previše iskren - u 80% slučajeva on će dati tačnu informaciju, ali će u preostalih 20% slučajeva namerno dati pogrešan podatak.

Prva stvar koju treba da raščistimo je kako računar može da "zamisli" broj. Većina računara ima mogućnost da generiše slučajne brojeve koji se najčešće koriste u igrama. "Slučajan" broj nije slučajan u punom smislu reči - on je izračunat nekim složenim postupkom na osnovu sadržaja nekih registara računara koji se neprekidno menjaju ali, s obzirom na to da korisnik ne zna koji je postupak primenjen, za njega je ovaj broj slučajan. Slučajni brojevi se, bezmalo kod svih računara, generišu pomoću naredbe RND. Naredba RND generiše slučajan broj između 0 i 1, a ako je korisniku potreba ceo slučajan broj između O i A, on koristi naredbu INT (RND*A). Ovde je INT jedna od specijalnih funkcija koja vrši izračunavanje celog dela broja koji se nalazi u zagradi.

Postoje računari koji poseduju i nešto složeniji oblik naredbe RND. Kod ovih računara može direktno da se generiše ceo broj između O i A naredbom RND. (A). Kod ovih računara se, za generisanje decimalnog broja između 0 i 1 koristi naredba RND(0) ili RND(1). Mi ćemo pretpostaviti da posedujemo računar koji ima samo najjednostavniji oblik naredbe RND - onu koja generiše brojeve između 0 i 1.

Računar najpre briše sadržaj ekrana i štampa zaglavlje (pravila igre). Zatim nailazi na naredbu GO SUB 1000 koja, kao što smo videli, izaziva prelazak na programsku liniju 1000 koju računar shvata kao početak potprograma. Tamo je generisan slučajan broj između 0 i 999 i smešten u memoriju računara pod imenom N. Zatim računar nailazi na naredbu RETURN koja izaziva povratak u glavni program. Potom prenosi sadržaj promenljive N u promenljivu X. Znači, broj koji je računar "zamislio" zove se X.

Sada računar traži od igrača da pogađa broj. Igrač kuca neki broj između 0 i 999 koji računar naziva P. Ukoliko je P=X, naredba 70 izaziva prelazak na naredbu 160, gde se igraču odaje zaslužno priznanje na pogotku.

Linija 80 je, na prvi pogled, nepotrebna. Računar generiše još jedan slučajan broj. Zašto? Računar treba da odredi da li treba igraču da pruži tačan ili lažan odgovor. Da bi to odlučio, on generiše još jedan slučajan broj između 0 i 999 i ispituje da li je taj broj veći ili manji od 800. U otprilike 80% slučajeva računar će dobiti slučajan broj manji od 800 i zato pružiti igraču tačan odgovor. U otprilike 20% slučajeva ovaj broj će biti veći od 800 pa će računar "lagati" igrača.

Dalji tok programa ilustruje naredbe IF... THEN... i trebalo bi da bude jasan na osnovu komentara koji su dati uz njega.

U ovom primeru potprogram je bio potreban s obzirom na to da računar dva puta treba da izabere broj između 0 i 1000. Mogle su se, jasno, koristiti i dve RND naredbe, ali program na ovaj način može lakše da se razume, a zauzima i manje memorije. Ušteda bi bila još veća da je potprogram duži i da se poziva više puta.

10 CLS
20 PRINT "ZAMISLICU BROJ IZMEDJU 1 I 999"
30 GOSUB 1000
40 LET X=N
50 PRINT "POGADJAJ BROJ"
60 INPUT P
70 IF X=P THEN GOTO 160
80 GOSUB 1000
90 IF X>P THEN GOTO 130
100 IF N>800 THEN GOTO 140
110 PRINT "BROJ JE MANJI OD "; P
120 GOTO 50
130 IF N>800 THEN GOTO 110
140 PRINT "BROJ JE VECI OD "; P
150 GOTO 50
160 PRINT "BRAVO!"
170 PRINT "ZAMISLICU NOVI BROJ"
180 GOTO 30
1000 LET N=INT(RND*1000)
1010 RETURN

Rad sa nizovima

Do sada se svaki broj koji smo unosili u memoriju računara nazivao nekim slovom između A i Z. Vrlo često je, međutim, potrebno da se u memoriji računara formira niz podataka koji su po nečemu srodni, pri čemu se svaki od njih može posebno čitati i (po potrebi) menjati. Zamislimo, na primer, da želimo da napišemo program koji će pisati dečje pesmice koje će, svaki put kada startujemo program, biti u nečemu različite. Odlučili smo da se na kraju prvog stiha nalazi reč REKA. Sledeći posao je da zamislimo nekoliko reči koje se rimuju sa reka (npr. smreka, kleka, deka, zeka i seka) i da naučimo računar da jednu od njih slučajno izabere i smesti je na kraj drugog stiha. Sve ove reči imaju jednu zajedničku osobinu (rimuju se sa reka), a ipak svaka mora da se koristi posebno. Zato ćemo formirati niz R$ koji će imati pet elemenata. Formiranje ovog niza moramo na početku programa da najavimo naredbom DIM R$ (5) (DIM je skraćenica od DIMENSION; ovom naredbom se daje dimenzija niza odnosno saopštava računaru koliko elemenata niz sadrži). Sledećih nekoliko naredbi u programu će biti LET R$ (1)= "SMREKA", LET R$ (2)="KLEKA", LET R$ (3)="DEKA" LET R$ (4)="ZEKA" i LET R$ (5)="SEKA". Kada kasnije bude potrebno da se slučajno izabere jedna od ovih reči, generisaćemo slučajan broj između 1 i 5 (naredba za to je LET A=INT (RND*5+1)) i štampati reč R$ (A). Vašim poetskim i programskim sposobnostima ostavljamo da sastavite čitav program za pisanje pesmica.

Umesto da u nizove smeštamo reči, možemo da smeštamo brojeve. Na ovaj način se, obično, smeštaju koordinate nekog višedimenzionalnog vektora, pa se zato nizovi podataka koje smo upoznali ponekad nazivaju i "vektori" ili, češće, "jednodimenzionalni nizovi". Za razliku od njih, postoje i dvodimenzionalni nizovi ili, kako se češće nazivaju "matrice". Matricu možemo da zamislimo kao niz nekoliko nizova: ako nam posmatrajući prethodni primer, "poraste apetit", pa poželimo da nam ni poslednja reč prvog stiha ne bude stalno ista, moraćemo da oformimo tabelu (matricu) grupa reči koje se rimuju. Jedna takva matrica je data na sledećoj slici. Ovakvu matricu treba dimenzionisati primenom naredbe DIM R$ (4,7), a zatim je, primenom naredbe LET, popuniti potrebnim rečima. Zatim ćemo generisati slučajan broj između 1 i 4 (nazovimo taj broj I) i drugi slučajan broj između 2 i 6 (nazovimo taj broj J), pa ćemo prvi stih završiti rečju R$ (I,1), a drugi - rečju R$ (I,J).

Crtanje pomoću kompjutera

Crtanje po ekranu je jedna od izuzetno zanimljivih disciplina, pogotovo za mlađe korisnike računara. Naredbe koje omogućavaju crtanje su toliko različite od računara do računara da možemo da damo samo njihove najosnovnije karakteristike.

Ekran je podeljen na određeni broj tačaka (u stranoj literaturi svaka tačka se naziva "pixel"). Računar sa velikom memorijom i visokom rezolucijom može da nacrta slike koje se sastoje od desetine hiljada tačkica u različitim bojama, dok jeftiniji računari mogu na ekranu da prikažu slike koje se sastoje od samo par stotina tačaka. U vašem uputstvu za upotrebu računara piše koliko tačaka na ekranu možete da, kako to programeri kažu, adresirate, kao i gde se nalazi referentna tačka. Ova referentna tačka se obično nalazi u gornjem levom ili donjem levom uglu ekrana i koordinate svih tačaka se računaju prema njoj. U okviru uputstva za upotrebu data je i mapa ekrana koja govori o tome gde se, tačno, nalazi koja tačka. Da biste osvetlili bilo koju tačku, koristite naredbu SET X, Y (kod nekih računara se koristi naredba PLOT X,Y ili neka druga) gde su X i Y koordinate tačke koju treba osvetliti. Suprotna naredba (RESET X,Y odnosno UNPLOT X,Y) se koristi za "gašenje" neke tačke koja je ranije osvetljena. Kod računara koji rade sa televizorom u boji, potrebno je dati i komandu kojom bojom treba osvetliti neku tačku.

Jednostavni demonstracioni program koji je dat čeka da korisnik otkuca dva broja (koordinate neke tačke), a zatim osvetljava tu tačku. Program je vrlo koristan za one koji žele da steknu osećaj o tome gde se koja tačka nalazi. Program će neprekidno očekivati od korisnika da kuca koordinate tačaka sve dok ovaj ne pritisne BREAK - program dakle, predsatvlja primer korisno upotrebljene procedure.

Rad sa rečima

Do sada smo upoznali način da alfanumeričkim promenljivima dodeljujemo vrednosti i da ove posle prikazujemo na ekranu. U nekim slučajevima će se pokazati neophodnim da menjamo ili analiziramo sadržaje nekih numeričkih promenljivih. Način na koji se ovo postiže u mnogome zavisi od računara. Većina kompjutera ima posebne funkcije LEFT$, RIGHT$ i MID$. Za korisnike je najpogodnije da se priviknu na korišćenje ove poslednje funkcije, pošto su prve dve njeni specijalni slučajevi. Funkciju MID$ ćemo objasniti na jednom jednostavnom primeru.

Sastavimo program koji na početku ima naredbu:

10 LET A$="SPECIJALNO IZDANJE O RAČUNARIMA".

Ukoliko dodamo naredbu 20 PRINT MID$ (A$,12,7) i izvršimo program sa RUN, na ekranu će se pojaviti reč IZDANJE. Računar je, izvršavajući naredbu MID$, izdvojio 7 slova koja se nalaze u reči A$ i to počevši od 12. slova. Da smo upotrebili 20 print MID (A$,2,4); MID$ (A$,26,2) na ekranu bi se pojavila reč PECINA. Pokušajte sami da zaključite zašto!

ZX računari i reči

Sve do sada pomenute naredbe mogle su da se koriste na ZX 81 i Spectrumu. Kod rada sa rečima, međutim, ova kompatibilnost prestaje. Rad sa rečima je ovde organizovan na drukčiji način; teško je reći da li je ovaj način bolji ili lošiji od standardnog, ali nema sumnje da pruža iste mogućnosti.

Kod ZX računara svaku reč zamišljamo kao niz slova. Ako se, na primer, na početku programa nalazila naredba DIM A$ (10), računar će oformiti jednu promenljivu koja će se zvati A$ i predstavljati tekst od 10 slova (kod drugih računara ova naredba bi oformila niz A$ koji bi se sastojao od 10 reči). U svaki element ovog niza (niz, sumarno, predstavlja promenljivu) smešta se po jedno slovo. Ako, na primer, ZX81 izvrši naredbe

10 DIM A$ (40)
20 LET A$="SPECIJALNO IZDANJE O RAČUNARIMA"
30 PRINT A$ (1)

na ekranu će se pojaviti slovo S. Razlog za to je što je, po izvršenju naredbe 20, A$ (1) postalo S, A$ (2) - P i slično (A$ (31) je postalo A). U daljem toku programa mogu ravnopravno da se koriste promenljiva A$ (koja predstavlja čitav tekst) i neki njeni delovi.

Da iz reči A$ izdvojimo pojedinu grupu slova, koristimo naredbu TO. Da, na primer, izdvojimo reč "IZDANJE" koristićemo:

40 PRINT A$ (12 TO 18)

a da izdvojimo reč PECINA:

50 PRINT A$ (2 TO 5); A$ (26 TO 27)

Ukoliko ne navedemo broj ispred TO, računar smatra da treba da počne od početka reči (PRINT A$ (TO 4) bi izdvojilo reč SPEC) a ako ne navedemo broj iza TO - do kraja. Na ovaj način naredbe LEFT$, RIGHT$ i MID$ su postale nepotrebne.

Često se ukazuje potreba za radom sa nizovima i matricama reči. Kod ZX računara sve ostaje kao i do sada samo se, u DIM naredbama, dodaje jedna dimenzija više - ova dimenzija označava maksimalni broj slova koji svaka alfanumerička promenljiva može da sadrži. Naredba 10 DIM B$ (10,20), na primer, nalaže računaru da u memoriji rezerviše prostor za deset alfanumeričkih promenljivih (zvaće se B$ (1), B$ (2),... B$ (10)) od kojih će svaka moći da primi najviše 20 slova. Kod matrica se dodaje još jedna dimenzija koja označava broj redova.

Kraj škole

Ovo je ujedno i kraj "Osnovne škole bejzika". Ako ste je pažljivo pročitali, naučili ste mnoštvo bejzik naredbi koje su vam sasvim dovoljne čak i za pisanje najsloženijih programa. Ostalo je, jasno, mnogo toga što na ovim stranicama nije ni pomenuto. Razlog za to je što su računari različiti i imaju različite mogućnosti, dok smo se mi odlučili da damo samo one naredbe koje su zajedničke za sve. I pored toga, neke od spomenutih naredbi mogu da budu drukčije na vašem računaru (najlakše bi trebalo da bude onima koji poseduju ZX računare i kompjutere sa standardnim microsoftovim bejzikom), pa ćete morati da konsultujete vaše uputstvo za upotrebu računara da biste ih primenili. Ova škola vam, dalje, ne može zameniti uputstvo za upotrebu (predlažemo vam da ga još jednom pročitate - možda ćete sada usvojiti nešto što ranije niste primetili ili razumeli), ali je pokušala da vas, na popularan način i uz mnoštvo slika uvede u osnovne tajne bejzika i omogući vam da samostalno napredujete.

Računar "galaksija" Moja home strana