RETRO KUTAK
SIMON’S BASIC C64 – lekcija treća
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
Vreme je za treću lekciju. Danas ćemo naučiti još neke korisne naredbe koje mogu da vam pomognu u svakodnevnom programiranju u ovom programskom jeziku
Napomene, saveti i objašnjenja
Kada radite sa Sajmons bejzikom videćete da u mnogim slučajevima za željeni zadatak imate više naredbi koje vam nude rešenje (odrađuju istu stvar kao što će te videti u ovoj lekciji na primeru petlji) i na prvi pogled nema potrebe za svim tim naredbama. Naravno prvi pogled često vara, pa tako i u ovom slučaju, jer svaka od ovih naredbi ima svoje prednosti nad drugim (zavisno od slučaja do slučaja)
Naredbe Simon’s basic-a
Petlje i ispitivanja
Ovim naredbama dopunjuju se naredbe standardnog bejzika i šire mogućnosti petlji i ispitivanja
ELSE – Odraditi radnju ukoliko uslov nije zadovoljen (dodatak naredbi IF – THEN)
Ova naredba je izuzetno korisna (zaista nije jasno zašto nije uključena u standardni bejzik). Pri zadavanju IF – THEN ispitivanja kod standardnog bejzika imamo radnju samo ako je uslov zadovoljen. Naredba ELSE daje mogućnost radnje kada uslov nije zadovoljen i ona je opciona
Oblik naredbi:
IF uslov – ako je uslov zadovoljen
THEN – onda uradi ovo
ELSE – u protivnom uradi ovo
Primer:
10 INPUT "UNESI BROJ 1";B
20 IF B=1 THEN PRINT "UNEO SI TRAZENI BROJ":ELSE:PRINT "POGRESNO"Ovaj mali program traži da se unese broj 1. U slučaju da je unet traženi broj ispisuje se poruka o ispravnosti a u slučaju da nije (ELSE) ispisuje se poruka o pogrešnom unosu
RCOMP – prenos ispitivanja u sledećim programskim linijama
Još jedna izuzetno korisna naredba. Često se dešava da nema dovoljno mesta za sve što smo morali da upišemo kod uslova ispitivanja u programskoj liniji koja se sastoji od samo dva reda. Do sada smo, u tim slučajevima, ispitivanja morali da razbijamo u više redova sa uvek ponovljenom proverom uslova ili da koristimo podprograme. Zahvaljujući ovoj naredbi jedno ispitivanje možemo preneti na koliko god želimo programskih linija
Oblik naredbe:
RCOMP:n1 – argument „n1“ – prenete naredbe koje se izvršavaju ako je uslov zadovoljen
ELSE:n2 – argument „n2“ – prenete naredbe koje se izvršavaju ako uslov nije zadovoljen (opciono)
Primer:
10 INPUT "UNESITE MANJI BROJ OD 10";B
20 IF B<10 THEN PRINT "ZAD.USLOV RED 20":ELSE:PRINT "NIJE ZAD.USLOV RED 20"
30 RCOMP:PRINT "ZAD.USLOV RED 30":ELSE:PRINT "NIJE ZAD.USLOV RED 30"
40 RCOMP:PRINT "ZAD.USLOV RED 40":ELSE:PRINT "NIJE ZAD.USLOV RED 40"Kada startujete program i unesete broj manji od 10, što znači da je uslov zadovoljen, u redovima 20 do 40 ispisaće se poruka da je isti zadovoljen u liniji ispitivanja i prenetim linijama ispitivanja. U slučaju da unesete broj 10 i veći dobićete poruku za sva tri reda ispitivanja i prenetog ispitivanja da uslov nije zadovoljen
REPEAT – UNTIL – programska petlja sa ispitivanjem i izlaskom na kraju iste
Sajmons bejzik je izdašan što se tiče programskih petlji. U ovom slučaju imamo petlju koja traje dok se ne zadovolji uslov na kraju iste. Naredbe petlje idu uvek zajedno
Oblik naredbi:
REPEAT – početak petlje
naredbe – naredbe koje se izvršavaju sve dok uslov nije zadovoljen
UNTIL uslov – ispitivanje uslova i kraj petlje. Naredbe između REPEAT i UNTIL će se izvršavati sve dok se ne dostigne traženi uslov. Onda se prelazi na sledeću naredbu posle UNTIL
Primer:
10 M=0
20 REPEAT
30 M=M+1
40 Z=Z+M
50 UNTIL M=50
60 PRINT "ZBIR PRVIH 50 BROJEVA JE";Z
70 ENDDodeljujemo početnu vrednost promenljivi M
Dajemo početak petlje
Uvećavamo promenljivu M za 1
Uvećavamo promenljivu Z za vrednost promenljve M. Na taj način sabiramo svaki broj
Petlja se vraća na prvu naredbu posle REPEAT i traje dok promenljiva M ne dostigne vrednost 50
Ispisujemo zbir prvih 50 brojeva
Kraj programa
Kada startujemo program zahvaljujući petlji sabraće se prvih 50 pozitivnih celih brojeva i dati njihov ukupni zbir
LOOP – EXIT IF – END LOOP – programska petlja sa ispitivanjem i izlaskom iz iste na sredini
Još jedna petlja koju podržava Sajmons bejzik. Razlika je što se kod ove ispitivanje uslova ne daje na kraju nego bilo gde u sredini petlje. I ovde naredbe petlje idu uvek zajedno
Format naredbi:
LOOP – početak petlje
naredbe – naredbe koje se daju u njoj
EXIT IF uslov – izlaz iz petlje ako je dati uslov zadovoljen (izlaz na prvoj naredbi posle END LOOP)
naredbe – mogu se i dalje davati naredbe koje su nam potrebne u petlji
END LOOP – kraj petlje (povratak na prvu naredbu posle LOOP)
Primer:
10 N=1
20 LOOP
30 PRINT "NEPARNI BROJEVI IZMEDJU 1 I 100=";N
40 N=N+2
50 EXIT IF N>100
60 END LOOP
70 ENDDodeljujemo početnu vrednost promenljive (prvi neprarni broj)
Početak petlje
Ispisuje se tekst i vrednost promenljive N koja je neparan broj
Promenljiva se uvećava za 2 tako da, pošto smo počeli od 1, dobijamo uvek neparan broj
U sljučaju da je N veća od 100 petlja se završava i prelazi na sledeću naredbu posle END LOOP
Kraj petlje koji stalno vraća na prvu naredbu posle LOOP
Kraj programa
Startovanjem ovog programa na ekranu će se prikazati prvih 99 neparnih brojeva
Procedure
Procedure imaju dvostruku ulogu. U prvom slučaju predstavljaju odvojene celine programa koje sadrže skup zadatih naredbi (ekvivalent podprograma), a u drugom mesto skoka toka programa. Označavaju se imenima. Iste veoma olakšavaju programiranje iz razloga što njihovo pozivanje ne zavisi od brojeva programskih linija. Kada ih koristimo kao podprogram mogu da se pozovu iz glavnog programa neograničen broj puta. Kada nam služe kao mesto skoka možemo otići na njih iz bilo kog dela programa i od tog mesta se program dalje izvršava (Ovde takođe dolazi do izražaja korišćenje naredbe RENUMBER)
PROC – END PROC – početak procedure – kraj procedure
Ove dve naredbe idu zajedno ali ne uvek. Kada želimo da procedura bude u svojstvu podprograma imamo početak i kraj iste, a ukoliko želimo da vršimo skok na nju onda stavljamo samo početak procedure.
Oblik naredbi:
PROC ime procedure – posle naredbe unosimo kako želimo da se procedura zove
naredbe – zadajemo naredbe koje želimo za datu proceduru
END PROC – kraj procedure (ekvivalent naredbi RETURN)
Primer:
10 PROC UNOS POLAZNIKA
20 INPUT "PREZIME POLAZNIKA";P$
30 INPUT "IME POLAZNIKA";I$
40 INPUT "BROJ BODOVA";B
50 END PROCZadavanjem ovih naredbi stvorili smo proceduru za prihvatanje podataka korisnika u obliku podprograma koju možemo pozvati u bilo kom trenutku iz glavnog toka programa.
Ukoliko smo želeli da procedura bude mesto skoka dali bi smo samo u željenoj programskoj liniji PROC UNOS POLAZNIKA (naravno bez END PROC).
EXEC – poziv procedure kao podprogram
Naredba poziva proceduru kao podprogram. EXEC je ekvivalent naredbi GOSUB. Iz glavnog programa ona poziva proceduru, izvršava je do naredbe END PROC i nastavlja program od prve naredbe koja dolazi posle EXEC koja je pozvala proceduru.
Format naredbe:
EXEC ime procedure – poziva proceduru pod datim imenom kao podprogram
Primer:
10 DIM A(9)
20 EXEC PRIKAZ POCETNOG EKRANA
30 EXEC UNOS NIZA
40 EXEC SORT NIZA
50 EXEC PRIKAZ NIZA
60 END
70 PROC UNOS NIZA
80 I=0
90 REPEAT
100 INPUT "UNESITE BROJ";A(I)
110 I=I+1
120 UNTIL I=10
130 END PROC
140 PROC SORT NIZA
150 FOR B=1 TO 10
160 FOR I=0 TO 8
170 IF A(I)>A(I+1) THEN M=A(I):A(I)=A(I+1):A(I+1)=M
180 NEXT I
190 NEXT B
200 END PROC
210 PROC PRIKAZ NIZA
225 PRINT: PRINT "SORTIRANI NIZ"
220 I=0
230 LOOP
240 PRINT A(I),
250 I=I+1
260 EXIT IF I=10
270 END LOOP
280 END PROC
290 PROC PRIKAZ POCETNOG EKRANA
300 PRINT "(SHIFT+CLR/HOME)UNESITE 10 BROJEVA KOJI CE SE SORTIRATI I PRIKAZATI"
310 END PROCOvde definišemo matricu od 10 elemenata (od 0 do 9)
Odlazimo na proceduru za ispis početnog ekrana
Idemo na proceduru za unos niza
Odlazimo na proceduru za sortiranje niza
Idemo na proceduru za prikaz sortiranog niza
Završetak glavnog programa. Obavezno je završiti program inače će tok programa preći u proceduru i kad dođe do kraja iste i END PROC naredbe prijaviće grešku da ista nije pozvana naredbom EXEC i stati sa izvršavanjem programa
Ova procedura služi da bi se uneo numerički niz u matricu
Praznimo promenljivu I
Početak petlje
Unosimo numeričke podatke u matricu „A“ koja za kordinatu ima promenljivu I
Uvećavamo promenljivu I za 1
Petlja se završava ako je promenljiva dostigla vrednost 10. (Do tada će se uneti svih 10 elemenata matrice od 0 do 9). Ako nije programski tok se vraća na prvu naredbu posle REPEAT
Završetak procedure i povratak na prvu naredbu posle EXEC koja je pozvala ovu proceduru
Ovo je procedura za sortiranje
Dajemo prvu petlju od 10 ciklusa
Dajemo drugu petlju sa 9 ciklusa (0-8) čija će vrednost promenljive I ujedno biti kordinata matrice
Ovo je red koji radi celu stvar sa sortiranjem. Uzima prvi element matrice (I) i upoređuje ga sa sledećim (I+1). Ukoliko je veći zamenjuje se mesto vrednosti tih elemenata u matrici (vrednost prvog elemenata je sačuvana, prvi postaje drugi, a drugi prvi vraćanjem sačuvane vrednosti) i tako za sve elemente matrice od 0 do 8 plus 1. Da bi se sortirali svi elementi treba odraditi 10 x 9 ciklusa
Uvećavanje vrednosti promenljive I za 1 u drugoj petlji (čija vrednost promenljive je kordinata matrice) dok ne dostigne krajnju vrednost 8
Uvećavanje vrednosti promenljive B za 1 u prvoj petlji dok ne dostigne krajnju vrednost 10
Završetak procedure za sortiranje
Procedura za prikaz niza
Ispis teksta pre prikaza sortiranih brojeva
Promenljiva I se prazni
Poćetak petlje
Štampa se vrednost numeričke matrice „A“ sa kordinatom promenljive I
Promenljiva I se uvećava za 1
Izlaz kada promenljiva I dostigne vrednost 10 (do tada su prikazene sve vrednosti matrice od 0 do 9) i odlazak na prvu sledeću naredbu posle END LOOP
Kraj petlje – povratak na prvu naredbu posle naredbe LOOP
Završetak procedure za prikaz
Procedura početnog ekrana
Ispis teksta početnog ekrana
Završetak procedure ispisa početnog ekrana
Startovanjem ovog programa zatražiće se od vas da unesete deset brojeva (nije bitno ako su neki isti ali bolje je, da bi ste videli svrhu programa, da većina budu različiti brojevi). Program će posle unosa sortirati te brojeve od najmanjeg ka najvećem i na kraju prikazati sortirni niz. Dok proučavate ovaj program imajte u vidu da procedure nisu odvojene sa velikim razlikama u programskim linijama kao što je to bio slučaj sa podprogramima kod standardnog bejzika. Za tako nešto nema potrebe jer u slučaju da vam ponestane programskih brojeva za upis linija uvek možete dati naredbu RENUMBER.
CALL – skok na proceduru (procedura kao mesto skoka toka programa)
Ovom naredbom programski tok skače na željenu proceduru i od iste se dalje izvršava. CALL je ekvivalent naredbi GOTO.
Važna napomena: Kada koristimo naredbu CALL za proceduru kao mesto skoka ne sme se stavljati END PROC (pošto je ta naredba ekvivalent naredbi RETURN, sistem će prijaviti grešku da procedura nije pozvana EXEC naredbom i stati sa izvršavanjem programa)
Format naredbe:
CALL – ime procedure – programski tok skače na proceduru sa datim imenom
Primer 1:
10 PRINT "(SHIFT+CLR/HOME)UNESITE PODATKE"
20 CALL UNOS POLAZNIKA
30 PRINT "OVO SE NIKADA NECE ISPISATI"
40 END
50 PROC UNOS POLAZNIKA
60 INPUT "PREZIME POLAZNIKA";P$
70 INPUT "IME POLAZNIKA";I$
80 INPUT "BROJ BODOVA";B
90 PRINT "ZAVRSETAK JEDNOG UNOSA (PREZIME,IME,BOD) ";P$+" ";I$+" ";B
100 ENDPokretanjem ovog programa naredba CALL će programski tok prebaciti na proceduru UNOS POLAZNIKA (preskočivši pritom naredbu PRINT i END u redu 30 i 40) i nastaviti dalje do kraja programa gde će prikazati unose i završiti program.
Primer 2:
10 PROC VRATI
20 PRINT "PRIMER ZA PROC NAREDBU"
30 CALL VRATIOvaj primer zamenjuje čuvenu beskonačnu petlju:
10 PRINT "PRIMER"
20 GOTO 10Ukoliko bi smo koristili naredbu RENUMBER i promenili brojeve programskih linija primer sa PROC i CALL će besprekorno raditi dok će primer sa GOTO naredbom prikazati grešku
Današnja lekcija je pri kraju. Nadamo ste da ste uživali u njoj. Preporučujemo da pokušate sami da napravite neki program. Najbolje je početi od kratkog programa (kostur) koji će se kasnije širiti raznim dodatnim delovima dok ne dobijete konačnu verziju koja može biti ono što se očekivali ili da se u potpunosti razlikuje od vaše prvobitne zamisli.
Veliki pozdrav
| SIMON’S BASIC C64 – lekcija prva | https://techfokus.rs/simonss-basic-za-commodorw-64-lekcija-1/ |
| SIMON’S BASIC C64 – lekcija druga | https://techfokus.rs/simons-basic-c64-lekcija-druga/ |
| SIMON’S BASIC C64 – lekcija treća | https://techfokus.rs/simons-basic-c64-lekcija-treca/ |
| SIMON’S BASIC C64 – lekcija čevrta | https://techfokus.rs/simons-basic-grafika-lekcija-4/ |
| SIMON’S BASIC C64 – lekcija peta | https://techfokus.rs/retrokutak-simons-basic-lekcija-peta/ |
| SIMON’S BASIC C64 – lekcija šesta | https://techfokus.rs/retro-kutak-simons-basic-c64-lekcija-sesta/ |
| SIMON’S BASIC C64 – lekcija sedma | https://techfokus.rs/retro-kutak-simons-basic-c64-lekcija-sedma/ |

