32
6.2.1 Pogramski alat QBASIC 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. Uvodni ekran pomoći programske potpore QBasica sastoji se od tri dijela: Indeks (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' prisustni su na svakom prikazu. Uvodni 'Contents' prikaz izgleda prema narednoj slici. Slika 6.2 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

Quick Basic Osnove1

  • Upload
    sindji

  • View
    241

  • Download
    8

Embed Size (px)

DESCRIPTION

sfasdf df s

Citation preview

Page 1: Quick Basic Osnove1

6.2.1 Pogramski alat QBASIC

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.

Uvodni ekran pomoći programske potpore QBasica sastoji se od tri dijela:

Indeks (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' prisustni su na svakom prikazu. Uvodni 'Contents' prikaz izgleda prema narednoj slici.

Slika 6.2 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 upoznati SINTAKSU 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.

Page 2: Quick Basic Osnove1

Slika 6.3 Upoznavanje s pravilima tumačenja sitakse QBasic-a.

Program je u suštini smišljeni skup naredbi koje se slijedno izvršavaju prema dijagramu toka 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.

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.

Page 3: Quick Basic Osnove1

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

Slika 6.4 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.

Page 4: Quick Basic Osnove1

6.2.2 Mogućnosti u QBASIC-a

Većina jezičkih procesora, pa tako i QBasic koristi konstante i varijable i svom radu. Prema vrsti podatka koji se i njima čuva konstante i varijable mogu biti znakovne-tekstualne (string-$) ili brojčane. Kakva je razlika između konstanti i varijabli? Razlika je u načinu ponašanja tijekom izvođenja programa. Uvriježeno da se konstante zadaju odmah na početku programa (kao PI =3.141592 i slično) i njihova se vrijednost tijekom izvođenja ne može mijenjati, a varijable svoju vrijednost mijenjaju tijekom izvođenja programa i podrazumna početna vrijednost je nula ako se drugačije ne odredi. Na primjer X=X+1 znači da se X-u koji je s lijeve strane imao vrijednost nula pridružuje operacija s desne strane koja ga uvećava za 1 pa je po izvršenju ove naredbe X=1. Naravno sukladno rečenom PI=PI+1 neće se izvršiti ako je PI proglašeno kao konstanta. Iz ovog primjera vidi se da za trivijalne matematičke operacije ne treba ključna riječ.

Ime varijable može imati najviše 40 znakova a najmanje jedan. Nije dobro da ime varijable počne s brojem i nije dobro da sadrži posebne znakove van znakova abecede ASCII koda (osobito naše grafeme). Za ovaj jezički procesor nebitno je jesu li mala ili velika slova jer ih tumači jednako.

Na narednoj slici prikazane su najmanje i najveće vrijednosti dozvoljene pri radu s varijablama, datotekama, poljima i ostalim relevantnim računalnim čimbenicima.

Slika 6.5 Granice uporabe resursa QBasic-a.

Page 5: Quick Basic Osnove1

Znakovne varijable mogu sadržavati sve znakove ASCII koda te se recimo i znamenka tada tretira kao tekst. Naravno postoje naredbe (ključne riječi) koje mogu znamenku kao tekst pretvoriti u znamenku kao broj i obratno. Osim toga moguće je od svakog znaka dobiti njegovu vrijednost po ASCII kodu što će omogućiti, recimo sortiranje popisa s imenima.

Brojčane varijable su posebna zanimljivost. Mogu se izraziti kao varijable s cjelobrojnim (integer) sadržajem kapaciteta 16 bit-a ili 32 bit-a (jedan bit koristi se za predznak), te kao varijable brojeva s decimalnom točkom koje broj čuvaju s 7 ili 15 znamenaka (jedno mjesto koristi se za predznak) uz faktor množenja po osnovi 10 (E+38 je 1038, a D+308 je 10308). Kakva je razlika između E i D ako su oba 10? Sukladno navedenom ako se pridoda odgovarajući sufiks imenu varijable dobiju se i njihove različite mogućnosti. X%, X&, X! i X# različito će se ponašati.

Smisao navedenog je upravo u brzini izvršavanja programa. Nije isto brojiti od 1 do 10 kao i brojiti od 1,0000000000000D+000 do 1,0000000000000D+001. Dakle u matematičkim operacijama brojanja studenata uporabiti će se integer varijabla, ali u izračunavanju njihove prosječne težine varijabla s decimalnom točkom.

Slika 6.6 Simboli i operatori QBasic-a.

Matematičke i logičke operatore ne treba posebno objašnjavati . Specijalni znakovi služe za dopisivanje komentara te za nadzor izgleda ekrana prilikom upisa ili ispisa podataka (sadržaja varijabli).

Zbog velikog broja ključnih riječi, u programskoj potpori za pomoć, svrstane su i po načinu pripadnosti jednoj od specifičnih grupa kako su redom nabrojene prema slici 6.7.

Upravljanje odvijanjem programa (uglavnom strukture) Definiranje konstanti i varijabli (od svojstava pa do brisanja sadržaja) Definicija i pozivi Basic-ovih procedura (kao pokretanje programa) Rad s ulazni i izlazni uređajima (ekran i tiskač) Crtanje i unos slike (crtanje i bojanje zatvorenih likova)

Page 6: Quick Basic Osnove1

Upravljanje datotekama i imenicima na disku (otvori, briši ..) Upis i ispis iz datoteka (dohvat a ne ispis podataka) Upravljanje RAM-om (brisanje, čitanje određene čelije ..) Obrada teksta (manipulacija znakovima u string varijabli) Matematičke operacije (vlastite funkcije!) Zamke (lovljenje prekoračenja i preopterećenja i slično)

Slika 6.7 Ključne riječi grupirane prema namijeni.

Što ako je rezultat neke matematiče operacije veći od kapaciteta varijable? Program će se prekinuti u izvršavanju i jezički procesor izbaciti će poruku tipa 'overflow', 'division by zero' ili nešto slično. Dakle, treba predvidjeti ovakve situacije i naredbama za nadzor tijeka programa spriječiti prekid izvršavanja programa. Što ako je zabunom umjesto znamenke upisan znak 'A' za

Page 7: Quick Basic Osnove1

brojčanu varijablu? Opet će doći do prekida programa i upozorenja na grešku. Ponovo su u 'igri' nadzorne strukture.

Dakle, oko 25% koda cjelokupnog programsko koda odnositi će se na njegovu matematičku funkcionalnost, oko 35% koda odnositi će se za sprječavanje 'nebuloznih' unosa., rezultata i izračuna, a ostatak na oblikovanje formi za unos podataka te ispis na ekranu odnosno tiskaču. Naravno, faza testiranja je neizbježna i tada treba namjerno praviti sve moguće greške u radu s programom kako bi se došlo do 'stabilnog i robusnog rezultata'.

Page 8: Quick Basic Osnove1

6.2.3 Pogramiranje u QBASIC-u

Programiranju se može pristupiti na više načina. Recimo da je cijeli programski kod je jedinstvena cjelina, ili da je cjelokupni kod podijeljen na glavni dio i pod-programe izdvojeni od osnovnog koda ili se pak pozivaju drugi programi da obave zadaću za program koji se izrađuje. Glede jednostavnosti ovdje će se prikazati samo prva mogućnost.

Prva naredba koja će se uporabiti je CLS.

Slika 6.8 Help-ekran klučne riječi CLS.

Zadaća joj je da obriše sliku u prozoru u kojem se program odvija. Bilo bi vrlo nezgodno da ako program krene iz početka, da se vide ispisi prethodnog pokretanja. No nekad možda treba izbrisati tekstualne ispise a ostaviti sliku. Tada će se uporabiti jedna od opcija uz ključnu riječ CLS. Opis na ekranu na slici 6.8 ukazuje na to da se QBasic služi slojevima za prikaz na ekranu i to jedan za tekst a drugi za grafiku, kao da se radi o dvije prozirne slike jedna preko druge (analogno dvjema folijama na grafoskopu). Dakle iz pomoći se vidi da se ne može napisati naredba CLS 1 2 jer to sintaksa ne dozvoljava (vitičasta zagrada).

Druga naredba od značaja je CLEAR.

Page 9: Quick Basic Osnove1

Slika 6.9 Help-ekran klučne riječi CLEAR.

Zašto ovu naredbu staviti odmah na početak?. Naime QBasic-ova naredba RUN/START iz ToolBar-a nije ista kao RESTART povratak u prvu naredbenu liniju. RUN postavlja varijable na početnu vrijednost (nula, naravno), a programski povratak u prvu liniju ne, te se u slučaju vračanja programa na izvršavanje iz početka, bez prekida rada, može dogoditi da su neke varijable sačuvale već izračunatu vrijednost, pa bi tako ukupni broj studenata bio udvostručen i 'kilaža' dvostruko veća, ako bi se rukovodili opisom s prethodnih strana.

Svaki programski kod ima svoj početak i kraj. Za definiranje kraja programskog koda služi naredba END.

Slika 6.10 Help-ekran klučne riječi END.

Ako se ova naredba ne bi zadala po izvršavanju programskog koda ne bi se na primjer zatvorile sve datoteke kojima se je pristupilo. To bi prilikom ponovnog pokretanja programa moglo onemogućiti pristup nekoj od već otvorenih datoteka jer je već 'zauzeta' (access deny). Osim navedenog iza

Page 10: Quick Basic Osnove1

naredbe END slijede pod-programi koji su jako korisni ako se pozivaju sa više mjesta iz glavnog programa, te se isti programski kod ne mora više puta pisati. No treba razlučiti da END i END IF nisu dvije iste stvari. Prva naredba prekida program a drugu programsku strukturu unutar programa koja započinje sa IF ključnom riječi. Dakle, unutar glavnog koda programa može biti više zatvaranja programskih struktura, ali je samo jedan kraj programa. Unutar glavnog programskog koda nije dobro koristiti naredbu END za prestanak rada programa na više mjesta.

Dakle prema navedenom početak osnovna struktura nekog programa bila bi prema narednoj slici.

Slika 6.11 Načini pisanja programskog koda u QBasic-u.

QBasic dozvoljava pisanje koda sa i bez brojčanih oznaka ispred svake naredbene linije. Da bi primjeri nadalje lakše shvatili biti će prikazani s brojevima ispred svake programske linije. Broj linije je nebitan, važan je sam ispravan slijed. Na primjer 10,20,90 isto je kao da je napisano 1,2,9 ali je tada premalo mjesta za dodavanje naredbi između 2 i 9. Stoga je bolje koristiti veće brojevne raspone.

SAŽETAK:

Sve prikazano u poglavlju 6.2 samo je kratki naputak kako početi koristiti QBasic programski alat. Nužno je koristiti Help-prikaze i poštovati pravilan izbor varijabli. Da bi se lakše snašli može se unaprijed definirati kojega će tipa biti varijable koje počinju s nekim slovom. Tako se može na primjer odrediti da sve brojčane varijable tipa 'integer' imaju početna slova od 'I-K' te 'M-N'. Nadalje da 'long integer' počinju s slovima 'L' i 'O'. Nadalje, neka 'double-precision' varijable počinju sa slovima od 'D-E', a 'single-precision' s početnim slovima 'F-G', konstante neka uvijek imaju prva slova od 'A-C', a tekstualne 'string' varijable od 'R-S'. Na taj način ne treba se dodavati sufiks varijablama koje počinju s definiranim početnim slovima. Ostalo po volji.

Prema navedeno mali dodatak prethodnoj slici napravi bi slijedeći programski kod:

      10 CLS        ' Naredba za brisanje ekrana      11 CLEAR      ' Naredba za brisanje sadrzaja svih varijabli

Page 11: Quick Basic Osnove1

      12 DEFINT I-K, M-N      13 DEFLNG L, O      14 DEFDBL D-E      15 DEFSNG F-G      16 DEFSTR R-S      17 CONST CPI = 3.14592927#      20 REM Od ovog broja nadalje pocinje programski kod      .      .      .      .      999 END        ' Zavrsetak osnovnog programskog koda       1000 REM Od ovog proja nadalje pocinju pod-programi

Definirana su početna slova za pojedine tipove varijabli, a sukladno sintaksi prema slici 6.6 dodani su komentari za programske linije 10,11 i 999. Linije 20 i 1000 imaju kljucnu riječ REM što upućuje na komentar (remark).

Page 12: Quick Basic Osnove1

6.2.4. Algoritam, dijagram tijeka i programski kod

U narednim primjerima prikazano je deset jednostavnih zadataka koji predstavljaju izradu dijagrama tijeka i programskog koda u QBASIC-u prema zadanom algoritmu.

Primjer I

Napiši algoritam i dijagram tijeka za računanje razlike, umnoška i količnika dva zadana broja.

Algoritam:početak-----------------------------------------------------upiši A, BC = A - BD = A × BE = A / Bispiši C, D, E-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

CLSCLEARINPUT a, bc = a - bd = a * be = a / bPRINT c, d, eEND

Primjer II

Napiši algoritam i dijagram tijeka za računanje opsega i površine kvadrata, ako je zadana duljina stranice kvadrata.

Algoritam:

Page 13: Quick Basic Osnove1

početak-----------------------------------------------------upiši AOPSEG = 4 × APOVRŠINA = A × Aispiši OPSEG, POVRŠINA-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

CLSCLEARINPUT aOpseg = 4 * aPovrsina = a * aPRINT Opseg, PovrsinaEND

Primjer III

Napiši algoritam i dijagram tijeka za računanje prosjeka 4 zadana broja.

Algoritam:početak-----------------------------------------------------upiši A,B,C,DPROSJEK = (A + B + C + D) / 4ispiši PROSJEK-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

Page 14: Quick Basic Osnove1

CLSCLEARINPUT a, b, c, dProsjek = (a + b + c + d) / 4PRINT ProsjekEND

Page 15: Quick Basic Osnove1

Primjer IV

Napiši algoritam i dijagram tijeka za pretvaranje centimetara u metre. Zadaje se mjerni broj u centimetrima, a treba odrediti koliko je to metara.

Algoritam:početak-----------------------------------------------------upiši XMETRI = X / 100ispiši METRI-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

CLSCLEARINPUT XMETRI = X / 100PRINT METRIEND

Primjer V

Napiši algoritam i dijagram tijeka koji zadani broj A uvećava 100 puta ako je A manji od 100, a inače A umanji za 100. Ispisati dobiveni rezultat.

Algoritam:početak-----------------------------------------------------upiši Aako je A < 100 onda A = A × 100 inače A = A - 100ispiši A-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

Page 16: Quick Basic Osnove1

CLSCLEARINPUT A IF A < 100 THEN A = A * 100 ELSE A = A - 100 END IFPRINT AEND

Primjer VI

Napiši algoritam i dijagram tijeka za računanje opsega kvadrata, ako je zadana duljina stranice kvadrata A. Prije računanja provjeriti je li A veće od 0, a ako nije ispisati poruku: "Stranica kvadrata mora biti pozitivan broj."

Algoritam:početak-----------------------------------------------------upiši Aako je A > 0 onda opseg = 4 × A, ispiši opseg inače ispiši "Stranica kvadrata mora biti pozitivan broj."-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

Page 17: Quick Basic Osnove1

CLSCLEARINPUT A IF A > 0 THEN Opseg = A * 4 PRINT "Opseg="; Opseg ELSE PRINT "Stranica kvadrata mora biti" PRINT "pozitivan broj." END IFEND

Page 18: Quick Basic Osnove1

Primjer VII

Napiši algoritam i dijagram tijeka za računanje apsolutne vrijednosti cijelog broja. Uputa: Apsolutna vrijednost je udaljenost cijelog broja od nule. (|-3|=3, |3|= 3, |0|=0).

Algoritam:početak-----------------------------------------------------upiši Aako je A < 0 onda APS = (-1) * A inače APS = Aispiši APS-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

CLSCLEARINPUT "Upisi vrijednost za A:"; A IF A < 0 THEN APS = (-1) * A ELSE APS = A END IFPRINT "Apsolutno od A je:"; APSEND

Primjer VIII

Napiši algoritam i dijagram tijeka za ispisivanje svih prirodnih brojeva između zadanih brojeva A i B. Pretpostavite da su A i B zadani tako da je A+1<B (treba ispisati barem jedan broj).

Algoritam:početak-----------------------------------------------------upiši A, BX = A + 1ispiši XX = X + 1

Page 19: Quick Basic Osnove1

ako je X < B onda vrati se na naredbu ispiši X inače idi na kraj-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

10 CLS20 CLEAR30 INPUT "Upisi A,B, uz A < B"; a, b40 x = a + 1 ' Pocetna vrijednost x je 0 DO PRINT "Vrijednost za X je:"; x x = x + 1 ' x se uvecava za 1 LOOP WHILE x < b REM 'LOOP UNTIL' po prvom zadovoljenom izlazi iz petlje50 END

Page 20: Quick Basic Osnove1

Primjer IX

Napiši algoritam i dijagram tijeka za zbrajanje prvih N prirodnih brojeva.

Algoritam:početak-----------------------------------------------------X=0ZBROJ = 0upiši NX = X + 1ZBROJ = ZBROJ + X ako je X < N onda vrati se na naredbu X = X + 1 ispiši ZBROJ-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

-----------------------------------------------------------10 CLS20 CLEAR30 X = 0: Zbroj = 040 INPUT "Upisi granicu zbrajanja"; N DO X = X + 1 Zbroj = Zbroj + X LOOP WHILE X < N REM 'LOOP UNTIL' po prvom zadovoljenom izlazi iz petlje50 PRINT "Zbroj je:"; Zbroj60 END-----------------------------------------------------------10 CLS20 CLEAR30 x = 0: Zbroj = 040 INPUT "Upisi granicu zbrajanja"; N FOR i = 1 TO N STEP 1 x = x + 1 Zbroj = Zbroj + x NEXT i50 PRINT "Zbroj je:"; Zbroj60 END-----------------------------------------------------------

Primjer X

Napiši algoritam i dijagram tijeka koji učitava N cijelih brojeva. Izračunati zbroj svih pozitivnih i zbroj svih negativnih brojeva.

Algoritam:

Page 21: Quick Basic Osnove1

početak-----------------------------------------------------upiši Nbroj = 0pozitivni = 0negativni = 0upiši xako je x > 0 onda pozitivni = pozitivni + x inače negativni = negativni + xbroj = broj + 1ako je broj < N onda vrati se na naredbu: upiši xispiši pozitivni, negativni-----------------------------------------------------kraj

Dijagram tijeka: Programski kod:

10 CLS20 CLEAR30 broj = 0: pozitivni = 0: negativni = 040 INPUT "Upisi granicu zbrajanja"; N DO INPUT "Upisi jedan broj:"; X IF X > 0 THEN pozitivni = pozitivni + X ELSE negativni = negativni + X END IF broj = broj + 1 LOOP WHILE X < N REM 'LOOP UNTIL' po prvom zadovoljenom izlazi iz petlje50 PRINT "Zbroj pozitivnih je:"; pozitivni60 PRINT "Zbroj negetivnih je:"; negativni70 END

Page 22: Quick Basic Osnove1

Primjer izvornog koda za pogađanja slučajnog broja do 999 od M pokušaja

10 CLS ' Naredba za brisanje ekrana11 CLEAR ' Naredba za brisanje sadrzaja svih varijabli12 DEFINT I-K, M-N13 DEFLNG L, O14 DEFDBL D-E15 DEFSNG F-G16 DEFSTR R-S20 REM Od ovog broja nadalje pocinje programski kod25 RANDOMIZE TIMER ' Odredjuje slucajan pocetak RND sekvence30 I = INT((RND) * 1000) 'generira slučajni broj do 99940 M = M + 150 INPUT J60 IF J < I THEN PRINT "Upisani broj je manji od trazenog": GOTO 4070 IF J > I THEN PRINT "Upisani broj je veci od trazenog": GOTO 4080 PRINT "Pogodio si iz "; M; " puta"90 INPUT "Izlaz (D/N)"; stop$100 IF stop$ = "N" OR stop$ = "n" THEN GOTO 10999 END ' Zavrsetak osnovnog programskog koda1000 REM Od ovog broja nadalje pocinju pod-programi

Generator slučajnog broja jezičkog procesora uvijek generira istu sekvencu. Da bi se izbjegao početak uvijek s istim slijedom koristi se naredba RANDOMIZE TIMER koja koristi interni sat računala za odabir mjesta slučajnog početka u sekvenci.

Način ponašanja naredbe INPUT u linijama 50 i 90 nije isti. U čemu je razlika?

Umjesto linije 100 bolje je uporabiti naredbe koje sadrže ključnu riječ INKEY$ koja očitava pritisnutu tipku. Dakle treba uporabiti DO-LOOP-UNTIL strukturu te upoznati se s kodovima koje 'šalje' tipkovnica.

Kako rastumačiti izvršavanje linije 40 M = M + 1 kad je naizgled matematički nemoguća.

Page 23: Quick Basic Osnove1

Izvorni kod za primjer rješavanja sustava dviju jednadžbi s dvije nepoznanice metodom determinati. Prva: ax +by=c Druga: dx+ey=f

10 CLS ' Naredba za brisanje ekrana11 CLEAR ' Naredba za brisanje sadrzaja svih varijabli14 DEFDBL A-F, P-Z20 REM Od ovog broja nadalje pocinje programski kod30 INPUT "Unesi vrijednost za a"; a40 INPUT "Unesi vrijednost za b"; b50 INPUT "Unesi vrijednost za c"; c60 INPUT "Unesi vrijednost za d"; d70 INPUT "Unesi vrijednost za e"; e80 INPUT "Unesi vrijednost za f"; f90 p = a - d: q = b - a100 IF p = 0 AND q = 0 THEN PRINT "Nema rjesenja!": GOTO 900200 y = (c * d - a * f) / (a * e - b * d)300 x = (c * e - b * f) / (a * e - b * d)400 PRINT "x="; x, "y="; y900 SLEEP999 END ' Zavrsetak osnovnog programskog koda1000 REM Od ovog broja nadalje pocinju pod-programi

Naredba INPUT mogla se je umjesto 6 linija 30-80 upisati samo s jednom. Kako?

Promijeniti DEFDBL A-F, P-Z u DEFSNG A-F , P-Z te u DEFINT A-F, P-Z. Analizirati način prikazivanja rezultata za svaku od promjena.

Umjesto SLEEP korisnije je uporabiti strukturu koja pita dali se želi nadalje koristiti program ini ne, koja je povezana s pritiskom na jednu tipku. Koje naredbe za to treba koristiti?

Page 24: Quick Basic Osnove1

Izvorni kod primjera za analizu kružnice, kruga.....

10 CLS ' Naredba za brisanje ekrana11 CLEAR ' Naredba za brisanje sadrzaja svih varijabli14 DEFDBL O15 DEFSNG P17 CONST cpi = 3.141592927#20 REM Od ovog broja nadalje pocinje programski kod30 INPUT "Unesi radius kruznice"; R40 P1 = R ^ 2 * cpi50 P2 = 2 * R ^ 260 P3 = 2 * R ^ 2 * (SIN(cpi / 3)) ^ 370 P4 = (P1 - P2) / 480 P5 = (P1 - P3) / 3140 O1 = 2 * R * cpi150 O2 = 4 * 2 ^ (1 / 2) * R160 O3 = 6 * R * SIN(cpi / 3)210 PRINT "P1="; P1220 PRINT "P2="; P2230 PRINT "P3="; P3240 PRINT "P4="; P4250 PRINT "P5="; P5310 PRINT "O1="; O1320 PRINT "O2="; O2330 PRINT "O3="; O3900 SLEEP999 END ' Zavrsetak osnovnog programskog koda1000 REM Od ovog broja nadalje pocinju pod-programi

U liniji 30 traži se unos radijusa kružnice. Što treba napraviti da se ne prihvati unos negativnog broja? Što će se dogoditi ako se umjesto brojke unese neko slovo?

U čemu je razlika između prikaza izračunatih opsega i površina? Koje naredbene linije definiraju navedene prikaze?

Ako se u liniji 17 napiše 17 CONST cpi = 3.14, nestaje oznaka '#'. Zašto?

Page 25: Quick Basic Osnove1

Izvorni kod za izračunavanje vrijednosti trigonometrijskih funkcija karakterističnih kutova

10 CLS ' Naredba za brisanje ekrana11 CLEAR ' Naredba za brisanje sadrzaja svih varijabli12 DEFINT I-K, M-N, Z14 DEFSNG A-D15 DEFDBL X-Y17 CONST CPI = 3.1415927#20 REM Od ovog broja nadalje pocinje programski kod30 y = CPI / 640 k = 145 PRINT "kut", "sin", "cos", "tan", "cntag"50 a = SIN(y * k)60 b = COS(y * k)70 c = TAN(y * k)80 d = 1 / c150 z = 30 * k200 k = k + 1250 PRINT z, a, b, c, d300 IF k < 13 THEN GOTO 50900 SLEEP999 END ' Zavrsetak osnovnog programskog koda1000 REM Od ovog broja nadalje pocinju pod-programi

Ovaj program nema nikakvih upita za unos već, koristi poznati matematički aparat da se izračunaju i prikažu vrijednosti trigonometrijskih funkcija.

Zašto se za poznate veličine od 90 180, 270 i 360 stupnjeva ne izračunavaju vrijednosti kao u tablicama? Što bi se dogodili s izvršavanjem linije 80 kada bi varijabla 'k' imala početnu vrijednost 0 a ne 1?

Ima li smisla varijable a, b, c i d deklarirati da budu cjelobrojne?

Proširite program na način da se rezultati prikazuju s četiri decimale, na primjer s preinakom linije 50 u a = INT(SIN(y * k) * 1000) / 1000. Što se je s time u osnovi napravilo?

Page 26: Quick Basic Osnove1

Izvorni kod prema primjeru 6.1.5

10 CLS ' Naredba za brisanje ekrana11 CLEAR ' Naredba za brisanje sadrzaja svih varijabli12 DEFINT B, I-K, M-N13 DEFLNG D-G16 DEFSTR P-S20 REM Od ovog broja nadalje pocinje programski kod30 DIM A$(9): DIM B(9)40 N = 050 REM mjesto povratka po izboru100 PRINT "Unesi ime u "; N; ". polje matrice"; : INPUT A$(N)110 B(N) = LEN(A$(N))120 N = N + 1130 IF N <= 9 THEN GOTO 50200 GOSUB 1100210 N = 0 FOR N = 0 TO 9 PRINT N, A$(N) PRINT NEXT N900 SLEEP999 END ' Zavrsetak osnovnog programskog koda1000 REM Od ovog broja nadalje pocinju pod-programi1100 I = 0: J = 0: N = 91200 REM Mjesto povratka po izboru IF B(I) < B(J) THEN GOTO 1400 ELSE brojveci = B(I): podatak$ = A$(I) B(I) = B(J): A$(I) = A$(J) B(J) = brojveci: A$(J) = podatak$ END IF1400 IF J < N THEN J = J + 1: GOTO 12001600 IF I < N THEN I = I + 1: J = I: GOTO 12002000 RETURN

U liniji 200 ovog programa nalazi se poziv za sub-program (pod-program). Pod-programi uvijek završavaju s naredbo RETURN, da bi se nastavilo izvršavanje glavno programa od naredne linije nakon poziva pod-programa, u ovo primjeru od linije 210.

Ako ima potrebe u nekom programu izračunavati nekoliko desetaka puta jednu te istu funkciju, ali svaki put s drum ulaznom varijablom, matematički aparat funkcije dobro je u programu postaviti u pod-program. Zbog čega?

Treba uočiti da nije nužno pisati brojeve pojedinih linija, što se u ovom primjeru vidi iz prikaza FOR-NEXT i IF-THEN-ELSE-END IF programskih struktura. Kako onda izvršiti programski skok po naredbi GOTO? Pročitati u Help stranicama (RTFM)!

Page 27: Quick Basic Osnove1

Izvorni kod za primjer kosi hitac

10 CLS ' Naredba za brisanje ekrana11 CLEAR ' Naredba za brisanje sadrzaja svih varijabli12 DEFINT I-K, P13 DEFLNG L15 DEFSNG Q-Z17 CONST CPI = 3.14593318 CONST CGr = 9.80664520 REM Od ovog broja nadalje pocinje programski kod25 SCREEN 030 INPUT "Unesi pocetna brzinu tijela:"; v IF v = 0 OR v > 1500 THEN PRINT "Pocetna brzina nije u zadanim granicama" PRINT "Unesite vrijednost unutar zadanih!" SLEEP 5 CLS : GOTO 30 END IF40 INPUT "Unesi kut pod kojim je tijelo izbaceno:"; q IF q <= 0 OR q >= 90 THEN CLS PRINT "Kutevi manji od 0 i veci od 90 nemaju smisla." PRINT "Unesite vrijednost unutar zadanih!" SLEEP 5 GOTO 40 ELSE CLS PRINT "Pocetna brzina izbacaja iznosi: "; v, "m/s" PRINT "Kut izbacaja tijela iznosi: "; q, "stupnjeva" Z = (q * CPI) / 180 Tm = (Z * v * SIN(Z)) / CGr MaxY = (v ^ 2 * (SIN(Z)) ^ 2) / (2 * CGr) MaxX = (v ^ 2 * (SIN(2 * Z))) / CGr PRINT PRINT "Maksimalna visina tijela je: "; MaxY; "m" PRINT "Domet kosog hica iznosi: "; MaxX; "m" PRINT "Vrijem leta tijela iznosi: "; Tm; "sek" PRINT PRINT "Slijedi crtanje krivulje leta" SLEEP 5 END IF800 GOSUB 1100900 SLEEP999 END ' Zavrsetak osnovnog programskog koda1000 REM Od ovog broja nadalje pocinju pod-programi1100 SCREEN 01150 CLS1200 t = 01250 koef = 5500 ' normalizacija prema velicinu ekrana za najveci x i y1300 REM Povratak na crtanje x = v * t * COS(Z) y = v * t * SIN(Z) - (CGr * t ^ 2) / 2 px = x / koef py = y / koef IF py >= 23 OR py < 0 OR px < 0 OR px >= 79 THEN GOTO 2000 ELSE LOCATE (24 - py), (2 + px), 0: PRINT "*"; END IF t = t + 1: GOTO 13002000 RETURN

Page 28: Quick Basic Osnove1

U ovom primjeru koristi se programska struktura za nadzor prilikom dodijele vrijednosti varijablama. Nedostaje još dio koji bi nadzirao da li je pritisnuto slovo umjesto znamenke. To se može riješiti uporabom INKEY$ i nadzorom tipki s ucrtanim znamenkama. Naravno da se programski kod proširuje ali je stabilniji i robusniji. Dakle za naprednije korištenje uvijek konzultirati RTFM.

Matematika izračunavanja kosog hica nije neki napor ali je veliku problem u ovom jezičkom procesoru priječi iz prikaza s karakterima u grafički prikaz (SCREEN MOD-ovi), osobiti na novijim platformama. Zbog toga je za prikaz krivulje iskorišten karakter-mod , te su se rezultati morali obraditi na način da se mogu prikazati u polju od 24X80 karaktera s zvjezdicama. Čemu služi normalizacija rezultata?

U ovom primjeru u pojedinim naredbenim linijama koriste se i logički operatori. No treba imati na umu da je logička konstrukcija tipapy >= 23 OR py <0 ispravna, a 23 <= py <0 nije.