




Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Community
Ask the community for help and clear up your study doubts
Discover the best universities in your country according to Docsity users
Free resources
Download our free guides on studying techniques, anxiety management strategies, and thesis advice from Docsity tutors
An overview of the purpose and usage of comments in c++ programming, as well as the formatting of output using the cout statement. It explains the difference between string literals and numeric literals, the use of whitespace characters, and the importance of the #include directive and the using namespace std; statement. The document also covers the role of the preprocessor in c++ programs and the concept of namespaces. With its detailed explanations and code examples, this document could be a valuable resource for students learning c++ programming, serving as study notes, lecture notes, or a summary for exam preparation.
Typology: Cheat Sheet
1 / 8
This page cannot be seen from the preview
Don't miss anything!
Uobičajeno je da svaka priča o programskom jeziku C++ počinje opisom kratkog programa koji ispisuje pozdravnu poruku na ekranu. Stoga će naš prvi program izgledati ovako: // Ovaj program ispisuje pozdravnu poruku #include
Funkcije u programskom jeziku C++ uvijek započinju zaglavljem (engl. function heading ) koje pored imena funkcije sadrži spisak parametara funkcije (engl. parameter list ), i tip povratne vrijednosti (engl. return type ). Parametri su podaci koje pozivaoc funkcije treba da proslijedi pozvanoj funkciji, sa ciljem preciziranja zadatka koji funkcija treba da obavi. Popis parametara se navodi u zagradama neposredno iza imena funkcije. Pošto se main funkcija poziva neposredno iz operativnog sistema , eventualne parametre ovoj funkciji može proslijediti jedino operativni sistem. Stoga je najčešći slučaj da funkcija main nema nikakvih parametara , što se označava praznim zagradama (odsustvo parametara se ponekad označava i navođenjem riječi “ void “ unutar zagrada, što je zastarjela praksa nasljeđena iz jezika C). O parametrima ćemo detaljnije govoriti u kasnijim poglavljima. Ispred imena funkcije navodi se tip povratne vrijednosti funkcije. Povratna vrijednost je vrijednost koju funkcija vraća pozivaocu funkcije. Vraćanje vrijednosti obavlja se pomoću naredbe “ return ”, koja tipično predstavlja posljednju naredbu unutar funkcije, i iza koje se navodi povratna vrijednost. U slučaju funkcije “main”, povratna vrijednost se vraća operativnom sistemu. Po dogovoru, vrijednost “0” vraćena operativnom sistemu označava uspješan završetak programa , dok se vrijednosti različite od nule vraćaju operativnom sistemu isključivo kao signalizacija da iz nekog razloga program nije uspješno obavio planirani zadatak (značenje ovih vrijednosti zavisi od konkretnog operativnog sistema). Stoga je posljednja naredba funkcije “main“ u gotovo svim slučajevima naredba return 0; Sve naredbe jezika C++ obavezno završavaju znakom “;”, koji označava kraj naredbe (jedna od najčešćih sintaksnih grešaka u C++ programima je upravo zaboravljanje završnog tačka-zareza na kraju naredbe). Riječ “ int “ ispred imena funkcije označava da je vrijednost koju ova funkcija vraća cijeli broj , kao što će biti jasnije iz sljedećeg poglavlja. Kako je povratna vrijednost iz “main“ funkcije gotovo uvijek nula, mnogi kompajleri dopuštaju da se naredba “ return “ potpuno izbaci iz “main“ funkcije. Tako nešto ne smatra se dobrom programerskom praksom. Također, ranije verzije kompajlera za C++ dozvoljavale su da se naredba “ return “ izbaci i da se tip povratne vrijednosti “ int “ zamijeni sa “ void ”, što označava da se nikakva povratna vrijednost ne vraća. Standard ISO C++98 zabranio je ovakvu praksu, i strogo naredio da funkcija “main“ kao povratni tip može imati samo “ int ”, i ništa drugo. Nakon zaglavlja funkcije, slijedi tijelo funkcije (engl. function body ). Tijelo funkcije počinje znakom “{“ a završava znakom “}”, odnosno tijelo funkcije uvijek je omeđeno vitičastim zagradama. Kasnije ćemo vidjeti da se vitičaste zagrade koristimo kada god treba objediniti neku skupinu naredbi u jednu kompaktnu cjelinu. U ovom slučaju ta cjelina će biti upravo tijelo funkcije. Pod naredbama podrazumijevamo upute koje govore računaru kakvu akciju treba da preduzme , odnosno naredbe opisuju algoritam. Kao što vidimo, program se ne sastoji samo od naredbi. Na primjer, komentar ili zaglavlje funkcije nisu naredbe, jer ne dovode do nikakve konkretne akcije. Program u našem primjeru je toliko jednostavan da ima samo dvije naredbe, od kojih je druga naredba praktično trivijalna. Analizirajmo stoga jedinu netrivijalnu naredbu u programu, koja glasi: cout << "Zdravo narode!"; “cout“ (skraćenica od engl. console out ) predstavlja objekat tzv. izlaznog toka podataka (engl. output stream ), koji je povezan sa standardnim uređajem za ispis. Standardni uređaj za ispis je tipično ekran, mada ne mora biti (C++ uopće ne podrazumijeva da računar na kojem se program izvršava mora posjedovati ekran). Znak “<<” predstavlja operator umetanja (engl. insertion ) u izlazni tok, koji pojednostavljeno možemo čitati kao “šalji na”. Tekst "Zdravo narode!" koji se nalazi između navodnika, predstavlja niz znakova koji šaljemo na (odnosno umećemo u) izlazni tok. Takav niz znakova nazivamo stringovni literal (ili neimenovana stringovna konstanta ). O stringovnim literalima i stringovima općenito će kasnije biti više govora, a za sada će nam stringovni literali služiti samo za ispis fiksnog teksta na izlazni uređaj. Dakle, gornja naredba može se interpretirati kao:
Veoma je bitno da se na samom početku shvati razlika između objekata kao što su 10 i "10". Objekat 10 je broj i nad njim se mogu vršiti računske operacije poput sabiranja itd. S druge strane, objekat "10" je niz znakova ( stringovni literal ) koji se slučajno sastoji od dvije cifre (1 i 0), i nad njim se ne mogu vršiti nikakve računske operacije (npr. telefonski broj je sigurno sastavljen od cifara, ali teško kome će pasti na pamet da sabira dva telefonska broja zajedno). Ova razlika će biti mnogo jasnija nešto kasnije. Ipak, sa aspekta ispisa ova dva objekta se ponašaju identično, tako da bi isti efekat proizvela i sljedeća naredba: cout << "Broj je " << "10"; ili prosto cout << "Broj je 10"; Stringovni literali mogu sadržavati potpuno proizvoljan niz znakova, tako da je npr. "! ?@ #" sasvim legalan stringovni literal, iako je njegov smisao upitan. Grubo rečeno, može se shvatiti da navodnici označavaju “bukvalno to”, “baš to” itd. Kada god nisu upotrijebljeni navodnici, kompajler za C++ će pokušati da interpretira smisao onog što je napisano prije nego što se izvrši ispis (o čemu će kasnije biti više riječi), dok kada se upotrijebe navodnici, na izlazni uređaj se bukvalno prenosi ono što je napisano između njih. Tako npr. ako napišemo cout << "2+3"; na ekranu ćemo dobiti ispis 2+ dok ako napišemo cout << 2+3; prikaz na ekranu će biti 5 Naravno, naredba poput cout << @#!&&/3++; dovešće do prijave greške od strane kompajlera, jer je kompajler pokušao (bezuspješno) da interpretira smisao napisanih znakova, dok je s druge strane, cout << "@#!&&/3++";
posve legalna naredba. Da bismo ovo još jednom istakli, uzmimo da želimo da ispišemo telefonski broj sa crticom. Moramo pisati cout << "453-728"; a ne nipošto cout << 453-728; jer će u posljednjem slučaju “-” biti shvaćen kao znak za oduzimanje, tako da ćemo umjesto telefonskog broja imati ispisan rezultat oduzimanja (tj. - 275). Ovim još nismo objasnili sve elemente našeg prvog programa. Prvi red programa ne računajući komentar je glasio: #include
Ovaj program proizvodi potpuno isti ispis kao i prethodni program, jer svaka sljedeća naredba za ispis nastavlja sa ispisom tačno od onog mjesta gdje se prethodna naredba za ispis završila. Razmak iza “o” u prvoj naredbi je bitan. Naime, i razmak je dio stringovnog literala , i kao takav biće ispisan na izlazni uređaj. Da smo izostavili taj razmak, tj. da smo glavnu funkciju napisali ovako: int main() { cout << "Zdravo"; cout << "narode!"; return 0; } tada bi ispis na ekran izgledao otprilike ovako: Zdravonarode! Važno je napomenuti da su svuda osim unutar stringova i šiljatih zagrada (<>), dodatni razmaci potpuno nebitni, i kompajler ih ignorira, što omogućava programeru stiliziranje izgleda programa u svrhu poboljšanja njegove čitljivosti. Zapravo, isto vrijedi ne samo za razmake nego i za sve tzv. bjeline (engl. whitespaces ), u koje osim razmaka spadaju tabulatori i oznake za kraj reda. Tako se naredbe koje čine tijelo funkcije obično pišu neznatno uvučeno , da se vizuelno istakne početak i kraj tijela. Razmaci unutar šiljastih zagrada nisu dozvoljeni , tj. sljedeća direktiva je neispravna: #include < iostream > Unutar stringovnih literala mogu se naći i neki specijalni, tzv. kontrolni znakovi. Jedan od najkorisnijih je znak “\n” koji predstavlja znak za “novi red” (kasnije ćemo upoznati i neke druge kontrolne znakove). Tako, ako napišemo cout << "Zdravo\nnarode!"; ispis na ekranu će biti: Zdravo narode! Naravno, mogli smo istu stvar pisati i kao 2 naredbe: cout << "Zdravo\n"; cout << "narode!"; Ovakav način pisanja početnicima obično bude jasniji.
Biblioteka “iostream“ definira objekat nazvan “endl”, koji je u logičkom smislu sinonim za string "\n" (mada u izvedbenom smislu postoje značajne razlike) tako da smo istu naredbu mogli pisati i kao: cout << "Zdravo" << endl << "narode!"; ili je raščlaniti na dvije naredbe kao: cout << "Zdravo" << endl; cout << "narode!"; Važno je napomenuti da stil pisanja programa (razmaci, novi redovi, uvlačenje redova, itd.) ni na koji način ne utiču na njegovo izvršavanje. Novi red ne označava kraj naredbe, nego je kraj naredbe isključivo tamo gdje se nalazi znak tačka-zarez. Tako bi sljedeći program proizveo isti efekat kao i program iz prvog primjera: #include