SIMON’S BASIC C64 – lekcija devet
RETRO KUTAK
SIMON’S BASIC C64 – lekcija prva
SIMON’S BASIC C64 – lekcija druga
SIMON’S BASIC C64 – lekcija treća
SIMON’S BASIC C64 – lekcija čevrta
SIMON’S BASIC C64 – lekcija peta
SIMON’S BASIC C64 – lekcija šesta
SIMON’S BASIC C64 – lekcija sedma
SIMON’S BASIC C64 – lekcija osma
Stigli smo do devete lekcije Simon’s BASIC-a! Danas ćemo istražiti neke ključne funkcije i naredbe, uključujući i one koje se ređe koriste u Simon’s BASIC programiranju.
Napomene, saveti i objašnjenja
Funkcije i naredbe koje ćemo izučavati podeljene su u dve celine: one koje se redovno koriste i one koje se veoma retko koriste. Bez obzira na to, možda vam baš neka od ređe korišćenih funkcija ili naredbi posluži za rešavanje nekog specifičnog programskog problema.
Funkcije Simon’s BASIC-a
INSERT
– Umetanje teksta
Ova funkcija omogućava dodavanje teksta ili vrednosti tekstualne promenljive unutar drugog teksta ili vrednosti druge tekstualne promenljive.
Format funkcije: INSERT (izraz1, izraz2, b)
- izraz1: Tekst ili tekstualna promenljiva koja se umeće.
- izraz2: Tekst ili tekstualna promenljiva u koju se umeće.
- b: Redni broj karaktera u
izraz2
od koga se vrši umetanje.
Primer:
Basic
10 A$="DRUGI TRECI "
20 B$="PRVI CETVRTI"
30 PRINT INSERT (A$,B$,5)
Pokretanjem primera, vrednost tekstualne promenljive A$
se umeće u vrednost B$
počev od petog karaktera, dajući rezultat: „PRVI DRUGI TRECI CETVRTI“.
INST
– Zamena karaktera unutar teksta
Ova funkcija zamenjuje tekst ili vrednost tekstualne promenljive u drugom tekstu ili vrednošću druge tekstualne promenljive.
Format funkcije: INST (izraz1, izraz2, b)
- izraz1: Tekst ili tekstualna promenljiva kojom se zamenjuje.
- izraz2: Tekst ili tekstualna promenljiva u kojoj se vrši zamena.
- b: Redni broj karaktera u
izraz2
od kog se vrši zamena.
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 A$="*"
30 B$="PROBNA ZAMENA SLOVA"
40 FOR I=0 TO 17
50 T$=INST(A$,B$,I)
60 PRINT T$
70 NEXT I
Pokretanjem primera, vrednost A$
(„*“) zamenjuje karaktere u B$
(„PROBNA ZAMENA SLOVA“) počev od prvog karaktera, iterirajući kroz petlju. Na ekranu će se ispisati 17 redova, gde će svaki red prikazivati vrednost B$
sa zamenjenim karakterom iz A$
, pomereno za po jedno mesto u odnosu na prethodni ispis.
PLACE
– Pronalaženje pozicije teksta
Ovom funkcijom možete pronaći početni redni broj traženog teksta ili vrednosti tekstualne promenljive unutar datog teksta ili vrednosti tekstualne promenljive.
Format funkcije: PLACE (izraz1, izraz2)
- izraz1: Tekst ili tekstualna promenljiva koja se traži.
- izraz2: Tekst ili tekstualna promenljiva u kojoj se traži.
Primer:
Basic
10 A$="TRAZ"
20 B$="PROBAMO TRAZENJE"
30 PRINT PLACE (A$,B$)
Kada pokrenete primer, dobićete rezultat 9, što znači da se tražena vrednost iz promenljive A$
nalazi počevši od 9. pozicije u promenljivoj B$
.
Naredbe Simon’s BASIC-a
CENTRE
– Centriranje teksta na ekranu
Ova naredba ispisuje tekst i istovremeno ga centrira na sredini ekrana. Tekst može biti zadat pod navodnicima ili kao vrednost tekstualne promenljive.
Format naredbe: CENTRE izraz
- izraz: Tekst pod navodnicima ili vrednost tekstualne promenljive.
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 X$="CENTRIRANJE PROMENLJIVE"
30 CENTRE "CENTRIRANJE TEKSTA"
40 PRINT
50 CENTRE X$
Pokretanjem primera prvo se centrira „CENTRIRANJE TEKSTA“, a zatim „CENTRIRANJE PROMENLJIVE“. Važno je obratiti pažnju na PRINT
naredbu između dve CENTRE
naredbe, jer bi u suprotnom sistem tretirao oba teksta kao jednu celinu i centrirao ih zajedno.
FETCH
– Dozvola učitavanja samo željenih karaktera
Ova naredba prihvata samo određeni broj željenih karaktera tokom unosa sa tastature i smešta njihovu vrednost u izabrane promenljive.
Format naredbe: FETCH izraz, b, p
- izraz: Tekst ili vrednost tekstualne promenljive koja sadrži dozvoljene karaktere (filter).
- b: Broj karaktera koji će se učitati.
- p: Promenljiva u koju se smeštaju učitani karakteri.
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 PRINT "DOZVOLJENA KOMBINACIJA SLOVA SU ZA,IS,SE,JU,KR"
30 FETCH "ZAISSEJUKR",2,D$
40 IF D$="ZA" THEN PRINT "IDEMO NA ZAPAD"
50 IF D$="IS" THEN PRINT "IDEMO NA ISTOK"
60 IF D$="SE" THEN PRINT "IDEMO NA SEVER"
70 IF D$="JU" THEN PRINT "IDEMO NA JUG"
80 IF D$="KR" THEN PRINT "STIGLI SMO":END
90 GOTO 20
Pokretanjem primera, možete uneti do dva znaka. Ako su uneti znaci dozvoljeni (nalaze se u filteru „ZAISSEJUKR“), njihova vrednost se smešta u D$
. Program će zatim ispisati odgovarajuću poruku ili prekinuti izvršavanje na osnovu unosa. Imajte na umu da su dozvoljene i kombinacije karaktera koje, iako su prisutne u filteru, možda ne čine smislenu reč (npr. ZS, SZ). U tom slučaju, program će tražiti novi unos. Takođe, primetićete da se tekst iz ispita ispisuje preko unetih karaktera.
RESET
– Čitanje vrednosti iz DATA
komande od željene linije
Ova naredba je dodatak READ
i DATA
naredbama i omogućava vam da odredite broj programske linije od koje će se čitati traženi podaci. Dok je u standardnom BASIC-u čitanje uvek počinjalo od prve DATA
naredbe, RESET
omogućava da počnete očitavanje iz bilo kojeg programskog reda koji sadrži DATA
naredbu.
Format naredbe: RESET b
- b: Programska linija od koje počinje čitanje
DATA
podataka.
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 PRINT "MUSKA,ZENSKA IMENA ILI KRAJ? (M,Z,K)"
30 FETCH "MZK",1,D$
40 IF D$="M" THEN RESET 110
50 IF D$="Z" THEN RESET 120
60 IF D$="K" THEN PRINT "KRAJ":END
70 FOR I=1 TO 3
80 READ A$
90 PRINT A$
100 NEXT I
105 GOTO 20
110 DATA ZOKA,MIKI,DARE
120 DATA MICA,MILA,LILI
Pokretanjem primera, zavisno od unetog slova ‘M’ ili ‘Z’, biće ispisana tri muška ili tri ženska imena. Naredba RESET
premešta pokazivač čitanja podataka na DATA
naredbu u programskoj liniji 110 (za muška imena) ili 120 (za ženska imena). Mali nedostatak ove naredbe je što RENUMBER
menja brojeve linija, pa je potrebno ručno menjati brojeve linija, slično kao kod GOTO
i GOSUB
.
ON ERROR
, ERRN
, NO ERROR
, OUT
– Upravljanje greškama
Ove naredbe omogućavaju programu da zanemari programsku grešku i nastavi izvršavanje od željene programske linije. Funkcija ERRN
služi za utvrđivanje broja nastale programske greške.
Formati naredbi:
ON ERROR: GOTO p
– U slučaju greške, preusmeri izvršavanje na programsku linijup
.ERRN
– Utvrđuje broj nastale programske greške.NO ERROR
– Prestanak ispitivanja programske greške.OUT
– Ispisivanje vrste nastale greške i reda u kome se nalazi ova programska naredba (OUT
).
Primer 1:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 ON ERROR
30 PRINT ERRN
40 IF ERRN=10 THEN PRINT "DATA JE NEXT BEZ FOR-TO PETLJE":NO ERROR
Kada pokrenete primer, pojaviće se broj 128 (što znači da nema greške) i skrolovaće se po ekranu dok ne pritisnete „run/stop“ (ili „esc“ u emulatoru). Ako unesete nešto pogrešno ili nelogično, prvo će se pojaviti broj te greške, a zatim 128. Na primer, sintaksna greška (poput „PROBA“) rezultira brojem 11, dok NEXT
bez FOR-TO
petlje daje broj 10. U liniji 40, ERRN
proverava da li je broj greške 10. Ako jeste, ispisuje se poruka „DATA JE NEXT BEZ FOR-TO PETLJE“, a NO ERROR
prekida dalje ispitivanje grešaka.
Primer 2:
Basic
5 PRINT "(SHIFT+CLR/HOME)"
10 ON ERROR:GOTO 100
20 INPUT "UNESITE DELJENIK";D
30 INPUT "UNESITE DELILAC";L
40 PRINT D/L
45 IF D=0 AND L=0 THEN NO ERROR:OUT:END
50 GOTO 20
100 PRINT "NIJE DOZVOLJENO DELITI SA NULOM"
105 IF D=0 AND L=0 THEN NO ERROR:OUT:END
110 GOTO 20
Pokretanjem primera, možete uneti deljenik i delilac. Bez ON ERROR
naredbe, deljenje sa nulom bi izazvalo grešku i zaustavilo program. Ovako, programski tok se prebacuje na liniju 100, ispisuje poruku „NIJE DOZVOLJENO DELITI SA NULOM“ i program nastavlja rad. Ako za deljenik i delilac unesete nulu, program se prekida i OUT
ispisuje naziv nastale greške. Važno je koristiti NO ERROR
kako bi se sprečilo da se ispitivanje grešaka aktivira i nakon završetka programa.
Naredbe koje se retko koriste
Došli smo do naredbi koje se ne koriste tako često, ali je dobro znati za njih.
FCHR
– Popunjavanje pravougaonog polja karakterima
Ovom naredbom popunjavate pravougaono polje na ekranu željenim karakterima.
Format naredbe: FCHR y, x, v, s, n
- y: Broj reda od kog se polje iscrtava (0-24).
- x: Broj kolone od kog se polje iscrtava (0-39).
- v: Visina polja u karakterima.
- s: Širina polja u karakterima.
- n: Ekranski kod karaktera (0-255).
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 FCHR 5,15,10,15,0
U pravougaoniku počev od reda 5 i kolone 15, iscrtaće se pravougaonik visine 10 i širine 15 sa karakterom „@“.
FCOL
– Promena boje teksta u pravougaoniku
Ova naredba menja boju karaktera u pravougaoniku sa datim koordinatama, visinom i širinom.
Format naredbe: FCOL y, x, v, s, b
- y: Broj reda od kog se polje iscrtava (0-24).
- x: Broj kolone od kog se polje iscrtava (0-39).
- v: Visina polja u karakterima.
- s: Širina polja u karakterima.
- b: Broj boje (0-15).
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 FCHR 5,15,12,15,0
30 FCOL 7,17,8,11,3
40 FCOL 9,19,4,7,4
Pokretanjem programa iscrtaće se crni pravougaonik ispunjen „@“ simbolima. Zatim će se unutar njega promeniti boja, prikazujući svetlo plavi pravougaonik, a unutar njega još jedan ljubičaste boje.
FILL
– Popunjavanje pravougaonog polja karakterima i bojom
Ova naredba je kombinacija FCHR
i FCOL
, istovremeno iscrtava pravougaonik ispunjen željenim karakterima i boji ih u željenoj boji.
Format naredbe: FILL y, x, v, s, n, b
- y: Broj reda od kog se polje iscrtava (0-24).
- x: Broj kolone od kog se polje iscrtava (0-39).
- v: Visina polja u karakterima.
- s: Širina polja u karakterima.
- n: Ekranski kod karaktera (0-255).
- b: Boja karaktera koji se ispisuje (0-15).
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 FILL 5,15,12,15,RND(0)*256,RND(0)*16
30 FILL 7,17,8,11,RND(0)*256,RND(0)*16
40 FILL 9,19,4,7,RND(0)*256,RND(0)*16
50 FILL 10,20,2,5,RND(0)*256,RND(0)*16
60 PAUSE 1
70 GOTO 20
Pokretanjem primera, dobićete četiri pravougaonika jedan unutar drugog, svaki ispunjen slučajno odabranim karakterima i bojom.
MOVE
– Kopiranje pravougaonog polja na ekranu
Iako naredba nosi naziv MOVE
(pomeranje), ispis se zapravo kopira na ekranu. Razlog za ovaj naziv poznat je samo programerima Simon’s BASIC-a.
Format naredbe: MOVE y, x, v, s, yc, xc
- y: Broj reda od kog se polje iscrtava (0-24).
- x: Broj kolone od kog se polje iscrtava (0-39).
- v: Visina polja u karakterima.
- s: Širina polja u karakterima.
- yc: Broj reda od kog se polje kopira (0-24).
- xc: Broj kolone od kog se polje kopira (0-39).
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 FILL 10,10,10,10,1,1
30 MOVE 10,10,10,10,10,21
Na ekranu će se ispisati pravougaonik ispunjen belim slovima „A“, a zatim će se kopirati odmah pored sa razmakom od jednog karaktera.
INV
– Invertovanje pravougaonog polja
Ovom naredbom se svi karakteri u zadatom pravougaonom polju pretvaraju u inverzne i obratno.
Format naredbe: INV y, x, v, s
- y: Broj reda od kog polje postaje inverzno (0-24).
- x: Broj kolone od kog polje postaje inverzno (0-39).
- v: Visina polja u karakterima.
- s: Širina polja u karakterima.
Primer:
Basic
10 PRINT "(SHIFT+CLR/HOME)"
20 FILL 5,5,15,15,RND(0)*255,RND(0)*16
30 FOR I=1 TO 7
40 INV 5+I,5+I,15-I*2,15-I*2
50 PAUSE 1
60 NEXT I
70 GOTO 20
Pokretanjem primera, dobićete pravougaonik ispisan slučajnim znacima u slučajnoj boji. Zatim se 7 unutrašnjih koncentričnih pravougaonika menjaju u inverzne znake i obratno.
LEFT
, RIGHT
, UP
, DOWN
– Pomeranje za jedan karakter
Ovim komandama se vrši pomeranje jednog karaktera unutar određenog pravougaonog polja u svim pravcima.
Formati naredbi:
LEFTB y, x, v, s
– Pomeranje ulevo sa brisanjem reda.LEFTW y, x, v, s
– Pomeranje ulevo sa prebacivanjem reda.RIGHTB y, x, v, s
– Pomeranje udesno sa brisanjem reda.RIGHTW y, x, v, s
– Pomeranje udesno sa prebacivanjem reda.UPB y, x, v, s
– Pomeranje nagore sa brisanjem reda.UPW y, x, v, s
– Pomeranje nagore sa prebacivanjem reda.DOWNB y, x, v, s
– Pomeranje nadole sa brisanjem reda.DOWNW y, x, v, s
– Pomeranje nadole sa prebacivanjem reda.
Ako naredba na kraju imena ima nastavak „B“, onda će se izgubiti red sa one strane na koju se vrši pomeranje. Ako ima „W“, onda će se karakteri sa strane na koju se vrši pomeranje naći na strani od koje se vrši pomeranje (rotacija u krug).
- y: Broj reda od kog se polje pomera (0-24).
- x: Broj kolone od kog se polje pomera (0-39).
- v: Visina polja u karakterima.
- s: Širina polja u karakterima.
Primer:
Basic
10 PRINT CHR$(147)
20 FILL 1,1,20,20,1,0
30 T=INT(RND(0)*8)+1
40 IF T=1 THEN LEFTB 5,5,12,12
50 IF T=2 THEN LEFTW 5,5,12,12
60 IF T=3 THEN RIGHTB 5,5,12,12
70 IF T=4 THEN RIGHTW 5,5,12,12
80 IF T=5 THEN UPB 5,5,12,12
90 IF T=6 THEN UPW 5,5,12,12
100 IF T=7 THEN DOWNB 5,5,12,12
110 IF T=8 THEN DOWNW 5,5,12,12
115 PAUSE 1
120 GOTO 30
Pokretanjem primera ispisaće se pravougaonik 20×20 ispunjen slovima „A“ crne boje. Unutar ovog pravougaonika, manji pravougaonik veličine 12×12 će se svake sekunde pomeriti za jedan karakter u slučajno odabranom pravcu. Primetićete da kada se pomeranje vrši naredbom sa nastavkom „B“, pomereni red će se izbrisati, stvarajući prazninu. Naredbe sa nastavkom „W“ će pomeriti unutrašnji pravougaonik, a karakteri reda na koji se pomera će se rotirati na red od kog se vrši pomeranje.
Sve ove retko korišćene naredbe nemaju neku posebnu praktičnu primenu, ali je moguće pomoću njih dobiti veoma interesantne šare i efekte koji mogu poslužiti za ukrašavanje prikaza, brisanje delova ekrana ili ispunjavanje istog željenim karakterima.
LOCAL
, GLOBAL
– Deklaracija lokalnih i globalnih promenljivih
Ove dve naredbe se gotovo nikad ne koriste jer imamo veliki izbor promenljivih. One vrše deklaraciju lokalnih (trenutnih) promenljivih i povratak na globalne promenljive.
Formati naredbi:
LOCAL izraz
– Argumentizraz
može biti numerička ili tekstualna promenljiva.GLOBAL
– Daje se bez argumenta.
Primer:
Basic
10 PRINT CHR$(147)
20 A=5:X$="PRVA"
30 LOCAL A,X$
40 A=10:X$="DRUGA"
50 PRINT A;X$
60 GLOBAL
70 PRINT A;X$
Pokretanjem primera dodeljuju se početne vrednosti promenljivama. Zatim se ove promenljive proglašavaju lokalnim i dodeljuju im se nove vrednosti (10 i „DRUGA“), koje se štampaju. Naredbom GLOBAL
poništavaju se lokalne vrednosti i vraćaju se na prvobitne (globalne) vrednosti, što se dokazuje štampanjem, gde kao rezultat dobijamo početne vrednosti 5 i „PRVA“.
Toliko za danas! U sledećoj lekciji preći ćemo na naredbe koje se bave muzikom i zvučnim efektima u Simon’s BASIC-u. Puno pozdrava!
SIMON’S BASIC C64 – lekcija prva
SIMON’S BASIC C64 – lekcija druga
SIMON’S BASIC C64 – lekcija treća
SIMON’S BASIC C64 – lekcija čevrta
SIMON’S BASIC C64 – lekcija peta
SIMON’S BASIC C64 – lekcija šesta
SIMON’S BASIC C64 – lekcija sedma
SIMON’S BASIC C64 – lekcija osma
Poslušajte audio rezime ovog teksta: