37, 38 Ključne reči, identifikatori, konstante i promenljive. Osnovni tipovi podataka (31.01-01.02)
Azbuka jezika i leksički simboli
Prvo treba da se upoznamo sa osnovnim elementima koji mogu da se koriste u programiranju - u načem slučaju u programskom jeziku C, ili, kako bi to neki nazvali, sa azbukom jezika C.
Azbuku jezika C čini skup znakova koji mogu da se koriste prilikom pisanja programa. Skup znakova obuhvata:
- Mala i velika slova engleske abecede
- Decimalne cifre
- Specijalne znake
- Neštampajuće znake
Znači, osnovni znakovi jezika C koje koristimo pri građenju programa su:
- slova engleske abecede A, B, C, ... , X, Y, Z, a, b, c, ... , x, y, z
- cifre 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- specijalni znaci: + = _ -
* & % # ! | . , ; : ' / ? { } ~ \ [ ] ^
- neštampajući znaci space (blanko), znak za novu liniju, ...
Kada programiramo, mi koristimo te osnovne znakove pomoću kojih gradimo osnovne elemente u programskom jeziku : osnovni elementi programskog jezika C su leksički simboli.
(Poređenje sa pisanjem reči i rečenica u pisanju sastava iz Srpskog jezika: Kada pišemo sastav, koristeći slova azbuke pišemo reči koje su u stvari osnovni elementi našeg sastava.)
Definicija:
Leksički simboli – znaci ili nizovi znakova koji u programu imaju određeni smisao i čine osnovne gradivne elemente jezika C od kojih se formiraju pravilne instrukcije jezika
Leksički simboli se dele na:
- Identifikatore
- Konstante
- Službene ili ključne reči
- Operatore
- Separatore
Identifikatori (imena)
Identifikator je sekvenca velikih i malih slova, cifara, i karaktera ‘_’.
Drugim rečima, to su imena konstanti, promenljivih, tipova podataka, funkcija, labela... To su reči koje se sastoje od: slova, cifara i specijalnog znaka _.
Važno je zapamtiti sledeće:
- Imena moraju da počinju slovom (obično se koriste mala slova za promenljive a velika za konstante). Drugim rečima, imena nikada ne počinju cifrom!!!
- Ne preporučuje se da ime počinje sa _, ali se češće koristi u sredini imena.
- velika i mala slova se razlikuju (a ≠ A) - engleski izraz za to je case sensitive.
- iako je dužina imena proizvoljna, sve zavisi od toga gde se koriste: interna imena u fajlu mogu imati do 31 znak, a ona koja se koriste za rad sa nekim operativnim sistemima samo 6 znakova -> savet: ne koristite predugačka imena.
- U imenima se NE SME koristiti razmak !!!
Primeri ispravnih imena:
skola, y, x, a, zbir, Programski_jezik_C, INT
Nedozvoljeno je:
3dan, int, x+y, programski jezik, ...
Separatori
To su elementi kojima se razdvajaju reči : razmak (space), tab, kraj linije, komentar, element kojim se završavaju naredbe ;
Komentari služe za objašnjenja u toku pisanja programa. Pomoću komentara program postaje čitljiviji za čoveka. Prevodiocu (kompajleru) je potpuno svejedno da li postoji sto hiljada linija komentara ili ni jedna jedina - on kompletno sve što je u komentaru zamenjuje jednim razmakom.
Komentar počinje znakovima /* i završava se znakovima */
npr: /* ovo je KOMENTAR u jednom ili u više redova */
Ako je za komentar dovoljan jedan red teksta, možemo koristiti znakove //
npr. // ovo je komentar
Ključne reči
Ključne reči ili Službene reči jezika su rezervisane reči i ne mogu se koristiti kao identifikatori.
To su reči:
auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while
Pišu se malim slovima!!!
Za prevodioca imaju posebno značenje!!!
Drugim rečima, ključne reči imaju posebno definisano značenje i ne mogu se koristiti ni za šta drugo.
Konstante
To su podaci čija je vrednost unapred zadata u programu i ne mogu se menjati u toku njegovog izvršenja.
Drugim rečima, konstanta je objekat u programu koji ima ime i koji dobija vrednost jednom, pre početka izvršavanja programa i ne može se menjati.
Dva su načina na koji možemo da zadavanja konstante:
***********
Prvi način je i najčešći: konstanta se definiše rezervisanom reči define pre početka glavne funkcije programa (pre int main(void) )
#define simb_konstanta konstanta
npr:
#define PI 3.14159
***********
Drugi način se ređe koristi: unutar funkcije se kreira promenljiva kojoj damo oznaku const i pošto joj damo neku vrednost na početku, to nadalje više ne možemo da menjamo
const tip simb_konstanta=vrednost;
npr:
const float PI=3.14159;
Promenljive
Šta su to Promenljive? To su podaci smešteni u memoriji računara koji se u toku izvršenja programa mogu menjati tj. kojima se mogu dodeljivati različite vrednosti. U programu se označavaju pomoću identifikatora (ime promenljive).
Svaka promenljiva MORA da ima ime, tip i vrednost.
***
Recimo da želite da napišete program koji će da sabere dva broja koje će korisnik da unese. Proces rada programa bi išao ovako: korisnik unosi prvi broj, program taj broj sačuva, zatim korisnik unosi drugi broj i program taj broj takođe sačuva. Postavlja se pitanje gde taj broj sačuvati? Odgovor je: u memoriji računara, odakle ćemo broj po potrebi iščitavati. Ovo se realizuje tako što ćemo "napraviti" promenljivu (takođe se nazivaju i variable) koja će zauzeti odgovarajuće parče memorije, a veličina tog parčeta zavisi od tipa promenljive. Oko tipova podataka i njihovim karakteristikama (a jedna od njih je i količina zauzete memorije) ćemo se pozabaviti kasnije. Bitno je da uvidite da se u promenljivu mogu upisivati i iščitavati podaci sve dok ta promenljiva postoji u memoriji. Vratimo se zadatku, dakle učitali smo dva broja koja treba sabrati. Sledeće, treba nam mesto u memoriji računara u kojem ćemo snimiti rezultat sabiranja, dakle treba nam još jedna promenljiva. Njoj ćemo dodeliti vrednost zbira prve dve promenljive koje smo učitali. I to je to. Trebalo bi da vam je jasno šta su promenljive i čemu služe. U daljem tekstu ćemo objasniti i kako se koriste.
***
SVAKA PROMENLJIVA KOJA SE KORISTI U PROGRAMU MORA SE DEKLARISATI !!!
Deklaracija je način kojim se promenljiva uvodi u program, odnosno način na koji kompajler saznaje da postoji određena promenljiva pa joj dodeljuje neki prostor u memoriji. Koliki je taj prostor koji kompajler treba da dodeli zavisi od vrste promenljive, ili od tipa promenljive.
Deklaracijom se određuju:
- ime promenljive
- tip promenljive
- početna vrednost (ovo nije obavezno)
Način na koji se promenljiva deklariše je sledeći:
ime_tipa ime_promenjive [= vrednost];
ime_tipa je tip promenljive ili vrsta promenljive, ime_promenljive je ime te promenljive, a vrednost (koja može a ne mora da bude navedena) početna vrednost date promenljive.
Ako promenljivoj ne zadate početnu vrednost, treba voditi računa da joj se zada neka vrednost negde u programu, pre prve upotrebe. Onog momenta kada se nekoj promenljivoj zada vrednost kažemo da je ta promenljiva definisana.
Ako se promenljivoj na početku, prilikom deklaracije, zada i početna vrednost, to zovemo i inicijalizacija, odnosno možemo da kažemo da smo promenljivoj dodelili inicijalnu vrednost.
***
Recimo da želimo da napravimo promenljivu u koju ćemo smestiti prvi broj iz gore navedenog zadatka, to ćemo uraditi ovako:
int a;
Ovim smo deklarisali promenljivu koja ima tip "int" (što će reći da može čuvati samo cele brojeve, ovim ćemo se kasnije pozabaviti) i naglasili da se ona zove "a".
Pogledajmo sledeći primer:
int a = 157;
dodali smo " = 157 ". To je inicijalizacija ili dodavanje vrednosti promenljivoj u isto vreme kada je i deklarišemo (napravimo).
***
Konstante su takođe vrsta promenljivih ali se njima može vrednost dodeliti samo jednom, prilikom inicijalizacije. U daljem toku programa njihova vrednost se može samo iščitavati (koristiti). Deluje beskorisno? Pa i nije baš. Recimo da u programu koristite broj Pi, on ima konstantnu vrednost 3.14 te ćemo promenljivu Pi definisati tako da se njena vrednost ne može menjati. Ovako:
const int Pi = 3.14;
Bitno je uvideti da konstante moraju biti inicijalizovane, u suprotnom nema svrhe koristiti ih.
***
Da se podsetimo pravila za dodeljivanje imena promenljivima: Promenljiva može da ima bilo koje proizvoljno ime, ali je najbolje da to ime sadrži u sebi namenu promenljive. Na primer, ako treba da čuva zbir nekih brojeva verovatno ćete je nazvati "zbir" ili "rezultat". Imena promeljivih smeju da sadrže slova, brojeve i znak donje crte ( _ ). Na početku imena se mora naći ili slovo ili donja crta, broj ne sme!
***
Prilikom deklarisanja promenljivih, može se nakon navođenja tipa promenljive, navesti više promenljivih tog tipa:
Na primer, deklaracijama:
int i, j, n=10;
float a, e=2.71, pi=3.14;
char c, d='?';
su deklarisane:
• promenljive celobrojnog tipa i, j i n;
• promenljive realnog tipa a, e i pi;
• promenljive znakovnog tipa c i d.
Promenljive n, e, pi i d imaju, redom, vrednosti 10, 2.71, 3.14 i '?'.
Osnovni tipovi podataka
Osnovni tipovi podataka su int, float, double i char.
Podaci tipa int su celobrojne vrednosti. Opseg celobrojnih vrednosti je različit i može se menjati primenom kvalifikatora long, short i unsigned. Kvalifikator long povećava opseg vrednosti celobrojnih promenljivih. Kvalifikator short ispred int smanjuje opseg celobrojnih promenljivih. Kvalifikator unsigned ispred int deklariše promenljivu tako da može memorisati samo pozitivne vrednosti.
Promenljive tipa float ili double memorišu vrednosti realnih brojeva, odnosno, vrednosti sa decimalnim (pokretnim) zarezom. Promenljive deklarisane kao double mogu memorisati oko dva puta više decimalnih cifara od promenljivih tipa float.
Promenljive i konstante tipa char memorišu karaktere. Konstante tipa char dobijaju se stavljanjem karaktera između jednostrukih navodnika, npr. ‘A’, ‘1’, itd. ‘A’ treba razlikovati od “A”, jer “A” predstavlja konstantni niz karaktera koji u C jeziku ima posebnu predstavu i tretman.
******************************************************************************
dodatno za razumevanje tipova podataka:
Najčešće se sreće da se u računarima osnovni tipovi podataka čuvaju na sledeći način:
char — mali ceo broj (ASCII kod karaktera), jedan bajt
int — celobrojna vrednost, najčešće 4 bajta (može i 2 bajta, zavisi od računara)
float — realan broj jednostruke tačnosti, najčešće 4 bajta
double — realan broj dvostruke tačnosti, najčešće 8 bajtova
Osnovnim tipovima podataka mogu se pridružiti kvalifikatori short i long.
Tipu int mogu se pridružiti oba pri čemu navodjenje ključne reči int nije obavezno:
Veličine tipova su platformski zavisne.
Na svakom računaru važi sledeće:
broj bitova(short) ≤ broj bitova(int) ≤ broj bitova(long)
Tipu double može se pridružiti long, dok se tipu float ne može pridružiti ni jedan kvalifikator.
Postoje i kvalifikatori signed i unsigned koji se mogu pridružiti celobrojnim tipovima (int, char, short i long).
Neozančeni brojevi (unsigned) su uvek pozitivni ili nula.
Primer:
Promenljiva tipa signed char uzima vrednosti od −128 do 127.
Promenljiva tipa unsigned char uzima vrednosti od 0 do 255.
Skroz na kraju ovog teksta se nalazi tabela u kojoj su navedeni tipovi podataka sa opcilom korišćenja kvalifikatora i koliko u zauzimaju u memoriji 32-bitnog računara.
***
Napomena o razlici između teksta i znaka
U C jeziku svaki tekst se tretira kao „niz znakova“ a šta je to objasnićemo u poglavlju o pokazivačima, za sada treba da znate da svaki „slobodan“ text treba da stavite pod navodnike jer ako to ne uradite kompajler će smatrati da je taj tekst neka naredba ili ime promenljive idr.
Mnogi jezici imaju tip promenljive „string“ koji služi za smeštanje teksta. Kod C jezika ne postoji tip string ali u C-u se isti efekat može postići koristeći se tipom char. Char znači znak i u promenljivu tipa char ne možete staviti text već samo jedan znak, na primer takva promenljiva može da čuva vrednosti ’T’ ili ’?’ ali ne i „neki_text“. Sve će ovo biti detaljno objašnjeno u delu o pokazivačima i nizovima ali već sad treba da uvidite razliku između znaka( tačnije simbola) i teksta. Sav se tekst stavlja pod navodnike – „text“, a simboli pod znacima „gornjeg zareza“ npr. ’a’ , ’e’, ’+’ ...
****************************************
| Tip | Broj bajtova | Raspon |
|---|---|---|
| char | 1 bajt | -128 do 127 ili 0 do 255 |
| unsigned char | 1 bajt | 0 do 255 |
| signed char | 1 bajt | -128 do 127 |
| int | 4 bajta | -2,147,483,648 do 2,147,483,647 |
| unsigned int | 2 ili 4 bajta | 0 do 4,294,967,295 |
| short | 2 bajta | -32,768 do 32,767 |
| unsigned short | 2 bajta | 0 do 65,535 |
| long | 4 bajta | -2,147,483,648 do 2,147,483,647 |
| unsigned long | 4 bajta | 0 do 4,294,967,295 |
TIPOVI PODATAKA SA POKRETNOM TAČKOM
| Tip | Broj bajtova | Raspon | Preciznost |
|---|---|---|---|
| float | 4 bajta | 1.2E-38 do 3.4E+38 | 6 decimalnih mjesta |
| double | 8 bajtova | 2.3E-308 do 1.7E+308 | 15 decimalnih mjesta |
| long double | 10 bajtova | 3.4E-4932 do 1.1E+4932 | 19 decimalnih mjesta |