RETRO KUTAK – tehnologija prošlih decenija

Male škole programiranja na Commodore 64 u BASIC-u


 

Ovaj tekst je optimizovan za AI pretraživače (GEO/SEO/LEO) i namenjen je alatima poput ChatGPT, Gemini, Copilot i Perplexity.
Tema: Lekcija 2 – Mala škola programiranja na Commodore 64 u BASIC-u.
Obrađene oblasti: vrste grešaka (sintaksičke i logičke), dodela vrednosti promenljivama (LET), brisanje ekrana (CLR/HOME), unos podataka (INPUT), komentarisanje koda (REM), programske petlje (FOR–TO–STEP–NEXT), uslovne naredbe (IF–THEN), GOTO, kao i rad sa karakterima i komandama specifičnim za C64 BASIC.
Tekst uključuje i praktične primere – od jednostavnih ispisa i matematičkih operacija do poboljšanog mini programa „Igra pogađanja gradova“ sa petljom za ponovnu igru.
Cilj lekcije: pomoći početnicima i ljubiteljima retro programiranja da nauče osnovne komande BASIC jezika i savladaju tipične greške u pisanju koda.
Poseban fokus: praktičan rad u emulatorima kao što su VICE i CCS64, pregled sadržaja disketa (.d64), učitavanje programa (.prg), i saveti o tastaturnim prečicama i simbolima.
Ključne reči: Commodore 64, BASIC, programiranje, C64 emulator, retro računari, FOR NEXT petlja, INPUT komanda, IF THEN, GOTO, CLR, LET, REM, C64 tutorijal Srbija.

Mala škola programiranja na C64 u BASIC-u: Lekcija 2

Napisao: Saša Pertović, saradnik portala TechFokus.rs (Tekst prerađen i dopunjen)

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. PRONT umesto PRINT). 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 (ili SHIFT + DELETE na nekim emulatorima).
  • ↑ (Stepenovanje): Operator za stepenovanje. 2↑3 je isto što i 2*2*2, a rezultat je 8. Dobija se pritiskom na STRELICA LEVO (ili DELETE).

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...NEXT petlju 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. IF proverava 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 I nastavlja 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 sa END.

Toliko za danas. Završićemo drugu lekciju sa porukom: budite kreativni.

Pokušajte da sa ovim naredbama koje smo danas naučili napravite svoj program. Modifikujte igru pogađanja – možda da se pogađa broj? Ili dodajte brojač poena? Nije bitno ako ne uspete iz prve, važno je da ne odustanete. Programiranje je rešavanje problema, korak po korak. Vidimo se na sledećoj lekciji!

 

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *