Top Banner
Goran Banjac 1. Uvod u programski jezik C++ 10/28/2010
116
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 01. Uvod u Programski Jezik C

Goran Banjac

1. Uvod u programski jezik C++

10/28/2010

Page 2: 01. Uvod u Programski Jezik C

“C++ is a general-purpose programming language with a bias towards systems programming that: is a better C, supports data abstraction, supports object-oriented programming, and supports generic programming. ”(Bjarne Stroustrup, autor programskog jezika C++)

C++ nije “čisti” objektno-orijentisani programski jezik (OOPL) koji bi korisnika naterao da ga koristi na OO način

Veliki deo jezika C++ je nasleđen iz jezika C, pa C++ predstavlja (uz minimalne izuzetke) nadskup jezika C

Programski jezici 1 2

Page 3: 01. Uvod u Programski Jezik C

MinGW kompajliranje:

▪ g++ -c compile-options file.cpp

linkovanje:▪ g++ -o prog link-options file1.o file2.o ... other-libraries

izvršavanje: ▪ prog arguments

Programski jezici 1 3

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

cout << "Hello, world!" << endl;

return 0;

}

Page 4: 01. Uvod u Programski Jezik C

Linije koje započinju “hash” znakom (#) su pretprocesorske direktive

Nisu iskazi nego indikatori za pretprocesor Obrađuju se pre prevođenja programa Pretprocesorske direktive su: #if, #ifdef, #ifndef, #else, #elif, #endif #include

#define

#undef

#line

#error

#pragma

NULL direktiva Predefinisani macro-i

Programski jezici 1 4

Page 5: 01. Uvod u Programski Jezik C

Kada pretprocesor naiđe na #include direktivu zamenjuje je sadržajem datoteke koja se navodi kao parametar

Dva načina navođenja parametra: #include <nazivdatoteke>

#include “nazivdatoteke”

Razlikuju se po direktorijumima u kojima će kompajler tražiti datoteku

Primeri: #include <iostream>

#include <cmath>

Programski jezici 1 5

Page 6: 01. Uvod u Programski Jezik C

Za definisanje pretprocesorskih macro-a koristi se: #define ime zamena

Primeri: #define PI 3.14159

#define MAX(a,b) ((a)>(b)?(a):(b))

#define REV(T,A,B) { T tmp = A; A = B; B = tmp; }

Programski jezici 1 6

Page 7: 01. Uvod u Programski Jezik C

Programski jezici 1 7

#include <iostream>

#define PI 3.14159

#define MAX(a,b) ((a)>(b)?(a):(b))

#define REV(T,A,B) { T abc = A; A = B; B = abc; }

using namespace std;

int main(int argc, char **argv)

{

int a = 10, b = 20;

cout << PI << " " << MAX(a, b) << endl;

REV(int,a,b)

cout << a << " " << b << endl;

cout << MAX(++a, ++b) << endl;

return 0;

}

Page 8: 01. Uvod u Programski Jezik C

Namespace omoguća grupisanje entiteta (kao što su, na primer, klase, objekti i funkcije) pod nekim imenom

Na ovaj način, globalni opseg može biti podeljen na podopsege

Definisanje: namespace ime

{

entiteti

}

Za pristup elementima nekog namespace-a koristi se operator ::

Programski jezici 1 8

Page 9: 01. Uvod u Programski Jezik C

Svi entiteti u C++ standardnoj biblioteci su deklarisani u okviru std namespace-a

Programski jezici 1 9

#include <iostream>

namespace myNamespace

{

int x = 11;

double y = 12.25;

}

int main(int argc, char **argv)

{

std::cout << myNamespace::x << " " << myNamespace::y << std::endl;

return 0;

}

Page 10: 01. Uvod u Programski Jezik C

Ključna reč using se koristi da se uvede ime iz nekog namespace-a u trenutni deklarativni region

Programski jezici 1 10

#include <iostream>

using namespace std;

namespace firstNamespace

{

int x = 11, y = 12;

}

namespace secondNamespace

{

int x = 21, y = 22;

}

int main(int argc, char **argv)

{

using firstNamespace::x;

using secondNamespace::y;

cout << x << " " << y;

return 0;

}

Page 11: 01. Uvod u Programski Jezik C

Programski jezici 1 11

C++ Library Headers

<algorithm> <iomanip> <list> <ostream> <streambuf>

<bitset> <ios> <locale> <queue> <string>

<complex> <iosfwd> <map> <set> <typeinfo>

<deque> <iostream> <memory> <sstream> <utility>

<exception> <istream> <new> <stack> <valarray>

<fstream> <iterator> <numeric> <stdexcept> <vector>

<functional> <limits>

C++ Headers for C Library Facilities

<cassert> <ciso646> <csetjmp> <cstdio> <ctime>

<cctype> <climits> <csignal> <cstdlib> <cwchar>

<cerrno> <clocale> <cstdarg> <cstring> <cwctype>

<cfloat> <cmath> <cstddef>

Page 12: 01. Uvod u Programski Jezik C

C++ standardna biblioteka uključuje header datoteku <iostream> gde su deklarisani standardni ulazni i izlazni objekti za rad sa tokovima (eng. stream – dugački niz bajtova)

Podrazumevani standarni izlaz programa je ekran, a objekat za rad sa izlaznim tokom koji pristupa standarndnom izlazu je cout

Standardni ulazni uređaj je obično tastatura, objekat za rad sa ulaznim tokom je cin

Programski jezici 1 12

Page 13: 01. Uvod u Programski Jezik C

Primeri: cout << “Hello, world!”;

cout << “Hello, ” << “world!”;

cout << “Hello, ”;

cout << “world!”;

cout << 350;

cout << hello;

cout << “Hello, world!\n”;

cout << “Hello, world!” << endl;

int a;

cin >> a;

int a, b;

cin >> a >> b;

Programski jezici 1 13

Page 14: 01. Uvod u Programski Jezik C

Programski jezici 1 14

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

int a;

cout << "Hello, world!\n";

cout << "Hello" << "," << " " << "world" << "!" << "\n";

cout << "Hello" << "," << " " << "world" << "!" << endl;

cout << "Hello";

cout << ",";

cout << " ";

cout << "world";

cout << "!";

cout << endl;

cin >> a;

cout << "Echo: " << a;

return 0;

}

Page 15: 01. Uvod u Programski Jezik C

Formiraju se od slova, cifara i znaka “_” (eng. underscore) ne mogu započinjati cifrom case-sensitive ključne reči (npr. new, int) se ne mogu koristiti kao identifikatori

Preporučuje se da se kod izbora naziva identifikatora vodi računa o tome šta taj identifikator označava, pa da mu se u skladu s tim da odgovarajući naziv

Primeri validnih identifikatora: value

_abc

abC

ABC

var10

hello_world

Primeri nevalidnih identifikatora: 10var

else

int

new

ab.c

Programski jezici 1 15

Page 16: 01. Uvod u Programski Jezik C

Opseg vidljivosti identifikatora je blok u kojem je deklarisan, kao i u svim ugnježdenim podblokovima, osim ako u njima nije maskiran drugim identifikatorom istog imena

U istom bloku ne može se više puta deklarisati isti identifikator

Programski jezici 1 16

Page 17: 01. Uvod u Programski Jezik C

Promenljiva je simboličko ime za neku memorijsku lokaciju

Svaka promenljiva ima naziv, tip i vrednost Svaka promenljiva mora biti deklarisana pre nego što bude

upotrebljenja Deklaracijom se specificira njen tip i naziv Promenjiva može biti inicijalizovana prilikom deklaracije Tip promenljive se ne može menjati tokom izvršavanja

programa (može da se menja samo vrednost) Primeri: int a, b = 10, c;

double pi = 3.14;

char neg = „-‟, s;

Programski jezici 1 17

Page 18: 01. Uvod u Programski Jezik C

Konstante odgovarajućeg tipa se mogu definisati korištenjem const prefiksa

Definisanoj konstanti nije moguće promeniti vrednost

Primer: const double PI = 3.14;

Programski jezici 1 18

Page 19: 01. Uvod u Programski Jezik C

U C++ postoje dve vrste komentara:

jednolinijski – započinje sa dve kose crte i završava krajem linije

višelinijski – započinje parom simbola /* izavršava sa parom simbola */

Primeri: // ovo je jednolinijski komentar

/* Ovo je

viselinijski

komentar */

Programski jezici 1 19

Page 20: 01. Uvod u Programski Jezik C

Ugrađeni tipovi podataka u C++ se dele na: logičke (bool) znakovne (npr. char) celobrojne (npr. int) realne (npr. double)

Postoji i: tip koji se koristi da označi nedostatak informacija (void)

Dodatno, korisnik može definisati: prebrojive tipove podataka za predstavljanje specifičnog skupa

vrednosti (enum) Iz navedenih tipova moguće je konstruisati druge tipove: pokazivače (npr. double*) nizove (npr. int[]) reference (npr. char&) strukture podataka i klase

Programski jezici 1 20

Page 21: 01. Uvod u Programski Jezik C

Logički tip podataka - bool Koristi da se iskaže rezultat logičkih operacija Može imati dve vrednosti: true i false true ima celobrojnu vrednost 1, false 0 Celobrojni podaci se mogu konvertovati u

logičke:

0 se konvertuje u false

sve osim 0 se konvertuje u true

Programski jezici 1 21

Page 22: 01. Uvod u Programski Jezik C

Programski jezici 1 22

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

bool t1 = true, f1 = false, t2 = 350, f2 = 0;

int a = true, b = false, c = 350;

bool rez1 = t1+f1, rez2 = f1+f2, rez3 = a+c;

int rez4 = t1+f1, rez5 = f1+f2, rez6 = a+c;

cout << t1 << " " << f1 << " " << t2 << " " << f2 << endl;

cout << a << " " << b << " " << c << endl;

cout << rez1 << " " << rez2 << " " << rez3 << endl;

cout << rez4 << " " << rez5 << " " << rez6 << endl;

return 0;

}

Page 23: 01. Uvod u Programski Jezik C

Znakovni tipovi podataka su: char

signed char

unsigned char

wchar_t

Varijable tipa char se koriste za smeštanje karaktera iz osnovnog skupa karaktera implementacije (npr. ASCII), a wchar_t za smeštanje karaktera iz većeg skupa karaktera (npr. Unicode)

Svaka znakovna konstanta ima celobrojnu vrednost Implementacijom je definisano da li je char označena ili neoznačena

vrednost Literali tipa char se navode pod jednostrukim navodnicima Primeri:

char a = „a‟;

char b = „0‟;

char c = „\n‟;

char d = 0x40;

Programski jezici 1 23

Page 24: 01. Uvod u Programski Jezik C

‘a’: 6016 + 116 = 6116 = 97 ‘B’: 4016 + 216 = 4216 = 66

Programski jezici 1 24

0 1 2 3 4 5 6 7 8 9 A B C D E F

00 NULL BELL BS HT LF VT FF CR

10 CAN ESC

20 SPC ! “ # $ % & ‘ ( ) * + , - . /

30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

40 @ A B C D E F G H I J K L M N O

50 P Q R S T U V W X Y Z [ \ ] ^ _

60 ` a b c d e f g h i j k l m n o

70 p q r s t u v w x y z { | } ~ DEL

Page 25: 01. Uvod u Programski Jezik C

Name ASCII Name C++ Name

New line NL (LF) \n

Horizontal tab HT \t

Vertical tab VT \v

Backspace BS \b

Carriage return CR \r

Form feed FF \f

Alert BEL \a

Backslash \ \\

Question mark ? \?

Single quote ' \'

Double quote " \"

Octal number ooo \ooo

Hexadecimal number hh \xhh

Programski jezici 1 25

Page 26: 01. Uvod u Programski Jezik C

Programski jezici 1 26

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

char a = 'a';

char b = 'B';

char c = 48;

cout << a << " " << int(a) << '\n';

cout << b << " " << int(b) << '\n';

cout << c << " " << char(48) << '\n';

cout << int('\n') << '\n';

return 0;

}

Page 27: 01. Uvod u Programski Jezik C

Celobrojni tipovi podataka su: int

signed int

unsigned int

Veličine celobrojnih tipova podataka: short int (short) int

long int (long) long long int (long long)

Celobrojni tipovi podataka su, podrazumevano, signed Upotreba unsigned tipa umesto int tipa u cilju dobijanja jednog bit-a

više za predstavljanje pozitivnih celobrojnih podataka nije dobra ideja Takođe, upotreba unsigned tipa ne znači da neki podatak ne može biti

negativan (zbog implicitne konverzije) usigned tipovi su idelni za upotrebu kada se prostor posmatra kao niz

bit-a

Programski jezici 1 27

Page 28: 01. Uvod u Programski Jezik C

Literali celobrojnih tipova podataka mogu biti: decimalni (0, 78, 123) oktalni (0, 0116, 0173) – prefiks kod oktalnih literala je 0 heksadecimalni (0x0, 0x4e, 0x7B) – prefiks kod heksadecimalnih literala je

0x

Kod celobrojnih literala moguće je koristiti i sufikse za specifikaciju tipa: celobrojni literal bez sufiksa je, podrazumevano, tipa int unsigned literal se specificira korištenjem sufiksa u ili U long literal se specificira korištenjem sufiksa l ili L long long literal se specificira korištenjem sufiksa ll ili LL

Primeri: 123

123u

123l

123ul

Programski jezici 1 28

Page 29: 01. Uvod u Programski Jezik C

Programski jezici 1 29

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

unsigned int a = 65535u;

int b = 123, c = 0173, d = 0x7B, e = -654;

unsigned long ul = 9876543ul;

short f = a;

cout << a << endl;

cout << b << " " << c << " " << d << " " << e << endl;

cout << ul << endl;

cout << f << endl;

return 0;

}

Page 30: 01. Uvod u Programski Jezik C

Realni tipovi podataka služe za predstavljanje brojeva u pokretnom zarezu

Tri veličine realnih tipova podataka: float (single-precision) double (double-precision) long double (extended-precision)

Literali: podrazumevani literal za predstavljanje realnih podataka je tipa double float literal se specificira korištenjem sufiksa f ili F long double literal se specificira korištenjem sufiksa l ili L

Primeri: 1.23

.23f

1.

1.23e2

123e-2

Programski jezici 1 30

Page 31: 01. Uvod u Programski Jezik C

Programski jezici 1 31

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

float a = 1.23, b = 1., c = .23, d = 1.23e2f;

double e = 1.23456;

cout << a << " " << b << " " << c << " " << d << endl;

cout << e << endl;

cout << 1/2 << " " << 1/2.f << " " << 1/2. << endl;

return 0;

}

Page 32: 01. Uvod u Programski Jezik C

Standardom nisu definisane veličine ugrađenih tipova podataka <limits>, <climits> i <cfloat> pružaju detalje o

implementaciji ugrađenih tipova podataka Takođe, veličina nekog objekta ili nekog tipa podatka se može

dobiti korištenjem operatora sizeof Ono što je garantovano, kada su veličine ugrađenih tipova u

pitanju, je sledeće: char ima najmanje 8 bit-a shortint ima najmanje 16 bit-a long int ima najmanje 32 bit-a 1 ≡ sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long

long) sizeof(float) ≤ sizeof(double) ≤ sizeof (long double) sizeof (N) ≡ sizeof (signedN) ≡ sizeof (unsignedN)

▪ N može biti char, short int, int ili long int

Programski jezici 1 32

Page 33: 01. Uvod u Programski Jezik C

Primer:

Programski jezici 1 33

Tip Veličina

char 1 byte

wchar_t 2 byte-a

short int 2 byte-a

int 4 byte-a

long int 4 byte-a

long long int 8 byte-ova

bool 1 byte

float 4 byte-a

double 8 byte-ova

long double 12 byte-ova

Page 34: 01. Uvod u Programski Jezik C

Programski jezici 1 34

#include <iostream>

#include <limits>

using namespace std;

int main(int argc, char **argv)

{

cout << "sizeof(char) = " << sizeof(char) << endl;

cout << "char digits = " << numeric_limits<char>::digits << endl;

cout << "char is_signed = " << numeric_limits<char>::is_signed << endl;

cout << "int max = " << numeric_limits<int>::max() << endl;

cout << "int min = " << numeric_limits<int>::min() << endl;

cout << "float has_denorm = " << numeric_limits<float>::has_denorm << endl;

return 0;

}

Page 35: 01. Uvod u Programski Jezik C

Tip void se koristi kao:

povratni tip za funkcije koje nemaju povratne vrednosti

pokazivač na objekat nekog tipa

Ne postoje objekti void tipa

void val; //greska

Programski jezici 1 35

Page 36: 01. Uvod u Programski Jezik C

enum je tip koji može sadržavati skup vrednosti specificiranih od strane korisnika

Definisanje: enum ime { lista-enumeratora };

Programski jezici 1 36

#include <iostream>

using namespace std;

enum Week { Mon, Tue = 2, Wed, Thu = Tue+Wed, Fri, Sat, Sun = 10 };

int main(int argc, char **argv)

{

cout << Mon << " " << Tue << " " << Wed << " " << Thu << " ";

cout << Fri << " " << Sat << " " << Sun << endl;

return 0;

}

Page 37: 01. Uvod u Programski Jezik C

Pokazivač je promenljiva koja sadrži adresu nekog objekta Ako promenljiva pa sadrži adresu nekog objekta a, tada

“pa pokazuje na a” Operatori za rad sa pokazivačima: adresni operator: & (daje adresu nekog objekta u memoriji) operator indirekcije: * (omogućava indirektan pristup

promenljivoj koristeći pokazivač na tu promenljivu) Deklaracija pokazivača: T *ime;

Pošto niti jedan objekat ne može biti alociran sa adresom 0, 0 se ponaša kao pokazivački literal koji označava da pokazivač ne pokazuje na objekat

Programski jezici 1 37

Page 38: 01. Uvod u Programski Jezik C

Programski jezici 1 38

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

char c = 'a';

char *pc = &c;

char **ppc = &pc;

char c2 = *pc;

char c3 = **ppc;

cout << c << " " << c2 << " " << c3 << endl;

return 0;

}

‘a’c:

&cpc:

&pcppc:

Page 39: 01. Uvod u Programski Jezik C

Korištenjem operatora new moguće je dinamički alocirati potrebnu količinu memorije na heap-u

Sintaksa: new tip

new tip(args)

new tip[broj-elemenata]

Operator new vraća pokazivač na dodeljeni prostor, a tip pokazivača je tip *

Za oslobađanje dinamički zauzete memorije koristi se operator delete

Sintaksa: delete pokazivac;

delete [] pokazivac;

Programski jezici 1 39

Page 40: 01. Uvod u Programski Jezik C

Programski jezici 1 40

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

int *pi = 0;

char *pc = 0;

pi = new int;

*pi = 10;

pc = new char('a');

cout << *pi << " " << *pc;

delete pi;

delete pc;

return 0;

}

Page 41: 01. Uvod u Programski Jezik C

Referenca je alternativno ime za neki objekat Ne zauzima prostor u memoriji i ne može da se

dobije njegova adresa Mora da se inicijalizuje prilikom definisanja

(mora da upućuje na neki stvarni objekat) Sve operacije deluju na stvarne podatke, a ne na

reference Glavna primena referenci je prenos argumenata

u funkciju Primer: int a = 10;

int &ra = a;

Programski jezici 1 41

Page 42: 01. Uvod u Programski Jezik C

Programski jezici 1 42

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

int a = 10;

int &ra = a;

cout << a << " " << ra << endl;

ra++;

cout << a << " " << ra << endl;

int b = ra;

cout << b << endl;

b = 15;

cout << a << " " << ra << " " << b << endl;

a = 20;

cout << a << " " << ra << " " << b << endl;

return 0;

}

Page 43: 01. Uvod u Programski Jezik C

Aritmetički operatori: + (sabiranje), - (oduzimanje), *(množenje), / (deljenje) i % (moduo), ++ (inkrement) i --(dekrement)

Relacioni operatori: < (manje), > (veće), <= (manje ili jednako), >= (veće ili jednako), == (jednako) i != (različito)

Logički operatori: && (AND), || (OR) i ! (NOT) Bitski operatori: & (bitsko AND), | (bitsko OR), ~ (bitsko

NOT), ^ (bitsko XOR) Operatori pomeranja: << (pomeranje bita u levo), >>

(pomeranje bita u desno) Operator dodele vrednosti: = Složeni operatori dodele: +=, -=, *=, /=, %=, >>=, <<=, &=, |=, ^=

Programski jezici 1 43

Page 44: 01. Uvod u Programski Jezik C

Uslovni (ternarni) operator: uslov ? izraz1 : izraz2

Primer: a = (b == 0) ? 0 : 1;

Inkrement i dekrement: i++ ≡ ++i ≡ i = i + 1

i-- ≡ --i ≡ i = i – 1

Primer: i = 10;

j = (i++) + 10;

// i = 11, j = 20

i = 10;

j = (++i) + 10;

// i = 11, j = 21

Programski jezici 1 44

Page 45: 01. Uvod u Programski Jezik C

Prioriteti operatora i pravila asocijativnosti definišu kako će izraz biti izračunat kada se u njemu javlja više operatora

Primer izraza, bez zagrada i sa zagradama, koji se identično izračunavaju: x + y * z

x + (y * z)

Ako operatori imaju isti prioritet, onda se redosled operacija određuje na osnovu pravila asocijativnosti: x * y / z

(x * y) / z

Programski jezici 1 45

Page 46: 01. Uvod u Programski Jezik C

Programski jezici 1 46

Prioritet Operatori Asocijativnost

Najviši :: →

[] () {} . -> ++ --

typeid→

++ -- sizeof new delete

~ ! - + & * (type)←

.* ->* →

* / % →

+ - →

<< >> →

< <= > >= →

== != →

& →

^ →

| →

&& →

|| →

?: ←

= *= /= %= += -= >>=

<<= &= |= ^=←

Najniži , →

Page 47: 01. Uvod u Programski Jezik C

Programski jezici 1 47

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

short a = 0x9B, r1, r2, r3, r4, r5;

r1 = a & 0xA;

r2 = a | 0xA;

r3 = a ^ 0xA;

r4 = ~a;

r5 = -0x9B;

int b = 3, c = -8, d, e, f;

d = b << 2;

e = b >> 1;

f = c >> 2;

int p1 = 10, p2, p3;

p2 = 10 + 5/2*p1;

p3 = 10 + 5/2.*p1;

double p4 = 10 + 5/2*p1, p5 = 10 + (double)5/2*p1;

cout << r1 << " " << r2 << " " << r3 << " " << r4 << " " << r5 << endl;

cout << d << " " << e << " " << f << endl;

cout << p2 << " " << p3 << " " << p4 << " " << p5 << endl;

return 0;

}

Page 48: 01. Uvod u Programski Jezik C

Programski jezici 1 48

#include <iostream>

using namespace std;

int x;

int main(int argc, char **argv)

{

int a = 1;

cout << x << endl;

int x = 20;

cout << x << " " << ::x << endl;

{

int a = 2;

cout << a << " ";

a = x == 0 ? 10 : 20;

cout << a << endl;

}

cout << a << endl;

return 0;

}

Page 49: 01. Uvod u Programski Jezik C

Postoje 4 osnovne kategorije naredbi za kontrolu toka:

naredbe uslovnog grananja: if, if else i switch

naredbe petlji: while, do while i for

naredbe za nasilnu promenu toka: break, continue i return

naredbe za rad sa izuzecima: try catch i throw

Programski jezici 1 49

Page 50: 01. Uvod u Programski Jezik C

Koristi se kada se treba odlučiti da li će se neki iskaz/složeni iskaz izvršiti u zavisnosti od ispunjenosti određenog uslova

Sintaksa: if (uslov)

iskaz ili slozeni-iskaz

Primeri: if (a > 0)

cout << “Broj je pozitivan.”;

if (a > 0)

{

cout << “Broj je pozitivan.”;

}

Programski jezici 1 50

Page 51: 01. Uvod u Programski Jezik C

Koristi se kad je potrebno odlučiti koji će se iskaz/složeni iskaz od dva izvršiti u zavisnosti od ispunjenosti nekog uslova

Sintaksa: if (uslov)

iskaz1 ili slozeni-iskaz1

else

iskaz2 ili slozeni-iskaz2

Primer: if (a > 0)

cout << “Broj je pozitivan.”;

else

cout << “Broj nije pozitivan.”;

Programski jezici 1 51

Page 52: 01. Uvod u Programski Jezik C

if else naredbe je moguće ugnježdavati gde se naredna if else naredba povezuje sa prethodnom else klauzulom

Na taj način se dobija kaskada if elsenaredbi

Primer: if (a > 0)

cout << “Broj je pozitivan.”;

else if (a < 0)

cout << “Broj je negativan.”;

else

cout << “Broj je jednak 0.”;

Programski jezici 1 52

Page 53: 01. Uvod u Programski Jezik C

Omogućava realizaciju selektivnog višeblokovskog grananja

Sintaksa: switch (selektorski-izraz)

{

case labela1: niz-iskaza1

case labela2: niz-iskaza2

case labelan: niz-iskazan

default: niz-iskaza

}

switch izraz mora da proizvede celobrojnu vrednost Ako se želi izlaz iz naredbe kada se završi odgovarajući case, treba koristiti naredbu break (inače će propasti u sledeći case)

Programski jezici 1 53

Page 54: 01. Uvod u Programski Jezik C

Primer: switch (number)

{

case 1:

cout << “Jedan”;

break;

case 2:

cout << “Dva”;

break;

case 3:

cout << “Tri”;

break;

default:

cout << “Nepoznat broj”;

}

Programski jezici 1 54

Page 55: 01. Uvod u Programski Jezik C

Sintaksa: while (uslov-izvrsavanja-petlje)

telo-petlje

Uslov izvršavanja while petlje izvršava se pre izvršavanja tela petlje

Ukoliko je uslov izvršavanja petlje nije istinit pri prvom testiranju, telo petlje se neće izvršiti niti jednom

Programski jezici 1 55

Page 56: 01. Uvod u Programski Jezik C

Primer: int i = 1, suma = 0;

while (i < 100)

{

suma += i;

i++;

}

Programski jezici 1 56

Page 57: 01. Uvod u Programski Jezik C

Sintaksa: do

telo-petlje

while (uslov-izvrsavanja-petlje);

Uslov izvršavanja petlje se izračunava nakon izvršavanja tela petlje

Telo do while petlje se uvek izvršava bar jedanput, tj. telo do while petlje se može izvršiti jednom ili više puta

Programski jezici 1 57

Page 58: 01. Uvod u Programski Jezik C

Primer: int i = 1, suma = 0;

do

{

suma += i;

i++;

}

while (i < 100);

Programski jezici 1 58

Page 59: 01. Uvod u Programski Jezik C

Sintaksa: for (inicijalizacija; uslov-izvrsavanja-petlje; izraz-

za-inkrementiranje)

telo-petlje

for petlja se sastoji iz zaglavlja i tela petlje Zaglavlje for petlje čine tri sekcije: sekcija za inicijalizaciju

sekcija za testiranje uslova izvršavanja petlje

sekcija u kojoj se nalazi izraz za inkrementiranje Inicijalizacija podrazumeva deklaraciju i inicijalizaiciju

promenljive koja kontroliše telo petlje i izvršava se samo jednom (prilikom ulaska u petlju)

Programski jezici 1 59

Page 60: 01. Uvod u Programski Jezik C

Ako je uslov izvršavanja petlje istinit izvršava se telo petlje U suprotnom, telo petlje se ne izvršava Nakon svake iteracije izvršava se izraz za inkrementiranje Nakon toga proverava se uslov izvršavanja petlje Opseg vidljivosti promenljivih koje su deklarisane za

vreme inicijalizacije for petlje je određen blokom forpetlje, tako da ove promenljive nisu dostupne nakon završetka for petlje

Za vreme inicijalizacije moguće je deklarisati više promenljivih, odvojenih zarezom

Sve sekcije u for petlji su opcione Izostavljanje sekcije za proveru uslova izvršavanja petlje

označava da je uslov uvek istinit

Programski jezici 1 60

Page 61: 01. Uvod u Programski Jezik C

Primeri: int suma = 0;

for (int i = 0; i < 100; i++)

{

suma += i;

}

for (int i = 0, j = 1; i < 10 && j != 15;

i++, j *= 2)

cout << i + j << “ ”;

for ( ; ; )

;

Programski jezici 1 61

Page 62: 01. Uvod u Programski Jezik C

break naredba: prekida naredbu petlje i prelazi na prvi iskaz iza naredbe

petlje

prekida naredbu switch i prelazi na prvi iskaz iza naredbe switch

continue naredba: prekida naredbu petlje i otpočinje sledeću iteraciju petlje

return naredba: izlazak iz funkcije

▪ prekida izvršavanje funkcije (svi iskazi iza return se ignorišu)

▪ prekid programa (iz funkcije main)

omogućava da funkcija vrati neku vrednost

Programski jezici 1 62

Page 63: 01. Uvod u Programski Jezik C

Programski jezici 1 63

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

for (int i = 0 ; i < 100; i++)

{

if (i == 75)

break;

if (i % 10 == 0)

continue;

cout << i << " ";

};

return 0;

}

Page 64: 01. Uvod u Programski Jezik C

Nizovi

jednodimenzionalni

višedimenzionalni

Strukture Unije

Programski jezici 1 64

Page 65: 01. Uvod u Programski Jezik C

Najjednostavniji način da se napravi složeniji tip podatka (u odnosu na ugrađene tipove) jeste davanje alternativnih imena (alijasa) drugim imenima pomoću ključne reči typedef

Sintaksa: typedef postojeci-tip alijas

Primer: typedef unsigned long ulong

ulong a, b;

Programski jezici 1 65

Page 66: 01. Uvod u Programski Jezik C

Niz ili vektor je jednodimenzionalno polje Skup podataka istog tipa U memoriji se smešta u niz uzastopnih

memorijskih lokacija Ime niza predstavlja početnu adresu niza u

memoriji Svaki element je određen imenom niza i

indeksom (pomerajem u odnosu na početak niza) ako niz ima n elemenata prvi element niza ima indeks 0, a poslednji n-1

Programski jezici 1 66

Page 67: 01. Uvod u Programski Jezik C

Deklaracija niza: tip ime-niza [broj-elemenata] = { lista-vrednosti }

Primeri: int niz[5];

char text[255];

int niz1[3] = {1, 2, 3}; // 1, 2, 3

int niz2[] = {1, 2, 3}; // 1, 2, 3

int niz3[3] = {10}; // 10, 0, 0

niz3[1] = 5; // 10, 5, 0

niz3[2] = niz3[0] + niz3[1]; // 10, 5, 15

int niz[3] = {1, 2, 3, 4}; // greska

int niz[]; // greska

Programski jezici 1 67

Page 68: 01. Uvod u Programski Jezik C

Programski jezici 1 68

#include <iostream>

using namespace std;

const int MAX_SIZE = 10;

int main(int argc, char **argv)

{

int n, sum = 0, a[MAX_SIZE];

double avg;

do

{

cout << "Unesite broj elemenata niza: ";

cin >> n;

}

while (n < 1 || n > 10);

for (int i = 0; i < n; i++)

{

cout << i+1 << ". element: ";

cin >> a[i];

sum += a[i];

}

avg = double(sum)/n;

cout << endl;

cout << "Aritmeticka sredina: " << avg << endl;

for (int i = 0; i < n; i++)

if (a[i] > avg)

cout << a[i] << " ";

return 0;

}

Page 69: 01. Uvod u Programski Jezik C

Elementni niza mogu biti drugi nizovi; na taj način se dobijaju višedimenzionalni nizovi

Primeri: int mat[2][3];

int mat[2][3] = {{1, 2, 3}, {4, 5, 6}}; // mat[0][1] == 2

▪ // 1, 2, 3 | 4, 5, 6

int mat[2][3] = {{1, 2, 3}};

▪ // 1, 2, 3 | 0, 0, 0

int mat[2][3] = {1, 2, 3, 4, 5, 6};

▪ // 1, 2, 3 | 4, 5, 6

int mat[][3] = {{1, 2, 3}, {4, 5, 6}};

▪ // 1, 2, 3 | 4, 5, 6

int mat[][3] = {1, 2, 3, 4, 5, 6, 7};

▪ // 1, 2, 3 | 4, 5, 6 | 7, 0, 0

int mat[][3] = {{1, 2}, {3, 4, 5}, {6}, {7}};

▪ // 1, 2, 0 | 3, 4, 5 | 6, 0, 0 | 7, 0, 0

int mat[][3]; //greska

int mat[2][] = {{1, 2, 3}, {4, 5, 6}}; //greska

int a[3][4][5];

int a[][7][8]; //greska

int b[3][3][3][3];

Programski jezici 1 69

Page 70: 01. Uvod u Programski Jezik C

Programski jezici 1 70

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

int mat1[][3] = {{1}, {0, 1}, {0, 0, 1}};

int mat2[3][2] = {{1, 2}, {3, 4}, {5, 6}};

int mat3[3][2] = {0};

for (int i = 0; i < 3; i++)

for (int j = 0; j < 2; j++)

for (int k = 0; k < 3; k++)

mat3[i][j] += mat1[i][k] * mat2[k][j];

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 2; j++)

cout << mat3[i][j] << " ";

cout << endl;

}

return 0;

}

Page 71: 01. Uvod u Programski Jezik C

Ime jednodimenzionalnog niza predstavlja adresu početnog elementa niza i samo po sebi je pokazivač (statički pokazivač)

Primeri: int a[10] = {0};

int *p = a; // int *p = &a[0];

int *q = &a[4]; //

*p = 10; // a[0] = 10;

*(p+1) = 20; // a[1] = 20;

p++; // p = &a[1];

*(p-1) = 30; // a[0] = 30;

*q++ = 10; // a[4] = 10; q = &a[5];

(*q)++; // a[5]++;

*++q = 40; // a[6] = 40;

a[3] = q – p; // a[3] = 5;

int a[2][3] = {0};

int *p = &a[0][0]; //int *p = a[0];

*(p + 3*i + j) = 10; // a[i][j] = 10;

Programski jezici 1 71

Page 72: 01. Uvod u Programski Jezik C

Programski jezici 1 72

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

int a[10] = {0};

int *p = a;

int *q = &a[4];

*p = 10;

*(p+1) = 20;

p++;

*(p-1) = 30;

for (int i = 0; i < 10; i++)

cout << *(p+i-1) << " ";

cout << endl;

*q++ = 10;

(*q)++;

*++q = 40;

a[3] = q - p;

for (int i = 0; i < 10; i++)

cout << a[i] << " ";

return 0;

}

Page 73: 01. Uvod u Programski Jezik C

Programski jezici 1 73

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

int a[2][3] = {0};

int *p = &a[0][2];

*p = 1;

p++;

*p = 2;

*(p+1) = 3;

for (int i = 0; i < 2; i++)

{

for (int j = 0; j < 3; j++)

cout << a[i][j] << " ";

cout << endl;

}

p = a[0];

for (int i = 0; i < 2; i++)

{

for (int j = 0; j < 3; j++)

cout << *(p + 3*i + j) << " ";

cout << endl;

}

return 0;

}

Page 74: 01. Uvod u Programski Jezik C

Programski jezici 1 74

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

int n, *parray = 0;

do

{

cout << "Unesite broj elemenata niza: ";

cin >> n;

}

while (n < 1 || n > 100);

parray = new int[n];

for (int i = 0; i < n; i++)

{

cout << i+1 << ". element: ";

cin >> *(parray + i);

}

for (int i = n - 1; i > -1; i--)

cout << *(parray + i) << " ";

delete [] parray;

return 0;

}

Page 75: 01. Uvod u Programski Jezik C

String je jednodimenzionalni niz znakova koji završava null-znakom („\0‟) – znak čiji je kod 0

String literal je niz znakova koji se navodi pod dvostrukim navodnicima “Ovo je string literal”

Primeri: char c1[] = “Hello”;

char c2[] = {„H‟, „e‟, „l‟, „l‟, „o‟, „\0‟};

char c3[] = "a\xd\0127"

Programski jezici 1 75

Page 76: 01. Uvod u Programski Jezik C

Programski jezici 1 76

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

char str[] = "Banja Luka";

char *p = str;

int i;

for (i = 0; *(p + i); i++)

;

cout << "strlen (\"" << str << "\"): " << i;

return 0;

}

Page 77: 01. Uvod u Programski Jezik C

Struktura je skup heterogenih podataka koji su međusobno logički povezani

Deklaracija: struct ime-strukture

{

tip1 element1;

tip2 element2;

tipn elementn;

} lista-promenljivih;

Primer: struct point

{

double x, y;

} var1, var2, varArray[100], *pvar;

Programski jezici 1 77

Page 78: 01. Uvod u Programski Jezik C

Alternativni oblik deklaracije: struct ime-strukture

{

tip1 element1;

tip2 element2;

tipn elementn;

};

ime-strukture lista-promenljivih;

Primer: struct point

{

double x, y;

};

point var1, var2, varArray[100], *pvar;

Programski jezici 1 78

Page 79: 01. Uvod u Programski Jezik C

U slučaju da u istom bloku postoji podatak prostog tipa i stuktura sa istim imenom tada se mora koristiti ključna reč struct

Primer: struct point

{

double x, y;

};

int point = 10;

struct point a;

Programski jezici 1 79

Page 80: 01. Uvod u Programski Jezik C

Elementima strukture se pristupa pomoću operatora . Primer:

struct point

{

double x, y;

};

point var, varray[5];

var.x = 10.0;

var.y = 20.0;

varray[0].x = 15.5;

varray[0].y = 100;

U slučaju da imamo definisan pokazivač na strukturu, tada se elementima strukture može pristupiti pomoću operatora ->

Primer: struct point

{

double x, y;

};

point var, *pvar = &var;

pvar->x = 10.0; // (*pvar).x = 10.0;

pvar->y = 20.0; // (*pvar).y = 20.0;

Programski jezici 1 80

Page 81: 01. Uvod u Programski Jezik C

Element strukture može da bude neka druga struktura Primer: struct point

{

double x, y;

};

struct line

{

point a, b;

};

line l;

l.a.x = 10.0;

l.a.b = 20.0;

Programski jezici 1 81

Page 82: 01. Uvod u Programski Jezik C

Element strukture može da bude i pokazivač Primer: struct point

{

double *x, *y;

};

double a = 10.0, b = 20.0;

point p, *pp = &p;

p.x = &a;

pp->y = &b;

*p.x = 15.0;

*pp->y = 25.0;

Programski jezici 1 82

Page 83: 01. Uvod u Programski Jezik C

Programski jezici 1 83

#include <iostream>

#include <cmath>

using namespace std;

struct point

{

double x, y;

};

struct line

{

point a, b;

};

int main(int argc, char **argv)

{

point p = {3.0, 4.0};

line l;

l.a = p;

l.b.x = 0.0;

l.b.y = 0.0;

double len = sqrt((l.a.x-l.b.x)*(l.a.x-l.b.x) + (l.a.y-l.b.y)*(l.a.y-l.b.y));

cout << len;

return 0;

}

Page 84: 01. Uvod u Programski Jezik C

Programski jezici 1 84

#include <iostream>

using namespace std;

struct point

{

double *x, *y;

};

int main(int argc, char **argv)

{

double xx, yy;

point p, *pp = &p;

p.x = &xx;

*p.x = 10.0;

pp->y = &yy;

*pp->y = 20.0;

cout << xx << " " << yy;

return 0;

}

Page 85: 01. Uvod u Programski Jezik C

Kombinovanjem pokazivača na strukturu i strukture sa pokazivačem možemo da dobijemo strukturu sa pokazivačem na istu strukturu tj. imamo povezane strukture

Primer (jednostruko povezana lista): struct node

{

int data;

node *next;

};

node *head = new node;

head->data = 10;

head->next = 0;

node *second = new node;

second->data = 20;

second->next = 0;

head->next = second;

Programski jezici 1 85

10 20 0

head nextdata nextdata

Page 86: 01. Uvod u Programski Jezik C

Unija je skup podataka različitih tipova koji su smešteni u isti memorijski prostor

Promena jednog podataka u uniji može dovesti do promene drugog podataka u uniji

Deklaracija: union ime-unije

{

tip1 element1;

tip2 element2;

tipn elementn;

} lista-promenljivih;

Primer: union example

{

char c;

int x;

} var;

Programski jezici 1 86

Page 87: 01. Uvod u Programski Jezik C

Alternativni oblik deklaracije: union ime-unije

{

tip1 element1;

tip2 element2;

tipn elementn;

};

ime-unije lista-promenljivih;

Primer: union example

{

char c;

int x;

};

example var, varArray[100], *pvar;

Programski jezici 1 87

Page 88: 01. Uvod u Programski Jezik C

U slučaju da u istom bloku postoji podatak prostog tipa i unija sa istim imenom tada se mora koristiti ključna reč union

Primer: union example

{

char c;

int x;

};

int example= 10;

union example a;

Programski jezici 1 88

Page 89: 01. Uvod u Programski Jezik C

Elementima unije se pristupa preko operatora .

Primer: union example

{

char c;

int x;

};

example a;

a.x = 10;

a.c = „a‟;

Programski jezici 1 89

Page 90: 01. Uvod u Programski Jezik C

Uniju je moguće definisati i bez korštenja identifikatora iza ključne reči union – bezimena unija

Članovi bezimene unije ponašaju se kao “obične promenljive”

Primer: union { int x; char c; };

x = 10;

c = „a‟;

Unija za koju je definisan neki podatak nije bezimena Primer: union { int x, char c; } var;

var.x = 10;

var.c = „a‟;

Programski jezici 1 90

Page 91: 01. Uvod u Programski Jezik C

Programski jezici 1 91

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

union example

{

char c;

int x;

};

example ex;

ex.x = 256;

ex.c = 'a';

cout << ex.c << " " << ex.x;

return 0;

}

Page 92: 01. Uvod u Programski Jezik C

Funkcija se obično definiše kao potprogram koji na osnovu određenog broja argumenata daje jedan rezultat

Podatak koji vraća funkcija naziva se povratna vrednost funkcije

Tip funkcije je tip podataka koji funkcija vraća

Programski jezici 1 92

Page 93: 01. Uvod u Programski Jezik C

Definicija funkcije: tip ime-funkcije(tip1 arg1, tip2 arg2, … , tipn argn)

telo-funkcije

Formalni argumenti – automatske promenljive kroz koje funkcija prima podatake

Opšti oblik poziva funkcije: ime-funkcije(sarg1, sarg2, … , sargn)

Stvarni argumenti – parametri koji se šalju funkciji

Programski jezici 1 93

Page 94: 01. Uvod u Programski Jezik C

Deklaracija (prototip) funkcije predstavlja “opis funkcije za spoljašnji svet”

Deklaracija funkcije sadrži tip funkcije, ime funkcije, tipove (a može i imena) argumenata

Opšti oblik deklaracije: tip ime-funkcije(tip1, tip2, … , tipn);

Programski jezici 1 94

Page 95: 01. Uvod u Programski Jezik C

Programski jezici 1 95

#include <iostream>

using namespace std;

int circleLeftShift8(int value)

{

int res, left, right;

left = value << 8;

right = value >> 24;

res = left | right & 0xff;

return res;

}

int main(int argc, char **argv)

{

int a = 0xefffffff, r;

r = circleLeftShift8(a);

cout << r << endl;

cout << circleLeftShift8(1) << endl;

r = 10 + circleLeftShift8(a);

cout << r << endl;

return 0;

}

Page 96: 01. Uvod u Programski Jezik C

Programski jezici 1 96

#include <iostream>

using namespace std;

int duplicate(int);

int main(int argc, char **argv)

{

cout << duplicate(10);

return 0;

}

int duplicate(int x)

{

return 2*x;

}

Page 97: 01. Uvod u Programski Jezik C

Programski jezici 1 97

#include <iostream>

using namespace std;

void printHello()

{

cout << "Hello, world!" << endl;

}

int main(int argc, char **argv)

{

printHello();

return 0;

}

Page 98: 01. Uvod u Programski Jezik C

Prenos parametara u funkciju putem vrednosti prilikom poziva funkcija šalje se vrednost funkcija prihvata vrednost u formalne argumente po izlasku iz funkcije formalni argumenti automatski

nestaju Dakle, kod prenosa parametara u funkciju putem

vrednosti, u funkciji se kreira slika stvarnih argumenata i koriste se te slike, a ne stvarne promenljive

Nakon izlaska iz funkcije stvarne promenljive ostaju nepromenjene

Programski jezici 1 98

Page 99: 01. Uvod u Programski Jezik C

Programski jezici 1 99

#include <iostream>

using namespace std;

void increase(int x)

{

cout << "increase: " << x << endl;

x++;

cout << "increase: " << x << endl;

}

int main(int argc, char **argv)

{

int x = 10;

cout << "main: " << x << endl;

increase(x);

cout << "main: " << x << endl;

return 0;

}

Page 100: 01. Uvod u Programski Jezik C

Da bi se omogućilo da funkcija menja vrednost stvarnog argumenta, potrebno je:

1. način:

▪ formalni argument definisati kao pokazivač

▪ u telu funkcije koristiti operator indirekcije

▪ prilikom poziva funkcije proslediti adresu stvarnog argumenta

2. način:

▪ vršiti prenos parametara u funkciju putem reference

Programski jezici 1 100

Page 101: 01. Uvod u Programski Jezik C

Programski jezici 1 101

#include <iostream>

using namespace std;

void increase(int *x)

{

cout << "increase: " << *x << endl;

(*x)++;

cout << "increase: " << *x << endl;

}

int main(int argc, char **argv)

{

int x = 10;

cout << "main: " << x << endl;

increase(&x);

cout << "main: " << x << endl;

return 0;

}

Page 102: 01. Uvod u Programski Jezik C

Programski jezici 1 102

#include <iostream>

using namespace std;

void increase(int &x)

{

cout << "increase: " << x << endl;

x++;

cout << "increase: " << x << endl;

}

int main(int argc, char **argv)

{

int x = 10;

cout << "main: " << x << endl;

increase(x);

cout << "main: " << x << endl;

return 0;

}

Page 103: 01. Uvod u Programski Jezik C

U definiciji funkcije moguće je navesti podrazumevane vrednosti formalnih argumenata

Podrazumevane vrednosti formalnih argumenata se koriste kad u pozivu funkcije nedostaju stvarni argumenti

Ako se za neki argument navede neka podrazumevana vrednost, onda se podrazumevana vrednost mora navesti i za sve argumente iza njega

Prilikom poziva funkcije mogu se izostaviti samo poslednji argumeni (nema preskakanja)

Dozvoljeno je navođenje podrazumevanih vrednosti za sve argumente

Programski jezici 1 103

Page 104: 01. Uvod u Programski Jezik C

Programski jezici 1 104

#include <iostream>

using namespace std;

int add(int a, int b = 0)

{

return a+b;

}

int main(int argc, char **argv)

{

int a = 10, b = 20;

cout << add(a, b) << endl;

cout << add(a) << endl;

return 0;

}

Page 105: 01. Uvod u Programski Jezik C

Preklapanje imena funkcija (eng. function overloading) – moguće je definisati više funkcija istog imena ukoliko se one razlikuju po broju i/ili tipu argumenata

Dakle, prevodilac razlikuje preklopljene funkcije samo preko argumenata

Posebnu pažnju treba obratiti kod funkcija sa podrazumevanim vrednostima argumenata

Programski jezici 1 105

Page 106: 01. Uvod u Programski Jezik C

Programski jezici 1 106

#include <iostream>

using namespace std;

int add(int a, int b)

{

cout << "int2" << endl;

return a+b;

}

int add(int a, int b, int c)

{

cout << "int3" << endl;

return a+b+c;

}

double add(double a, double b)

{

cout << "double" << endl;

return a+b;

}

int main(int argc, char **argv)

{

cout << add(10, 20) << endl;

cout << add(10, 20, 30) << endl;

cout << add(10.5, 20.5) << endl;

return 0;

}

Page 107: 01. Uvod u Programski Jezik C

Programski jezici 1 107

#include <iostream>

using namespace std;

int add(int a, int b = 0)

{

cout << "int" << endl;

return a+b;

}

int add(int a, double b = 0.0)

{

cout << "double" << endl;

return a+b;

}

int main(int argc, char **argv)

{

cout << add(10, 10) << endl;

cout << add(10, 10.0) << endl;

//cout << add(10) << endl;

return 0;

}

Page 108: 01. Uvod u Programski Jezik C

Inline funkcije – za jednostavnije funkcije pogodnije je direktno ugrađivanje u kod, nego da se nezavisno prevode i pozivaju iz nekog koda jer se tako ubrzava rad, štede resursi

Prevodilac ne mora da uvaži inline sugestiju i u tom slučaju se funkcija ponaša kao “standardna” funkcija

Opšti oblik: inline tip ime-funkcije (tip1 arg1, … , tipn argn)

telo-funkcije

Programski jezici 1 108

Page 109: 01. Uvod u Programski Jezik C

Programski jezici 1 109

#include <iostream>

using namespace std;

inline int max(int a, int b)

{

return (a > b) ? a : b;

}

int main(int argc, char **argv)

{

int a = 10, b = 20;

cout << max(a, b) << endl;

cout << max(++a, ++b) << endl;

return 0;

}

Page 110: 01. Uvod u Programski Jezik C

Rekurzivne funkcije su funkcije koje pozivaju same sebe

Na taj način se rešavanje nekog problema svodi na rešavanje istog, ali jednostavnijeg problema i funkcija poziva samu sebe sve dok problem ne postane trivijalan

Rekurzivne funkcije su manje efikasne, ali postoje problemi koji su po prirodi jednostavni i koje je gotovo nemoguće rešiti bez rekurzije

Programski jezici 1 110

Page 111: 01. Uvod u Programski Jezik C

Programski jezici 1 111

#include <iostream>

using namespace std;

int factorial(int x)

{

if (x == 0)

return 1;

else

return x*factorial(x-1);

}

int main(int argc, char **argv)

{

cout << factorial(5);

return 0;

}

Page 112: 01. Uvod u Programski Jezik C

automatske promenljive: navode se korištenjem ključne reči auto definišu se u telu funkcija i mogu da se koriste samo u funkciji u kojoj su

definisane nastaju automatski u funkciju i automatski nestaju nakon izlaska iz funkcije podrazumeva se da je promenljiva automatska, ukoliko se drugačije ne

navede nemaju podrazumevanu vrednost

globalne promenljive: definišu se izvan svih funkcija ako se u definiciji ne navede vrednost, podrazumeva se da je vrednost

definisane promenljive 0

vidljiva je u svim funkcijama koje su definisane nakon definicije date promenljive

korištenjem ključne reči extern moguće je eksplicitno navesti korištenje neke globalne promenljive u funkciji

Programski jezici 1 112

Page 113: 01. Uvod u Programski Jezik C

registarske promenljive: automatske promeljive za kojima je izražena želja da se drže u

registrima procesora ne garantuje se da će promenljiva strvarno biti registarska –

zavisi od konkretnog prevodioca, procesora, ukupnog broja registarskih promenljivih

definišu se korištenjem ključne reči register statičke promenljive: definišu se korištenjem ključne reči static vrednost im se određuje pre početka izvršavanja progama ukoliko se vrednost ne navede, podrazumeva se početna

vrednost 0

postoje od početka do kraja izvršavanja programa (vrednost im ostaje sačuvana do sledećeg poziva date funkcije)

Programski jezici 1 113

Page 114: 01. Uvod u Programski Jezik C

Programski jezici 1 114

#include <iostream>

using namespace std;

int g;

void function()

{

auto int i = 10;

static int si = 10;

i++;

si++;

g++;

cout << i << " " << si << " " << g << endl;

}

int main(int argc, char **argv)

{

cout << g << endl;

for (int i = 0; i < 3; i++)

function();

return 0;

}

Page 115: 01. Uvod u Programski Jezik C

main(int argc, char **argv)

argc – broj argumenata

argv – niz argumenata

Argumenti komandne linije su stringovi Naziv programa se prosleđuje kao prvi

argument Primer: for (int i = 0; i < argc; i++)

cout << *(argv + i);

Programski jezici 1 115

Page 116: 01. Uvod u Programski Jezik C

Programski jezici 1 116

#include <iostream>

using namespace std;

int main(int argc, char **argv)

{

if (argc == 3)

{

for (int i = 0; i < argc; i++)

{

if (i == 0)

cout << "Naziv programa je: " << *argv << endl;

else

cout << i << ". argument je: " << *(argv + i) << endl;

}

}

else

{

cout << *argv << ": broj argumenata je pogresan" << endl;

cout << "Koristenje: " << *argv << " arg1 arg2";

}

return 0;

}