Showing posts with label cplus. Show all posts
Showing posts with label cplus. Show all posts

Saturday, October 31, 2015

Standardne funkcije u C++ programskom jeziku

Najčešće standardne funkcije koje se najviše koriste u C++ programskom jeziku su C-String funkcije, funkcije za pojedinačne znakove, matematičke funkcije, funkcije za slučajno biranje brojeva i funkcije za datum i vreme. Rad sa funkcijama iz standardne biblioteke je zaista velika pomoć prilikom programiranja i pored toga što se na primer u C# programskom jeziku, ništa ne može porediti sa .NET Framework klasama, tako se ništa ne može porediti sa konstantnom upotrebom biblioteke standardni funkcija u C programskom jeziku, ali za  C++ programski jezik, standardna biblioteka nije baš bezbedna dok postoje i bolja rešenja. Ono što izdvaja standardne funkcije je njihova jednosatvna upotreba i navika C programera. Upotreba standardne biblioteke zahteva da uvezete određeni header fajl u vaš program. Najbolje će te shvatati standardne funkcije njihovom upotrebom kodiranjem.


( The C++ Standard Library )

C-String funkcije

C-String funkcije se primenjuju na klasične char* stringove, C programskog jezika <cstring>. Nemojte to da mešate sa funkcijama klase string <string> o kojoj je bilo više reči u postu „Rad sa stringovima u C++ programskom jeziku“. Ja lično ne preporučujem da koristite <cstring> ili objekte Cstring u vašim C++ programima. Uvek koristite <string>. Ali pošte će te često nailaziti na ovakav kod u nekim primerima i starijim projektima, čisto da prepoznate o kakvim funkcijama se radi. Upotreba <cstring> funkcija nije bezbedno koristiti i zato će Microsoft Visual Studio prijavljivati vam grešku kad pokušate da koristite <cstring> osim ukoliko ne naznačite da ne prijavljuje; kliknite desnim tasterom miša na Project u Solution Explorer.

Project -> Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions

Unesite:

               _CRT_SECURE_NO_WARNINGS

Pogledajte primer i analizirajte kod programa kako se upotrebljavaju <cstring> funkcije:


Monday, October 26, 2015

Rad sa stringovima u C++ programskom jeziku


Jedan od najčešći komunikacija računara sa korisnikom su tekstualni stringovi. Gotovo je nemoguće i zamisliti neki program bez teksta. Mogućnost da kombinujete, rastavljate i analizirate stringove je danas nešto što se podrazumeva kao abeceda programiranja. Bez obzira šta vi radite sa stringovima, računar njih pamti i radi s njima kao da su to brojevi. Zato tekstualni podaci jednostavno u svakom bajtu koriste specijalan kod koji odgovara konkretnom znaku, i taj kod zovemo ASCII kod. Prevođenje stringova u brojeve i obratno se vrši iza scene, pa vi nemate taj osećaj ali tako se prevode najmanje dvaput kad unosite tekst sa tastature i kad ga prikazujete na ekranu. Inače u C++ programskom jeziku string je zapravo niz, koji se sastoji od elemenata tipa char i završava se null karakterom ( \0 ).



( C++ , string data type )


Pogledajte ovu liniju koda:

char myString[] = {'M','a','n','u','e','l','','R','a','d','o','v','a','n','o','v','i','c','\0' };

Ovako pisanje koda kad je tekst u pitanju je zamorno i kompleksno. Iako karakter po karakter, ovaj niz funkcioniše, postoji mogućnost i za pravljenje grešaka. Zato postoji i lakši način pisanja istog koda, ali sa navodnicima ““.

char myStringSimple[] = "Manuel Radovanovic";

Pisanje stringa pod duplim navodnicima bez zareza i vitičasti zagrada je mnogo lakše. Čak nije ni potrebno da dodajete null karakter jer će kompajler to uraditi umesto vas. Vi možete deklarisati niz char i bez inicijalizacije, ali možete i odrediti unapred koliko elemenata ima vaš niz char. Obratite pažnju samo kada uzimate podatke od korisnika, tada treba da koristite ovakav pristup:

char myStringSimpleInput[19];
cin.get(myStringSimpleInput, 19);

Inače ako koristite samo naredbu cin da dodelite stringove, kod prvog praznog prostora će cin ubaciti null karakter i umesto rezultata Manuel Radovanovic, vaš rezultat će biti samo Manuel. Programski jezik C++ je nasledio biblioteku funkcija koje služe za rad sa stringovima poput strcpy() I strncpy() za kopiranje jednog stringa u drugi. Međutim ukoliko radite sa stringovima u C++ programskom jeziku, najbolje je da koristite klasu string, inače možete imati dosta bezbedonosni propusta i bagova u programu.

Šta je klasa string i kako se koristi? 

Saturday, October 24, 2015

Obrada grešaka u C++ programskom jeziku

Dok učite programiranje, posebno osnove; retko će te se susretati sa obradom grešaka u vašim programima i to iz opravdanog razloga; da ne biste skretali sa teme. Međutim, kad pravite programe koji nisu ilustracija učenja, morate detaljno da se posvetite sprečavanju grešaka ili da pružite krajnjem korisniku povratnu informaciju da ispravi grešku ukoliko je to moguće. U svakom slučaju ne možete dozvoliti da vam aplikacija padne ili da radi sa netačnim podacima. Ponekad je uočiti, otkriti i ispraviti grešku teži proces nego pisanje sasvim novog koda ili totalnog menjanja pristupa nekom problemu; posebno ako je neko drugi pre vas pisao kod van programerski pravila vaše kompanije. Na projektima se dešava i da nešto što odlično radi samostalno, totalno deformiše celi poslovni proces kad je deo veće celine. Jedno je sigurno, što pre otkrijete i ispravite grešku ona će vas manje koštati. Inače vaš program će biti pun bagovitog i nestabilnog koda, koje će te morati ispravljati kroz update-e i patch-eve. Uvek imajte u vidu da neke programerske greške mogu koštati i ljudske živote. Zato je obrada grešaka prioritet nad prioritetima kod svakog programera. Čak i najmanja struktura koda mora proći kroz detaljna testiranja pre nego što pređu u sledeću fazu projekta.



( Errors, sprečavanje i ispravljanje grešaka je prioritet svakog programera )


Dobra vest je da Microsoft Visual Studio maksimalno olakšava rad sa greškama. Sve vrste grešaka možete podeliti u tri osnovne kategorije:

  • Sintaksne greške
  • Greške programske logike
  • Izuzeci
Sintaksne greške su najlakše, to su greške koje morate da ispravite u svom programskom kodu da biste uspešno kompajlirali program. Greške programske logike, često se zovu i logičke greške; su greške koje otkrivate nakon kompajliranja, izvršavanja i detaljnih testiranja vašeg programa. U kompanijama gde se radi na velikim projektima postoje programeri koji se bave samo testiranjem. Njih zovemo testeri. Njihov posao je najteži i iziskuje ogromno znanje. Oni prave čak programe koje služe samo da testiraju vaš program ili deo programa poput klase. I treća vrsta kategorije grešaka su izuzeci. Oni se često smatraju delom greške programske logike, ali je uvek treba izdvojiti. Izuzecima reagujemo na greške koje se dešavaju tokom izvršavanja. Sa njima će te najviše raditi.

Šta je Code Rot, truljenje koda?


Thursday, October 15, 2015

Klase u C++ programskom jeziku – 1 deo


Najjednostavnije rečeno; klasa je struktura podataka koja omogućava da svojstva i metode posmatramo kao zaseban objekat. Klasa je način da se napravi tip podataka koji ima i stanje i ponašanje. U principu to je samo kolekcija promenjivih različitih tipova koji su kombinovani sa skupom povezanih funkcija. Prva stvar koju trebate shvatiti prilikom učenja klasa su mnoštvo novih programerskih pojmova, ključni reči na engleskom jeziku koje često i kad se prevedu, ostavljaju početnike zbunjenim. Iskusan programer može satima pričati o klasama dok ga početnici slušaju i pitaju se o čemu ovaj priča. Zato je neophodno da razumete svaki pojam kad ga koristite inače vi možete praktično praviti klase da čak i ne razumete kad nešto u klasi treba da koristite a kad ne. Zato vam savetujem bez žurbe i mnogo google-anja i praktični rešenja sa stalnim samoispitivanjem ( Zašto baš onako kad može i ovako? ); dok ne shvatite. Klase se ne mogu objasniti jednim postom, zato ću ovu temu opisati u više postova. Klase su najznačajnije obilježje C++ programskog jezika, one vas uvode u objektno orijentisanje podataka s mnoštvom mogućnosti što podrazumeva i više odluka i odgovornosti. U C programskom jeziku nemate klase; zato se mnogo koriste strukture, dok u C# programskom jeziku rad sa klasama je mnogo jednostavniji i drugačiji zahvaljujući .Net Framework-u. U C++ programskom jeziku rad sa klasama je nešto komplikovaniji.


 ( Definicija klase u C++ programskom jeziku )

U klasičnom programiranju, kod i podaci su odvojeni. OOP – Objektno orjentisano programiranje taj odnos menja i omogućava vam da pakujete i podatke i kod zajedno u nešto što zovemo klasa. Klasa omogućava da zamotate različite promenjive i funkcije u kolekciju i to zovemo objekat. Ali sam postupak svega toga zovemo enkapsuliranje. Znači da enkapsuliranje shvatite kao zamotavanje. Prednost enkapsuliranja je u tome što npr. sve karakteristike i ponašanje kućnih ljubimaca stavite u jednu klasu i nazovete je životinja. Kad vam trebaju karakteristike kućnog ljubimca dovoljno je da pozovete klasu životinja u svom programu. Ali nije sve samo na tome. Mnoštvo je mogućnosti šta vi sve možete da radite sa vašom klasom i do koje mere možete da utičete kako će se tipovi podataka i funkcije ponašati, čak i druge klase uključene u vašu klasu. Klasa se pravi prvo deklarisanjem i ovo je opšta sintaksa za C++ ključnu reč class:

class ime_klase { 
                 deklaracije

};

Obratite pažnju da blok klase obavezno mora da se završi sa „ ; “, ukoliko pišete vašu klasu u isti fajl gde pišete i program. Klasu ne možete pisati u funkciji main() kao ni funkcije, nego klase se često pišu iznad deklaracije main() dok se funkcije pišu ispod. Klase uvek počinju deklaracijom kao što su deklaracija promenjivih, deklaracija funkcija ili i jednog i drugog što imate u klasi. Uglavnom dok učite klase i često u malim programima; klase se pišu u istom fajlu vašeg programa, međutim u projektima tako nešto je neprihvatljivo. Klase se u projektima pišu u odvojenim fajlovima gde se deklaracija klase upisuje u header fajl dok se ostali kod piše u fajlu klase, i onda se inicijalizuje pozivaju preko header fajla.

Kako da napišem jednostavnu malu klasu i pokrenem je u svom programu? 

Friday, October 09, 2015

Pokazivači u C++ programskom jeziku


Ukoliko idete na intervju za pisanje tehničke literature iz oblasti C i C++ programiranja za Microsoft korporaciju; šta tek da kažemo za radno mesto C++ programera; velika je verovatnoća da će vas pitati da im objasnite šta su to pokazivači. I pored toga što većina programera smatra da su pokazivači jedan od najmoćnijih alata i suština C i C++ programskog jezika jer manipulišu memorijom računara direktno, oni mogu biti zbunjujući i mnogim početnicima nije jasno zašto su oni u stvari i potrebni. Da bi ste razumeli pokazivače pre svega treba da razumete kako funkcioniše računarska memorija.


( Zvezdica * operator nam omogućava pristup vrednosti iz memorijske adrese )

Računarska memorija je kod svakog računara i kod drugih računarskih uređaja uvek podeljena na sekvencijalno označene memorijske adrese. Procesor razume samo brojeve i zbog toga procesor referiše lokacije u memoriji pomoću brojeva u heksadecimalnoj notaciji. Kompjuteri označavaju memoriju koristeći različite kompleksne šeme. Vi ne morate znati koji su to brojevi iako ih uvek možete odštampati upotrebom ampersanda &. Ovako: 

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
       short i = 8;

       cout << &i << endl << endl;

       system("PAUSE");
       return 0;

}

Kad pokrenete ovaj program, vaš rezultat će biti nešto poput ovog ali ne isto:

0104FC64 

Press any key to continue . . . 

Svaki put kad pokrenete program, ovaj broj dobićete drugi heksadecimalni broj memorijske adrese gde je računar smestio promenjivu i tipa short. Ali uvek će zauzimati 2 bita u memoriji koliko tip short zauzima za svoju vrednost. Zašto? Zato što računar uvek iznova rezerviše memorijsku adresu kad pokrenete vaš program dok rezervacija memorije zavisi od mnogo faktora i BIOS-a i celog vašeg operativnog sistema. Sad kad znate šta je i kako funkcioniše memorijska adresa, onda je lako pretpostaviti šta je pokazivač.

Šta je pokazivač? 

Monday, October 05, 2015

Nizovi u C++ programskom jeziku


Najjednostavnije definisano; niz je niz promenjivih istog tipa koji se nalaze u memoriji. Možemo reći i da je niz kolekcija elemenata ili lokacija za smeštanje podataka istog tipa. Inače niz predstavlja proizvoljno veliku količinu podataka indeksiranih sa brojevima. Sa malo koda vi u suštini pravite strukture nizova podataka proizvoljnih dimenzija, zatim pomoću petlji možete efikasno da obrađujete strukture podataka. Nizovi skoro uvek idu zajedno sa petljama i zbog toga su veoma korisni. Međutim nizovi u C++ programskom jeziku nisu baš kao u C# programskom jeziku jer su nizovi u C# objekti i moraju se instancirati što nije slučaj u C++ programskom jeziku. C++ programski jezik nije garbage collected i upotreba ključne reči new zahteva ručno oslobađanje memorije. Ali sad da ne komplikujem nego da pojednostavimo.


( Arrays, jednodimenzionalni i dvodimenzionalni nizovi )

Nizovi se deklarišu prvo određivanjem tipa niza, zatim imenom niza i veličinom. Najjednostavnija sintaksa niza je:

tip ime_niza [veličina];

Takođe o nizovima treba da znate da u niz možete smestiti i stringove i objekte i druge nizove ali u svakom nizu može da postoji samo isti tipovi podataka. Npr. Ovako se definiše niz koji sadrži 10 promenjivih tipa integer.

int numbers[10];


Sad u niz numbers možete staviti 10 brojeva tipa integer umesto da pravite 10 promenjivih:

numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
numbers[5] = 6;
numbers[6] = 7;
numbers[7] = 8;
numbers[8] = 9;
numbers[9] = 10;

Međutim ovako dodeljivanje nema neke velike razlike u pisanju 10 promenjivih tipa integer sa dodeljenim vrednostima. Zato isti niz možemo napisati, deklarisati i dodeliti nizu vrednosti jednostavnije; u jednoj liniji koda pomoću agregata jednostavnom notacijom vitičasti zagrada i tačka zarezom. 

int numbers[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

Ovako u jednoj liniji koda vi vršite i pravilno inicijalizaciju. Inače bez inicijalizacije niza vaš program vam može praviti komplikacije; ukoliko niste deklarisani niz na globalnom nivou. C++ programski jezik na žalost automatski inicijalizuje promenjive i sve elemente niza nulom samo na globalnom nivou. Što u prevodu znači da promenjive i svi elementi deklarisani na lokalnom nivou sadrže slučajne vrednosti (smeće). Ovako kompajler može da obradi vaš niz kao da to nije ni bitno ali može i da vam napravi ogromne komplikacije.

Kako to misliš, da mogu imati komplikacije kad deklarišem niz bez inicijalizacije?

Saturday, October 03, 2015

Petlje u C++ programskom jeziku


Često tokom programiranja imate potrebu da kodirate jednu te istu stvar dok se neki određeni uslov ne ispuni. Naredbe if else ili switch izvršavaju uslove samo jedanput. Šta ako trebate neke stvari ponavljati više puta? Neke izazove u programiranju rešavate ponavljanjem delovanja na iste podatke. Npr. Vi možete ispisati 10 linija koda da bi ste ispisali 10 puta „Hello World“ na konzoli, ali šta ako trebate da napišete 1000 puta „Hello World“? Hoćete li pisati 1000 linija koda za ovaj zadatak? Ili šta ako vi ne znate unapred koliko puta treba da ispišete na konzoli „Hello World“? Možda će vam sam smisao pisanja „Hello World“ čak 1000 puta na konzolu zvučati banalno, ali to je čisto da bi ste najlakše razumeli šta je ponavljanje i ono što zahteva u programiranju petlju kad treba da ponavljamo podatke. Inače petlje se koriste toliko često i rešavaju bezbroj izazova u programiranju da je danas je nemoguće zamisliti ozbiljan kod bez petlji. Jednostavno samo matematički omogućavaju mnogo više od jednostavnog izračunavanja. O smanjivanju kodiranja i čitljivosti koda da i ne govorimo.


( Petlja while, objašnjena kao šala )

Međutim nekad u prošlim vremenima i starim programskim jezicima nisu postojale petlje. Umesto njih se koristila naredba goto koja je odrađivala iskaze skokovima na zadatu labelu. Upotrebu naredbe goto u C++ programskom jeziku možete videti u primeru ovde. Sad kad naučite petlje, nećete imati potrebe više da koristite naredbu goto. Iskaz goto ćete viđati u starim programima, često u C ili Basic programskom jeziku, ali za neku sadašnjost se naredba goto apsolutno ne preporučuje. Nepažljiva upotreba goto iskaza brzo zapetlja program da se isti ne može ni čitati. Zato su dobile naziv „Špageta kod“. Ali ono što će te najčešće koristiti u vašim projektima su definitivno sve petlje. Svaka ima svoj razlog kad se koristi.

Šta je for ili for next petlja i kako se koristi? 

Thursday, September 24, 2015

Funkcije u C++ programskom jeziku


Funkcije ili kako se još zovu, metode, procedure ili podrutine su najosnovniji gradivni elementi tj. grupa povezanih naredbi koji izvršavaju određeni zadatak koliko god puta vam zatreba. Funkcije su suštinski korak u podeli posla i prosto je nemoguće zamisliti ozbiljan programski projekat bez funkcija. Bez obzira što je objektno orjentisano programiranje skrenulo pažnju sa funkcija na objekte, funkcije ostaju centralna komponenta svakog programa. Najbolje je da funkcije shvatite kao deo programa koji obavljaju određeni zadatak kad god se pozovu u programu. Kad god imate neki deo koda koji se često ponavlja, da ga ne biste pisali više puta, najbolje ga stavite u neku funkciju i onda tu funkciju pozivajte u svom programu onoliko puta koliko vam je potrebno. Vi možete praviti vlastite ili koristiti već napravljene funkcije. U C++ programskom jeziku postoje dve vrste funkcija; funkcija koja vraća neku vrednost i funkcija koja ne vraća vrednost.


( C++ Functions )

Za programere Visual Basic-a bi napomenuo da su u C, C++ i C# programskom jeziku i funkcije i sub procedure jedno; samo funkcije. Razlika je samo u tome da u Visual Basic-u funkcija podrazumeva da se vraća neka vrednost, dok se za funkciju koja ne vraćaju vrednost koristi sub procedura. Svaki C++ program ima bar jednu funkciju main() i ona je glavna funkcija iz koje se mogu pozivati druge funkcije, dok druge funkcije mogu pozivati jedna drugu i čak funkcija može pozivati samu sebe. Takođe funkcije možemo podeliti na korisnički definisane i ugrađene. Ugrađene funkcije su deo paketa vašeg kompajlera i njih obezbeđuje proizvođač.

Kako se pravi i poziva funkcija? 

Tuesday, September 22, 2015

If else statement i swich statement u C++ programskom jeziku



Odluke, odlučivanje i još kako ih programeri zovu grananje su najvažnija sposobnost računara da reaguju na različite uslove. I pored toga što računari ne razmišljaju kao ljudska bića ona perfektno i precizno donose jednostavne odluke. Računar će uvek tačno i precizno izvršiti svaku vašu naredbu čak i ako je vaša naredba besmislena. Instrukcije za odlučivanje zavise isključivo od programera.


( If else statement u C++ programskom jeziku )

Međutim ako pravilno unesete i sinhronizujete mnogobrojne odluke poput; ako prodajete više krušaka nego jabuka u prvoj trećini prodaje istih, onda spusti cenu jabuka za 10 procenata ili spustite cenu krušaka za 8 procenata. Nizom pravilno napisanih uslova, grananja; vaš program jednostavno postaje pametniji. Na sličan način se gradi i AI – ArtificialIntelligence – veštačka inteligencija. Najjednostavniji oblik if iskaza je:


if ( izraz ) iskaz;

Ovaj oblik se u kodu piše i ovako:

if ( izraz )
{
         iskaz;

}


Ako je A tačno onda uradi B. Pogledajte jednostavan primer. Ako imate 10 ili više kilograma jabuka onda obavesti korisnika:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
       short apple = 0;

       cout << "How much do you weigh apples? ";
       cin >> apple;

       if (apple >= 10) cout << "You have 10 or even more kilos apples." << endl << endl;

       system("PAUSE");
       return 0;

}

Pogledajte šta se dešava kad pokrenemo ovaj program i unesemo vrednost 15: