SIMON’S BASIC C64 – lekcija treća
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
Dodeljujemo početnu vrednost promenljivi M
20 REPEAT
Dajemo početak petlje
30 M=M+1
Uvećavamo promenljivu M za 1
40 Z=Z+M
Uvećavamo promenljivu Z za vrednost promenljve M. Na taj način sabiramo svaki broj
50 UNTIL M=50
Petlja se vraća na prvu naredbu posle REPEAT i traje dok promenljiva M ne dostigne vrednost 50
60 PRINT „ZBIR PRVIH 50 BROJEVA JE“;Z
Ispisujemo zbir prvih 50 brojeva
70 END
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
Dodeljujemo početnu vrednost promenljive (prvi neprarni broj)
20 LOOP
Početak petlje
30 PRINT „NEPARNI BROJEVI IZMEDJU 1 I 100=“;N
Ispisuje se tekst i vrednost promenljive N koja je neparan broj
40 N=N+2
Promenljiva se uvećava za 2 tako da, pošto smo počeli od 1, dobijamo uvek neparan broj
50 EXIT IF N>100
U sljučaju da je N veća od 100 petlja se završava i prelazi na sledeću naredbu posle END LOOP
60 END LOOP
Kraj petlje koji stalno vraća na prvu naredbu posle LOOP
70 END
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 PROC
Zadavanjem 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)
Ovde definišemo matricu od 10 elemenata (od 0 do 9)
20 EXEC PRIKAZ POCETNOG EKRANA
Odlazimo na proceduru za ispis početnog ekrana
30 EXEC UNOS NIZA
Idemo na proceduru za unos niza
40 EXEC SORT NIZA
Odlazimo na proceduru za sortiranje niza
50 EXEC PRIKAZ NIZA
Idemo na proceduru za prikaz sortiranog niza
60 END
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
70 PROC UNOS NIZA
Ova procedura služi da bi se uneo numerički niz u matricu
80 I=0
Praznimo promenljivu I
90 REPEAT
Početak petlje
100 INPUT „UNESITE BROJ“;A(I)
Unosimo numeričke podatke u matricu „A“ koja za kordinatu ima promenljivu I
110 I=I+1
Uvećavamo promenljivu I za 1
120 UNTIL I=10
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
130 END PROC
Završetak procedure i povratak na prvu naredbu posle EXEC koja je pozvala ovu proceduru
140 PROC SORT NIZA
Ovo je procedura za sortiranje
150 FOR B=1 TO 10
Dajemo prvu petlju od 10 ciklusa
160 FOR I=0 TO 8
Dajemo drugu petlju sa 9 ciklusa (0-8) čija će vrednost promenljive I ujedno biti kordinata matrice
170 IF A(I)>A(I+1) THEN M=A(I):A(I)=A(I+1):A(I+1)=M
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
180 NEXT I
Uvećavanje vrednosti promenljive I za 1 u drugoj petlji (čija vrednost promenljive je kordinata matrice) dok ne dostigne krajnju vrednost 8
190 NEXT B
Uvećavanje vrednosti promenljive B za 1 u prvoj petlji dok ne dostigne krajnju vrednost 10
200 END PROC
Završetak procedure za sortiranje
210 PROC PRIKAZ NIZA
Procedura za prikaz niza
225 PRINT: PRINT „SORTIRANI NIZ“
Ispis teksta pre prikaza sortiranih brojeva
220 I=0
Promenljiva I se prazni
230 LOOP
Poćetak petlje
240 PRINT A(I),
Štampa se vrednost numeričke matrice „A“ sa kordinatom promenljive I
250 I=I+1
Promenljiva I se uvećava za 1
260 EXIT IF I=10
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
270 END LOOP
Kraj petlje – povratak na prvu naredbu posle naredbe LOOP
280 END PROC
Završetak procedure za prikaz
290 PROC PRIKAZ POCETNOG EKRANA
Procedura početnog ekrana
300 PRINT „(SHIFT+CLR/HOME)UNESITE 10 BROJEVA KOJI CE SE SORTIRATI I PRIKAZATI“
Ispis teksta početnog ekrana
310 END PROC
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 END
Pokretanjem 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 VRATI
Ovaj primer zamenjuje čuvenu beskonačnu petlju:
10 PRINT „PRIMER“
20 GOTO 10
Ukoliko 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/ |

