PODACI U JEZIKU C

Struktura programa u jeziku C

      Pisanje programa(aplikacije) ima za cilj da izvrši neki manji ili veći zadatak postavljen kao zahtev pred programera. To može biti aplikacija za obradu teksta, muzike, igrica, složeni programi za vođenje procesa u industriji, medicini, aplikacije koje se kriste u naučnim istraživanjima itd. Sve te aplikacije u manjoj ili većoj meri u svojoj pozadini imaju neku vrste obrade podataka. Da bi kreirana aplikacija mogla da obrađuje podatke, ona mora na neki način biti povezana sa memorijom. Dakle, za te podatke, posredstvom kompajlera(compiler engl.) potrebno je prvo rezervisati memoriju, a zatim jednom ili više puta pristupati toj memoriji da bi se podaci uneli, bilo od strane programera bilo od korisnika programa. Posle obrade podataka, pomoću izraza i formula, možda će biti potrebno tako obrađene podatke ponovo ubaciti u istu ili različitu memoriju.
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;

gde prva reč predstavlja tip podatka, a druga ime podatka (naziv). Dakle,  definisanje podatka potrebno po sledećem šablonu uz napomenu da je reč o prostim podacima.

​tip_podatka  ime_podatka;

Na koji se sve način može dati naziv podatku pogledajte u prethodnoj lekciji:
Elementi jezika C

​Tipovi podataka

Podaci su predmet obrade u programima. Svaki podatak ima određene osobine i tip podatka .

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

Vrste 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. 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-primeriUputstvo za kreiranje aplikacija u programskom jeziku C pomoću mobilnog telefona

​Primitivni tipovi podataka

​U C programskom jeziku se koriste sledeći tipovi podataka:​ 

Celobrojni tip podatka:
Za opis celih brojeva koriste se tipovi:Duži celobrojni podatak može da sadrži veći broj jer koristi više memorije za čuvanje vrednosti. Lako je moguće izračunati najveći broj koji se može smestiti u npr long long. To bi u binarnom obliku bio broj koji sadrži 64 puta 1. Npr. 111111....

dakle to bi bio broj 263+262 +...+20 =18446744073709551615

Primer:

int a;

int b;


​Veličinu podatka u bajtima(engl. byte)možemo dobiti pomoću operatora sizeof. Sledeći kod ilustruje upotrebu operatora sizeof i primenu za određivanje veličine tipova podataka.
​
Realni tip u pokretnom zarezu: Za opis celih brojeva koriste se tipovi: float tip može da zapamti manje decimala pa je manja preciznost nego double. Za double kažemo da je podatak dvostruke tačnosti.Logički tip: Za opis logičkih podataka u jeziku C se koristi int, odnosno nema posebnog tipa za to, već se koristi celobrojni tip podataka i to tako da se  broj manji ili jednak  0 tretira kao logička neistina(false) , a broj veći od nule kao logička istina (true). U jeziku C++ postoji tip podatka bool koji se koristi za logički tip. Upotreba logičkih tipova je obično kod grananja u programu upotrebom selekcija if, i-else i if-else if-else.Znakovni  tip(char): Za opis znakova, slova, brojeva, belih i specijalnih znakova se koristi tip char. Ovo je zapravo celobrojni tip koji zauzima veličinu podatka od 1 bajta(engl. 1 byte).
​ Primer kod-a sa upotrebom karaktera:

char c;

c='A';

printf(“ASCII kod karaktera %c iznosi %d\n”,c,c);

Izvedeni tipovi podataka

U C programskom jeziku se koriste sledeći 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];

Ovo će obezbediti memoriju za 10 elemenata tipa int.

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;

​Više o pokazivačima videti na stranici: Pokazivači u C/C++
Od izvedenih tipova podataka se koriste još i strukture, unije i funkcijeTip voidU C programskom jeziku se koristi tip void kod funkcija, kada funkcija ne vraća nikakvu vrednost. Onda se za tip povratne vrednosti koristi službena reč c jezika void.

Označeni i neoznačeni podaci(signed i unsigned)

​Označeni signed podaci mogu imati i pozitivne i negativne vrednosti dok su neoznačeni podaci pozitivni ili imaju vrednost nula. U C jeziku su podaci podrazumevano označeni signed, a ako se želi definisati podatak kao neoznačen ispred tipa mora se dodati službena reč unsigned. Primeri za definisanje označenih i neoznačenih celobrojnih podataka:

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.

Ostali tipovi, float, double,ne mogu biti označeni, dok za razliku od float i double, tip char može biti označen (signed) ili neoznačen (unsigned).

Dakle, u C jeziku:
char može biti signed char ili unsigned char. Podrazumevano ponašanje za char (da li je signed ili unsigned) zavisi od implementacije kompajlera. Na nekim sistemima char se tretira kao signed, dok na drugima kao unsigned.

unsigned float x;

signed double y;

unsigned char z;


Promenljivi podaci(engl. variable)

Kako sama reč kaže, mogu da menjaju vrednosti u toku programa, pa se zato zovu promenljive(engl. variable). Za promenljive je obavezno rezervisanje memoriju. Podatak definišemo tako što za njega obezbedimo memoriju. Deklaracija podatka podrazumeva da odredimo kog je tipa i da mu damo naziv. Kod prostih podataka, deklaracija je u isto vreme i definicija podatka i to se radi na sledeći način:
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;


​Ovim se rezerviše memorija za dva cela broja. Stanje u memoriji bi bilo:

a

b

​Dalje, podacima dodeljujemo neku vrednost korišćenjem operatora dodele vrednosti “=”.
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;

​Posle izvršenja ova dva reda stanje u memoriji bi bilo
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

​Ovo su brojevi 14 i 22 u binarnom obliku. Radi uprošćenja posmatraćemo brojeve u memoriji kao dekadne brojeve
14

a

22

b

​Ako sad uvedemo još jednu celobrojnu promenljivu c:

int c;

​i zadamo izraz za sabiranje brojeva a i b:

c = a + b;

stanje u memoriji bi bilo:
36

c

​Broj koji je  izračunat, stoji u memoriji i da bi se prikazao na ekranu potrebna je neka komanda koja ispisuje vrednost na standarni izlaz(konzolu).
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

​Ako se podatku ne menja vrednost u toku programa, onda se takav podatak definiše kao konstantan dodavanje službene reči const. Npr. osnova prirodnog logaritma bi se definisala na sledeći način:

const double e = 2.718281;

​Vidimo da je ovde i dodeljena vrednost. Ovo je obavezno u raditi prilikom deklaracije jer se ta vrednost dalje neće menjati u toku programa.

Konstante

​To su vrednosti npr 2, 25, 3.14, 7f,9.81f,…..
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

​To su konstante date identifikatorom. Npr. umesto da u izrazima za broj pi pišemo 3.14, možemo pomoću direktive #define definisati simboličku konstantu PI na sledeći način:

#define PI 3.14;

Onda bi smo mogli ovu konstantu koristiti negde u izrazima, npr. za površinu kruga:

P = r * r * PI;

​Za prevodilac to će i dalje biti vrednost koja je sa #define definisana među direktivama, ali za programera ona je data identifikatorom i tako bolje sugeriše na svrhu njene upotrebe.

Datoteke zaglavlja

Da bi u određenom fajlu mogli da koristimo funkcije iz drugih datoteka, takva datoteka se mora uključiti pomoću direktive #include<datoteka>.
​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 u C jeziku

Podaci koje neki korisnik unosi preko tastature se unose se kao niz znakova. Pošto se podaci u memoriji smeštaju u binarnom obliku, mora da se izvrši konverzija podataka i to ako je reč o unosu podataka u memoriju od strane korisnika onda je nazivamo ulaznom konverzijom. Suprotno tome,kada se podaci koji se nalaze u memoriji žele prikazati na ekranu, proces je obrnut, tj. podaci iz memorije koji su u binarnom obliku, na ekranu se prikazuju kao niz karaktera i zato je potrebna izlazna konverzija podataka. Za unos podatka sa tastature u memoriju postoji bibliotečka funkcija scanf , dok se za ispisivanje podataka na ekran koristi bibliotečka funkcija printf. Da bi se one mogle upotrabljavati u programu, mora se uključiti datoteka zaglavlja stdio.h,  na vrhu fajla, pomoću direktive pretprocesora #include na sledeći način:

#include < stdio.h >

Ulazna konverzija(unos podataka sa tastature)

Deklaracija funkcije scanf bi bila:

scanf(format, adresa_podatka_1, adresa_podatka_2, adresa_podatka_3);

Pimer poziva funkcije scanf kada se unose tri cela broja bi bila npr.

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

​U prethodnom primeru sabiranja brojeva ostalo je da se pokaže kako se podatak iz memorije prikazuje na ekran.
Datoteka stdio.h obezbeđuje funkciju printf čija je sintaksa:

printf(format, podatak_1, podatak_2, podatak_3);

U našem primeru to bi bilo:

printf(Zbir brojeva %d i %d iznosi %d, a, b, c);

Ovde se može uočiti da je format sada tekst sa umetnutim vrednostima iz memorije. Umetnute vrednosti se u tekst ubacuju na mestima označenim šablonom "%d". Parametri dati posle formata, su nazivi(identifikatori) podataka čije se trenutne vrednosti iz memorije umeću na pomenutim mestima unutar teksta. U tekućem primeru to su podaci a,b i c. Tako da će posle izvršenja naredbe biti prikazan sledeći tekst na ekranu:

Zbir brojeva 14 i 22 iznosi 36;

U jednostavnijoj varijanti bi se mogao prikazati samo rezultat:

printf("%d", c);

Na konzoli bi se posle izvršenja ove naredbe prikazalo: Celobrojni podaci-sabiranje brojeva - izlaz
Slika 1: Celobrojni podaci-sabiranje brojeva - izlaz
​Prikazan je samo rezultat 36.

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

Posle pokretanja na izlazu bi bilo:
Celobrojni podaci-sabiranje brojeva nastavak - Primer izlaza
Slika 2: Celobrojni podaci-sabiranje brojeva nastavak - Primer izlaza

Pregled formata u ulaznoj i izlaznoj konverziji

Sledeća tabela prikazuje formate ulazne konverzije, kao izlazne, za različite tipove podataka.

Ulazna konverzija (scanf)

Formati za ulaznu konverziju
Tip podatka Oznake formata
Ceo broj (int) %d, %i
Neoznačeni ceo broj (unsigned int) %u
Oktalni broj (unsigned int) %o
Heksadecimalni broj (unsigned int) %x, %X
Short ceo broj (short) %hd, %hi
Long ceo broj (long) %ld, %li
Realni broj (float) %f, %e, %g
Double %lf, %le, %lg

Izlazna konverzija (printf)

Formati za izlaznu konverziju
Tip podatka Oznake formata
Ceo broj (int) %d, %i
Neoznačeni ceo broj (unsigned int) %u
Oktalni broj (unsigned int) %o
Heksadecimalni broj (unsigned int) %x, %X
Short ceo broj (short) %hd, %hi
Long ceo broj (long) %ld, %li
Realni broj (float) %f, %e, %g
Double %f, %e, %g

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
Da bi omogućili korisniku da unese željene vrednosti za a i b, koristićemo funkciju scanf iz zaglavlja stdio.h.

Redove za dodelu vrednosti promenljivima a i b

​a=14;
b=22;

treba zameniti sa :

scanf(“%d%d”, &a, &b);

​gde je %d napisano dva puta format za ulaznu konverziju za cele brojeve, a &a i &b adrese memorijskih lokacija za podatke a i 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:Celobrojni podaci-sabiranje brojeva - kompletan primer
Slika 3: Celobrojni podaci-sabiranje brojeva - kompletan primer

​Deklaracija i inicijalizacija različitih tipova podataka

U programskom jeziku C , promenljive moraju biti deklarisane pre nego što ih koristimo. Deklaracija uključuje definisanje tipa podatka i imena promenljive, dok inicijalizacija podrazumeva dodelu početne vrednosti promenljivoj.

Primer deklaracije i inicijalizacije osnovnih tipova podataka

Sledeći primer ilustruje deklaraciju i inicijalizaciju različitih tipova podataka u C:#include <stdio.h>

int main() {
// Celobrojni tipovi
int a = 10;          // Deklaracija i inicijalizacija celog broja
short b = 5;         // Kratki tip
long c = 1000000;    // Dugi tip

// Realni brojevi
float pi = 3.14f;    // Float tip (kraća decimalna preciznost)
double e = 2.71828;  // Double tip (duža decimalna preciznost)

// Karakteri
char ch = 'A';       // Jedan karakter

// Logički tip (samo u C++)
bool isValid = true; // Logička vrednost

    printf("Celobrojni: %d, %hd, %ld\n", a, b, c);
    printf("Realni brojevi: %.2f, %.5lf\n", pi, e);
    printf("Karakter: %c\n", ch);
    printf("Logička vrednost: %d\n", isValid);

return 0;
}

Razlika između float i double

Primer

#include <stdio.h>

int main() {
float x = 0.123456789f;   // Float tip
double y = 0.123456789;   // Double tip

    printf("Float vrednost: %.9f\n", x); // Prikazuje 6-7 značajnih cifara
    printf("Double vrednost: %.9lf\n", y); // Prikazuje 15-16 značajnih cifara

return 0;
}

​Rezultat:

Float vrednost: 0.123456791

Double vrednost: 0.123456789000000

Praktična upotreba različitih tipova

Razlike u memoriji i veličini osnovnih tipova podataka

Ova tabela prikazuje osnovne tipove podataka, veličinu memorije koju zauzimaju i njihove opsege vrednosti.

Tip podatka Memorija [bajtovi] Opseg vrednosti
char 1 -128 do 127 (ili 0 do 255 za unsigned)
int 4 -2,147,483,648 do 2,147,483,647
float 4 ±3.4e−38 do ±3.4e+38
double 8 ±2.2e−308 do ±1.7e+308
short 2 -32,768 do 32,767
long 8 -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807

​Prostor imena u C jeziku

U C jeziku ne postoji direktan koncept prostora imena kao u C++. Međutim, slična organizacija se može postići:
  1. Dodavanjem prefiksa imenima funkcija i promenljivih. Na primer:
void mojmodul_funkcija1();
void mojmodul_funkcija2();

Ovaj pristup se koristi da bi se izbegli konflikti imena između modula.
​
    2. Korišćenjem datoteka i static ključne reči. U C jeziku, static funkcije i promenljive unutar datoteke su lokalne za tu datoteku, čime se izbegavaju konflikti sa istim imenima u drugim datotekama.

Primeri za vežbu


  1. Uneti poluprecnik kruga i izracunati površinu
  2. Učitati stranice trapeza i izračunati površinu.
  3. 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:

Rešenje zadatka

Slika 4: Rešenje zadatka "Površina kruga"

U trećem koraku izračunavamo površinu koristeći poznati obrazac za površinu kruga. Za množenje je obavezna upotreba operatora " * " , dok je simbolička konstanta definisana direktivom pretprocesora #define u gornjem delu fajla.

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.
Kompletno rešenje primera: Površina kruga
slika 5: Rešenje zadatka "Površina kruga"- kompletno

Resenje primera 3:

​Zadatak rešavamo u 4 koraka:
Ovde korisnik unosi vreme u sekundama koje treba biti ceo broj

int vrSek;

scanf(“%d”, &vrSek);

​Da bi od ovog broja dobili minute i sate upotrebićemo operator % koji daje ostatak deljenja dva cela broja, kao i operator “/” koji daje rezultat deljenja bez decimalnog dela odnosno ceo broj zaokružen na prvu manju vrednost.  Da bi dobili broj celih časova u ukupnom broju sekundi delimo
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;

​U slučaju da je uneto vreme 7400s, h bi bilo 2 časa, jer 7500/2=2, ako zaokružimo na prvi manji ceo broj, dok bi ostalo nepodeljeno 300s. To je rezultat peracije 7200%3600=300;
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;

Ostatak bi sada ostale sekunde koje dalje ne treba deliti. Konačno za prikaz vremena koristimo printf formatiranu da prikazuje 2 cifre za sate, minute i vreme. U slučaju jednocifrenih brojeva prikazuje 0 kao prefiks. Dakle:

printf(“%02d : %02d : %02d”, hh, mm, ostSek);

Kompletan kod:Rešenje zadatka
Slika 6: Rešenje zadatka "formatirano vreme"
​Posle pokretanja:
Rešenje zadatka
Slika 7: Rešenje zadatka "formatirano vreme"-izlaz
​Format %02d, znaci sledeće, % je početak umetanja vrednosti promenljive u tekst, 2 je broj cifara za prikaz broja, pa ako je broj jednocifren biće popunjen cifrom ispred 2, a to je u ovom primeru „nula“. „d“ je oznaka formata za decimalne brojeve. 

Razvoj tipova podataka u C jeziku

Rani razvoj (1972–1978) ANSI C (C89/C90 - 1989/1990) C99 (1999) C11 (2011) C17 (2017) C23 (2023 - najnovija verzija)

Zaključak

Razvoj jezika C kroz verzije odražava potrebu za proširenjem funkcionalnosti i prilagođavanjem modernim tehnologijama, dok zadržava jednostavnost i efikasnost jezika. Uvođenje tipova poput _Bool u C99 i atomarnih tipova u C11 značajno je povećalo njegovu upotrebljivost u širim oblastima programiranja.
Prethodno
​|<Elementi jezika C
Sledeće
​​​Operatori u C jeziku>|

Srodni članci

Primeri zadataka sa podacima
Rad sa stringovima
Rešeni zadaci iz oblasti podaci
Algoritmi-prosti brojevi
​Algoritmi - Fibonačijev niz
​
​
​
​