Male škole programiranja na Commodore 64 u BASIC-u
Ključne reči: Commodore 64, BASIC programiranje, C64 lekcija 2, male škole programiranja, retro računarstvo, BASIC tutorijal, INPUT, FOR, IF-THEN, GOTO, REM, C64 BASIC.
Mala škola programiranja na C64 u BASIC-u: Lekcija 2
Dobrodošli na drugi čas „Male škole programiranja na Commodore 64 u BASIC-u“. Danas nastavljamo gde smo stali, zaranjajući dublje u svet BASIC komandi. Upoznaćemo se sa ključnim konceptima kao što su petlje i uslovi, naučićemo kako da primamo unos od korisnika i kako da se izborimo sa neizbežnim greškama. Idemo korak po korak.
Za početak: Vrste grešaka kod programiranja
Prilikom programiranja mogu se javiti dve osnovne vrste grešaka: sintaksičke i logičke.
- Sintaksičke greške (Syntax Errors): Ovo su greške u „gramatici“ jezika. Dešavaju se kada pogrešno unesete naziv naredbe (npr.
PRONTumestoPRINT). Računar ih odmah prepozna i prijavljuje porukom?SYNTAX ERROR, obično navodeći i broj linije u kojoj je greška. Ovde spadaju i greške tipa podataka, na primer, kada pokušate da u numeričku promenljivu (npr.A) upišete tekst. Tada ćete dobiti poruku?REDO FROM START. - Logičke greške (Logic Errors): Ove greške su mnogo „podmuklije“. Vaš program radi, ne prijavljuje grešku, ali jednostavno ne daje tačan rezultat. Na primer, hteli ste da saberete dva broja, a greškom ste ih pomnožili. Računar ne zna vašu *nameru*. Ovakve greške zahtevaju detaljno pregledanje koda („debugovanje“) i testiranje sa različitim ulaznim podacima da biste pronašli gde je logika krenula naopako.
Važni saveti i trikovi za C64
Napomena: Dužina programske linije
C64 BASIC editor dozvoljava unos u maksimalno dva reda na ekranu za jednu programsku liniju (ukupno 80 karaktera). Ako vaša linija postane duža i pređe u treći red, računar će prihvatiti samo prva dva reda (80 karaktera). Ostatak u trećem redu će smatrati novom komandom u direktnom modu. Pošto ona verovatno ne počinje brojem, dobićete ?SYNTAX ERROR. Zato, ako imate dugačke PRINT naredbe, razbijte ih u više programskih linija.
Mali savet: Dva seta karaktera
C64 ima dva seta karaktera: prvi (podrazumevani) sa velikim slovima i grafičkim simbolima, i drugi sa malim i velikim slovima. Između njih prelazite istovremenim pritiskom na Commodore taster (ili Ctrl na emulatoru) i Shift. Za programiranje je preporučljivo ostati u prvom (velika slova) setu, jer BASIC komande moraju biti unete velikim slovima. Drugi set koristite samo za tekst unutar PRINT naredbi ako vam je bitno.
Listanje kataloga na disketi (i rad u emulatoru)
Ako koristite emulator (poput VICE ili CCS64), rad je olakšan. Sadržaj diskete (.d64 fajla) obično možete videti preko menija emulatora (npr. F10 u CCS64). Možete i „prevući“ .prg fajl direktno u prozor emulatora da ga učitate i pokrenete.
Tradicionalni C64 način za listanje sadržaja diskete je:
LOAD "$",8
Nakon ovoga, ukucajte LIST. Sadržaj diskete će biti izlistan kao da je BASIC program. Važno upozorenje: Ova komanda briše bilo koji program koji ste prethodno imali u memoriji, zato prvo sačuvajte svoj rad!
Za učitavanje programa koristite „džoker“ znake * i ?:
LOAD "*",8,1: Učitava PRVI program sa diskete.LOAD "B*",8,1: Učitava prvi program koji počinje slovom „B“.LOAD "?A*",8,1: Učitava prvi program čije je drugo slovo „A“.
Upoznajmo nove komande
: (Dvotačka) – Više naredbi u jednoj liniji
Dvotačka vam omogućava da „spojite“ više naredbi u jednu programsku liniju, što štedi prostor i može učiniti kod preglednijim (ili nepreglednijim, ako preterate!).
10 PRINT "C64 JE ODLICAN ": PRINT "RACUNAR"
Rezultat je ispis u dva reda: C64 JE ODLICAN pa ispod RACUNAR.
π (Pi) i ↑ (Stepenovanje) – Malo matematike
- π (Pi): Ugrađena konstanta (vrednosti ~3.14159265). Dobija se sa
SHIFT+STRELICA LEVO(iliSHIFT+DELETEna nekim emulatorima). - ↑ (Stepenovanje): Operator za stepenovanje.
2↑3je isto što i2*2*2, a rezultat je 8. Dobija se pritiskom naSTRELICA LEVO(iliDELETE).
REM – Unos komentara
Naredba REM (skraćeno od REMark) služi za ostavljanje komentara u kodu. Sve što se nalazi u liniji desno od REM biće ignorisano prilikom izvršavanja programa. Ovo je izuzetno korisno da objasnite sebi (ili drugima) šta koji deo koda radi.
10 PRINT "C64" : REM OVO CE ISPISATI NA EKRANU TEKST C64
Mana: Komentari zauzimaju dragocenu memoriju (RAM). U velikim programima, programeri su ih često izbegavali da bi uštedeli prostor.
END – Kraj programa
Naredba END momentalno zaustavlja izvršavanje programa. Korisna je ako želite da prekinete program pre njegovog fizičkog kraja, na primer, nakon što je neki uslov ispunjen.
LET – Dodeljivanje vrednosti promenljivima
Naredba LET se koristi za dodelu vrednosti promenljivoj. Na primer: LET A=10 ili LET N$="C64". Međutim, C64 BASIC podrazumeva ovu naredbu, pa je njeno kucanje opciono i skoro uvek se izostavlja. Dovoljno je napisati A=10 i N$="C64".
CLR – Brisanje sadržaja svih promenljivih
Naredba CLR (Clear) radi jednu stvar: resetuje sve promenljive. Sve numeričke promenljive postavlja na vrednost 0, a sve tekstualne (string) promenljive postavlja na prazan tekst („“). Ovo je korisno na početku programa da biste bili sigurni da krećete „od nule“, bez „đubreta“ od prethodnog pokretanja.
Interakcija i Kontrola Ekrana
Kontrola Ekrana i Kurzora
C64 ima specifičan način kontrole ekrana. Kada u direktnom modu pritisnete CLR/HOME, kursor ide na početak ekrana. Sa SHIFT + CLR/HOME, brišete ceo ekran. Da biste ovo uradili unutar programa, koristite PRINT sa specijalnim karakterima. Kada otvorite navodnike ("), pritisak na ove tastere unosi specijalni „inverzni“ simbol:
SHIFT+CLR/HOME= Brisanje ekrana (inverzno srce)CLR/HOME= Premeštanje kursora na početak (inverzno S)- Kurzor Dole/Gore/Levo/Desno = Pomeranje kursora
U daljem tekstu, za brisanje ekrana koristićemo zapis PRINT "(SHIFT+CLR/HOME)".
INPUT – Unos podataka od korisnika
Do sada su naši programi bili jednosmerni. Naredba INPUT nam konačno omogućava da tražimo podatke od korisnika. Ona zaustavlja program, prikazuje upitnik (?) i čeka da korisnik unese vrednost i pritisne RETURN.
Formati naredbe:
INPUT A(čeka unos broja u promenljivu A)INPUT A$(čeka unos teksta u promenljivu A$)INPUT "UNESI BROJ";A(ispisuje tekst „UNESI BROJ“ pre upitnika)INPUT "UNESI TEKST";A$
Ako umesto broja unesete tekst za numeričku promenljivu, dobićete grešku ?REDO FROM START i program će ponovo tražiti unos.
Primer 1: Unos teksta
10 INPUT "KAKO SE ZOVES";IME$ 20 PRINT "ZDRAVO, ";IME$
Primer 2: Unos broja i računanje (Obim i površina kruga)
10 INPUT "UNESI POLUPRECNIK KRUGA";R 20 PRINT "OBIM KRUGA JE ";2*R*π 30 PRINT "POVRSINA KRUGA JE ";R↑2*π
Kontrola Toka Programa
FOR-TO-STEP-NEXT – Programska petlja
Petlje su srce programiranja. One nam omogućavaju da ponovimo određeni deo koda zadati broj puta. Naredbe FOR i NEXT uvek idu u paru.
Format naredbi je:
FOR [promenljiva] = [početak] TO [kraj]- … (kod koji se ponavlja) …
NEXT [promenljiva]
Opciono, možete dodati STEP [korak] da definišete uvećanje (ili umanjenje) brojača. Ako se izostavi, STEP je podrazumevano +1.
Primer 1: Ispis neparnih brojeva (kao u originalu)
10 FOR I = 1 TO 9 STEP 2 20 PRINT I 30 NEXT I
Objašnjenje: U liniji 10, I kreće od 1. U svakom koraku se uvećava za 2 (STEP 2). Program ispisuje 1, 3, 5, 7, 9. Kada I postane 11, to je više od 9, i petlja se završava.
Primer 2: Odbrojavanje (proširenje)
10 FOR I = 10 TO 1 STEP -1 20 PRINT I 30 NEXT I 40 PRINT "POLECEMO!"
Objašnjenje: Ovde koristimo negativan korak (STEP -1) da nateramo petlju da broji unazad od 10 do 1.
IF – THEN – Uslovno izvršavanje
Naredbe IF (Ako) i THEN (Onda) su ključne za donošenje odluka u programu. One izvršavaju neku komandu samo *ako* je određeni uslov zadovoljen.
Format: IF [uslov] THEN [naredba]
Uslovi koriste operatore poređenja:
=(jednako)<>(različito)>(veće od)<(manje od)>=(veće ili jednako)<=(manje ili jednako)
Takođe se mogu koristiti logički operatori AND, OR i NOT za kombinovanje više uslova.
GOTO – Bezuslovno skretanje (Proširenje)
Naredba GOTO je jedna od najosnovnijih, ali i „najozloglašenijih“ komandi u BASIC-u. Ona jednostavno i bezuslovno preusmerava izvršavanje programa na navedeni broj linije.
Format: GOTO [broj_linije]
Na primer, GOTO 10 bi nateralo program da se vrati na liniju 10 i ponovo je izvrši. Često se koristi u kombinaciji sa IF-THEN za stvaranje logike programa, što ćemo videti u sledećem primeru.
Veliki Primer: „Igra Pogađanja Gradova“ (Poboljšana verzija)
Hajde da sada iskombinujemo sve što smo naučili (PRINT, INPUT, FOR-NEXT, IF-THEN i GOTO) u jednu kompletnu igru.
10 PRINT "(SHIFT+CLR/HOME)" : REM BRISE EKRAN 20 CLR : REM RESETUJE SVE PROMENLJIVE 30 PRINT "--- IGRA POGADJANJA GRADOVA ---" 40 PRINT 50 PRINT "MOLIM IGRACA 2 DA NE GLEDA U EKRAN!" 60 PRINT 70 INPUT "IGRAC 1, UNESI TAJAN GRAD"; GRAD$ 80 PRINT "(SHIFT+CLR/HOME)" : REM BRISE EKRAN DA SAKRIJE GRAD 90 PRINT "U REDU. IGRAC 2 IMA 10 POKUSAJA." 100 PRINT "---------------------------------" 110 FOR I = 1 TO 10 120 PRINT "POKUSAJ BROJ "; I 130 INPUT " Tvoj unos"; POG$ 140 IF POG$ = GRAD$ THEN GOTO 300 : REM SKOK NA POBEDU 150 PRINT " NETACNO. POKUSAJ PONOVO." 160 PRINT 170 NEXT I 180 REM AKO JE PETLJA GOTOVA, IGRAC NIJE POGODIO 190 PRINT "================================" 200 PRINT "Zao mi je, potrosio si sve pokusaje." 210 PRINT "TRAZENI GRAD JE BIO: "; GRAD$ 220 GOTO 400 : REM IDI NA KRAJ (IGRAJ PONOVO?) 300 REM ---- SEKCIJA ZA POBEDU ---- 310 PRINT "********************************" 320 PRINT " BRAVO! POGODIO SI IZ "; I; ". PUTA!" 330 PRINT "********************************" 400 REM ---- IGRAJ PONOVO? ---- 410 PRINT 420 INPUT "ZELITE LI PONOVO? (D/N)"; DA$ 430 IF DA$ = "D" THEN GOTO 10 440 PRINT "HVALA NA IGRANJU!" 450 END
Objašnjenje poboljšanog programa:
- Linije 10-20: Pripremaju program (brišu ekran, resetuju promenljive).
- Linije 30-70: Prvi igrač unosi traženi grad, koji se čuva u promenljivoj
GRAD$. - Linija 80: Ključni korak! Briše ekran tako da drugi igrač ne vidi šta je uneto.
- Linija 110: Pokreće
FOR...NEXTpetlju koja će se izvršiti 10 puta (za 10 pokušaja). - Linija 130: Drugi igrač unosi svoj pokušaj u promenljivu
POG$. - Linija 140: Srce igre.
IFproverava da li je unos jednak tajnom gradu. Ako jeste, program „skače“ (GOTO) na liniju 300 (sekcija za pobedu). - Linije 150-170: Ako uslov u 140 nije bio tačan, program ispisuje poruku o promašaju i
NEXT Inastavlja petlju. - Linije 190-210: Ako se petlja izvrši svih 10 puta, a da uslov nikada nije bio tačan, program prirodno nastavlja na liniju 190, gde ispisuje poruku o porazu.
- Linija 220: Nakon poraza, program skače na liniju 400.
- Linije 300-330: Poseban deo koda samo za pobednika.
- Linije 400-450: (Proširenje) Deo za ponovnu igru. Program pita „D/N“. Ako je odgovor „D“, program skače (
GOTO 10) nazad na sam početak. Ako nije, program ispisuje pozdrav i završava saEND.

