Page 1
Naravno, da bi se u potpunosti ovladalo korištenjem nekog programskog proizvoda, potrebno je
konzultirati popratnu literaturu, te ako je moguće prućiti jednostavnije primjere. Svaka programska
potpora uz sebe obiĉno ima više ili manje uspješnu pomoć (Help), koja je itekako dobrodošla u
radu. Nekad su to male enciklopedije. Za uĉenje programiranja, za poĉetak najpogodniji je QBASIC
(Quick Beginner's All-Purpose Symbolic Instruction Code). Tim više što ovaj programerski alat pri
izradi izvornog koda provjerava greške i ukazuje na njih. Ima dobar i koristan vodiĉ koji prikazuje
kako se koriste pojedine komande i sadrži primjere funkcija.
Uvodni ekran pomoći programske potpore QBasica sastoji se od tri dijela:
* Index (Abecedni popis i link-ovi prema naredbama i funkcijama)
* Contents (Sadržaj Help-a po poglavljima)
* Using Help (naĉin uporabe Help-a)
Prvo treba prouĉiti naĉin uporabe Help-a, odnosno uputu kako Help prikaze dohvatiti i koristiti.
Link-ovi 'Contents' i 'Contents' prisutni su na svakom prikazu. Uvodni 'Contents' prikaz izgleda
prema narednoj slici.
Qbasic - Content
Slika 6.2.3 Uvodni ekran sadržaja 'Content' prozora pomoći.
Cjelina 'Orientation' sadži upute kako koristi prikaze pomoći, te kako koristiti komande samog alata
Qbasic. To je u suštini 'toolbar' po windows terminologiji preko kojeg se dolazi do pojedinih
komandi programske potpore QBasic unutar pripadnih padajućih izbornika, kao što je otvaranje i
spremanje datoteka (unutar FILE izbornika) ili ureĊivanje programskih linija u editoru QBasic-a
(unutar EDIT izbornika). Iz literature ili iz programske potpore pomoći samog alata, najvažnije je
prvo spoznati kakva je SINTAKSA jeziĉkog procesora. Sintaksa je skup pravila potrebnih da se
ispravno napišu i poslože naredbe i funkcije koje jeziĉki procesor koristi. Na narednoj slici prikazan
je opis koji korisnika upućuje kako da rastumaĉi upute koje slijede uz svaku KLUĈNU RIJEĈ
jeziĉkog procesora.
QBasic - Sintaksa
Slika 6.2.4 Upoznavanje s pravilima tumaĉenja sitakse QBasic-a.
Program je u suštini smišljeni skup naredbi koje se slijedno izvršavaju prema dijagramu tijeka
odnosno redoslijed akcija nanizanih jedna za drugom. Svaka naredba može se sastojati od:
* Kljuĉne rijeĉi (keyword)
* Objekta ili objekata djelovanja kljuĉne rijeĉi (placeholders)
* Dodatnih naputaka kljuĉnoj rijeĉi (optional item)
* Iskljuĉivo jednog izbora od ponuĊenih (choice x)
* Obrade više pojmova u slijedu (items)
* Strukture od više kljuĉnih rijeĉi (block)
Kljuĉna rijeĉ je nalog-naredba interpreteru da izvrši programski kod unutar jeziĉkog procesora koji
pripada toj rijeĉi (na primjer ABS, BEEP itd.) uz poštivanje svih dodataka koji su toj kljuĉnoj rijeĉi
pridruženi. Kako su te rezervirane rijeĉi upravo pozivi prema pojedinom programskim rutinama
(izvršivi kod) ne smiju se te rijeĉi uporabiti kao imena varijabli, konstanti ili funkcija prilikom
pisanja programskih linija da prilikom njihovog interpretiranja ne bi došlo do zbrke. Nije dobro
nazvati ni funkciju imenom 'absolutno' jer to ime u sebi sadrži kljuĉnu rijeĉ ABS što može opet biti
uzrok zbrci prilikom interpretiranja naredbi.
Svakoj kljuĉnoj rijeĉi pripada opis na koga se njeno djelovanje odnosi (placeholder). To može biti
ime datoteke koju treba otvoriti ili zatvoriti, varijable (kao 'ime_osobe' i / ili prezime_osobe),
ureĊaja (rezolucija ekrana na primjer) i sliĉno. No ne mora biti ništa definirano, ali se tada izvršava
podrazumna akcija (default) ako kljuĉna rijeĉ ustanovi da nema ovog opisa.
Page 2
Dodatni naputak - opcija (optional) pobliže definirana ponašanje kljuĉne rijeĉi i kako nije obvezan
izvršit će se podrazumni. Ovaj dodatni nalog u prikazu ispravnog pisanja naredbe postavlja se u
uglate zagrade. Dakle može se dopisati, ali ne mora i može ih biti više.
U vitiĉastim zagradama su pojmovi (item) koji mogu biti, na primjer unutar opcija, i koji kažu da se
može uporabiti samo jedan od njih unutar vitiĉastih zagrada. Dakle, to je opis uporabe iskljuĉivo
jednog izbora od ponuĊenih.
Pojmovi u slijedu odnose se najĉešće na skup zapisa koji se moraju upisati u polje( tablicu) ili u
datoteku, ili se iz njih proĉitati, kao na primjer ime1, prezime1, ime2, prezime2 itd. Najĉešće su
pojmovi vezani uz naredbe koje se nalaze unutar nekakve strukture.
Struktura je više naredbenih linija koje zapoĉinju i završavaju poĉetnom i završnom kljuĉnom rijeĉi
strukture. Dakle pojam s najmanje dvije kljuĉne rijeĉi. Unutar strukture mogu biti neke druge
naredbene linije koje ne sadrže kljuĉne rijeĉi strukture. Moguće je da se unutar jeden strukture
nalazi još jedna struktura, ali tada treba paziti da se ne 'ukrižaju'. Naime poĉetak i kraj jedne
strukture (unutarnje) mora biti omeĊen kljuĉnim rijeĉima druge strukture (vanjske). Unutar
strukture obiĉno se nalazi naredba koja u odreĊenim okolnostima daje nalog za napuštanje
strukture.
Kljuĉnih rijeĉi ima popriliĉan broj. Stoga je od velike pomoći abecedni popis kljuĉnih rijeĉi (indeks)
preko kojeg se dolazi do opisa naredbe kako se koristi kljuĉna rijeĉ. Poĉetni dio indeksa prikazan je
na narednoj slici.
QBasic - Naredbe
Slika 6.2.5 Abecedni popis naredbi i funkcija QBasic-a.
Pri odabiru željene kljuĉne rijeĉi, po opisu naredbe kako se koristi, kod složenijih naredbi slijedi i
jednostavan primjer kako se koristi odabrana naredba ili struktura (example), te link-ovi prema
kljuĉnim rijeĉima i strukturama (see also) koji pripadaju uz odabranu kljuĉnu rijeĉ ili su srodne po
naĉinu izvršavanja. Uputa od tri toĉke u vrhu slike vrlo jednostavno opisuje kako doći do željene
kljuĉne rijeĉi.
Kako ima oko 240 kljuĉnih rijeĉi jasno je da ih treba pomno prouĉiti kako bi se znale ispravno
uporabiti. Jedan te isti skup naredbi može se izvršiti s razliĉitom brzinom, ovisno o tome kako su
uporabljene pojedine kljuĉne rijeĉi ili koje su strukture uporabljene za istu zadaću. Stoga je
potrebno uz njihovo poznavanje znati u mogućnosti koje QBasic nudi glede uporabe raĉunalni
resursa. Jasno je da treba poštovati minimalne zahtjeve za raĉunalnu opremu koje proizvoĊaĉ
QBasic-a ili Delphi-ja traži za ispravan i uĉinkovit rad njihovog proizvoda.
QBASIC
PRIRUĈNIK
Page 3
NAPISAO:
ERTIĆ
ARITMETIĈKI OPERATORI I FUNKCIJE
U aritmetiĉkim izrazima mogu se koristiti slijedeći aritmetiĉki operatori:
+ zbrajanje 7 + 2 = 9
oduzimanje 7 2 = 5
* množenje 7 * 2 = 14
/ dijeljenje 7 / 2 = 3.5
\ cjelobrojno
dijeljenje 7 \ 2 = 3
MOD ostatak kod
cjelob. dijeljenja 7 MOD 2 = 1
ARITMETIĈKE FUNKCIJE
SGN(x) Daje predznak izraza.
SGN ( 4) = 1
SGN (4) = 1
SGN (0) = 0
ABS(x) Izraĉunava apsolutnu vrijednost izraza.
ABS (4) = 4
ABS ( 4) = 4
INT(x) Decimalni broj zaokružuje na prvi manji cijeli broj
FIX(x) Odbacuje decimale broja.
CINT(x) Zaokružuje decimalni broj na prvi bliži cijeli broj.
Page 4
x INT(x) FIX(x) CINT(x)
---------------------------
2.1 2 2 2
2.9 2 2 3
2.1 3 2 2
2.9 3 2 2
RND Izraĉunava sluĉajni broj izmeĊu 0 i 1.
PRINT RND > .4364328
Kada trebamo neki cijeli broj u odreĊenom intervalu koristimo se slijedećom formulom:
x = a + INT ( RND * ( b a + 1 ))
a najmanji broj
b najveći broj
Primjer: Ispiši jedan sluĉajni broj koji će biti troznamenkast.
PRINT 100 + INT ( RND * ( 999 100 +1 ))
Prije upotrebe funkcije RND potrebno je zadati naredbu RANDOMIZE TIMER. Naredba
RANDOMIZE odre|uje iz koje vrijednosti }e se izra~unavati slu~ajan broj. Da ta vrijednost nikada
ne bi bila ista tj. da bi bila nepredvidljiva koristi se funkcija TIMER. Funkcija TIMER pamti vrijeme
koje je pro{lo od pono}i u sekundama. Npr.
PRINT TIMER ispisat će trenutno vrijeme izraženo u sekundama.
Primjer:
'ĉovjeĉe ne ljuti se
'simulacija bacanja kocke
CLS
RANDOMIZE TIMER
broj%=1+INT(RND*6)
PRINT "Dobio si"; broj%
VARIJABLE
Varijabla je dio memorije u kojem se ĉuva neki podatak. Do podatka koji se ĉuva na nekoj
memorijskoj lokaciji možemo doći navoĊenjem imena varijable za koju je rezerviran taj prostor.
Varijabla ima svoje ime, tip i vrijednost.
1. IME VARIJABLE
Ime varijable je jedna rijeĉ koja mora zapoĉeti slovom i može sadržavati slova i brojeve.
Specijalni znakovi (. , ? itd.) nisu dozvoljeni u imenu varijable. Ime varijable može biti dugaĉko
najviše 40 znakova. Za ime varijable ne može se upotrijebiti rezervirana rijeĉ koja znaĉi neku
naredbu u QBASICU. Uobiĉajeno je da se imena varijabli pišu malim slovom, mada raĉunalo ne
Page 5
pravi razliku izmeĊu malih i velikih slova.
Primjeri ispravno napisanih imena varijabli:
suma, zbroj1, ponovi, a1 ...
Primjeri neispravno napisanih imena:
1a, umnožak, zbroj 1, print, a.1 ...
Prilikom davanja imena varijabli, trebamo izabrati takvo ime koje će asocirati na ono što se ĉuva
u toj varijabli npr: zbroj, prosjek, prezime itd. Treba izbjegavati imena kao što su: a, b, a1, itd.
zbog toga što je takav program nerazumljiv za onoga tko nije napisao taj program pa ne zna što
znaĉi koja od tih varijabli.
2. TIP VARIJABLE
Tip varijable odreĊuje kakav tip podataka se ĉuva u toj varijabli. Razliĉiti tipovi podataka
zauzimaju razliĉitu koliĉinu memorije. Tipovi su slijedeći:
% INTEGER varijabla u kojoj se ĉuva cjelobrojna vrijednost. U ovom tipu varijable mogu se
ĉuvati samo cijeli brojevi koji se nalaze u intervalu od 32768 do +32767
& LONG dugaĉka cjelobrojna varijabla u kojoj se mogu ĉuvati cijeli brojevi u intrvalu
od 2147483648 do +2147483647. Ova varijabla zauzima više mjesta u memoriji nego INTEGER
varijabla
! SINGLE varijabla u kojoj se mogu ĉuvati decimalni brojevi. Brojevi su prikazani s
takozvanom jednostrukom toĉnošću tj. prikazani su sa 8 znamenki.
# DOUBLE varijabla u kojoj se ĉuvaju decimalni brojevi koji se prikazuju sa dvostrukom
toĉnošću tj. prikaziju se sa 17 znamenki.
$ STRING varijabla u kojoj se ne ĉuvaju brojevi nego se ĉuvaju rijeĉi i reĉenice. Dužina
STRING varijable može biti najviše 32767 znakova.
Pokušajte:
kvoc% = 10/3
PRINT kvoc%
kvoc! = 10/3
PRINT kvoc!
kvoc# = 10/3
PRINT kvoc#
3. VRIJEDNOST VARIJABLE
Varijabli se vrijednost dodjeljuje naredbom za dodjeljivanje vrijednosti ( znak =) npr:
broj%=5
broj!=2+3/4
broj!=broj!+1
Page 6
UVJETI
Uobiĉajeno, QBASIC prilikom izvršavanja programa ide od vrha prema dnu i izvršava naredbu po
naredbu. MeĊutim, ponekad se program grana na više dijelova i izvršava se samo jedna grupa
naredbi, a druge naredbe se preskaĉu.
Ovo grananje ostvaruje se postavljanjem uvjeta. Ako je postavljeni uvjet ispunjen izvršit će se
jedna grupa naredbi, a ako nije ispunjen izvršit će se druga grupa naredbi.
U QBASIC u ovakvo uvjetno grananje možemo ostvariti na više naĉina. Koji ćemo naĉin
upotrijebiti oviso o složenosti uvjeta koje ispitujemo i o stilu programiranja.
Najjednostavnije uvjete možemo ispitivati pomoću "jednolinijske" IF naredbe. Općeniti oblik ove
naredbe je:
IF uvjet THEN naredbe (ELSE naredbe)
Uvjeti se postavljaju pomoću relacijskih izraza. Relacijski izraz sastoji se od dva aritmetiĉka
izraza izmeĊu kojih je znak relacije:
ocjena% < 5
aritm. aritm.
izraz relacija izraz
Aritmatiĉki izraz može biti bilo koji aritmetiĉki izraz, varijabla ili konstanta.
Relacije koje se mogu upotrebljavati su:
< manje od
> veće od
= jednako
=< jednako ili manje
=> jednako ili veće
<> razliĉito
Ako je uvjet ispunjen izvršit će se naredbe iza THEN a ako uvjet nije ispunjen prijeći će se na
slijedeću naredbu:
INPUT "Koliko imaš iz matematike"; ocjena%
IF ocjena% = 5 THEN PRINT "Bravo!"
IF ocjena% < 5 THEN PRINT "Moraš više uĉiti."
Kada ispitujemo jednostavne uvjete i ako imamo samo dvije mogućnosti možemo IF naredbu
nadopuniti sa ELSE:
INPUT "Koliko imaš iz matematike"; ocjena%
IF ocjena% = 5 THEN PRINT "Bravo!" ELSE PRINT "Moraš više uĉiti."
Ako je uvjet ispunjen, izvršit će se naredba iza THEN, a ako uvijet nije ispunjen, izvršit će se
naredba iza ELSE.
Page 7
Složenije uvjete možemo ispitivati tako da dva ili više relacijskih izraza povežemo logiĉkim
operatorima OR i AND. (Ostali logiĉki operatori: NOT, XOR, EQV, IMP):
INPUT "Koliko imaš iz matematike"; ocjena%
IF ocjena% > 5 OR ocjena% < 1 THEN PRINT "Upisao si nepostojeću ocjenu."
OR (ili) naredbe iza THEN izvršit će se ako je ispunjen ili prvi ili drugi ili oba uvjeta.
AND (i) naredbe iza THEN izvršit će se samo ako su ispunjena oba uvjeta ( i prvi i drugi).
Zadaci za vježbu:
1. Unesi jedan broj. Program treba provjeriti da li je upisani broj paran ili neparan.
INPUT "Unesi jedan broj", broj%
IF broj% / 2 = INT (broj% / 2) THEN PRINT "Broj je paran." ELSE PRINT "Broj je neparan."
2. Unesi jedan broj. Program treba provjeriti da li je upisani broj pozitivan ili negativan.
INPUT "Unesi jedan broj", broj%
IF broj% => 0 THEN PRINT "Broj je pozitivan." ELSE PRINT "Broj je negativan."
3. Program treba zamisliti dva broja izmeĊu 1 i 10, pitati nas koliko iznosi njihov zbroj i reći nam
da li smo toĉno odgovorili.
RANDOMIZE TIMER
prvi% = 1 + INT (RND * 10)
drugi% = 1 + INT (RND * 10)
zbroj% = prvi% + drugi%
PRINT "Koliko je";prvi%;"+";drugi%;
INPUT odgovor%
IF odgovor% = zbroj% THEN PRINT "Bravo!" ELSE PRINT "Pogrešno. Toĉan odgovor je";zbroj%
"Jednolinijska" IF naredba pogodna je kada se ispituju jednostavni uvjeti i kada je naredba
dovoljno kratka da stane cijela na ekran. Ako to nije sluĉaj, program pisan na ovaj naĉin biti će
nepregledan, neĉitak i nerazumljiv.
Da bi se to izbjeglo, poželjno je koristiti IF END IF strukturu.
Opći oblik IF END IF strukture je:
IF uvjet THEN
naredbe
(ELSEIF uvjet THEN
naredbe)
(ELSE
naredbe)
END IF
Svaku "jednolinijsku" IF naredbu možemo lako prevesti u
IF END IF strukturu:
INPUT "Koliko imaš iz matematike"; ocjena%
Page 8
IF ocjena% = 5 THEN
PRINT "Bravo!"
ELSE
PRINT "Moraš više uĉiti."
END IF
Upotreba ELSEIF
Recimo da trebamo napisati program koji će na osnovu prosjeka ocjena ispisati s kojim uspjehom
prolazi uĉenik:
IF prosjek! => 4.5 THEN
PRINT "Odliĉan."
END IF
IF prosjek! => 3.5 AND prosjek! < 4.5 THEN
PRINT "Vrlo dobar."
END IF
IF prosjek! => 2.5 AND prosjek! < 3.5 THEN
PRINT "Dobar."
END IF
IF prosjek! < 2.5 THEN
PRINT "Dovoljan."
END IF
Da bi ovakav program uĉinili kraćim i ĉitljivijim, možemo ga napisati ovako:
IF prosjek! => 4.5 THEN
PRINT "Odliĉan."
ELSEIF prosjek! => 3.5 THEN
PRINT "Vrlo dobar."
ELSEIF prosjek! => 2.5 THEN
PRINT "Dobar."
ELSE
PRINT "Dovoljan."
END IF
U QBASIC u postoji još jedna kontrolna struktura:
SELECT END SELECT. Ova struktura je vrlo sliĉna strukturi IF END IF.
SELECT CASE prosjek!
CASE IS => 4.5
PRINT "Odliĉan."
CASE 3.5 TO 4.4
PRINT "Vrlo dobar."
CASE 2.5 TO 3.4
PRINT "Dobar."
CASE ELSE
PRINT "Dovoljan."
END SELECT
Da li će programer koristiti IF END IF strukturu ili strukturu SELECT END SELECT ovisi o
njegovom nahoĊenju i stilu programiranja. Smatra se da je struktura SELECT END SELECT
pogodnija ako treba ispitati više od tri uvjeta.
Page 9
PONAVLJANJE NAREDBI PETLJE
Petlje koristimo kada neki niz naredbi treba izvršiti više puta. U QBASIC u postoje dva naĉina
zadavanja petlji: FOR NEXT striktura i DO LOOP struktura.
FOR NEXT STRUKTURA
Koristi se kada neki niz naredbi treba ponoviti tono odreĊeni broj puta. Opći oblik strukture je:
FOR varijabla = izraz TO izraz
naredbe
NEXT varijabla
Primjer: Ispiši sve brojeve od 1 do 100.
FOR broj% = 1 TO 100
PRINT broj%;
NEXT broj%
PRINT "Kraj."
Varijabla broj% je kontrolna varijabla. Vrijednost te varijable odre|uje da li će se petlja ponoviti
ili neće. Ona se u svakom prolazu povećava za 1. Kada vrijednost kontrolne varijable postane veća
od 100, naredbe u petlji se neće izvršavati, nego će se program nastaviti iza naredbe NEXT.
Kada želimo da se kontrlna varijabla mijenja u koraku razliĉitom od 1 moramo to zadati
naredbom STEP.
Primjer: Ispiši sve neparne brojeve izmeĊu 1 i 100
FOR nepar% = 1 TO 100 STEP 2
PRINT nepar%;
NEXT nepar%
Primjer: Ispiši sve brojeve unazad od 100 do 1.
FOR broj% = 100 TO 1 STEP 1
PRINT broj%;
NEXT broj%
Petlju možemo zadavati unutar petlje. Pri tome moramo paziti da unutrašnju petlju zatvorimo
prije vanjske.
FOR prvi% = 1 TO 10
FOR drugi% = 1 TO 10
produkt% = prvi% * drugi%
PRINT prvi%;"*";drugi%;"=";produkt%,
NEXT drugi%
PRINT
NEXT prvi%
Želimo li iz FOR NEXT petlje izaći prije nego što ona sama doĊe do kraja možemo koristiti
Page 10
naredbu EXIT FOR:
PRINT "Program postavlja 100 zadataka."
PRINT "Ako želiš odustati utipkaj 999."
RANDOMIZE TIMER
FOR broj% = 1 TO 100
prvi% = 1+INT(RND*10)
drugi% = 1+INT(RND*10)
produkt% = prvi% * drugi%
PRINT "Koliko je ";prvi%;"*";drugi%
INPUT odgovor%
IF odgovor% = 999 THEN
EXIT FOR
ELSEIF odgovor% = produkt% THEN
PRINT "Toĉno."
ELSE
PRINT "Krivo. Odgovor je "; produkt%
END IF
NEXT broj%
DO LOOP STRUKTURA
Kada želimo odreĊene naredbe ponavljati više puta a ne znamo toĉno koliko puta, već broj
ponavljanja ovisi o nekom uvjetu koristimo DO LOOP strukturu. Ova struktura ima dava oblika.
1. Ispitivanje uvjeta na poĉetku
Opći oblik strukture je:
DO WHILE (UNTIL) uvjet
naredbe
LOOP
Primjer: Izraĉunavanje faktorijela (faktorijel 4!=4*3*2=24)
INPUT "Za koji broj želiš faktorijel";broj%
faktorijel% = 1
kontrola% = 2
DO WHILE kontrola% <= broj%
faktorijel% = faktorijel% * kontrola%
kontrola% = kontrola% + 1
LOOP
PRINT faktorijel%
Varijabla kontrola% odreĊuje koliko puta će se ova petlja ponavljati. U svakom prolazu
kontrola% se povećava za 1 i ova petlja će se ponavljati skroz dok je varijabla kontrola% manja ili
jednaka broju koji smo upisali. Kada ona jednom postane veća, tj kada uvijet više ne bude
ispunjen, petlja se ne}e izvršavati nego će se program nastaviti iza naredbe LOOP.
Umjesto WHILE (dok je) možemo koristiti UNTIL (dok ne bude).
DO UNTIL kontrola% > broj%
LOOP
Page 11
Petlja zadana na ovaj naĉin prestati će raditi kada uvijet bude ispunjen.
2. Ispitivanje uvjeta na kraju
Opći oblik je:
DO
naredbe
LOOP WHILE (UNTIL) uvjet
Primjer:
DO
CALL igra
INPUT "Želiš li još? (d/n) ", odgovor$
LOOP WHILE odgovor$ = "d"
Ova petlja ponavljati će se skroz dok kao odgovor utipkavamo "d". Ako utipkamo bilo što drugo,
petlja se neće izvršiti.
DO
CALL igra
INPUT "Želiš li još? (d/n)", odgovor$
LOOP UNTIL odgovor$ = "n"
Ova petlja prestati će se izvršavati samo ako pritisnemo "n".
Osnovna razlika izmeĊu ispitivanja uvjeta na poĉetku petlje i i spitivanja uvjeta na kraju petlje je
u tome što će se naredbe u petlji koja ispituje uvjet na kraju izvršiti bar jednom ĉak i ako uvjet za
ponavljanje nije ispunjen. U petlji koja ispituje uvjet na poĉetku, ako uvjet nije ispunjen, neće se
izvršiti niti jedna naredba unutar petlje.
Moguće je napisati beskonaĉnu petlju bez WHILE i UNTIL uvjeta:
DO
PRINT broj%;
broj% = broj% + 1
LOOP
U ovakvoj strukturi možemo koristiti naredbu EXIT DO:
DO
PRINT broj%;
IF broj% > 100 THEN EXIT DO
broj% = broj% + 1
LOOP
MeĊutim, svaku petlju sa EXIT DO možemo napisati kao DO LOOP strukturu sa WHILE ili UNTIL:
DO UNTIL broj% > 100
PRINT broj%;
broj% = broj% + 1
LOOP
ili:
Page 12
DO
PRINT broj%;
broj% = broj% + 1
LOOP WHILE broj% <= 100
OPERACIJE SA STRINGOVIMA
String je niz znakova (slovĉanih, brojĉanih i drugih znakova). Sadržaj stringa ĉuva se u string
varijabli. Tip ovih varijabli oznaĉava se znakom "$". Dužina string varijable može iznositi najviše
32767 znakova.
U raĉunalu, svaki znak je predstavljen brojĉanim kodom, tj svaki znak ima svoj broj. Znaci su
rasporeĊeni prema tzv. ASCII kodu (American Standard Code for Information Interchange). Postoji
256 razliĉitih ASCII kodova.
Slijedeći program prikazuje svih 256 kodova i znakove koje ti kodovi predstavljaju:
CLS
FOR broj% = 0 TO 255
PRINT broj%; CHR$(broj%),
NEXT broj%
U gornjem programu koristili smo funkciju CHR$(n). Ova funkcija pronalazi znak ĉiji je ASCII kod
n, npr. PRINT CHR$(65) ispisati će znak A.
Suprotna funkcija je ASC(string). Ova funkcija pronalazi ASCII kod prvog karaktera zadanog
stringa, npr. PRINT ASC("A") ispisati će 65.
PODSTRING
Podstring je dio stringa. Postoji više naredbi i funkcija za izdvajanje podstringa.
LEFT$ Ova funkcija izdvaja prvih n karaktera nekog stringa:
pozdrav$="Dobar dan"
PRINT LEFT$(pozdrav$,3)
Dob
RIGHT$ Ova funkcija izdvaja zadnjih n karaktera nekog stringa:
PRINT RIGHT$(pozdrav$,3)
dan
MID$ ova funkcija izdvaja dio stringa zadane dužine poĉevši od zadanog mjesta:
PRINT MID$(pozdrav$,4,2)
ar
Ako izostavimo broj karaktera koje želimo izdvojiti, tada će se izdvojiti svi karakteri od zadane
pozicije do kraja stringa:
PRINT MID$(pozdrav$,4)
Page 13
ar dan
LEN Ova funkcija prebrojava koliko karaktera je dugaĉak string:
PRINT LEN (pozdrav$)
9
Primjer: Koliko puta se u zadanom stringu pojavljuje znak "a"?
CLS
pozdrav$="Dobar dan"
brojznakova%=0
FOR slovo% = 1 TO LEN (pozdrav$)
znak$=MID$(pozdrav$,slovo%,1)
IF znak$="a" THEN
brojznakova%=brojznakova%+1
END IF
NEXT slovo%
PRINT "Slovo a pojavljuje se"; brojznakova%; " puta."
POREĐENJE STRINGOVA
Stringovi se porede po svojim ASCII kodovima, a poreĊenje poĉinje od prvog karaktera:
"A" < "a"
"abc" < "bca"
"dan" < "danko"
"abc" < " abc"
"BB" < "Ba"
Zbog toga što velika i mala slova imaju razliĉite ASCII kodove, dobro je prije poreĊenja stringove
prevesti u mala slova odnosno velika slova. Za to nam služe funkcije UCASE$ i LCASE$.
Funkcija UCASE$ pretvara sva slova zadanog stringa u velika, a funkcija LCASE$ pretvara sva
slova zadanog stringa u mala:
pozdrav$="Dobar dan"
PRINT UCASE$ (pozdrav$)
DOBAR DAN
PRINT LCASE$(pozdrav$)
dobar dan
OSTALE NAREDBE I FUNKCIJE
LTRIM$(string) eliminira vodeće praznine: " abc"="abc"
RTRIM$(string) eliminira naknadne praznine: "abc "="abc"
STR$(broj) pretvara numeriĉku varijablu u string
VAL(string) pretvara string u broj
STRING$(4,a) ispisuje ĉetiri znaka "a"
SPACE$(7) ispisuje sedam praznina
ZAMJENA JEDNOG STRINGA DRUGIM
Page 14
MID$(pozdrav$,7,3)="noć" u stringu "Dobar dan", poĉevši od sedmog mjesta, slijedeća tri znaka
zamjeni sa znakovima "noć":
PRINT pozdrav$
Dobar noć
INSTR$("Dobar dan","dan") pronalazi od kojeg mjesta se manji string pojavljuje u većem:
PRINT INSTR$(pozdrav$,"dan")
7
GRAFIKA
Da bi mogli crtati u QBASICU moramo aktivirati grafiĉki ekran. To se ĉini naredbom SCREEN.
Vrsta grafiĉkog ekrana zavisi o vrsti grafiĉke kartice. Najĉešće se koristi ekran niske rezolucije
(SCREEN 1) i ekran visoke rezolucije (SCREEN 2).
NISKA REZOLUCIJA.
Aktivira se naredbom:
SCREEN 1
Rezolucija ovog ekrana je 320 x 200. To znaĉi da je ekran podijeljen na 200 redova a u svakom
redu ima 320 toĉaka. Toĉka 0,0 nalazi se u gornjem lijevom kutu, a toĉka 319,199 nalazi se u
donjem desnom kutu.
VISOKA REZOLUCIJA
Aktivira se naredbom:
SCREEN 2
Rezolucija ovog ekrana je 640 x 200. Toĉka 0,0 nalazi se u gornjem lijevom kutu, a toĉka
639,199 nalazi se u donjem desnom kutu.
NAREDBE ZA CRTANJE
Za crtanje pojedinih toaka na ekranu koristimo naredbu PSET.
PSET (x,y),color
Naredba PSET crta toĉku na zadanim koordinatama u boji koju zadamo. Parametar za boju može
se izostaviti.
Primjer: Crtanje toĉke na sredini ekrana:
SCREEN 1
PSET (160,100)
Page 15
Za crtanje crta i pravokutnika koristimo naredbu LINE
LINE (x1,y1) (x2,y2),color,BF,stil
(x1,x2) koordinate prve toĉke
(x2,y2) koordinate druge toĉke
color boja crte
B crta pravokutnik sa suprotnim kutevima u toĉkama (x1,y1) i (x2,y2)
F ispunjava pravokutnik bojom olovke
stil vrsta linije (isprekidana, istoĉkana itd.)
Primjeri:
'Dijagonala ekrana
SCREEN 1
LINE (0,0) (319,199)
'Iscrtkana dijagonala
LINE (319,0) (0,199),,,&HF0F0
'Pravokutnik
SCREEN 2
LINE (50,50) (100,100),,B
'Ispunjeni pravokutnik
LINE (100,100) (150,150),,BF
Za crtanje kružnica, lukova, kružnih isjeĉaka i elipsi koristimo naredbu CIRCLE.
CIRLCE (x,y),p,color,poĉ.kut,zav.kut,odnos
(x,y) koordinate središta kružnice
p polumjer kružnice
color boja olovke
poĉ.kut poĉetak luka
zav.kut kraj luka
odnos odnos izmeĊu x i y osi kod elipse
Primjeri:
SCREEN 1
pi!=3.14
'Kružnica
CIRCLE (160,100),30
'Luk
CIRCLE (80,50),30,,pi!/2,pi!
CIRCLE (240,50),30,,pi!,pi!/2
'Isjeĉak
CIRCLE (80,150),30,, pi!/2, pi!
CIRCLE (240,150),30,, pi!, pi!/2
'Elipsa
CIRCLE (160,100),50,,,,0.4
CIRCLE (160,100),50,,,,1.2
Ako želimo dobiti ispunjeni krug ili elipsu, možemo se poslužiti naredbom PAINT.
Page 16
PAINT (x,y),boja ispune,boja granice,uzorak
(x,y) koordinate toĉke u djelu ekrana kojeg treba ispuniti
bojaisp. broj boje sa kojom se popunjava
bojagr. boja sa kojom je uokvirena površina koja se ispunjava
uzorak uzorak kojim se oblik ispunjava
Primjer:
'Crtanje kružnice bojom 2
'i ispunjavanje bojom 3
SREEN 1
CIRCLE (160,160),100,2
PAINT (160,160),3,2
NIZOVI
Kada u programu koristimo obiĉne varijable, QBASIC rezervira odreĊeni dio memorije za
spremanje te varijable. Taj dio memorije možemo zamisliti kao jednu ladicu na kojoj piše ime
varijable, a u "ladici" se ĉuva vrijednost te varijable. Svaki puta kada u programu koristimo tu
varijablu, QBASIC će pronaći tu "ladicu" i iz nje proĉitati trenutnu vrijednost varijable.
Ako više takvih "ladica" poredamo jednu do druge dobit ćemo niz. Niz je grupa vrijednosti
spremljenih pod istim imenom. Zahvaljujući nizovima, možemo pristupiti svim vrijednostima niza
kao i pojedinaĉnim vrijednostima svakog elementa niza.
Prije korištenja niza moramo ga deklarirati tj. moramo definirati njegovo ime, tip i veliĉinu.
Deklaracija niza provodi se naredbom DIM:
DIM varijabla (dgranica TO ggranica)
npr.
DIM ime$ (1 TO 30).
Gornja naredba definira varijablu ime$ kao niz od 30 "ladica". Svaka "ladica" naziva se element
niza. Da bi toĉno odredili s kojim elementom želimo raditi, koristimo se indeksom elementa.
Indeksi se pišu u zagradama. Prvi element niza je ime$(1), drugi ime$(2) ... ...ime$(30).
Dgranica i ggranica odreĊuju najniži i najviši indeks niza. Broj elemenata niza izraĉunava se po
formuli ggranica dgranica+1. Kod deklaracije niza može se upisati i samo gornja granica npr. DIM
ime$(30). U tom sluĉaju dgranica je 0. Dgranica niza ne mora uvijek biti 0 ili 1. Možemo je zadati
proizvoljno npr. DIM ime$ (30 TO 60)
Kada želimo dodjeliti vrijednosti elementima niza poslužit ćemo se FOR...NEXT petljom:
FOR broj% = dgranica TO ggranica
INPUT ime$(broj%)
NEXT broj%
Page 17
Ispisivane vrijednosti elemenata niza takoĊer radimo pomoću FOR...NEXT petlje:
FOR broj% = dgranica TO ggranica
PRINT ime$(broj%)
NEXT broj%
Primjeri.
1. Ispiši imena svih uĉenika koji su prošli sa odliĉnim.
' Deklaracija niza od deset elmenata
DIM ime$ (1 TO 10)
DIM ocjena% (1 TO 10)
' Unošenje vrijednosti
FOR broj% = 1 TO 10
PRINT "Upiši ime uĉenika:"
INPUT ime$(broj%)
PRINT "Upiši njegovu ocjenu:"
INPUT ocjena%(broj%)
NEXT broj%
' Traženje uĉenika s odliĉnim uspjehom
PRINT "S odliĉnim su prošli slijedeći uĉenici:"
FOR broj% = 1 TO 10
IF ocjena%(broj%)=5 THEN
PRINT ime$(broj%)
END IF
NEXT broj%
2. Poredaj imena po abecedi.
'Deklaracija niza od pet elemenata
DIM ime$(1 to 5)
'Upisivanje imena
PRINT "Upiši ime uĉenika:"
FOR broj%=1 TO 5
INPUT ime$(broj%)
NEXT broj%
'Sortiranje metodom BUBBLE SORT
FOR prvi%=1 to 4
FOR drugi% =prvi%+1 TO 5
IF ime$(prvi%)>ime$(drugi%) THEN
SWAP ime$(prvi%), ime$(drugi%)
END IF
NEXT drugi%
NEXT prvi%
'Ispis imena po abecedi
FOR broj%=1 TO 5
PRINT ime$(broj%)
NEXT broj%
ZVUK
Page 18
SOUND sviranje pojedinih tonova (za zvuĉne efekte)
SOUND visina,trajanje
visina broj u intervalu od 37 do 32767
C 523
D 587
E 659
F 698
G 783
A 880
B 987
trajanje broj u intervalu od 0 do 65535.
Primjeri:
visina% = 32767
trajanje% = 246
FOR i% = 60 TO 1 STEP 2
SOUND trajanje% i%/2,i%/20
SOUND visina%,i%/15
NEXT i%
visina% = 780
trajanje% = 650
FOR i% = trajanje% TO trajanje% STEP 4
SOUND visina% ABS(i%),0.3
i%=i% 2/trajanje%
NEXT i%
PLAY makro naredba za programiranje muzike
PLAY string$
string$ sadrži podatke o tonovima koje treba odsvirati, dužini note, oktavi, pauzama,
povisilicama, snizilicama, tempu itd...
C,D,E,F,G,A,B tonovi
,+ snizilica i povisilica
Ln dužina note, može biti u intrvalu od 1 do 64. L1 cijela nota, l2 polovinka, l16
šesnajstinka....
On visina oktave od 0 do 6. Na poĉetku vrijednost za oktavu je 4.
Pn pauza dužine od 1 do 64.
Primjer:
PLAY "L8 O3 g f f2."
PLAY "L8 p4 a b O4 c+ d e f e. d16 d2."
PLAY "L8 p4 d d c O3 b a g b a a2"
PLAY "L4 g f a g. d8 f a8 a2 p8"
PLAY "L4 a2 a2 O4 d e f e8 d8 e."
PLAY "L4 d8 c d O3 a1"
PLAY "L4 d8 c e f c b a"
Page 19
PLAY "L4 g f a g. d8 f a a1"
ANIMACIJA
Pomicanje nekog objekta po ekranu možemo ostvariti pomoću naredbi GET i PUT.
Pomoću naredbe GET definiramo dio ekrana na kojem se nalazi slika koju želimo pomicati.
Postupak je slijedeći:
naredbom DIM dimenzioniramo niz koji će služiti za spremanje slike sa ekrana
nacrtamo sliku
naredbom GET spremimo sliku u definirani niz.
Problem je definiranje veliĉine niza koji je potreban za pamćenje ž`eljene slike na ekranu. Broj
elemenata niza izraĉunava se formulom:
brojelemenata=INT((x2 x1+1)/8+1)*(y2 y1+1)*c/a+4
x1,y1 i x2,y2 su koordinate vrhova dijagonale pravokutnog dijela ekrana kojeg "skidamo"
"c" ovisi o screen modu (broju boja).Vrijednosti su:
SCREEN "c"
2, 11 1
1, 10 2
7,8,9,12 4
13 8
"a" ovisi o tipu niza. Ako je niz tipa INTEGER (%) tada je vrijednost za "a"=2, a ako je tip
niza LONG (&) vrijednost za "a"=4.
Pretpostavimo da želimo "skinuti" dio ekrana ĉiji se gornji lijevi vrh nalazi na koordinatama 20,20
a donji desni vrh na koordinatama 40,40.
x1=20 y1=20
x2=40 y2=40
Sliku ćemo crtati u SCREENU 1 ("c"=2) i tip niza biti će INTEGER ("a"=2).
brojelemenata=INT((40 20+1)/8+1)*(40 20+1)*2/2+4
=INT(21/8+1)*21*1+4
=3*21+4
=67
Dakle, treba definirati niz od 67 elemenata:
DIM slika%(67)
Ako u tom dijelu ekrana nacrtamo krug:
SCREEN 1
CIRCLE (30,30),9
Page 20
tada taj krug možemo "skinuti " naredbom:
GET (20,20) (40,40),slika%
Tako spremljenu sliku možemo prikazati na ekranu naredbom:
PUT (x,y),slika%,PSET
(x,y) koordinate gornjeg lijevog kuta slike
slika% ime niza u koji je spremljena slika naredbom GET
PSET naĉin prikazivanja slike i preklapanja s pozadinom. Osim PSET može se koristiti:
PRESET, XOR, OR, AND.
Pomicanje objekta ostvarujemo petljom:
CLS
FOR x = 1 TO 200
PUT (x,100),slika%,PSET
NEXT x
Programski primjer
Na ekranu ispisuje "Pašta-fažol ja volim , pašta-fažol živi vjeĉno" i crta crtu veliĉine 10 pixela
CLS
PRINT"Pašta-fažol ja volim"
PRINT"Pašta-fažol živi vjeĉno"
LINE(0,0)-(10,10)
END
Ovaj program pita korisnika njegov omiljeni nogometni klub, i ispisuje navijaĉku pjesmu:
CLS
INPUT "Koji je vaš omiljeni nogometni klub" ; a$
PRINT UCASE$(a$) " je najbolji, ale ale!"
END
Osnovne naredbe
Tri osnovne naredbe su CLS,INPUT I PRINT. CLS je skraćenica od CLear Screen, cls koristimo na
poĉetku programa kako bi bili sigurni da je sav prijašnji tekst sa ekrana obrisan. INPUT naredba
služi za unos podataka. PRINT naredba ispisuje tekst na ekran npr. 10 PRINT "Hello world". Ove tri
naredbe se najćešće koriste u BASIC programima.
10 CLS
20 PRINT "Kako se zoveš?"
30 INPUT A$
40 PRINT "Drago mi je, ";A$
50 END
Matematiĉke radnje
Svaki BASIC jezik pa tako i QBasic mora moći izvoditi matematiĉke radnje, u daljnjem tekstu
Page 21
objasnit ću kako napraviti program za zbrajanje. Da bi napravili matematiĉki program morate znati
simbole radnji.TakoĊer morate znati i osnovne naredbe iz prošlog teksta. Ali ima i jedna nova
naredba: x$=y (x$ predstavlja tip podataka (x se zamijeni nekim slovom),a y vrijednost odreĊenog
slova). To je sve što treba znati za jednostavni matematiĉki program. Simboli :
Zbrajanje - +
Oduzimanje - -
Djeljenje - /
Množenje - *
Primjer programa za množenje :
10 CLS
20 PRINT "Dobrodošao u program za množenje"
30 PRINT "Unesi dva broja"
40 INPUT A
50 INPUT B
60 C = A * B
70 PRINT A; "*" ; B; "=" ; C
80 END
Crtanje
U Qbasicu postoji i osnovno crtanje. Možete crtati kružnice i linije te neke 3D oblike. Prije svakog
crtanja morate upisati naredbu SCREEN 12
Primjer programa za crtanje krugova: Nacrtat će kružnicu u sredini ekrana radijusa 50 pixela.
SCREEN 12
CIRCLE (320,240),100
Primjer programa za crtanje linija: Linija vodoravna po sredini ekrana.
SCREEN 12
LINE(320,0)-(320,480)