PODACI U JEZIKU C
Da bi se putem naredbi programa upravljalo sa tim obradama, potrebno je na neki način označiti te podatke(dati im naziv). Takođe je za svaki podatak potrebno definisati tip podatka. Npr. kompajler treba da ima informaciju kakav je podatak u pitanju, da li je to ceo ili realan broj, slovo, logički tip, tekst ili možda neki složen tip podatka. To je potrebno da bi se na osnovu tipa znalo koliko memorije treba rezervisati, koji skup operacija je dozvoljen nad takvim podacima. Za predstavljanje tipova podataka obično se koriste službene reči "C" jezika koje su date kasnije u tabeli, npr. int, float, double itd.
Da bi se rezervisala memorija(definisao podatak) za npr. ceo broj treba napisati naredbu:
int a;
tip_podatka ime_podatka;
Na koji se sve način može dati naziv podatku pogledajte u prethodnoj lekciji:
Elementi jezika C
Tipovi podataka
Tip podatka je određen skupom odrećenih vrednosti koje može da uzme podatak i skupom operacija koje mogu da se izvrše nad podatkom.
Tip podatka | Opis | Memorija[bit] |
---|---|---|
char | Mali celobrojni podatak. Koristi se za smeštanje znakova | 8 |
short | Kratak celobrojni podatak | 16 |
int | Celobrojni podatak | 16 ili 32 |
long | Dugački celobrojni podatak | 32 |
float | Realan broj u jednostrukoj preciznosti | 32 |
double | Realan broj u dvostrukoj preciznosti | 64 |
- Promenljivi podaci:
- Mogu da menjaju vrednost u toku programa
- Mora se rezervisati memorija
- primer: int a; //rezeviše se memorija za celobrojni podatak
- Konstante
- Ne rezerviše se memorija
- Koriste se u izrayima
- primer: Y=2*X; //2 je konstanta
- Simboličke konstante
- Konstante predstavljene pomoću identifikatora
- primer:
#define PI 3.14
P=r*r*PI;
- Konstantni podaci
- Rezerviše se memorija
- Podaci moraju da se inicijalizuju
- ne menjaju vrednost u toku programa
- primer: const double e=2.71828;
Tip podatka je određen skupom odrećenih vrednosti koje može da uzme podatak i skupom operacija koje mogu da se izvrše nad podatkom. Ovo je značajno prevodiocima(engl. compiler and interpreter) kojima treba informacija o vrsti podatka za koji je rezervisana memorija. Svaki tip zauzima određenu memoriju.
Postoje sledeći tipovi podataka:
|
IZRADA JEDNOSTAVNE APLIKACIJE U PROGRAMSKOM JEZIKU C-VIDEO |
Rešavanje zadataka
Da bi ste odgledali video - lekciju za rešavanje jednostavnih primera upotrebom alata "Code Block", kao i primere za samostalan rad, kliknite na sledeći link: Podaci-primeri
|
Uputstvo za kreiranje aplikacija u programskom jeziku C pomoću mobilnog telefona
|
Primitivni tipovi podataka
Za opis celih brojeva koriste se tipovi:
- short 16byta kratak celobrojni podatak
- int 16 ili 32 bita celobrojni podatak
- long 32 bita dugačak celobrojni podatak
- long long 64 bita dugačak celobrojni podatak
dakle to bi bio broj 263+262 +...+20 =18446744073709551615
Primer:
int a;
int b;
Realni tip u pokretnom zarezu: Za opis celih brojeva koriste se tipovi:
- float 32byta kratak celobrojni podatak
- double 64 bita celobrojni podatak
Primer kod-a sa upotrebom karaktera:
char c;
c='A';
printf(“ASCII kod karaktera %c iznosi %d\n”,c,c);
Izvedeni tipovi podataka
Nizovni tip: Ako treba definisati niz brojeva istog tipa, npr. celih brojeva onda definišemo tip podatka na sledeći način:
int niz[10];
Pokazivački tip: Ako treba definisati pokazivač na podatak tipa double onda se definiše i inicijalizuje pokazivač na sledeći način:
double a;
double *pA;;//Pokazivač na podatak tipa double
pA=&a;
Od izvedenih tipova podataka se koriste još i strukture, unije i funkcije
Označeni i neoznačeni podaci(signed i unsigned)
int a;
signed int b;
unsigned int c;
Celobrojni označeni podaci, ako int zauzima 32 bita memorije su u opsegu od -231 do 231 tj od -32767 do 32767,
dok
neoznačeni su u rangu od 0-232 tj od 0-65535.
Prva cifra kod označenih celih brojeva se koristi da odredi znak(0-pozitivan,1-negativan) dok se preostale cifre koriste za prikaz vrednosti broja. Zbog toga je najveća vrednost označenih brojeva 231 a ne 232. I ostali tipovi, float, double, char mogu biti označeni i neoznačeni:
unsigned float x;
signed double y;
unsigned char z;
Promenljivi podaci(engl. variable)
tip_podatka ime_podatka;
Npr. ako su u pitanju dva cela broja onda se za tip podatka koristi službena reč int i podatak se definiše na sledeći način:
int a,b;// ili u dva reda
int a;
int b;
a
b
Više o operatorima u jeziku c pogledati na web stranici: Operatori u C/C++ jeziku
Ovo ne znači jednakost i ne važi da je levo od znaka “=” isto što i desno. Ovde levo mora biti memorija koja treba da dobije neku vrednost a sa desne strane je ta vrednost ili neki izraz čiji će rezultat biti smešten u memoriju sa leve strane. Npr. dodelimo neke vrednosti promenljivima a i b:
a=14;
b=22;
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---|
a
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
---|
b
14 |
---|
a
22 |
---|
b
int c;
c = a + b;
36 |
---|
c
To je funkcija printf iz zaglavlja stdio.h u jeziku c(vidi podnaslov čitanje i pisanje podataka u nastavku) ili u jeziku c++ može se koristiti funkcija cout iz zaglavlja iostream.
U prethodnom primeru programer je naredbom a=14; i b=22; programski odredio vrednost a i b i korisnik programa na te vrednosti ne bi mogao da utiče. U većini slučajeva je potrebno obezbediti da korisnik unese vrednosti po svojoj želji i za to je potrebno obezbediti komandu koja broj ukucan na tastaturi od strane korisnika privremeno upamti kao niz karaktera a zatim konvertuje odgovarajućom ulaznom konverzijom u binarnom obliku. Vidi u nastavku čitanje podataka.
Konstantni podaci
const double e = 2.718281;
Konstante
Za njih se ne rezerviše memorija, već se one jednostavno koriste u izrazima. Međutim i konstante imaju svoj tip podatka. Npr 2 je celobrojna konstanta tipa int, 2. ili 2.0 su tipa double, dok bi 2f bila po tipu float.
Simboličke konstante
#define PI 3.14;
P = r * r * PI;
Datoteke zaglavlja
Te datoteke nazivamo datoteke zaglavlja. U C jeziku imaju ekstenziju .h. Npr. da bi mogli koristiti funkcije printf i scanf za pisanje i čitanje podataka na standardni izlaz, tj. ulaz moramo uključiti datoteku stdio.h:
#include <stdio.h>
Ili za upotrebu matematičkih funkcija potrebno je uključiti datoteku math.h u jeziku c, ili, datoteku cmath u jeziku c++.
#include<math.h>
Koristan sajt za pregled datoteka zaglavlja u c i c++ je: http://www.cplusplus.com/reference/
Čitanje i pisanje podataka
#include < stdio.h >
Ulazna konverzija(unos podataka sa tastature)
scanf(format, adresa_podatka_1, adresa_podatka_2, adresa_podatka_3);
scanf("%d%d%d", &a, &b, &c);
Format je tekstualni podatak(stavlja se pod navodnike) i to u stvari predstavlja šablon za ulaznu konverziju iz niza karaktera u binaran oblik. U prethodnom primeru %d se odnosi na jedan podatak, a kad imamo 3 onda se ponavlja 3 puta bez razmaka. Forma za unos jednog podatka se može predstaviti na sledeći način:
%[širina polja]oznaka_konverzije
gde je širina polja opcioni( dopunski )parametar konverzije, koji predstavlja širinu polja za prikaz.
Oznake konverzije za unos podatka:
Celobrojne ulazne konverzije: i, d,u, o, x,.
za short: hi,hd....
za long: li, ld,...
Ulazne konverzije realnih brojeva:
za float: f,e,g.
za double: lf, le,lg
Izlazna konverzija
Datoteka stdio.h obezbeđuje funkciju printf čija je sintaksa:
printf(format, podatak_1, podatak_2, podatak_3);
printf(Zbir brojeva %d i %d iznosi %d, a, b, c);
Zbir brojeva 14 i 22 iznosi 36;
printf("%d", c);
Zaključak:
Ako bismo želeli da na izlazu kombinujemo prikaz teksta i broja npr. da napišemo “Zbir brojeva 14 i 22 iznosi 36”, onda bi parametar format bio zapravo tekst sa umetnutim formatima za izlaznu konverziju, u ovom slučaju za cele brojeve “%d” ili “%i”. Parametri u funkciji printf, navedeni posle formata su zapravo promenljive čija se konverzija vrši i to napisanih po redosledu s leva na desno:
printf(“Zbir brojeva %d i %d iznosi %d”, a, b, c);
Za oznaku formata kada se podaci prikazuju na ekran se koristi:
Celobrojne izlazne konverzije: i, d,u, o, x,.
za short: hi,hd....
za long: li, ld,...
izlazne konverzije realnih brojeva:
za float: f,e,g.
za double: f, e,g
Redove za dodelu vrednosti promenljivima a i b
a=14;
b=22;
treba zameniti sa :
scanf(“%d%d”, &a, &b);
Operator “&” daje memorijsku adresu podatka i koristi se kod ulazne, a ne i kod izlazne konverzije.
Pre naredbe scanf, treba dodati printf naredbu kojom se ispisuje poruka, koja obaveštava korisnika koje podatke treba da unese.
Kompletan kod zadatka bi bio:
- Uneti poluprecnik kruga i izracunati površinu
- Učitati stranice trapeza i izračunati površinu.
- Učitati vreme u sekundama i ispisati u obliku hh:mm:ss
Rešenja:
Resenje primera 1:
Zadatak rešavamo u 4 koraka:
Prvo moramo da definišemo podatke koji su nam potrebni: U program je potrebno da korisnik unese poluprečnik, a program treba da izračuna površinu kruga. Da bi definisali te podatke daćemo im nazive i staviti tip podatka za realne brojeve(double). Dakle prva naredba:
double r,P;
Ovim smo rezervisali memoriju za dva podatka tipa double koje smo oznacili sa r i sa P
Drugi korak je da omogucimo da korisnik unese poluprecnik. Za unos koristimo metodu scanf koja se nalazi u datoteci stdio.h
Ovu datoteku cemo ukljuciti pomocu direktive #include za uklucivanje datoteka i ovo pisemo pri vrhu dokumenta
#include < stdio.h >U ovoj datoteci se još nalazi i metoda printf za ispisivanje podataka i teksta na konzolu.
Pre unosa ispisujemo poruku na konzolu da bi korisnik znao šta treba da unese. Za ispisivanje koristimo metodu printf što zapravo predstavlja izlaznu konverziju. Ulazna konverzija ostvaruje se metodom scanf. Ovaj drugi korak je:
Slika 4: Rešenje zadatka "Površina kruga"
U 4. koraku se na ekranispisuje poruka sa vrednošću površine, koja se isčitava iz memorije označene u ovom programu sa P. Za izlaznu konverziju se koristi format %f za podatke tipa double.
Resenje primera 3:
Ovde korisnik unosi vreme u sekundama koje treba biti ceo broj
int vrSek;
scanf(“%d”, &vrSek);
vremena u sekundama i 3600, vrSek/3600, a da bi dobili koliko je sekundi preostalo koristimo „%“, dakle vrSek % 3600.
Kod koji ovo radi:
int hh, ostSek;
hh = vrSek / 3600;
ostSek= vrSek % 3600;
Na sličan način bi od preostalog broja sekundi (ostSek) dobili minute, ali u ovom slučaju bi za delilac uzeli 60 jer 1min=60sek;
int mm;
mm = ostSek/ 60;
ostSek= ostSek% 60;
printf(“%02d : %02d : %02d”, hh, mm, ostSek);
Sledeće
Operatori u jeziku C/C++ >| |