PODACI U JEZIKU C++

C++ je programski jezik koji proširuje osnovne mogućnosti C jezika, zadržavajući njegovu sintaksu, ali uvodeći mnoge napredne funkcionalnosti. Jedan od ključnih aspekata ovog jezika je rad sa podacima, gde su osnove slične C jeziku, ali sa značajnim unapređenjima.
C++ pruža fleksibilnost i efikasnost u upravljanju podacima kroz:
U nastavku ćemo detaljnije razmotriti osnovne i izvedene tipove podataka u C++ jeziku, razlike u odnosu na C jezik, kao i specifične karakteristike poput:
U c++ jeziku slično kao i u C jeziku podaci mogu biti promenljivi(promenljive), za koje je potrebno obezbediti memoriju, konstantni podaci, konstante i simboličke konstante. Za konstante ne rezervišemo memoriju, nego ih jednostavno koristimo u izrazima, ali za podatke, bilo da su promenljivi ili konstantni to moramo da uradimo. Npr. definisanje celobrojnog podatka bi bilo:

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;

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
C++ podržava osnovne tipove podataka kao i C, uz dodatak specifičnih tipova i modernih koncepata. Podaci mogu biti:
  1. Promenljivi (varijable): Zahtevaju rezervaciju memorije. Primer:

int a; // Deklaracija promenljive tipa int

a = 5; // Dodela vrednosti

Konstantni podaci: Deklarišu se sa const ili constexpr:

constexpr double PI = 3.14159;
Logički tip: Za opis logičkih podataka 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.
​Ovaj tip je često korišćen u uslovnim izrazima:
bool isEven = (a % 2 == 0);
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

Osim nizova i pokazivača, C++ omogućava rad sa klasama, objektima, i standardnim bibliotekama koje pojednostavljuju rad sa kompleksnim strukturama podataka.​
​
Nizovni tip: Ako treba definisati niz brojeva istog tipa, na primer, celih brojeva, koristi se sledeća sintaksa:

int niz[10];

Ovo rezerviše prostor za 10 elemenata tipa int. Pristup elementima niza se vrši preko indeksa, počevši od niz[0].

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 klase i funkcijeTip void
​U C++ jeziku, tip void koristi se kada funkcija ne vraća nikakvu vrednost:
​
void funkcija() {
// Kod funkcije
}

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

​Označeni (signed) podaci mogu imati pozitivne i negativne vrednosti, dok su neoznačeni (unsigned) uvek pozitivni. Po podrazumevanju, podaci u C++ jeziku su označeni (signed).
Primeri:

int a;

signed int b;

unsigned int c;


Opseg podataka zavisi od veličine u memoriji. Na primer, za 32-bitni int: Prva cifra kod označenih brojeva koristi se za određivanje znaka (0 za pozitivne, 1 za negativne), dok preostale cifre predstavljaju vrednost. Ostali osnovni tipovi, poput char, takođe mogu biti označeni ili neoznačeni:
unsigned char z;
Napomena: Tipovi float i double ne mogu biti označeni (signed) ili neoznačeni (unsigned).

Dodela vrednosti podacima

Posmatrajmo sledeći primer:

Primer 1:

Uneti dva cela broja, izračunati njihov proizvod i prikazati rezultat na ekranu.​
Rešenje:

int a,b;// ili u dva reda

int a;

int 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=7;

b=22;

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

a

22

b

​Ako sad uvedemo još jednu celobrojnu promenljivu c:

int c;

​i zadamo izraz za množenje brojeva a i b:

c = a * b;

stanje u memoriji bi bilo:
154

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 u c++ jeziku funkcija  cout iz zaglavlja iostream.
U prethodnom primeru programer je naredbom a=7; 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.
​Kompletan kod:
​
#include<iostream>
usingnamespace std;

int main() {
// Deklaracija promenljivih
int a, b, c;

// Unos vrednosti za a i b
cout << "Unesite prvi broj: ";
cin >> a;
cout << "Unesite drugi broj: ";
cin >> b;

// Izračunavanje proizvoda
c = a * b;

// Prikaz rezultata
cout << "Proizvod brojeva je: " << c << endl;
return 0;
}

Konstantni podaci

​Ako promenljiva ne menja svoju vrednost tokom programa, definiše se kao konstanta koristeći ključnu reč const.
Primer:

const double e = 2.718281;

​Napomena: Vrednost konstante mora biti dodeljena prilikom deklaracije.

Konstante

​TKonstante su vrednosti koje direktno koristimo u programu, poput 2, 3.14 ili 9.81. Iako nemaju rezervisanu memoriju, one imaju svoj tip:

Datoteke zaglavlja

Datoteke zaglavlja omogućavaju pristup predefinisanim funkcijama.
Primer:


Više informacija o zaglavljima: C++ Reference.

Tipovi podataka u C++ jeziku

U C++ osnovni tipovi podataka su slični kao i u jeziku C, sa proširenjem na logički tip bool i klase koje se koriste za slođene podatke ili objekte. Sledeća tabela ovo ilustruje: 
Podaci su osnovni element obrade u programima, a u C++ jeziku tipovi podataka su prošireni u odnosu na C.

Tip podatka u C++ određuje skup vrednosti koje podatak može imati i operacije koje se nad njim mogu izvršavati.

Tip podatka Opis Memorija [bit]
bool Binarni podatak (true ili false) 8
char Znakovni podatak, koristi se za čuvanje jednog karaktera 8
wchar_t Prošireni znakovni podatak za Unicode znakove 16 ili 32
short Kratak celobrojni podatak 16
int Celobrojni podatak 16 ili 32
long Dugački celobrojni podatak 32
long long Veoma dugački celobrojni podatak 64
float Realan broj sa jednostrukom preciznošću 32
double Realan broj sa dvostrukom preciznošću 64
long double Realan broj sa proširenom preciznošću 80 ili 128
Kao što se može videti iz prethodnih tabela, programski jezik C: nema ugrađen tip bool. Logičke vrednosti se obično predstavljaju pomoću int (0 za false, bilo koja nenulta vrednost za true).
​programski jezik C++: Uvodi tip bool sa vrednostima true i false. To poboljšava čitljivost i jasnoću koda.
​

Primer upotrebe bool promenljive u C++

#include <iostream>
using namespace std;

int main() {
bool isValid = true;
if (isValid) {
cout << "Vrednost je true!" << endl;
    } else {
cout << "Vrednost je  false!" << endl;
    }
return 0;
}
Ovde je prikazana if naredba koja na osnovu logičke promenljive(tip bool) isValid proverava njenu vrednost i ako je ona tačna izvršava se naredba: cout << "The value is true!" << endl;
koja ispisuje tekst: "Vrednost je true", a ako isValid promenljiva ima vrednost false, onda se ispisuje tekst "Vrednost je false".Naredbe cout i cin će biti opisane u tekstu, u nastavku.

Razlika za klase i objekte u programskim jezicima C i C++

Primer sa klasama i objektima u C++

#include <iostream>
#include <string>
using namespacestd;

class Student {
public:
stringime;
int starost;

void introduce() {
cout << "Zdravo, ja sam " << ime << " i imam " << starost << " godina." << endl;
    }
};

int main() {
    Student s1;
    s1.ime= "Marko";
    s1.starost= 20;

    s1.introduce();
return 0;
}

Ulazno izlazni tokovi podataka u C++

Ulazna konverzija u C++ (cin):

​Objekat cin koristi se za unos podataka u C++ jeziku i dolazi iz biblioteke <iostream>. Unos se ostvaruje pomoću operatora ekstrakcije (>>), koji preuzima vrednosti unete sa tastature i čuva ih u promenljive.

Primer:

#include <iostream>
using namespacestd;

int main() {
int broj; //definiše se podatak broj
cout << "Unesite broj: "; //Ispis teksta na ekranu
cin >> broj;  //unos broja
cout << "Uneli ste: " << broj << endl; //Ispis broja na ekranu
return 0;
}

Izlazna konverzija u C++ (cout):

Objekat cout, takođe iz <iostream> biblioteke, koristi se za ispis podataka. Operator umetanja (<<) šalje podatke na standardni izlaz (obično ekran). Može se koristiti lančano za ispis više vrednosti.

Primer:

cout << "Zdravo, " << "svete!" << endl;

Tokovi podataka u C++:

U C++-u, cin i cout rade sa tokovima podataka: Ovi tokovi omogućavaju konverziju tipova, rad sa baferima i proveru grešaka.
Napomena: Možete proširiti objašnjenje primerima sa formatiranim unosom (getline) i ispisom.
Pročitajte više o tome u člancima:C Stringovikao i Stringovi u C/C++ jezikuKada se izvrši naredba:

cout << "Zdravo, " << "svete!" << endl;
​

 evo šta se događa:
  1. Objekat cout: cout je objekat klase ostream, koji se koristi za ispis podataka na standardni izlaz (najčešće ekran).
  2. Operator <<: Ovo je preopterećeni operator umetanja (insertion operator). On prebacuje vrednosti na desnoj strani u tok podataka koji cout obrađuje.
  3. Tok podataka: "Zdravo, " se prvo šalje u tok podataka vezan za cout. Zatim se operator << primenjuje ponovo sa "svete!", dodajući ga na postojeći tok.
  4. endl: Ovaj manipulator dodaje znak za novi red (\n) i odmah isprazni tok (flush), osiguravajući da podaci budu prikazani.
Konverzija podataka​

Ilustracija s različitim tipovima:cout << "Broj: " << 42 << ", Realan broj: " << 3.14 << endl;
​Broj 42 se konvertuje u tekstualni oblik "42", a 3.14 u "3.14" pre umetanja u tok.Suština: 
Operator << i tok cout zajedno omogućavaju fleksibilan, tip-bezbedan ispis podataka u C++, oslanjajući se na preopterećenje funkcija kako bi podržali različite tipove podataka.

​Deklaracija i inicijalizacija različitih tipova podataka

U programskim jezicima C i 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++ jeziku:#include <iostream> // Uključivanje biblioteke za ulaz/izlaz
#include <iomanip>// Za formatiranje izlaza

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
bool isValid = true; // Logička vrednost

// Ispis rezultata koristeći std::cout
std::cout << "Celobrojni: " << a << ", " << b << ", " << c << std::endl;
std::cout << "Realni brojevi: " << std::fixed << std::setprecision(2) << pi << ", "
              << std::setprecision(5) << e << std::endl;
std::cout << "Karakter: " << ch << std::endl;
std::cout << "Logička vrednost: " << std::boolalpha << isValid << std::endl;

return 0;
}

Objašnjenje:
  1. #include <iostream>:
    • Koristi se za ulaz/izlaz putem std::cout i std::cin.
  2. #include <iomanip>:
    • Omogućava kontrolu nad formatiranjem, kao što su decimalna preciznost (std::setprecision) i fiksni format (std::fixed).
  3. std::boolalpha:
    • Prikazuje logičke vrednosti (true/false) kao tekstualni prikaz umesto numeričkog (1/0).
  4. std::fixed i std::setprecision:
    • Koriste se za kontrolu formata realnih brojeva.

Razlika između float i double

Primer

#include <iostream>
#include <iomanip>// Potrebno za setprecision

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

// Podešavanje preciznosti i ispis float vrednosti
std::cout << std::fixed << std::setprecision(9);
std::cout << "Float vrednost: " << x << std::endl;

// Podešavanje preciznosti i ispis double vrednosti
std::cout << std::fixed << std::setprecision(16);
std::cout << "Double vrednost: " << y << std::endl;

return 0;
}

Objašnjenje:
  1. #include <iomanip>
    Ovo zaglavlje omogućava korišćenje funkcija poput std::setprecision za podešavanje broja značajnih cifara pri ispisu.
  2. std::fixed
    Postavlja ispis brojeva u fiksni decimalni format, čime se sprečava naučni zapis.
  3. std::setprecision(9) i std::setprecision(16)
    Određuje broj cifara posle decimalne tačke.
  4. Razlika između float i double
    • float: Prikazuje 6-7 značajnih cifara.
    • double: Prikazuje 15-16 značajnih cifara.

​Rezultat izvršavanja programa:

Float vrednost: 0.123456791

Double vrednost: 0.1234567890000000

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(namespace) u C++

U C++ prostor imena (namespace) je mehanizam koji omogućava organizaciju koda i sprečava konflikt između identifikatora (npr. imena funkcija, klasa ili promenljivih) koji imaju isto ime, ali se koriste u različitim kontekstima.
​Prostor imena se definiše pomoću ključne reči namespace. Sve što se deklariše unutar prostora imena pripada tom prostoru i može se pozivati samo pomoću odgovarajuće kvalifikacije (ime prostora imena kao prefiks).

Primer:

#include <iostream>

// Definicija dva prostora imena
namespace MojProstor {
void prikazi() {
std::cout << "Funkcija u MojProstor" << std::endl;
    }
}

namespace DrugiProstor {
void prikazi() {
std::cout << "Funkcija u DrugiProstor" << std::endl;
    }
}

int main() {
// Poziv funkcija iz različitih prostora imena
    MojProstor::prikazi();
    DrugiProstor::prikazi();

return 0;
}
Rezultat:

Funkcija u MojProstor

Funkcija u DrugiProstor

Ključna reč using

Ključna reč using se koristi za:
  1. Uvođenje prostora imena u trenutno okruženje, čime se pojednostavljuje pristup članovima tog prostora.
  2. Deklaraciju pojedinačnih članova prostora imena.

Primer 1: Korišćenje cele sadržine prostora imena

#include <iostream>
using namespace MojProstor;

namespace MojProstor {
void prikazi() {
std::cout << "Koristimo MojProstor bez prefiksa" << std::endl;
    }
}

int main() {
prikazi();  // Direktan poziv jer je MojProstor uveden
return 0;
}

Primer 2: Uvođenje samo jedne funkcije iz prostora imena

#include <iostream>
namespace MojProstor {
void funkcija1() {
std::cout << "Funkcija 1" << std::endl;
    }
void funkcija2() {
std::cout << "Funkcija 2" << std::endl;
    }
}

using MojProstor::funkcija1;

int main() {
funkcija1();  // Direktan poziv
     MojProstor::funkcija2();  // Ovo je potrebno za funkcija2 jer nije uvedena sa using
return 0;
}

Testirajte svoj kod ovde!

// Ovde pišite C++ kod...

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 cin koja se nalazi u datoteci iostream

Ovu datoteku cemo ukljuciti pomocu direktive #include za uklucivanje datoteka i ovo pisemo pri vrhu dokumenta

#include <iostream>

U ovoj datoteci se još nalazi i metoda cout 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 cout što zapravo predstavlja izlaznu konverziju. Ulazna konverzija ostvaruje se metodom cin. Ovaj drugi korak je:

#include<iostream>
usingnamespace std;

int main() {
// Declare a variable for radius
double r;
// Prompt the user to enter the radius
cout << "Please enter the radius of the circle: " << endl;
cin >> r;
return 0;
}
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.
#include<iostream>
usingnamespace std;

int main() {
// Deklaracija promenljivih
double r, povrsina;

// Unos vrednosti za poluprečnik
cout << "Unesite poluprecnik kruga: " << endl;
cin >> r;

// Izračunavanje površine kruga
povrsina = 3.14159 * r * r;

// Ispis rezultata
cout << "Povrsina kruga je: " << povrsina << endl;
return 0;
}

Resenje primera 3:

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

int ukupnoSekundi;

// Unos vrednosti za vreme u sekundama
cout << "Unesite vreme u sekundama: " << endl;
cin >> vrSec;

​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, ukupnoSekundi;

hh = vrSek / 3600;

ukupnoSekundi= ukupnoSekundi% 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 = ukupnoSekundi/ 60;

ukupnoSekundi= ukupnoSekundi% 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:

cout << hh << mm << ukupnoSekundi<< endl;

Kompletan kod:
#include<iostream>
usingnamespace std;

int main() {
// Deklaracija promenljivih
int ukupnoSekundi, hh, mm, ss;

// Unos vremena u sekundama
cout << "Unesite vreme u sekundama: " << endl;
cin >> ukupnoSekundi;

// Izračunavanje sati, minuta i sekundi
hh = ukupnoSekundi / 3600;
ukupnoSekundi = ukupnoSekundi % 3600;
mm = ukupnoSekundi / 60;
ss = ukupnoSekundi % 60;

// Ispis rezultata u formatu hh:mm:ss
cout << "Vreme: " << hh << ":" << mm << ":" << ss << endl;
return 0;
}
​Posle pokretanja:
Rešenje zadatka
Slika 1: Rešenje zadatka "formatirano vreme"-izlaz

Prethodno
​|<Podaci u C jeziku
Sledeće
​Operatori u jeziku C/C++>|

Srodni članci

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