Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Introduction to C++ Programming: Comments and Output Formatting, Cheat Sheet of Infectiology

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

2022/2023

Uploaded on 12/27/2023

denis-kukuljac
denis-kukuljac 🇺🇸

2 documents

1 / 8

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Željko Jurić: Principi programiranja /kroz programski jezik C++/
1. Osnovna struktura C++ programa
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 <iostream>
using namespace std;
int main()
{
cout << "Zdravo narode!";
return 0;
}
Čak i u ovako kratkom programu, moguće je uočiti nekoliko karakterističnih elemenata:
// Ovaj program ispisuje pozdravnu poruku Komentar
#include <iostream> Zaglavlje standardne biblioteke
using namespace std; Deklaracija standardnog imenika
int main() Zaglavlje funkcije
{
cout << "Zdravo narode!"; Naredba 1 Funkcija
return 0; Naredba 2
}
Znak “// označava komentar. Prilikom prevođenja programa, kompajler potpuno ignorira sve što
je napisano iza znaka za komentar do kraja tekućeg reda. Svrha komentara je da pomogne ljudima koji
analiziraju program da lakše shvate šta program ili njegovi pojedini dijelovi rade. Komentari su obično
kratki. Postoji još jedan način za pisanje komentara, naslijeđen iz jezika C. Sve što se nalazi između
oznaka “/*” i “*/” također se tretira kao komentar. Ovakav način pisanja komentara može biti pogodan
za pisanje komentara koji se protežu u više redova teksta, kao na primjer u sljedećem programu:
/* Ovo je veoma jednostavan C++ program.
On ne radi ništa posebno, osim što ispisuje pozdravnu poruku.
Međutim, od nečeg se mora početi. */
#include <iostream>
using namespace std;
int main()
{
cout << "Zdravo narode!"; // Ispisuje tekst "Zdravo narode!"
return 0; // Vraća 0 operativnom sistemu
}
Glavninu programa sačinjava cjelina nazvana funkcija. Funkcije predstavljaju funkcionalne cjeline
programa koje objedinjavaju skupine naredbi koje su posvećene obavljanju nekog konkretnog zadatka.
Prikazani program ima samo jednu funkciju. Iole složeniji programi gotovo uvijek imaju više funkcija,
jer je veće programe mnogo lakše pisati ukoliko se prethodno razbiju na manje funkcionalne cjeline koje
se kasnije izvode kao različite funkcije. U svakom C++ programu mora postojati tačno jedna funkcija
koja se zovemain”. Ova funkcija se naziva glavna funkcija, i to je ona funkcija koja će se prva početi
izvršavati kada program započne sa radom. U našem primjeru, to je ujedno i jedina funkcija u programu.
Drugim riječima, program uvijek započinje izvršavanje od prve naredbe glavne funkcije.
I – 1
Tijelo funkcije
pf3
pf4
pf5
pf8

Partial preview of the text

Download Introduction to C++ Programming: Comments and Output Formatting and more Cheat Sheet Infectiology in PDF only on Docsity!

1. Osnovna struktura C++ programa

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 using namespace std; int main() { cout << "Zdravo narode!"; return 0; } Čak i u ovako kratkom programu, moguće je uočiti nekoliko karakterističnih elemenata: // Ovaj program ispisuje pozdravnu poruku Komentar #include Zaglavlje standardne biblioteke using namespace std; Deklaracija standardnog imenika int main() Zaglavlje funkcije { cout << "Zdravo narode!"; Naredba 1 Funkcija return 0; Naredba 2 } Znak “//” označava komentar. Prilikom prevođenja programa, kompajler potpuno ignorira sve što je napisano iza znaka za komentar do kraja tekućeg reda. Svrha komentara je da pomogne ljudima koji analiziraju program da lakše shvate šta program ili njegovi pojedini dijelovi rade. Komentari su obično kratki. Postoji još jedan način za pisanje komentara, naslijeđen iz jezika C. Sve što se nalazi između oznaka “/” i “/” također se tretira kao komentar. Ovakav način pisanja komentara može biti pogodan za pisanje komentara koji se protežu u više redova teksta, kao na primjer u sljedećem programu: /* Ovo je veoma jednostavan C++ program. On ne radi ništa posebno, osim što ispisuje pozdravnu poruku. Međutim, od nečeg se mora početi. */ #include using namespace std; int main() { cout << "Zdravo narode!"; // Ispisuje tekst "Zdravo narode!" return 0; // Vraća 0 operativnom sistemu } Glavninu programa sačinjava cjelina nazvana funkcija. Funkcije predstavljaju funkcionalne cjeline programa koje objedinjavaju skupine naredbi koje su posvećene obavljanju nekog konkretnog zadatka. Prikazani program ima samo jednu funkciju. Iole složeniji programi gotovo uvijek imaju više funkcija, jer je veće programe mnogo lakše pisati ukoliko se prethodno razbiju na manje funkcionalne cjeline koje se kasnije izvode kao različite funkcije. U svakom C++ programu mora postojati tačno jedna funkcija koja se zove “main”. Ova funkcija se naziva glavna funkcija , i to je ona funkcija koja će se prva početi izvršavati kada program započne sa radom. U našem primjeru, to je ujedno i jedina funkcija u programu. Drugim riječima, program uvijek započinje izvršavanje od prve naredbe glavne funkcije. Tijelo funkcije

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 Naredba “#include“ predstavlja uputu (tzv. direktivu ) kompajleru da u program uključi tzv. zaglavlje biblioteke (engl. library header ) sa imenom “iostream”. Naime, sve funkcije i objekti u jeziku C++ grupirani su u biblioteke, i na početku svakog programa obavezno se uključuju sve biblioteke koje sadrže funkcije i objekte koje koristimo u programu. Biblioteka “iostream“ (skraćeno od engl. input-output stream ), između ostalog, definira objekat “cout“ koji koristimo za pristup izlaznom toku podataka. Tako, npr. ako pišemo matematički program, na početku programa će također stajati i #include a ako pišemo program koji radi sa grafikom, vjerovatno ćemo imati i nešto poput: #include <graphics.h> Ideja svega ovoga je da se program ne opterećuje bespotrebno objektima i funkcijama koji se neće koristiti unutar programa. Npr. bespotrebno je program opterećivati grafičkim objektima ako program neće koristiti grafiku. Standard ISO C++98 jezika C++ predviđa da se kao sastavni dio jezika C++ obavezno moraju nalaziti sljedeće biblioteke: algorithm bitset cassert cctype cerrno cfloat ciso64 climits clocale cmath complex csetjmp csignal cstdarg cstddef cstdio cstdlib cstring ctime cwchar cwtype deque exception fstream functional iomanip ios iosfwd iostream istream iterator limits list locale map memory new numeric ostream queue set sstream stack stdexcept streambuf string typeinfo utility valarray vector U starijim verzijama kompajlera za C++ sva zaglavlja biblioteka imala su nastavak “.h“ na imenu, tako da se umjesto zaglavlja “iostream“ koristilo zaglavlje “iostream.h”. Novi kompajleri još uvijek podržavaju stara imena zaglavlja, ali njihovo korištenje se ne preporučuje, jer će podrška za stara imena biti izbačena u doglednoj budućnosti. Kompajler ima pravo da upozori programera na to da se upotreba starih zaglavlja ne preporučuje emitiranjem poruke upozorenja. Sve biblioteke čija imena počinju slovom “c” osim “complex“ naslijeđena su iz jezika C, u kojima su imali imena zaglavlja bez početnog slova “c” i sa nastavkom “.h“ (npr. ”math.h” umjesto “cmath”). I u ovom slučaju, stara imena zaglavlja se još uvijek mogu koristiti, ali tu praksu treba izbjegavati.

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 using namespace std; int main(){cout<<"Zdravo narode!"; return 0;} Još gore, isti rezultat bi proizveo i ovakav program: #include using namespace std; int main( ){ cout << "Zdravo narode!" ; return 0 ;} Naravno, radi čitljivosti programa treba paziti na stil pisanja. Treba napomenuti da se stringovi ne smiju prelamati u više redova. Na primjer, nije dozvoljeno pisati: cout << "Zdravo narode!"; Šta će se dogoditi ukoliko napišemo nešto slično, zavisi od konkretnog kompajlera. Neki kompajleri će prijaviti grešku, dok će neki prihvatiti ovakvu naredbu, i smatrati da string sadrži znak za novi red “ \n” na mjestu preloma. Čak i uz pretpostavku da je ovo dozvoljeno u Vašoj verziji kompajlera, ne trebate koristiti tu mogućnost, jer ona nije podržana standardom. Pretprocesorske naredbe se također moraju pisati u jednom redu , tako da nije dozvoljeno pisati: #include Pored toga, pretprocesorske naredbe se, kao što ste već vjerovatno primijetili, ne završavaju tačka-zarezom.