Qbasic za apsolutne početnike 4

Tipovi varijabli
Dosad su varijable koje smo koristili bile brojevi ili slova (ostali znakovi). Sad ćemo upoznati ostale oblike brojevnih varjiabli (i malo produbiti znanje o varijablama koje sadrže slova). QBasic koristi pet vrsta varijabli:

integer: cijeli broj između -32,768 i 32,767
long: cijeli broj između -2,147,483,648 i 2,147,483,647
single: decimalni broj "jednostruke preciznosti" (što god to značilo)
double: decimalni broj "dvostruke preciznosti" (isto ko i iznad)
string: znakovi koji se ne shvaćaju kao brojevi (mislim da najviše 256 znakova)

Naredba DIM
U većini programskih jezika, potrebno je "deklarirati" varijablu prije nego što ju upotrijebite. To znači da morate napisati naredbu u kojoj ćete reći programu ime varijable i njezin tip. U QBasicu se to radi naredbom DIM:

DIM ime_varijable AS tip_varijable

Dakle, da bi rekli QBasicu da je varijabla blah tipa integer, moramo napisati:

DIM blah AS INTEGER

NAPOMENA: Ako se to ne napiše, QBasic pretpostavlja da je varijabla tipa single.

Drugi način
Sjećate se da ste, kad vam je trebala tekstualna varijabla, poslije njezinog imena uvijek stavljali znak $ ? E, to ima svoj razlog koji ćete sada saznati. Svaki tip podataka ima takav znak, tako da naredba DIM zapravo ne služi skoro ničemu – ne morate deklarirati varijable, samo ih počnite koristiti i upotrebljavajte ove znakove:

integer: %
long: &
single: !
double: #
string: $

Puta deset na...
Ako je neki broj prevelik (ili premalen) za tipove single ili double, on će biti napisan u obliku iz podnaslova – broj 1234567890123456789 će se pretvoriti u:
- ako je tip single: 1.234568E+18 (1.234568 x 10 ^ 18)
- ako je tip double: 1.234567890123457D+18 (1.234567890123457 x 10 ^ 18)

U tom obliku broj možete upisati i kad pišete kôd i kad korisnik upisuje nešto (naredba INPUT).

Čemu to služi?
U "pravim" programima (koji se ne pišu u QBasicu ;) ), to služi za to da bi se smanjila količina memorije (RAM-a) koju program ždere. Znači, ako vam treba varijabla za broj ljudi nekih, nećete koristiti tip single ili double jer vam ne trebaju decimale (ne može negdje biti 156 i pol ljudi!), pa ćete koristiti integer (ili, u nekim ekstremnim slučajevima, long. Pa koliko koji tip podataka zauzima memorije?

integer: 16 bitova (2 bajta)
long: 32 bita (4 bajta)
single: 32 bita (4 bajta)
double: 64 bitova (8 bajtova)
string: 8 bitova (1 bajt) po znaku, a pošto je dozvoljeno 256 znakova – 2048 bitova (2 kilobita (256 bajtova)) Zato se koristi "tip podataka" STRING * n. Ako znate broj znakova koji neki string smije sadržavati, koristite ovo. DIM a AS STRING * 10 Ovime će se duljina niza a ograničiti na 10 znakova. Ovaj se tip podataka koristi i za stringove duže od 256 znakova.

Pošto QBasic ne služi za "prave" programe, tipovi podataka služe samo za programe u kojima dobivate malo žešće rezultate. Primjer:
Znate onu pričicu kad je neki tip nekom Kinezu (ko zna zašto) rekao da hoće onoliko riže koliko bi bilo na šahovskoj ploči kad bi se na prvo polje stavilo 1 zrno, a na svako slijedeće polje duplo više zrna nego na prethodno? E, pa koliko bi na ploči bilo zrnja?

zbroj = 0
FOR i = 1 TO 64
	x = 2 ^ (i – 1)	' polje 1: x = 2 ^ 0 (1); polje 2: x = 2 itd.
	zbroj = zbroj + x
NEXT i
PRINT zbroj

Kad bi varijabla zbroj bila tipa integer ili long, dobili biste grešku "Overflow". Da je single, dobili bi rezultat, ali malo jadan: 1.844674E+19 (1.844674 x 10^19). Tipom double, dobivate pristojniju vrijednost: 1.844674407370955D+19 (1.844674407370955 x 10^19).

Brojke i slova
Za tipove podataka važne su još dvije naredbe koje služe za pretvaranje iz brojevnog u znakovni tip i obrnuto. Recimo da u nekoj varijabli tipa string imate "234", i tome sad želite pribrojiti 1. To neće ići jednostavnom naredbom zbrajanja. Prvo vrijednost iz prve varijable ("234") morate prepisati u drugu, s tim da je ona druga brojčana (bilo koji brojčani tip). Za to služi naredba VAL (od eng. "value").

a$ = "234"
x% = VAL(a$)

Za obrnutu radnju koristi se naredba STR (od "string").

x% = 25
y$ = STR(x)

Eto, to su sve "tehnikalije" za sad koje trebate znati. Za ovu lekciju nema zadataka jer mislim da su bespotrebni.