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;
}
| Prethodno |<Podaci u C jeziku |
Sledeće Operatori u jeziku C/C++>| |
Srodni članci
Primeri zadataka sa podacimaRad sa stringovima
Rešeni zadaci iz oblasti podaci
Algoritmi-prosti brojevi
Algoritmi - Fibonačijev niz
