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:
- Osnovne tipove podataka: Nasleđene iz C jezika (npr. int, float, char) za rad sa osnovnim vrednostima.
- Prostori imena (namespaces): Omogućavaju organizaciju i izbegavanje konflikata između imena funkcija i promenljivih.
- Nove tipove podataka: Kao što su bool za logičke vrednosti i string za rad sa tekstom, što pojednostavljuje rad sa modernim aplikacijama.
- Konstante: Definisane pomoću ključne reči const, koje osiguravaju da vrednosti ne mogu biti menjane tokom izvršavanja programa.
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:
- Deklaracije i inicijalizacije promenljivih,
- Korišćenja konstanti,
- Organizacije koda kroz prostore imena.
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:
- 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 funkcije
Tip 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:
- signed int: od -2,147,483,648 do 2,147,483,647
- unsigned int: od 0 do 4,294,967,295
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>
using namespace 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:
- #include <iostream> – za ulaz i izlaz podataka (cin, cout).
- #include <cmath> – za matematičke funkcije poput sqrt ili pow.
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++
- C: Klase nisu podržane. Podaci i funkcije su organizovani pomoću struktura (struct) i funkcija.
- C++: Uvodi klase, koje omogućavaju objektno-orijentisano programiranje. Klase kombinuju podatke i metode u jednu jedinicu, podržavaju enkapsulaciju, nasledstvo i polimorfizam.
Primer sa klasama i objektima u C++
#include <iostream>
#include <string>
using namespace std;
class Student {
public:
string ime;
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 namespace std;
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:
- cin je ulazni tok za čitanje podataka.
- cout je izlazni tok za slanje 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:
- Objekat cout: cout je objekat klase ostream, koji se koristi za ispis podataka na standardni izlaz (najčešće ekran).
- Operator <<: Ovo je preopterećeni operator umetanja (insertion operator). On prebacuje vrednosti na desnoj strani u tok podataka koji cout obrađuje.
- 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.
- endl: Ovaj manipulator dodaje znak za novi red (\n) i odmah isprazni tok (flush), osiguravajući da podaci budu prikazani.
Konverzija podataka
- "Zdravo, " i "svete!" su stringovi tipa const char*. Tok automatski prepoznaje njihov tip i prosleđuje ih metodi ostream::operator<< koji zna kako da obradi stringove.
- Ako bi se koristili drugi tipovi podataka (npr. int ili double), operator << bi pozvao odgovarajuću funkciju za konverziju tih tipova u tekst.
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:
- #include <iostream>:
- Koristi se za ulaz/izlaz putem std::cout i std::cin.
- #include <iomanip>:
- Omogućava kontrolu nad formatiranjem, kao što su decimalna preciznost (std::setprecision) i fiksni format (std::fixed).
- std::boolalpha:
- Prikazuje logičke vrednosti (true/false) kao tekstualni prikaz umesto numeričkog (1/0).
- std::fixed i std::setprecision:
- Koriste se za kontrolu formata realnih brojeva.
Razlika između float i double
- float koristi 4 bajta memorije i omogućava manju preciznost (približno 6 do 7 decimalnih cifara).
- double koristi 8 bajtova memorije i omogućava veću preciznost (približno 15 do 16 decimalnih cifara).
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:
- #include <iomanip>
Ovo zaglavlje omogućava korišćenje funkcija poput std::setprecision za podešavanje broja značajnih cifara pri ispisu. - std::fixed
Postavlja ispis brojeva u fiksni decimalni format, čime se sprečava naučni zapis. - std::setprecision(9) i std::setprecision(16)
Određuje broj cifara posle decimalne tačke. - 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
- Koristite float kada vam je potrebna manja preciznost i želite da štedite memoriju (npr. u grafičkim aplikacijama ili igrama).
- Koristite double kada vam je potrebna velika preciznost (npr. u naučnim ili finansijskim aplikacijama).
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:
- Uvođenje prostora imena u trenutno okruženje, čime se pojednostavljuje pristup članovima tog prostora.
- Deklaraciju pojedinačnih članova prostora imena.
Primer 1: Korišćenje cele sadržine prostora imena
#include <iostream>
namespace MojProstor {
void prikazi() {
std::cout << "Koristimo MojProstor bez prefiksa" << std::endl;
}
}
using namespace MojProstor;
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!
Primeri za vežbu
- 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 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>
using namespace 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>
using namespace 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>
using namespace 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:

Srodni članci
Proveri znanje
Otvori kviz
Kviz: Podaci u C++-u
1. Koji tip čuva logičku vrednost true ili false?
2. Šta je const double PI = 3.14159;?
3. Koliko bajtova najčešće zauzima char?
4. Koji tip je bolji za realan broj sa više tačnih cifara?
| Prethodno |<Podaci u C jeziku |
Sledeće Operatori u jeziku C/C++>| |
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:
- Osnovne tipove podataka: Nasleđene iz C jezika (npr. int, float, char) za rad sa osnovnim vrednostima.
- Prostori imena (namespaces): Omogućavaju organizaciju i izbegavanje konflikata između imena funkcija i promenljivih.
- Nove tipove podataka: Kao što su bool za logičke vrednosti i string za rad sa tekstom, što pojednostavljuje rad sa modernim aplikacijama.
- Konstante: Definisane pomoću ključne reči const, koje osiguravaju da vrednosti ne mogu biti menjane tokom izvršavanja programa.
- Deklaracije i inicijalizacije promenljivih,
- Korišćenja konstanti,
- Organizacije koda kroz prostore imena.
int a;
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:
- 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:
Ovaj tip je često korišćen u uslovnim izrazima:
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];
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 klase i funkcijeTip void
U C++ jeziku, tip void koristi se kada funkcija ne vraća nikakvu vrednost:
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;
- signed int: od -2,147,483,648 do 2,147,483,647
- unsigned int: od 0 do 4,294,967,295
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;
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;
| 7 |
|---|
a
| 22 |
|---|
b
int c;
c = a * b;
| 154 |
|---|
c
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:
usingnamespace std;
int main() {
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;
}
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;
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:
- #include <iostream> – za ulaz i izlaz podataka (cin, cout).
- #include <cmath> – za matematičke funkcije poput sqrt ili pow.
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: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 |
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++
- C: Klase nisu podržane. Podaci i funkcije su organizovani pomoću struktura (struct) i funkcija.
- C++: Uvodi klase, koje omogućavaju objektno-orijentisano programiranje. Klase kombinuju podatke i metode u jednu jedinicu, podržavaju enkapsulaciju, nasledstvo i polimorfizam.
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:- cin je ulazni tok za čitanje podataka.
- cout je izlazni tok za slanje podataka.
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:
- Objekat cout: cout je objekat klase ostream, koji se koristi za ispis podataka na standardni izlaz (najčešće ekran).
- Operator <<: Ovo je preopterećeni operator umetanja (insertion operator). On prebacuje vrednosti na desnoj strani u tok podataka koji cout obrađuje.
- 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.
- endl: Ovaj manipulator dodaje znak za novi red (\n) i odmah isprazni tok (flush), osiguravajući da podaci budu prikazani.
- "Zdravo, " i "svete!" su stringovi tipa const char*. Tok automatski prepoznaje njihov tip i prosleđuje ih metodi ostream::operator<< koji zna kako da obradi stringove.
- Ako bi se koristili drugi tipovi podataka (npr. int ili double), operator << bi pozvao odgovarajuću funkciju za konverziju tih tipova u tekst.
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:
- #include <iostream>:
- Koristi se za ulaz/izlaz putem std::cout i std::cin.
- #include <iomanip>:
- Omogućava kontrolu nad formatiranjem, kao što su decimalna preciznost (std::setprecision) i fiksni format (std::fixed).
- std::boolalpha:
- Prikazuje logičke vrednosti (true/false) kao tekstualni prikaz umesto numeričkog (1/0).
- std::fixed i std::setprecision:
- Koriste se za kontrolu formata realnih brojeva.
Razlika između float i double
- float koristi 4 bajta memorije i omogućava manju preciznost (približno 6 do 7 decimalnih cifara).
- double koristi 8 bajtova memorije i omogućava veću preciznost (približno 15 do 16 decimalnih cifara).
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:
- #include <iomanip>
Ovo zaglavlje omogućava korišćenje funkcija poput std::setprecision za podešavanje broja značajnih cifara pri ispisu. - std::fixed
Postavlja ispis brojeva u fiksni decimalni format, čime se sprečava naučni zapis. - std::setprecision(9) i std::setprecision(16)
Određuje broj cifara posle decimalne tačke. - 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
- Koristite float kada vam je potrebna manja preciznost i želite da štedite memoriju (npr. u grafičkim aplikacijama ili igrama).
- Koristite double kada vam je potrebna velika preciznost (npr. u naučnim ili finansijskim aplikacijama).
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:- Uvođenje prostora imena u trenutno okruženje, čime se pojednostavljuje pristup članovima tog prostora.
- 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!
Primeri za vežbu
- 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 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:
usingnamespace std;
int main() {
double r;
// Prompt the user to enter the radius
cout << "Please enter the radius of the circle: " << endl;
cin >> r;
}
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.
usingnamespace std;
int main() {
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;
}
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 sekundamacout << "Unesite vreme u sekundama: " << endl;
cin >> vrSec;
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;
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;
cout << hh << mm << ukupnoSekundi<< endl;
usingnamespace std;
int main() {
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;
}
Srodni članci
Primeri zadataka sa podacimaRad sa stringovima
Rešeni zadaci iz oblasti podaci
Algoritmi-prosti brojevi
Algoritmi - Fibonačijev niz
