QuickBASIC (QBASIC)

2

QuickBASIC (QBASIC)

offline
  • ertić 
  • Novi MyCity građanin
  • Pridružio: 21 Feb 2011
  • Poruke: 1

ako kome treba imam matrijala o qbasicu!!!



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.

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





















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.

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



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.

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


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

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:

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)
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

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)

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.

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%


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


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

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 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)



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Druže, je li ovo tvoj tekst? Ako ne, forum ima određena pravila u vezi citiranja i prenošenja tekstova.



Ko je trenutno na forumu
 

Ukupno su 1263 korisnika na forumu :: 42 registrovanih, 7 sakrivenih i 1214 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _Petar, AC-DC, ajo baba, aleksandarbl, anbeast, Atomski čoban, Bobrock1, Bubimir, dekan.m, Dimitrise93, Djokislav, doktor123, Dorcolac, flash12, frenki1986, Insan, Istman, JOntra, kjkszpj, krkalon, Kubovac, kunktator, Lieutenant, ljubacv, Mi lao shu, Milometer, nemkea71, novator, opt1, panzerwaffe, Parker, pein, Pohovani_00, pristinski korpus, procesor, savaskytec, slonic_tonic, Srle993, Tvrtko I, virked, VJ, voja64