Transcript
Page 1: Osnove programiranja u Just Basicu

Programiranje u BASIC-u

1 Varijable

Za pocetak promotrimo sljedeci jednostavni program

a=4b=3c=a+bPRINT c

Iako jos nismo upoznali ponasanje ijedne naredbe koristeci zdrav razum mozemonaslutiti kakve ce biti posljedice izvrsavanja gornjeg programa.

Prva naredba (a=4) ce kucici (koristimo taj naziv zasad) s imenom a pridruzitibroj 4. Druga naredba (b=3) u kucicu b zapisuje vrijednost 3. Sljedeca naredba(c=a+b) je malo slozenija. Njenim izvodenjem se prvo procitaju vrijednosti ukucicama a i b (a to su 4 i 3), izracuna se njihov zbroj, a zatim rezultat 7 stavljau kucicu imena c. Posljednja naredba (PRINT c) procita sto se trenutno nalaziu kucici c i to ispisuje na ekran. Dakle, izvodenjem gornjeg programa na ekranuce se ispisati broj 7.

Simbolicki citav postupak prikazujemo na sljedeci nacin:a=4 a 4b=3 a 4 b 3c=a+b a 4 b 3 c 7PRINT c a 4 b 3 c 7 EKRAN 7

Ono sto smo u gornjem odlomku zvali kucicom u programerskom se zargonunaziva varijabla pa cemo u tekstu nadalje koristiti taj naziv.

Primjer 1.1. Sto ce se ispisati izvodenjem sljedeceg programa?

a=10a=20PRINT a

Naredba a=10 ce varijabli a pridijeliti vrijednost 10. Sljedeca naredba a=20 var-ijabli a pridaje vrijednost 20, dok se stara vrijednost pri tome brise. Posljednjanaredba prvo procita koje je trenutno stanje varijable a (a to je 20), sto zatimispisuje na ekran.

Prethodni je primjer, iako kratak, vrlo poucan. Bitno je naglasiti kako vari-jabla u jednom trenutku moze posjedovati samo jednu vrijednost. Dakle, akonaredbom pridruzujemo vrijednost varijabli njena stara vrijednost se nepovratnobrise. Zapamtimo kako se naredbe izvrsavaju jedna po jedna i pri analizi po-jedine naredbe promatramo samo nju i stanje u varijablama (na izvrsavanjetrenutne naredbe ne utjecu one koje se nalaze prije ili poslije ).

Primjer 1.2. Sto ce ispisati sljedeci program?

a=1

Page 2: Osnove programiranja u Just Basicu

2 Programsko okruzenje Just Basic 2

b=2b=3a=4a=a+ba=a+bb=a+bPRINT a,b

Prikazimo stanje varijabli u svakom korakua=1 a 1b=2 a 1 b 2b=3 a 1 b 3a=4 a 4 b 3a=a+b a 7 b 3a=a+b a 10 b 3b=a+b a 10 b 13PRINT a,b a 10 b 13 EKRAN 10 13

Program ce na ekranu ispisati brojeve 10 i 13.

Zadatak 1.3. Sto bi se dogodilo kada bismo u gornjem programu naredbu a=4zamijenili s ab=4?

2 Programsko okruzenje Just Basic

U gornjim primjerima smo proveli analizu programa ’na papiru’. Medutimprogramiranje se tako ne uci vec je potrebno program unijeti u racunalo, azatim ga i pokrenuti kako bismo vidjeli njegov ucinak. Just Basic je jedan odmnogobrojnih dostupnih alata koji to omogucuju i upravo njega cemo koristiti.Mozete ga (besplatno) preuzeti s adrese http://www.justbasic.com.

Na slici 1 je prikazan glavni prozor Just Basica. Najveci (bijeli) dio cini prostorza pisanje programa. Upisite program iz primjera 1.2 i pokrenite ga pomocudugmeta (Run). Provjerite odgovara li dobiveni ispis onome sto smo pred-vidjeli.

Slika 1: Prozor Just Basica

Page 3: Osnove programiranja u Just Basicu

3 Unos podataka 3

Just Basic omogucuje i izvrsavanje programa naredbu po naredbu i promatranjestanja varijabli u svakom koraku (otprilike kao sto smo mi provodili analizu).

Da bismo pokrenuli takav nacin rada treba kliknuti na dugme (Debug).Na sljedecu naredbu prelazite dugmetom (Step Over). Isprobajte programiz primjera 1.2 u ovakvom nacinu rada i usporedite stanje varijabli s onimadobivenim u nasoj analizi.

Slika 2: Debug nacin rada

Za kraj ove tocke ponovimo jos jednom kako je puno lakse usvojiti znanja oprogramiranju ukoliko se svaki program isproba na racunalu. Jos bolji osjecajse dobije ukoliko se izvrsavanje obavlja naredbu po naredbu. Imajte to na umupri svakom sljedecem primjeru.

3 Unos podataka

Naredbom PRINT ostvarujemo komunikaciju u smjeru od racunala prema koris-niku. Medutim, u velikoj vecini slucajeva potrebni su mehanizmi koji omogucujukorisniku predaju svojih podataka programu koji zatim na osnovu njih dajezeljene rezultate. Npr. pri igranju video igrice programu se daju podaci o ak-cijama koje zelimo obaviti, meteorolog posebnom programu daje izmjerene po-datke o stanju atmosfere, arhitekt u racunalo unosi karakteristike gradevineitd.

U programskom jeziku BASIC za unos podataka koristimo naredbu INPUT. Izanje obavezno dolazi ime varijable (ili vise njih odvojenih zarezom), a kad se priizvodenju programa naide na takvu naredbu izvrsavanje se privremeno zaus-tavlja sve dok korisnik ne unese neki broj (kraj unosa je signaliziran tipkomEnter). Uneseni broj se zatim sprema pod varijablu cije je ime navedenu uzINPUT, nakon cega se nastavlja s izvodenjem programa.

Page 4: Osnove programiranja u Just Basicu

3 Unos podataka 4

Primjer 3.1. Najjednostavniji program s unosom izgleda ovako

INPUT aPRINT a

Nakon pokretanja tog programa na ekranu se pojavljuje treptajuci kursor cimesmo obavjesteni kako program trazi podatak od nas. Kada ga unesemo on cebiti zapisan u varijablu s imenom a. Sljedeca naredba cita sto se nalazi u a izatim to ispisuje na ekran. Zakljucak je kako gornji program trazi od korisnikaunos jednog broja, a zatim taj isti broj ispisuje na ekran.Zadatak 3.2. Sto radi sljedeci program?

INPUT sedamsedam=sedam+1PRINT sedam

Primjer 3.3. Napisimo program koji ce od korisnika ucitati dva broja, a zatimispisati njihov prosjek.

INPUT aINPUT bPRINT (a+b)/2

Zagrade su nuzne jer dijeljenje ima veci prioritet od zbrajanja. O tome nestovise kasnije.

Jos jedno rjesenje je

INPUT aINPUT bc=(a+b)/2PRINT c

Jedina razlika je u tome sto u drugom programu uvodimo varijablu c u kojuzapisujemo rezultat koji zatim ide na ekran dok je u prvom slucaju to ucinjenoizravno. Oba pristupa su jednako ispravna.Napomena 3.4. Imena naredbi smijete pisati i malim slovima, a smijete i mijesativelika i mala slova. Dakle, InPut x je isto sto i INPUT x kao i input x. Kodimena varijabli treba biti dosljedan pa tako INPUT ABC nema isti efekt kao iINPUT abc.Zadatak 3.5. Napisite program koji ce za ucitane stranice pravokutnika ispisatinjegov opseg i povrsinu.Primjer 3.6. Nadopunimo sljedeci program

INPUT aINPUT b

...PRINT a,b

tako da program izmijeni sadrzaj varijabli a i b, tj. ako je korisnik unio brojeve5 i 8 ispis treba biti 8 5.

Prva pomisao je umetnuti naredbe

Page 5: Osnove programiranja u Just Basicu

4 Nizovi znakova 5

a=bb=a

medutim takav pristup nije ispravan jer bi izvodenje naredbe a=b izbrisalopocetnu vrijednost od a. No uvedemo li novu varijablu c mozemo kopirativrijednost koja je u a, a zatim obaviti zamjenu. Konacni izgled programa je

INPUT aINPUT bc=aa=bb=cPRINT a,b

Zadatak 3.7. Rijesite zadatak iz prethodnog primjera bez koristenja dodatnevarijable.

4 Nizovi znakova

U prethodnim tockama kao podatke smo koristili iskljucivo brojeve. Uz njihBASIC ima mogucnost baratati i s ostalim znakovima. Promotrimo program

PRINT "Dobar dan"

Njegovim izvrsavanjem ce se na ekranu ispisati Dobar dan kao sto je i bilo zaocekivati. Uocimo navodnike u programu. Njihova je uloga signalizirati pocetaki kraj niza, medutim oni nisu dio niza (a to vidimo i po tome sto se ne pojavljujuu ispisu pri izvodenju programa). Navodnici su obvezni ukoliko zelimo nestoproglasiti nizom jer bi ih inace racunalo okarakteriziralo kao ime varijable.

Koristenjem nizova programe mozemo uciniti upotrebljivijima i blizima koris-niku. Pokazimo to na programu iz primjera 3.3. Modificirajmo ga u novi oblik

PRINT "Upisite prvi broj"INPUT aPRINT "Upisite drugi broj"INPUT bPRINT "Prosjek upisanih brojeva iznosi ";(a+b)/2

Sada korisnik pri pokretanju programa zna da treba unijeti broj te ima uvid uznacenje rezultata koji se ispisuje.

Nizovi se mogu zapisivati u varijable, no s jednom bitnom razlikom u odnosuna brojevne varijable. Ime varijable koja je predvidena za niz znakova morazavrsavati znakom $. Primjeri znakovnih varijabli su a$, b$, x$, abc$, dolar$.

Primjer 4.1. Program

PRINT "Upisite svoje ime"

Page 6: Osnove programiranja u Just Basicu

4 Nizovi znakova 6

INPUT a$PRINT "Upisite prezime"INPUT prezime$PRINT "Vase puno ime je ";a$+" "+prezime$

od korisnika zahtijeva unos imena, a zatim prezimena, na sto zajedno ispisujeoba unesena podatka. Izmedu varijabli a$ i prezime$ je umetnut niz kojisadrzava samo jedan razmak. Njegova uloga je razdvojiti ime i prezime u ispisu(provjerite sto se dogada ukoliko ga maknemo).

Druga stvar koju treba uociti u posljednjoj naredbi prethodnog primjera jestzbrajanje nizova. Rezultat zbrajanja dva niza jest niz dobiven tako da se nakraj prvoga niza nadopise drugi.

Primjer 4.2. Program

PRINT "dupli"+"pas"

na ekranu ispisuje duplipas. Primijetimo kako se navodnici ne ispisuju, kaoniti znak +. Razmak izmedu dvije rijeci nije umetnut (jer nismo niti trazili odprograma da to ucini). Ako bismo htjeli razmak to mozemo napraviti na visenacina, npr.

PRINT "dupli "+"pas"PRINT "dupli"+" pas"PRINT "dupli"+" "+"pas"

Zadatak 4.3. Koja ce razlika biti u izvodenju sljedeca dva programa ako suuneseni podatci 22 i 32?

INPUT aINPUT bPRINT a+b

INPUT a$INPUT b$PRINT a$+b$

BASIC omogucuje uredivanje nizova putem sljedecih funkcija

• LEN(a$) - rezultat je duljina (tj. broj znakova) niza a$ (pri tome se svakirazmak racuna kao jedan znak)

• LEFT$(a$,n) - niz koji se sastoji od prvih n znakova niza a$,

• RIGHT$(a$,m) - niz od posljednjih m znakova niza a$,

• MID$(a$,n,m) - niz dobiven iz a$ uzimanjem m znakova pocevsi od n-toga,

• UPPER$(a$) - niz dobiven na nacin da se sva mala slova iz a$ promijeneu velika,

• LOWER$(a$) - velika slova prelaze u mala.

Ponasanje tih funkcija najbolje cete vidjeti na sljedecem primjeru.

Primjer 4.4. Pokrenemo li program

Page 7: Osnove programiranja u Just Basicu

5 Aritmeticki izrazi 7

a$="PomoRsKi fakUlTet"PRINT LEN(a$)PRINT LEFT$(a$,6)PRINT RIGHT$(a$,7)PRINT MID$(a$,8,4)PRINT UPPER$(a$)PRINT LOWER$("ABCDefgH")PRINT LEFT$(RIGHT$(a$,12),5)PRINT a$

dobit cemo sljedeci ispis

17PomoRsakUlTeti faPOMORSKI FAKULTETabcdefghsKi fPomoRsKi fakUlTet

Primijetimo kako niti jedna od ovih funkcija nije promijenila niz a$ vec sukoristeci a$ kao podlogu kreirani novi nizovi.

Nadalje, u trecoj naredbi od kraja vidimo da niz ne moramo navesti putemvarijable, vec ga je moguce i izravno specificirati.

U predzadnjoj naredbi je demonstrirano ugnjezdivanje funkcija. Zamisljajte kaoda se prvo izracuna rezultat funkcije RIGHT$(a$,12) (a to je sKi fakUlTet),koji se zatim proslijeduje funkciji LEFT$ (u obliku LEFT$("sKi fakUlTet",5)).Time je konacan rezultat jednak sKi f.

Primjer 4.5. Napisimo program koji ce ucitati niz, a zatim ispisati niz dobivenod ucitanog na nacin da se zadnjih 6 znakova prebaci na pocetak (npr. za unosPomorski fakultet ispis treba biti kultetPomorski fa, a ako unesemo nizprimjena na ekranu treba pisati imjenapr).

INPUT a$PRINT RIGHT$(a$,6)+LEFT$(a$,LEN(a$)-6)

Zdesna smo uzeli 6 znakova, a slijeva trebamo uzeti ostatak. Kako se u a$ nalazitocno LEN(a$) znakova, taj ostatak je duljine LEN(a$)-6.

5 Aritmeticki izrazi

Osnovne aritmeticke funkcije podrzane u BASICu su zbrajanje (+), oduzimanje(-), mnozenje (*), dijeljenje (/) i potenciranje (^). Osim njih na raspolaganjuje i ostatak pri dijeljenju (MOD).

Primjer 5.1. Ispis programa

PRINT 5+7, 3*6, 5/2, 3-10

Page 8: Osnove programiranja u Just Basicu

5 Aritmeticki izrazi 8

PRINT 3^2, 2^3, 4^3PRINT 13 MOD 3, 22 MOD 6, 2 MOD 10

je

12 18 2.5 -79 8 641 4 2

Napomena 5.2. Primjeceno je da znatan broj studenata posjeduje vrlo krhkoznanje o dijeljenju s ostatkom pa u ovoj napomeni dajemo kratak osvrt na tuoperaciju. Pretpostavimo da zelimo odrediti koliko je x MOD y. Zamislimo datrebamo podijeliti x luksuznih auta na y ministara, tako da svaki ministar do-biju jednak broj automobila. Neki auti ce mozda ostati nepodijeljeni i njihovbroj zovemo ostatak pri dijeljenju x sa y. Npr. ako imamo 22 auta i 6 ministarasvaki ce ministar dobiti po 3 auta, a 4 auta ce ostati bez svojih vlasnika.Na kalkulatorima u pravilu ne postoji izravna mogucnost racunanja ostatka,medutim mozemo se posluziti ostalim operacijama. Za gornji primjer prvo podi-jelimo 22 sa 6. Rezultat je 3.666666667. Maknemo li sve iza decimalne tockeostane 3. Pomnozimo to sa 6 (rezultat je 18) i to oduzmimo od 22. Konacanrezultat je 4.

Izraz 2+2*2 se ne interpretira kao (2+2)*2, vec kao 2+(2*2), a razlog tome jedogovor da mnozenje ’jace veze’ nego zbrajanje odnosno jer ima veci prioritet.U donjem su popisu navedeni prioriteti pojedinih operacija

1. ( ),2. ^,3. *, /, MOD,4. +, -.

Dakle zagrade najjace vezu (tj. izraz u zagradi prvog racunamo), zatim sli-jedi potenciranje itd. Ako su dvije operacije jednakog prioriteta, onda prvoracunamo onu koja je vise lijevo.

Primjer 5.3. Postavimo zagrade u izraze

PRINT 2+2 MOD 3+3PRINT a+b/c-dPRINT 1+5^4*6PRINT 4*9/18*2

tako da je iz njih vidljivo kojim se poretkom clanovi racunaju.

PRINT (2+(2 MOD 3))+3PRINT (a+(b/c))-dPRINT 1+((5^4)*6)PRINT ((4*9)/18)*2

Za vjezbu odredite sto ce program ispisati.

Page 9: Osnove programiranja u Just Basicu

5 Aritmeticki izrazi 9

Primjer 5.4. U ovom primjeru radimo obratni postupak. Zadani su matematickiizrazi

a + b

c + d, (2a)x+y,

5√

a3b6,

a prikazemo li ih kao izraze u BASICu onda oni izgledaju ovako

PRINT (a+b)/(c+d), (2*a)^(x+y), (a^3*b^6)^(1/5)

Napomena 5.5. Korijenovanje smo u proslom primjeru izveli kao potenciranje.Opcenito vrijedi n

√x = x1/n.

Napomena 5.6. Ukoliko niste sigurni u prioritet operatora uvijek je bolje koristitivisak zagrada nego pogrijesiti.

Uz gornje operacije BASIC pruza mogucnost koristenja sljedecih funkcija

• ABS(x) - |x|; vraca apsolutnu vrijednost broja x,

• SQR(x) -√

x; kvadratni korijen od x; ako je x negativan pri izvodenju cese ispisati poruka o gresci,

• INT(x) - cijeli dio od x, tj. broj dobiven uklanjanjem svega sto se nalaziu x desno od decimalne tocke,

• SIN(x) - sin x; sinus od x, pri cemu x predstavlja kut zadan u radijanima(za sin x◦ treba napisati PRINT SIN(x*3.14159265/180)),

• COS(x) - cos x; kosinus od x,

• EXP(x) - ex; eksponencijalna funkcija s bazom e ≈ 2.71828

• LOG(x) - ln x; prirodni logaritam (tj. po bazi e; nemojte ga mijesati slog10 x)

Primjer 5.7. Program

PRINT ABS(-5), ABS(5)PRINT SQR(4), SQR(2.25)PRINT INT(2.4), INT(3.99), INT(-5.6)pi=3.14159265PRINT SIN(pi/2), SIN(45*pi/180)PRINT EXP(1)PRINT LOG(15)

ispisuje

5 52.0 1.52 3 -51.0 0.707106782.718281832.7080502

Page 10: Osnove programiranja u Just Basicu

6 Uvjetno grananje 10

Funkcije se mogu i kombinirati npr.

PRINT SQR(ABS(-10))PRINT INT(SIN(EXP(2))+3)

Pri tome se prvo rjesava funkcija koja je najdublje ugnjezdena, sto znaci da uprvoj naredbi se racuna ABS(-10), a zatim se rezultat (10) proslijeduje funkcijiSQR.

Primjer 5.8. Ovaj primjer cemo kasnije koristiti pa ga zapamtite. Za ucitanibroj treba ispisati samo zadnju znamenku i sve osim zadnje znamenke.

INPUT aPRINT "Zadnja znamenka ucitanog broja je "; a MOD 10PRINT "Ucitani broj bez zadnje znamenke je "; INT(a/10)

Zadnju znamenku smo dobili kao ostatak pri dijeljenju s 10 (isprobajte na neko-liko malih brojeva pa cete vidjeti da je zaista tako), dok zadnju znamenkuuklanjamo dijeljenjem s 10. U tom trenutku ona prelazi iza decimalne tocke ipreostaje primijeniti INT koja cisti sve u tom podrucju.

Zadatak 5.9. Napisite program koji ucitava prirodne brojeve x i n, a zatim iz xuklanja zadnjih n znamenki.

6 Uvjetno grananje

Programi cesto trebaju prilagoditi svoje ponasanje u skladu s korisnikovim pro-htjevima. Npr. programer koji stvara video igricu nikako ne moze unaprijedznati poteze koje ce igrac povuci stoga svoj program mora konstruirati tako dapravilno reagira na sve naredbe.

Alatima sto smo do sada proucavali mozemo pisati samo programe koji ce izvestisve naredbe i to jednu po jednu. Zamisljamo li izvodenje programa kao put odprve do posljednje naredbe programe s takvom strukturom prikazujemo ravnomcrtom.

Ono sto nama treba jest mogucnost uvodenja ’raskrizja’ u programima. Pro-motrimo sljedeci primjer.

Primjer 6.1. Napisimo program koji ce ucitati broj, a zatim ispisati poruku jeli taj broj veci od 5 ili nije. Program izgleda ovako

INPUT aIF a>5 THEN

PRINT "Broj je veci od 5"ELSE

PRINT "Broj nije veci od 5"END IF

Analizirajmo ga. INPUT na pocetku je klasican. Nakon toga slijedi naredbaIF (koju sad spominjemo prvi put) i ona predstavlja ’putokaz’ na raskrizju.

Page 11: Osnove programiranja u Just Basicu

6 Uvjetno grananje 11

Program na tom mjestu usporeduje sadrzaj varijable a s konstantom 5. Ukolikoje broj u a veci od 5 izvrsit ce se naredbe (u ovom slucaju samo jedna) koje senalaze izmedu THEN i ELSE, dok se u suprotnome prelazi na izvrsavanje naredbiodijeljenih s ELSE i END IF.

Opcenita sintaksa IF naredbe je ovakva

IF uvjet THEN’da’ naredbe

ELSE’ne’ naredbe

END IF

Umjesto uvjet dolazi usporedba dvaju izraza. Mogucnosti su sljedece

izraz1 > izraz2 izraz1 >= izraz2izraz1 < izraz2 izraz1 <= izraz2izraz1 = izraz2 izraz1 <> izraz2

Pri izvrsavanju se ispituje je li uvjet ispunjen. Ukoliko jest prelazi se na naredbeoznacene s ’da’, a u suprotnome izvrsit ce se naredbe s oznakom ’ne’

Primjer 6.2. Dijelovi programa koji sadrze IF naredbu (bitna je samo strukturaprograma, ne i njegov smisao).

IF SIN(INT(a+5))>b+4 THENa=2b=3

ELSEPRINT "Ne"

END IF

IF "abc"<>m$ THENk=LEN(m$)

ELSEstavi=1duljina=0

END IF

Primjer 6.3. Sto ce ispisati sljedeci programi?

(a) a=3b=8IF INT(b/a)<3*a MOD b THEN

a=14ELSE

b=a+2PRINT a,b

END IF

(b) a$="plijeniti"IF MID$(a$,4,3)<>"lij" THEN

PRINT 2+2^3+1ELSE

PRINT 40END IF

(a) Racunamo; INT(b/a) jednako je 2, a 3*a MOD b iznosi 9 MOD 8 (paziti naprioritet), tj. 1. To znaci da uvjet nije ispunjen i izvrsit ce se naredbe iza ELSE.b postaje 5 i konacno ispisuje se 3 5

(b) slucaj rijesite sami za vjezbu.

Napomena 6.4. Naredba IF se moze koristiti u varijanti bez ELSE dijela

IF uvjet THENnaredbe

END IF

Page 12: Osnove programiranja u Just Basicu

6 Uvjetno grananje 12

Osim toga, moguce ju je pisati u jednom retku i tada ne treba na kraju stavitiEND IF, a naredbe se odvajaju znakom : npr.

IF uvjet THEN naredba : naredbaIF uvjet THEN naredba : naredba ELSE naredba : naredba

Primjer 6.5. Program koji ucitava dva broja, a zatim ispisuje vecega (ako sujednaki ispisuje bilo kojeg).

INPUT aINPUT bIF a>b THEN

PRINT aELSE

PRINT bEND IF

Zadatak 6.6. Napisite program koji ce ucitati tri broja, a zatim ispisati najvecegmedu njima.

Primjer 6.7. Program koji provjerava je li ucitani broj cijeli, u kojem slucajutreba jos ispisati je li paran.

INPUT aIF a=INT(a) THEN

IF a MOD 2=0 THENPRINT a;" je paran"

ELSEPRINT a;" nije paran"

END IFELSE

PRINT a;" nije cijeli broj"END IF

U ispitivanju je li broj cijeli koristili smo funkciju INT. Znamo da ona uklanjasve sto se nalazi iza decimalne tocke, a to je upravo ono sto nam treba jer brojje cijeli jedino ako se ne mijenja uklanjanjem decimalnog dijela.

Za provjeru parnosti dovoljno je promotriti ostatak pri dijeljenju s 2. Parni bro-jevi daju ostatak 0 pri dijeljenju s 2, dok je ostatak neparnih pri istoj operacijijednak 1.

Napomena 6.8. U gornjim su programima dijelovi programa uvuceni udesno.To je uobicajeni postupak koji se cini radi povecane citljivost programa i laksegotkrivanja gresaka, iako bi program sasvim normalno radio i bez uvlacenja.Redak se uvlaci pritiskom na tipku Tab.

Primjer 6.9. Logicki veznici AND i OR dopustaju povezivanje vise uvjeta. Tomozemo vidjeti na primjeru programa koji ucitava dva broja te ispisuje njihovumnozak ako su oba broja pozitivna, a u suprotnom ispisuje 0.

INPUT a

Page 13: Osnove programiranja u Just Basicu

6 Uvjetno grananje 13

INPUT bIF a>0 AND b>0 THEN

PRINT a*bELSE

PRINT 0END IF

Sljedeci program ucitava dva niza i ispituje pocinje li barem jedan od njih saban

INPUT a$INPUT b$IF LEFT$(a$,3)="ban" OR LEFT$(b$,3)="ban" THEN

PRINT "da"ELSE

PRINT "ne"END IF

Naredbom SELECT mozemo u program ugraditi vise od dva izbora istodobno.Naglasimo kako se SELECT moze napisati pomocu nekoliko IF naredbi pa senecemo previse baviti tim oblikom grananja.Primjer 6.10. Treba napisati program koji ce za ucitani broj bodova na kolo-kviju ispisati ocjenu. Kriterij je sljedeci

• < 50 - nedovoljan• 50–60 - dovoljan• 60–75 - dobar• 75–85 - vrlo dobar• ≥ 85 - izvrstan

Pomocu SELECT program izgleda ovako

INPUT bodoviSELECT CASE

CASE bodovi<50PRINT "nedovoljan"

CASE bodovi>=50 AND bodovi<60PRINT "dovoljan"

CASE bodovi>=60 AND bodovi<75PRINT "dobar"

CASE bodovi>=75 AND bodovi<85PRINT "vrlo dobar"

CASE ELSEPRINT "izvrstan"

END SELECT

Iza SELECT CASE dolaze moguci slucajevi. Zadnji slucaj (za ocjenu izvrstan)nismo eksplicitno naveli vec smo stavili CASE ELSE. Time obuhvacamo sve opcijekoje nisu ukljucene ni u jedan od prije navedenih uvjeta.

Page 14: Osnove programiranja u Just Basicu

7 Petlje 14

Zadatak 6.11. Napisite gornji program koristeci naredbu IF umjesto SELECT.

7 Petlje

7.1 DO-LOOP petlja

Petlje se u programiranju koriste kada se isti postupak zeli primijeniti vise puta.Pretpostavimo da smo dobili zadatak 567 puta ispisati broj 567. Naravno tomozemo uvijek rijesiti na nacin da 567 puta utipkamo naredbu PRINT 567.Takav pristup osim ocitog nedostatka elegancije ima i drugih nedostataka. Kracii pametniji program izgleda ovako

n=0 ’1DO WHILE n<567 ’2

PRINT 567 ’3n=n+1 ’4

LOOP ’5PRINT "kraj" ’6

Iza svake naredbe smo stavili jednostruki navodnik i broj. Oni nemaju uloguu izvrsavanju programa vec ce ih koristimo radi lakse analize. Kako vidimopojavljuje se i nova naredba DO (zajedno s LOOP). Njihova je uloga ponavljatiizvrsavanje naredbi koje se nalaze izmedu dok god je izvrsen uvjet naveden izaDO.

Prva naredba postavlja vrijednost varijable n na nulu. n ce sluziti kao pokazateljkoliko je puta ispisan broj 567 do tog trenutka. Naredba 2 provjerava je lizadovoljen uvjet n<567. Ako jest prelazi se na naredbu 3, a ukoliko nije skacese iza LOOP (dakle na naredbu 6). Naredbom broj 3 ispisujemo broj 567, a usljedecoj naredbi (4) povecavamo n (jer se u njoj nalazi broj ispisanih 567ica, ami smo upravo jednu nadodali). LOOP izvodenje programa prebacuje na naredbu2.

Poredak izvrsavanja naredbi kao, stanje varijable n i ispis na ekranu izgledaovako

naredba n ekran1 02 03 0 5674 1 5675 1 5672 1 5673 1 567 (dvaput)4 2 567 (dvaput)5 2 567 (dvaput)2 2 567 (dvaput)...

......

3 566 567 (567 puta)4 567 567 (567 puta)

Page 15: Osnove programiranja u Just Basicu

7 Petlje 15

naredba n ekran5 567 567 (567 puta)2 567 567 (567 puta)6 567 567 (567 puta) kraj

Obicnim rjecnikom DO-LOOP petlju mozemo ovako interpretirati

DO WHILE uvjet ako uvjet nije ispunjen skoci na 4, ’1naredbe naredbe ’2

LOOP skoci na 1 ’3naredba naredba ’4... ...

Pogledajmo jos neke primjere.

Primjer 7.1. Analizirajmo program

a=2 ’1b=3 ’2DO WHILE a<12 ’3

a=a+b ’4b=b+1 ’5

LOOP ’6PRINT a,b ’7

Tablica

naredba a b ekran1 2 02 2 33 2 34 5 35 5 46 5 43 5 44 9 45 9 56 9 53 9 54 14 55 14 66 14 63 14 67 14 6 14 6

Na ekranu ce se ispisati brojevi 14 i 6.Primjer 7.2.

n=25 ’1a$="" ’2DO ’3

Page 16: Osnove programiranja u Just Basicu

7 Petlje 16

IF n MOD 2=1 THEN ’4a$="1"+a$ ’5

ELSE ’6a$="0"+a$ ’7

END IF ’8n=INT(n/2) ’9

LOOP WHILE n>0 ’10PRINT a$ ’11

Kako vidimo u ovom programu ispitivanje uvjeta u petlji se vrsi na kraju (izaLOOP). Razlika nije velika u odnosu na gornji slucaj. Pokusajte sami interpreti-rati takvu petlju prirodnim jezikom.

naredba n a$ ekran1 252 253 254 255 25 19 12 110 12 14 12 17 12 019 6 0110 6 014 6 017 6 0019 3 00110 3 0014 3 0015 3 10019 1 100110 1 10014 1 10015 1 110019 0 1100110 0 1100111 0 11001 11001

Na ekranu ce se ispisati 11001.Napomena 7.3. Program s petljom se ne mora nikada zavrsiti. Primjer takvogaje

n=0a=2DO WHILE n<5

a=a+1LOOP

Naime, varijabla n ima pocetnu vrijednost 0 koja se vise nikada nece promi-

Page 17: Osnove programiranja u Just Basicu

7 Petlje 17

jeniti, a time ce zauvijek biti ispunjen uvjet n<5. Kada se program zaglavi ubeskonacnoj petlji prekidamo ga kombinacijom tipku Ctrl+Break.

Zadatak 7.4. Sto ce ispisati program

a=2b=3DO WHILE ABS(a)<100

a=a*bb=b-aPRINT a

LOOP

Primjer 7.5. Napisimo program koji ce od korisnika traziti unos broja izmedu1 i 10. Dok god je broj van tog intervala unos treba ponavljati.

DOINPUT a

LOOP WHILE a<1 OR a>10

Zadatak 7.6. Napisite program u kojem ce jedan korisnik unijeti prirodan brojnakon cega treba obrisati ekran (naredbom CLS). Drugi korisnik tada trebapogadati koji je broj bio unesen, a program mu pri tome javlja je li njegov brojmanji ili veci od trazenoga.

Napomena 7.7. DO-LOOP petlja ima i oblik u kojem je rijec WHILE zamijenjena sUNTIL. Tada se naredbe unutar petlje ponavljaju sve dok uvjet nije zadovoljen.Obje se verzije mogu izvesti jedna preko druge, a vi sami odaberite koju cetekoristiti.

Zakljucujemo kako DO-LOOP petlja ima ove moguce oblike

DO WHILE uvjetnaredbe

LOOP

DOnaredbe

LOOP WHILE uvjet

DO UNTIL uvjetnaredbe

LOOP

DOnaredbe

LOOP UNTIL uvjet

Zadatak 7.8. Program koji ce broj iz dekadskog prikazati u heksadecimalnomsustavu.

INPUT na$="0123456789ABCDEF"t$=""DO WHILE n>0

t$=MID$(a$,n MOD 16+1,1)+t$n=INT(n/16)

LOOPPRINT t$

Page 18: Osnove programiranja u Just Basicu

7 Petlje 18

Zadatak 7.9. Promijenite prethodni program tako da korisnik sam odabire bazudrugog sustava.

7.2 FOR-NEXT petlja

Druga vrsta petlje je takozvana FOR petlja. Kod nje se ponavljanje vrsi sve dokje kontrolna varijabla unutar zadanog intervala. Pogledajmo primjer

INPUT n ’1FOR i=1 TO n ’2

PRINT i ’3NEXT ’4

Ovaj program ce od korisnika traziti da unese broj n, a zatim ispisati sveprirodne brojeve manje ili jednake n. Da bismo razumijeli zasto je to takoidemo prvo detaljno opisati ponasanje naredbe FOR

FOR m=a TO b STEP km=a ’1ako je m presao b skoci na 6 ’2

naredbe naredbe ’3

NEXTm=m+k ’4skoci na 2 ’5

naredba naredba ’6... ...

Tockice kroz citav red sluze samo kao pokazatelj koje naredbe odgovaraju di-jelovima zapisanim klasicnim jezikom.

Napomena 7.10. U nasem primjeru je izostavljen STEP k. U tom se slucajupodrazumijeva da je k jednako 1. Korak k moze biti i negativan. U tom seslucaju kontrolna varijabla pri svakom ponavljanju smanjuje, a prva granicatreba biti veca od druge npr. FOR i=10 TO 1 STEP -1 (u suprotnom petljanema gotovo nikakvog efekta).

Napomena 7.11. Kako smo gore napisali petlja se zavrsava kada kontrolna var-ijabla prijede drugu granicu. Preciznije, ako je korak petlje pozitivan to ce sedogoditi kad kontrolna varijabla postane strogo veca od druge granice, odnosnostrogo manja ako je korak negativan.

Prevedemo li nas program prema gornjem pravilu dobivamo sljedecu mjesavinujezika

INPUT ni=1ako je i<=n skoci na * ’**

PRINT ii=i+1skoci na **

’*

Zadatak 7.12. Provedite analizu programa do kraja. Autor je u trenutku pisanjaimao tezak dan i nije imao volje za to.

Page 19: Osnove programiranja u Just Basicu

7 Petlje 19

Primjer 7.13. Analiza programa

a=4 ’1FOR i=6 TO 8 ’2

a=a+5 ’3NEXT ’4PRINT a ’5

u tablicnom prikazu

naredba a i ekran1 4 02 4 63 9 64 9 72 9 73 14 74 14 82 14 83 19 84 19 92 19 95 19 9 19

Primjer 7.14. Sada koristimo i IF unutar petlje, a kontrolna varijabla ima porastrazlicit od 1.

x=6 ’1y=7 ’2FOR i=2 TO 7 STEP 3 ’3

x=2*x+y MOD 4 ’4y=3*y+x MOD 5 ’5IF x>30 THEN ’6

PRINT x;" "; ’7ELSE ’8

PRINT y;" "; ’9END IF ’10

NEXT ’11PRINT y ’12

Page 20: Osnove programiranja u Just Basicu

7 Petlje 20

naredba i x y ekran1 0 6 02 0 6 73 2 6 74 2 15 75 2 15 216 2 15 219 2 15 21 2111 5 15 21 213 5 15 21 214 5 31 21 215 5 31 64 216 5 31 64 217 5 31 64 21 3111 8 31 64 21 313 8 31 64 21 3112 8 31 64 21 31 64

Napomena 7.15. U primjerima smo vidjeli kako se argumenti naredbe PRINTodvajaju znakom ; ili ,. Ukoliko izmedu dva izraza stavimo znak ; u ispisu seizmedu njih nece staviti razmak, ali ako ih razdvojimo zarezom oni ce se ispisatirazdvojeni. Bitno je napomenuti kako naredba PRINT nakon ispisa prelazi unovi redak, sto mozemo sprijeciti tako da na kraj retka s doticnom naredbompostavimo zarez ili tocka-zarez (kao sto je to ucinjeno u posljednjem primjeru).

Zadatak 7.16. Sto ce ispisati sljedeci programi?

(a) a=1b=2FOR abc=10 TO 1 STEP -1

a=b+3b=a+3+abcd=ababc=abc-1

NEXTPRINTPRINT a,b,abc,d

Pripazite na to da se kontrolna varijabla mijenja i unutar tijela petlje.

(b) a$="paralelepiped"FOR i=1 TO LEN(a$)

t$=MID$(a$,i,1)IF t$="p" THEN

PRINT "k";ELSE

PRINT t$;END IF

NEXTKoji bi odgovor bio u slucaju (b) kad bismo naredbu PRINT "k" zamijenili sPRINT k?

Primjer 7.17. Ovaj program ispisuje sve djelitelje unesenog broja.

Page 21: Osnove programiranja u Just Basicu

8 Polja 21

INPUT nFOR i=1 TO n

IF n MOD i=0 THENPRINT i

END IFNEXT

Za svaki broj i u rasponu od 1 do n se ispituje je li n djeljiv njime (tj. ako jeostatak pri dijeljenju n s i jednak 0). Ukoliko jest ispisuje se i.

Zadatak 7.18. Modificirajte program iz prethodnog primjera na nacin da zauneseni broj ispisuje je li prost ili nije. Zatim napisite program koji ce zaucitani broj n ispisati prvih n prostih brojeva.

Primjer 7.19. Program koji ucitava n brojeva i ispisuje najvecega medu njima

INPUT nFOR i=1 TO n

INPUT xIF x>max OR i=1 THEN max=x

NEXTPRINT max

U varijabli max uvijek se nalazi dotad najveci ucitani broj. Sljedeci broj trebausporediti s onime u max i ako je veci vrijednost u max treba obnoviti. Trebaprimijetiti kako pri unosu prvog broja varijabli max odmah pridruzujemo njegovuvrijednost (jer je to dotad jedini uneseni pa tako i najveci broj).

Primjer 7.20. Program koji racuna zbroj prvih n prirodnih brojeva.

INPUT ns=0FOR i=1 TO n

s=s+iNEXTPRINT s

FOR petljom kontrolnu varijablu mijenjamo od 1 do n, a u varijabli s spremamozbrojeve vrijednosti koje je i poprimala.

Zadatak 7.21. Napisite program koji za uneseni prirodni broj n ispisuje n! =1 · 2 · 3 · · ·n.

8 Polja

Polja koristimo u slucaju kada nam je potreban veci broj varijabli. Lakse jebaratati varijablama koje se zovu a(1), a(2), a(3), . . . nego s onima cija suimena a, b, c, . . . . Naredbom DIM dajemo do znanja da zelimo koristiti poljevarijabli i pri tome specificiramo njegovu velicinu. Npr. napisemo li u programuDIM a(10) od sustava trazimo 10 varijabli koje ce se zvati a(1), a(2), . . . ,

Page 22: Osnove programiranja u Just Basicu

8 Polja 22

a(10)1, a nakon toga ih koristimo kao obicne varijable. I to je u sustini jedinanova (iako vrlo bitna) stvar koju koncept polja unosi u programiranje.

Primjer 8.1. Jednostavan program s poljem od 5 elemenata

DIM a(5) ’1FOR i=1 TO 5 ’2

a(i)=i*i ’3NEXT ’4PRINT a(3)+a(5) ’5

i tablica izvodenja

naredba i a(1) a(2) a(3) a(4) a(5) ekran1 0 0 0 0 0 02 1 0 0 0 0 03 1 1 0 0 0 04 2 1 0 0 0 02 2 1 0 0 0 03 2 1 4 0 0 04 3 1 4 0 0 02 3 1 4 0 0 03 3 1 4 9 0 04 4 1 4 9 0 02 4 1 4 9 0 03 4 1 4 9 16 04 5 1 4 9 16 02 5 1 4 9 16 03 5 1 4 9 16 254 6 1 4 9 16 252 6 1 4 9 16 255 6 1 4 9 16 25 34

Zadatak 8.2. Sto ce ispisati sljedeci program

DIM a(7)FOR i=1 TO 5

a(i)=(i+2) MOD 5+1NEXTFOR i=5 TO 1 STEP -2

a(a(i))=iNEXTFOR i=1 TO 5

PRINt a(i)NEXT

1Ovo zapravo i nije u potpunosti tocno. Jos cemo kao bonus dobiti varijablu a(0), ali njucemo rijetko upotrebljavati pa smo ju zato i izostavili.

Page 23: Osnove programiranja u Just Basicu

8 Polja 23

Primjer 8.3. Program koji ce ucitati 30 brojeva, a zatim ispisati broj onih kojisu veci od prosjeka svih ucitanih.

DIM a(30)s=0FOR i=1 TO 30

INPUT a(i)s=s+a(i)

NEXTs=s/30FOR i=1 TO 30

IF a(i)>s THENPRINT a(i)

END IFNEXT

Zadatak 8.4. Napisite program koji ce ucitati prirodan broj n, nakon cega trebaucitati 2n − 1 prirodnih brojeva. Ukoliko je medu ucitanim brojevima viseneparnih treba ispisati sve neparne brojeve. U suprotnom treba ispisati sveparne brojeve medu unesenima.