BASIC

**Basic** je programski jezik. Prva varijanta se pojavila 1962. godine a naziv je dobio od **B**eginner's **A**ll Purpose **S**ymbolic **I**nstruction **C**ode. Služi za pravljenje jedostavnih programa i simulacija. Kao i većina drugih programskih jezika, za programiranje koristi naredbe i varijable koje zajedno čine programski kod kojim se piše program. Do danas je urađen velik broj varijanti ovog programskog alata ipak u upotrebi je najčešća varijanta Microsoftov Quick Basic poznatiji pod nazivom Qbasic4, za PC računare koji rade pod DOS (Windows) operativnim sistemima. Inače ljuska (Shell) koju koristi Qbasic je DOS pa su i prozori takvi (i editor ali i komandni prozor).

Za izvršenje zadatih naredbi, tj. za pokretanje napisanog programa, u Qbasic-u je potrebno pritisnuti dugme **F5** na tastaturi.

## Uvod 
### Pojam varijable 
Najjednostavnije objašnjenje varijabli jeste to da su varijable ustvari promjenljive vrijednosti. Varijable nam služe kako bi olakšali kodiranje programa. Svaka varijabla ima svoje ime i svoju vrijednost. Pa tako, svaki put kada želimo u programu upotrijebiti riječ *kahva*, ne moramo je svaki put pisati u kodu programa nego joj je moguće dodijeliti ime, i svaki put upotrijebiti to ime umjesto riječi *kahva*, ali će se ipak svaki put u programu ispisati riječ *kahva*. Postoje dvije vrste varijabli:

* Numeričke(brojevne) i
* Znakovne varijable

Numerička varijabla ima brojevnu vrijednost tj. može sadržati samo ove znakove:

0,1,2,3,4,5,6,7,8,9 i tačku(.) umjesto zareza.

Ukoliko korisnik programa ili sam programer pokuša dodijeliti numeričkoj varijabli vrijednost koja sadrži neki drugi znak(simbol), osim gore navedenih 11 simbola, programski jezik (qbasic) će javiti grešku.

Kao ime za numeričku vrijednost se mogu koristiti svih 128 znakova ASCII koda, s tim da to ime mora počinjati sa slovom engleskog alfabeta i ta oznaka ne smije sadržati prazna (blanko) mjesta u sebi.

Znakovna varijabla ima vrijednost koja može sadržati 128 znakova ASCII koda (to uključuje i brojeve). Ime znakovne varijable je isto kao i numeričke, samo što na kraju varijable obavezno moramo staviti string ($-dolar).

### Primjer 1 
Svaki put kada želimo da u programu ispišemo *1.50*, u kodu ćemo napisati ***somun*** ili kada želimo da napišemo riječ *kahva* u programu, u kodu ćemo napisati samo ***a$***. Kao što vidimo varijable nam potencijalno mogu skratiti postupak pisanja koda programa, a i cijeli sistem rada u programskom jeziku qbasic je zasnovan na varijablama i naredbama pomoću kojih upravljamo vrijednostima varijabli.

### Dodjeljivanje vrijednosti varijabli 
Dodjeljivanje vrijednosti varijabli se vrši pomoću relacionog operatora jednako(=). Tako npr. kada želimo dodijeliti vrijednost *10000* varijabli ***cilj*** to ćemo učiniti na sljedeći način u kodu:

cilj=10000

Na ovaj način smo varijabli ***cilj*** dodijelili vrijednost *10000*.

Kod dodjeljivanja vrijednosti znakovnoj varijabli obavezno moramo vrijednost varijable staviti pod navodnike. Tako npr. kada želimo da varijabli ***a$*** dodijelimo vrijednost *10000 članaka* u kodu ćemo napisati sljedeće:

a$="10000 članaka"

Postoji slučaj gdje želimo nekoj novoj varijabli dodijeliti vrijednost neke već postojeće varijable. To se vrši po istom principu:

cilj=10000

težnja=cilj

Sada varijabla ***težnja*** ima vrijednost varijable ***cilj*** tj. vrijednost varijable ***težnja*** je *10000*.

U sva tri slučaja ime varijable se stavlja sa lijeve strane znaka jednakosti (=), a vrijednost te varijable sa desne. Ukoliko programer pokuša uraditi drugačije, basic će javiti grešku.

Relacioni operatori su oni operatori uz pomoć kojih uspostavljamo odnos(relaciju) između dvije varijable. Oni se često koriste u uslovima, dok se operator (=) koristi i u dodjeljivanju vrijednosti varijabli. Relacioni operatori su:

Pored ovih relacionih postoje još i tzv. logički operatori. To su operatori koji se koriste u uslovima i ciklusima. Tri su, i oni će kasnije biti posebno obrađeni. To su:

* NOT - **ne**
* AND - **i**
* OR - **ili**

### Računanje sa numeričkim varijablama 
U programskom jeziku Basic se može vršiti računanje sa određenim brojevima, ali isto tako i sa varijablama. Rezultat računanja varijabli i(li) brojeva uvijek mora biti neka nova varijabla čija će vrijednost biti jednaka rezultatu tog računanja. Računanje se vrši pomoću znakova za računske operacije. Osnovni znakovi su:

* plus (+)
* minus (-)
* puta (*)
* podijeljeno (/)
* cjelobrojno dijeljenje (\)
* ostatak dijeljenja (MOD)
* stepenovanje (^)
* korjenovanje (SQR)

Znak **^** ćemo dobiti kada u Basicu držeći pritisnut taster Alt otkucamo broj 94 sa numeričkog dijela tastature. (ASCII vrijednost znaka ^ je 094). Broj ili varijabla koja se nalazi lijevo od ovog znaka je broj koji se stepenuje (baza), a broj ili varijabla koja se nalazi na desnoj strani znaka jednako predstavlja eksponent.

Znak **\** ćemo dobiti kada u Basicu držeći pritisnut taster Alt otkucamo broj 92 sa numeričkog dijela tastature. (ASCII vrijednost znaka ^ je 092).
Ne postoji simbol u Basicu za korjenovanje nego postoji funkcija kojom se izračunava korjen nekog broja.

Računanje se vrši na sljedeći način:

nova.varijabla= varijabla(broj) znak varijabla(broj) znak varijabla(broj) znak varijabla(broj) ...

U ovom slučaju je nova.varijabla rezultat računanja i taj rezultat je smješten u varijablu nova.varijabla. Varijabla(broj) je broj sa kojim se računa, a znak je matematički znak (+,-,*,/,\ ili ^) koji simbolizira računsku operaciju. Vidimo da rezultujuća varijabla mora biti na lijevoj strani znaka jednako (=).

također se mogu koristiti i zagrade i to samo male zagrade - (). U jednoj zagradi može biti više drugih zagrada. Program će računati vrijednosti po principu "klasične matematike" iznutra prema vani.

### Primjer 2 
Ovdje ćemo navesti nekoliko primjera računanja vrijednosti u Basic-u.

# a=5+2 --> varijabli a se pridružuje vrijednost 7
# a=5-2 --> varijabli a se pridružuje vrijednost 3
# a=5*2 --> varijabli a se pridružuje vrijednost 10
# a=5/2 --> varijabli a se pridružuje vrijednost 2.5
# a=5\2 --> varijabli a se pridružuje vrijednost 2
# a=5 MOD 2 --> varijabli a se pridružuje vrijednost 1
# a=5^2 --> varijabli a se pridružuje vrijednost 25
# a=SQR(2) --> varijabli a se pridružuje vrijednost 1.4142135..

# Sarajevo=400000

Mostar=106000

neki.bh.gradovi=Sarajevo+Mostar

bez.ilidže=neki.bh.gradovi-50000

Vidimo da svaka varijabla mora bti definisana tj. mora imati svoju vrijednost (u protivnom će vrijednost te varijable biti 0).

### Pojam naredbe 
Naredbe u programskom jeziku Basic su riječi pomoću kojih programer upravlja varijablama. Svaka od njih ima svoje posebne parametre koje programer mora odrediti kako bi određena naredba funkcionisala. Postoji više vrsta naredbi:
* Ulazne naredbe
* Izlazne naredbe
* Blokovi provjere uslova
* Petlje
* Ugrađene funkcije
* Naredbe za obradu varijabli
* Naredbe za rad sa grafikom i zvukom
* Naredbe za rad sa datotekama i podacima
i dr.

U jednom redu koda se može upotrijebiti samo jedna naredba. Ako želimo u jedan red koda napisati više naredbi onda ih moramo odvojiti dvotačkom (:).

### Pojam algoritma i dijagrama toka 
**Algoritam** je niz određenih i uređenih koraka koji tačno i precizno vode do rješenja, ako ono postoji ako ne, govori nam da rješenje ne postoji, ne može se dobiti sa preciznom tačnošću ili u odrđenom vremenu. Znači, algoritam predstavlja niz stvari koje računar uradi kako bi ispunio zahtjeve koje je programer zadao u programskom kodu. Kada se algoritam napiše u vidu naredbi, dobijemo programski kod.

**Dijagram toka** je grafički prikaz algoritma, odnosno postupka za rješavanje određenog postupka.

Interesantno je da su principi i definicija algoritma postavljeni puno prije pojave računara. Dao ih je arapcki matematičar Al'Harizmi u 10. vijeku.

## Osnovne naredbe u programskom jeziku Basic 
* **PRINT** je izlazna naredna koja služi za ispisivanje teksta (znakova i brojeva) u programu. Sintaksa ove naredbe je **PRINT varijabla**. Znači, da bi napisali ovu naredbu potrebno je napisati riječ PRINT, zatim naziv varijable, neki tekst ili broj. Ako želimo da namse ispiše neka već definisana varijabla, poslije riječi PRINT pišemo ime te varijable. Ako želimo ispisati u programu neki tekst, to ćemo učiniti tako što ćemo napisati riječ PRINT, pa pod navodnicima (" ") ispisati željeni tekst. Ako želimo ispisati neki broj, dovoljno je poslije riječi PRINT napisati taj broj. Ako želimo ispisati više od jedne varijable (teksta ili broja) u programu to ćemo učiniti tako što ćemo staviti zarez (,) ili tačku-zarez (;) poslije prve varijable (teksta ili broja), te taj postupak ponoviti nakon svake sljedeće. Da li će biti zarez ili tačka-zarez zavisi od veličine razmaka između te dvije varijable (teksta ili broja). Za manji razmak ćemo staviti tačku-zarez (;), a za veći zarez (,).
* **INPUT** naredba će od korisnika programa tražiti unos neke numeričke vrijednosti varijable. Njena sintaksa je **INPUT varijabla**. Isto tako je moguće staviti poslije riječi INPUT navodnike (" "), te pod navodnicima napisati tekst koji će se korisniku ispisati uz upit da se unese tražena varijabla. Želimo li omogućiti unos tekstualnih vrijednosti koristićemo naredbu **INPUT$** , njena sintaksa je **INPUT$ varijabla$**.
* **REM** naredba služi za dodavanje komentara pri pisanju programskog koda. Taj komentar će biti vidljiv samo u programskom kodu, dok ga korisnik tokom izvršavanja programa neće moći vidjeti. Sintaksa ove naredbe je **REM tekst**. Dati tekst ne mora biti stavljen pod navodnike.
* **CLS** je skraćenica od **CL**ear **S**creen. Obično se stavlja na početak programa i time postižemo da se sav tekst u programu, uključujući i prošle programe izbriše sa ekrana u kojem vidimo izvršenje programa. Tako, svaki novi program počinje od početka ekrana i podaci se ispisuju sve do nove upotrebe CLS, kada se svi podaci ponovo izbrišu.
* **END** se obično stavlja na kraj programa, mada nije obavezno. To čak ne spada u pravu vrstu naredbe, iako se stavlja na kraju programa, kako bi se potencijalni čitač programa lakše orijentisao. Također će služiti i kod naredbe bezuslovnog izlaska iz pod procedure, funkcije ili IF..THEN bloka.

### Primjer 3 
Na lijevoj strani možete vidjeti programski kod, a na desnoj primjer izvršenja programa koji radi po napisanom kodu programa (dobija se pritiskom tipke F5).

mini|centar|750px|Primjer korištenja naredbe **PRINT**
mini|centar|750px|Program koji sabira dva broja

## Uslovi 
Uslovi u Basicu služe kako bi provjerili vrijednosti varijabli, uporedili ih, te efikasnije upravljali njima poslije ispitanog uslova. Postoji više načina postavljanja uslova, te su neki od njih upriložena u nastavku.

### Prvi način postavljanja uslova 
Uslov mora počinjati sa riječi **IF** (ako) i poslije te rječice se stavlja uslov koji program treba da ispita. Taj uslov mora sadržati dvije već postojeće varijable te neki od relacionih operatora(=,,=,<>) koji treba staviti između njih. Znači uslov mora sadržati dvije varijable (vrijednosti), te relaciju između njih koju ispituje taj uslov. Također uslov može sadržati i logičke operatore (AND, OR, NOT). Nakon uslova slijedi posljedica, šta treba učiniti ako je uslov ispunjen (naredba **THEN**). Ključne riječi **IF** i **THEN** moraju biti u istom redu.

Drugi dio uslova sadrži posljedicu tj. šta će program učiniti ako se desi da je uslov ispunjen. Poslije rječice IF i napisanih varijabli, te relacije između njih koje program ispituje, obavezno se mora staviti rječica **THEN**, te poslijedica koju će program učiniti ako je ispunjen svaki dio uslova (ili dio uslova preciziran logičkim operatorima). Ta posljedica obavezno mora sadržati neku od naredbi tj. šta će program učiniti sa željenom varijablom ako je uslov ispunjen.
Ako ćemo nakon ključne riječi za posljedicu (**THEN**) koristiti samo jednu naredbu onda se i ona piše u istom redu ali ako treba izvršiti više naredbi onda se one pišu u novom redu (svaka) a blok IF..THEN se mora zaključati naredbom **END IF**

Treći dio uslova uključuje naredbu ELSE kojom je omogućeno izvršavanje posljedice kada je rezultat ptovjere uslova netačan (0). Iza rječice THEN i niza naredbi koje će se ispuniti u slučaju pozitivnog rezultata uslova, stavljamo rječicu **ELSE** te također niz naredbi koje će program izvršiti ukoliko se desi da je rezultat postavljenog uslova netačan. Ukoliko se ne stavi ovaj dio u uslov tj. ako programer ne definiše posljedicu negativnog rezultata postavljenog uslova, program će nastaviti izvršavanje programskog koda iz sljedećeg reda.

Trebamo li uvezati više uslova tako da rezultat bude jedinstven onda ćemo koristiti logičke operatore AND (I) ili OR (ILI).

Uz logičke operatore AND i OR BASIC podržava i ključnu riječ NOT, čime se pravi inverzija tj. svi rezultati koji su kod provjere uslova bili "tačno" postaju "netačno" i obrnuto.

## Sintaksa IF bloka 
```gwbasic
**1. Primjer**
IF uslov THEN naredba posljedice

**2. Primjer**
 IF uslov THEN
  Naredba1
  Naredba2
    ...
 END IF

**3. Primjer**
 IF uslov THEN
  Naredba1
  Naredba2
    ...
 ELSE
  Naredba1
  Naredba2
    ...
 END IF
```

## Još neki od Blokova za provjeru uslova 
**WHILE.. WEND** Ovaj blok će se izvršavati sve dok je tvrdnja u uslovu tačna a provjera se vrši na ulazu u blok. Njegova sintaksa je sledeća:

```gwbasic
WHILE uslov
  naredba1
  naredba2
    ...
 WEND
```

**DO.. LOOP WHILE** Ovaj blok će se izvršavati sve dok je tvrdnja u uslovu tačna a provjera se vrši na kraju bloka. Njegova sintaksa je sledeća:

```gwbasic
DO
  Naredba1
  Naredba2
    ...
 LOOP WHILE uslov
```

**DO WHILE.. LOOP** Ovaj blok će se izvršavati sve dok je tvrdnja u uslovu tačna a provjera se vrši na ulazu u blok. Njegova sintaksa je sledeća:

```gwbasic
DO WHILE uslov
  Naredba1
  Naredba2
    ...
 LOOP
```

**DO.. LOOP UNTIL uslov** Ovaj blok će se izvršavati sve dok se tvrdnja u uslovu ne ispuni (dok tvrdnja nije tačna) a provjera se vrši na kraju bloka. Njegova sintaksa je sledeća:

```gwbasic
DO
  Nareba1
  Naredba2
    ...
 LOOP UNTIL uslov
```

**DO UNTIL uslov...LOOP** Ovaj blok će se izvršavati sve dok tvrdnja u uslovu ne bude tačna a provjera se vrši na ulazu u blok. Njegova sintaksa je sledeća:

```gwbasic
DO UNTIL uslov
  Naredba1
  Naredba2
    ...
 LOOP
```

## Višestruki odabir 
Umjesto da koristimo više blokova za provjeru moguće je koristiti ključne riječi **SELECT CASE** čime je omogućen višestruki izbor. Sintaksa je sledeća:

```gwbasic
SELECT CASE varijabla
   CASE 1
     naredba1
     naredba2
       ...
   CASE 2
     naredba1
     naredba2
   CASE 4 TO 6
     naredba1
     naredba2
   CASE IS >7
     naredba1
 END SELECT
```

*-nadam se da komentar nije potreban i da je vidljivo iz priloženog kako funkcioniše ova struktura. Jasno da je i u okviru svakog slučaja (CASE) moguće dodavati nove blokove uslova, ubaciti prekid BREAK ..*

### Naredba bezuslovnog skoka 
Naredba **GOTO** je naredba (bez)uslovnog prelaska na definisani red. Često se koristi uz uslove i tada je uslovna.

Da bi korištenje ove naredbe bilo moguće red u koji se vrši skok mora početi brojem (biti numerisan).
Naredbu GOTO će programer koristiti kada želi da program, poslije pročitanog reda nekog programa, ne čita sljedeći red, nego uz pomoć naredbe GOTO, programer odluči koji će red sljedeće biti pročitan tj. odakle će program nastaviti čitati programski kod. Zbog toga nam je potrebna numeracija tog reda koda. Sintaksa ove naredbe je sljedeća:

*GOTO broj koda*

Znači poslije riječi GOTO stavljamo broj kojim smo numerisali red, od kojeg želimo da program nastavi čitati programski kod. Naredba GOTO često se upotrebljava kao posljedica (ne)ispunjavanja uslova. Npr. može se staviti da, ukoliko se uslov ispuni program nastavi čitati programski kod sa određene pozicije, a ako se ne ispuni, da se vrati na ponovno dodjeljivanje vrijednosti varijabli (pomoću znaka jednakosti ili naredbe INPUT).

### Naredba višestrukog prelaska 
Naredba višestrukog prelaska služi kako bi programer izbjegao korištenje komplikovane sintakse IF THEN uslova. Za ovu naredbu je potrebna brojevna varijabla (ta brojevna varijabla mora biti prirodan broj), te broj linija koda kolika je vrijednost te varijable. Sintaksa ove naredbe je:

*ON brojevna.varijabla GOTO lista linija koda*

Pod listom linija koda se podrazumijevaju brojevi (međusobno odvojeni zarezom) koji predstavljaju numerisane redove. Brojevna varijabla određuje od koje će linije koda (navedenog kao broj - numeracija pod listom linija koda) program nastaviti da čita programski kod. Ako je naprimjer vrijednost varijable 1, program će nastaviti čitati programski kod od linije čiji je broj prvi naveden u sintaksi naredbe **ON GOTO**. Ako je vrijednost varijable 2, program će nastaviti čitati programski kod od linije čiji je broj drugi naveden u sintaksi naredbe ON GOTO itd. Ako je vrijednost varijable veća od broja numera (brojevi u listi linija koda), onda će taj broj biti podijeljen sa brojem numera te uzeti ostatak kao broj koji će odrediti koji će slijdeći red biti pročitan. Naprimjer, ako ima 5 numera (brojeva koji predstavljaju linije koda u naredbi ON GOTO), a vrijednost brojevne varijable 6, tada će program čitati programski kod iz linije koja je prva stavljena u listi linija koda, ako je vrijednost brojevne varijable 7, tada će program čitati programski kod iz linije koja je druga stavljena u listi linije koda itd. Upotrebom ove naredbe, programer potencijalno može izbjeći korištenje komplikovane sintakse IF THEN uslova, te tako skratiti programski kod.

## FOR petlja 
**FOR petlja** Poznatija kao brojačka petlja vrši iteraciju (ponavljanje niza naredbi određeni broj puta. Veoma se često koristi. Sve naredbe unutar FOR ..NEXT reda će biti ponovljene onoliko puta koliki je unterval (broj članova niza ograničen sa n TO m. Problem ove petlje je što se iteracija vrši onoliko puta kojiko ima elemenata u nizu od n do m (što znači da unaprijed moramo znati koliko puta se vrši iteracija).

### Sintaksa naredbe 
```gwbasic
FOR a = n TO m STEP x
    Naredba1
    Naredba2
     ...
 NEXT a
```

**Primjer FOR.. NEXT petlje:**

```gwbasic
Napiši program koji ispisuje sve dvocifrene brojeve!
 FOR a = 10 TO 99
  PRINT a,
 NEXT a
 Ako treba odraditi zadatak a da ne znamo koliko puta treba ponoviti postupak onda ćemo
 koristiti neki od blokova za provjeru uslova ili slične kombinacije.
```

**Primjer WHILE..WEND bloka:**

 Napiši program koji određuje prvih pet brojeva djeljivih sa 7.

```gwbasic
a = 0
 n = 0
 WHILE a < 5
  If n MOD 7 = 0 THEN
   PRINT a
   a = a + 1
  END IF
 n = n + 1
 WEND
```

## Također pogledajte 
* Microsoft VBA
* Orao Basic
* AMOS BASIC

Kategorija:Programski jezici
Kategorija:Američki izumi