PODACI U JEZIKU C++
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;
- 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
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 funkcije
U C++ jeziku, tip void koristi se kada funkcija ne vraća nikakvu vrednost:
Označeni i neoznačeni podaci(signed i unsigned)
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
Primer 1:
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:
using namespace 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
Primer:
const double e = 2.718281;
Konstante
Datoteke zaglavlja
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
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++
using namespace std;
int main() {
bool isValid = true;
if (isValid) {
cout << "Vrednost je true!" << endl;
} else {
cout << "Vrednost je false!" << endl;
}
return 0;
}
koja ispisuje tekst: "Vrednost je true", a ako isValid promenljiva ima vrednost false, onda se ispisuje tekst "Vrednost je false".
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 <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):
Primer:
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):
Primer:
Tokovi podataka u C++:
- 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 Stringovi kao i Stringovi u C/C++ jeziku
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:
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
Primer deklaracije i inicijalizacije osnovnih tipova podataka
#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;
}
- #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 <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;
}
- #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++
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:
// 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;
}
Funkcija u MojProstor
Funkcija u DrugiProstor
Ključna reč using
- 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
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
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;
}
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:
using namespace 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.
using namespace 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;
}