Click here to load reader

Osnove programiranja u Just Basicu

  • View
    285

  • Download
    16

Embed Size (px)

Text of 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

  • 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

    http://www.justbasic.com

  • 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.

  • 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

  • 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"

  • 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

  • 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

  • 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.

  • 5 Aritmeticki izrazi 9

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

    a + bc + 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

  • 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.

  • 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 THENda naredbe

    ELSEne naredbe

    END IF

    Umjesto uvjet dolazi usporedba dvaju izraza. Mogucnosti su sljedece

    izraz1 > izraz2 izraz1 >= izraz2izraz1 < izraz2 izraz1 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)

  • 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

  • 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 5060 - dovoljan 6075 - dobar 7585 - vrlo dobar 85 - izvrstan

    Pomocu SELECT program izgleda ovako

    INPUT bodoviSELECT CASE

    CASE bodovi=50 AND bodovi=60 AND bodovi=75 AND bodovi

  • 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

  • 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

  • 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

  • 7 Petlje 17

    jeniti, a time ce zauvijek biti ispunjen uvjet n

  • 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

  • 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

  • 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.

  • 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), . . . ,

  • 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.

  • 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.

    VarijableProgramsko okruenje Just BasicUnos podatakaNizovi znakovaAritmeticki izraziUvjetno grananjePetljeDO-LOOP petljaFOR-NEXT petlja

    Polja