You are on page 1of 11

Raunarski praktikum 4 Raunarski praktikum 4

Vjebe 01 Vjebe 01
Matko Botinan Matko Botinan
Vinko Petrievi Vinko Petrievi
Krunoslav Pulji Krunoslav Pulji
S Sveuilite veuilite u u Z Zagrebu agrebu
PMF PMF Matematiki odjel Matematiki odjel
01.10.2007. Raunarski praktikum 4 - Vjebe 01 2
Osnovne informacije Osnovne informacije o o kolegiju kolegiju
Termin predavanja:
SRI 10-12h (005) [Mladen Jurak]
Termini vjebi:
PON 10-14h (Pr3) [Matko Botinan]
UTO 13-17h (Pr3) [Krunoslav Pulji]
SRI 12-14h i ET 15-17h (Pr3) [Vinko Petrievi]
Svi nastavni materijali, informacije i obavijesti nalazit e se na
web stranicama kolegija:
http://web.math.hr/nastava/rp4/
01.10.2007. Raunarski praktikum 4 - Vjebe 01 3
Polaganje kolegija Polaganje kolegija
2 kolokvija
oba kolokvija piu se u pismenom obliku
svaki kolokvij najvie 25 bodova
2 domae zadae
rjeenje domae zadae predaje se putem emaila, te usmeno
ispituje
svaka domaa zadaa najvie 25 bodova
Ukupno: 2*25 + 2*25 = 100 bodova
01.10.2007. Raunarski praktikum 4 - Vjebe 01 4
Ispitni termini Ispitni termini
Datumi kolokvija:
1. kolokvij: u tjednu 03.12. 07.12.2007.
2. kolokvij: u tjednu 04.02. 08.02.2008.
Rokovi za predaju domaih zadaa putem emaila:
1. zadaa: do 15.12.2007. (sub) u 23:59 GMT
2. zadaa: do 26.01.2008. (sub) u 23:59 GMT
01.10.2007. Raunarski praktikum 4 - Vjebe 01 5
Literatura Literatura
Stanley B. Lippman, Josee Lajoie, Barbara E.
Moo. C++ Primer (4th Edition). Addison-
Wesley Professional, 2005.
Julijan ribar i Boris Motik: Demistificirani C++
(2. izdanje). Element, 2001.
01.10.2007. Raunarski praktikum 4 - Vjebe 01 6
Dodatna literatura Dodatna literatura
Grady Booch et al: Object-Oriented Analysis
and Design with Applications (Third Edition).
Addison-Wesley Professional, 2004.
Bjarne Stroustrup: The C++ Programming
Language (Third Edition). Addison-Wesley
Professional, 1997.
01.10.2007. Raunarski praktikum 4 - Vjebe 01 7
Za one koji ele znati (jo) vie Za one koji ele znati (jo) vie
Erich Gamma, Richard Helm, Ralph Johnson,
John Vlissides. Design Patterns. Addison-
Wesley Professional, 1995.
Andrei Alexandrescu. Modern C++ Design:
Generic Programming and Design Patterns
Applied. Addison-Wesley Professional, 2001.
01.10.2007. Raunarski praktikum 4 - Vjebe 01 8
Za one koji ele znati (jo) vie Za one koji ele znati (jo) vie
Scott Meyers. Effective C++: 50 Specific Ways to Improve Your
Programs and Design (Third Edition). Addison-Wesley
Professional, 2005.
Scott Meyers. More Effective C++: 35 New Ways to Improve
Your Programs and Designs. Addison-Wesley Professional,
1995.
Herb Sutter. Exceptional C++: 47 Engineering Puzzles,
Programming Problems, and Solutions. Addison-Wesley
Professional, 1999.
Herb Sutter. More Exceptional C++. Addison-Wesley
Professional, 2001.
01.10.2007. Raunarski praktikum 4 - Vjebe 01 9
Alati za razvoj aplikacija u jeziku C++ Alati za razvoj aplikacija u jeziku C++
Microsoft Visual Studio
verzija 2005 (usklaenost s ISO C++ standardom)
dostupan putem MSDN-AA
Dev-C++
ht t p: / / www. bl oodshed. net / devcpp. ht ml
Eclipse & C/C++ Development Tooling
ht t p: / / www. ecl i pse. or g/
01.10.2007. Raunarski praktikum 4 - Vjebe 01 10
Zato C++ ? Zato C++ ?
01.10.2007. Raunarski praktikum 4 - Vjebe 01 11
TIOBE Programming Community Index (03/2007) http://www.tiobe.com/tpci.htm
01.10.2007. Raunarski praktikum 4 - Vjebe 01 12
42.8 J ava JDK -server 1.7
42.8 SML MLton 1.7
45.3 Lisp SBCL 1.6
45.7 Ada 95 GNAT 1.6
49.9 Haskell GHC 1.5
50.6 OCaml 1.5
53.9 Clean 1.4
54.8 Pascal Free Pascal 1.4
55.2 Eiffel SmartEiffel 1.4
68.3 D Digital Mars 1.1
73.4 C++g++ 1.0
74.5 C gcc 1.0
Ukupni rezultat: Programski jezik: Odnos:
Computer Language Shootout Benchmarks (13.03.2007.) http://shootout.alioth.debian.org/
01.10.2007. Raunarski praktikum 4 - Vjebe 01 13
Zato C++? Zato C++?
Sveprisutan jezik ope namjene
Visoke performanse
Dobro prihvaen i u akademskom i u industrijskom okruenju
Strogo kontrolirani razvoj jezika: ISO C++ standard
Vieparadigmatski jezik:
proceduralno programiranje
objektno-temeljeno programiranje
objektno-orijentirano programiranje
generiko programiranje
funkcionalno programiranje
01.10.2007. Raunarski praktikum 4 - Vjebe 01 14
Zato C++? Zato C++?
Kada koristiti C++?
veliki projekti
sistemske aplikacije
grafika
strukture podataka
kad god je vana brzina
Kada ne koristiti C++?
male aplikacije
brzo prototipiranje aplikacija
web aplikacije
01.10.2007. Raunarski praktikum 4 - Vjebe 01 15
to kae Bjarne Stroustrup ("otac" C++a)? to kae Bjarne Stroustrup ("otac" C++a)?
ht t p: / / www. r esear ch. at t . com/ ~bs/
There are only two kinds of languages: the ones people
complain about and the ones nobody uses.
C++ is designed to allow you to express ideas, but if you don't
have ideas or don't have any clue about how to express them,
C++ doesn't offer much help.
C++ is my favorite garbage collected language because it
generates so little garbage.
C makes it easy to shoot yourself in the foot; C++ makes it
harder, but when you do it blows your whole leg off .
01.10.2007. Raunarski praktikum 4 - Vjebe 01 16
Hello world Hello world
C
#i ncl ude <st di o. h>
i nt mai n( ) {
pr i nt f ( Hel l o wor l d! \ n) ;
r et ur n 0;
}
C++
#i ncl ude <i ost r eam>
i nt mai n( ) {
st d: : cout << Hel l o wor l d! \ n;
r et ur n 0;
}
objekt klase ost r eam
header datoteka u kojoj se nalazi
deklaracija objekta st d: : cout
poziv funkcije oper at or <<( ost r eam&, const char *)
namespace u kojem
se nalaze svi objekti,
klase i funkcije iz
standardne biblioteke
operator dosega
01.10.2007. Raunarski praktikum 4 - Vjebe 01 17
C C C++ C++
Legalni ANSI C program jest legalni C++ program s istom
semantikom
Ipak, postoje odreene iznimke:
nove kljune rijei
f ( )
pridruivanje voi d* pointera
st r uct je doseg
tipovi enumeratora i char konstanti
vezanje globalnih konstanti
viestruka deklaracija
ext er n " C" deklaracija
01.10.2007. Raunarski praktikum 4 - Vjebe 01 18
Kljune rijei jezika C++ Kljune rijei jezika C++
r ei nt er pr et _cast got o del et e
whi l e t r ue r egi st er f r i end def aul t
wchar _t t hr ow publ i c f or cont i nue
vol at i l e t hi s pr ot ect ed f l oat const _cast
voi d t empl at e pr i vat e f al se const
vi r t ual swi t ch oper at or ext er n cl ass
usi ng st r uct new expor t char
unsi gned st at i c_cast namespace expl i ci t cat ch
uni on st at i c mut abl e enum case
t ypename si zeof l ong el se br eak
t ypei d si gned i nt dynami c_cast bool
t ypedef shor t i nl i ne doubl e aut o
t r y r et ur n i f do asm
01.10.2007. Raunarski praktikum 4 - Vjebe 01 19
Jednostavan program s I/O Jednostavan program s I/O
#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1, v2;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2
<< " is " << v1 + v2 << std::endl;
return 0;
}
01.10.2007. Raunarski praktikum 4 - Vjebe 01 20
Zadatak: Napiite program koji rauna sumu svih brojeva do
kraja ulaznog toka (ne znajui unaprijed koliko e brojeva biti
uneseno).
#i ncl ude <i ost r eam>
i nt mai n( )
{
i nt sum= 0, val ue;
whi l e ( st d: : ci n >> val ue)
sum+= val ue;
st d: : cout << " Sumi s: " << sum<< st d: : endl ;
r et ur n 0;
}
01.10.2007. Raunarski praktikum 4 - Vjebe 01 21
Komentari:
C-stil: / * . . . */
C++-stil: / / . . .
http://xkcd.com/
01.10.2007. Raunarski praktikum 4 - Vjebe 01 22
Numeriki tipovi Numeriki tipovi
Integralni tipovi:
char , shor t , i nt , l ong
mogu biti si gned ili unsi gned
1=si zeof ( char ) <= si zeof ( shor t ) <= si zeof ( i nt )
<= si zeof ( l ong)
char min. 1 byte
short min. 2 bytea
long min. 4 byteova
Realni tipovi (tipovi s pominim zarezom):
f l oat , doubl e, l ong doubl e
si zeof ( f l oat ) <= si zeof ( doubl e) <= si zeof ( l ong
doubl e)
01.10.2007. Raunarski praktikum 4 - Vjebe 01 23
Literalne konstante Literalne konstante
Jednom definirana, vrijednost literalne konstante naknadno ne moe biti
mijenjana
Nisu adresibilne (nemamo pristup adresi na kojoj je spremljena dana
literalna konstanta)
Cjelobrojne literalne konstante:
Primjer:
20 / / deci mal no
024 / / okt al no
0x14 / / heksadeci mal no
Primjer:
128u 1024UL 1L 8Lu
Realne literalne konstante:
Primjer:
3. 14159F 0. 1f 12. 345L 0. 0
3e1 1. 0E- 3 2. 1. 0L
01.10.2007. Raunarski praktikum 4 - Vjebe 01 24
Literalne konstante Literalne konstante
Literalne konstante tipa bool:
t r ue f al se
Literalne konstante tipa char:
Primjer:
' a' ' 2' ' , ' ' ' ( pr azni na)
Specijalni znakovi:
newl i ne ' \ n'
hor i zont al t ab ' \ t '
ver t i cal t ab ' \ v'
backspace ' \ b'
Literalne konstante tipa wchar_t (wide character):
Primjer:
L' a'
01.10.2007. Raunarski praktikum 4 - Vjebe 01 25
Literalne konstante Literalne konstante
string literal
" RP4"
wide string literal
L" RP4"
Primjer (konkatenacija susjednih stringova):
"racunarski" "praktikum" // OK
"racunarski" L"praktikum" // nedefinirano
01.10.2007. Raunarski praktikum 4 - Vjebe 01 26
Literalne konstante Literalne konstante
Zadatak: Objasnite razliku izmeu slijedeih literalnih konstanti:
( a) ' a' , L ' a' , " a" , L" a"
( b) 10, 10u, 10L, 10uL, 012, 0xC
( c) 3. 14, 3. 14f , 3. 14L
Zadatak: Odredite tip slijedeih literalnih konstanti:
( a) - 10 ( b) - 10u ( c) - 10. ( d) - 10e- 2
01.10.2007. Raunarski praktikum 4 - Vjebe 01 27
Varijable Varijable
varijabla simboliko ime za memorijsku lokaciju
Primjeri:
i nt j mbag;
doubl e pl aca;
bool j e_ukl j ucen;
st r i ng adr esa;
char del i mi t er ;
Pitanje: Koja je razlika izmeu varijable i literalne konstante?
01.10.2007. Raunarski praktikum 4 - Vjebe 01 28
Varijable Varijable
Varijabla je odreena s:
vrijednou podatka (rvalue read value)
adresom (lvalue location value)
Primjer:
ch = ch - ' 0' ;
Zadatak: Precizno objasnite greke u slijedeim
pridruivanjima:
0 = 1;
x + x * 0. 1 = x;
01.10.2007. Raunarski praktikum 4 - Vjebe 01 29
Varijable Varijable
deklaracija varijable uvodi njeno ime i tip
definicija varijable dodatno alocira i memorijski prostor za
varijablu
primjeri:
definicija varijable: unsi gned i nt x;
definicija i inicijalizacija varijable: unsi gned i nt x = 42;
deklaracija varijable: ext er n unsi gned i nt x;
(esto emo biti neprecizni, te emo poistovjeivati pojam
deklaracije i definicije)
01.10.2007. Raunarski praktikum 4 - Vjebe 01 30
Varijable Varijable
Inicijalizacija varijable prilikom definicije:
i nt i val = 1024;
st r i ng pr oj ekt = " Pr vi C++ pr ogr am" ;
i nt i val ( 1024) ;
st r i ng pr oj ekt ( " Pr vi C++ pr ogr am" ) ;
Svaki ugraeni tip podrava tzv. konstruktor sintaksu za
inicijalizaciju danog objekta na defaultnu vrijednost:
/ / post avl j a i val na 0, dval na 0. 0
i nt i val = i nt ( ) ;
doubl e dval = doubl e( ) ;
/ / i nt ( ) se apl i ci r a na svaki od 10 el em.
vect or <i nt > i vec( 10) ;
01.10.2007. Raunarski praktikum 4 - Vjebe 01 31
Varijable Varijable
Konvencije o imenovanju varijabli:
imena varijabli obino se piu malim slovima
(npr. st udent , a ne St udent ili STUDENT)
imena bi trebala imati mnemoniku ulogu
ako su imena sastavljena od vie rijei:
r acunar ski _pr akt i kum(proceduralni stil)
r acunar ski Pr akt i kum(OOP stil)
01.10.2007. Raunarski praktikum 4 - Vjebe 01 32
Literalne konstante Literalne konstante
Zadatak: Koje od slijedeih definicija nisu legalne?
( a) i nt car = 1024, aut o = 2048;
( b) i nt i val = i val ;
( c) st d: : ci n >> i nt i nput _val ue;
( d) doubl e sal ar y = wage = 9999. 99;
( e) doubl e cal c = cal c( ) ;
(pretp. da je cal c funkcija koja vraa doubl e)
01.10.2007. Raunarski praktikum 4 - Vjebe 01 33
Varijable Varijable
Zadatak: Napiite program koji rauna 2 na 10-tu potenciju.
#include <iostream>
using namespace std;
int main() {
int value = 2, pow = 10;
cout << value << " na potenciju " << pow << ": \t";
int res = 1;
for (int cnt=1; cnt <= pow; ++cnt)
res = res * value;
cout << res << endl;
return 0;
}
01.10.2007. Raunarski praktikum 4 - Vjebe 01 34
Doseg Doseg
Primjer:
#i ncl ude <i ost r eam>
#i ncl ude <st r i ng>
st d: : st r i ng s1 = " hel l o" ; / / s1 has gl obal scope
i nt mai n( )
{
st d: : st r i ng s2 = " wor l d" ; / / s2 has l ocal scope
/ / uses gl obal s1; pr i nt s " hel l o wor l d"
st d: : cout << s1 << " " << s2 << st d: : endl ;
i nt s1 = 42; / / s1 i s l ocal and hi des gl obal s1
/ / uses l ocal s1; pr i nt s " 42 wor l d"
st d: : cout << s1 << " " << s2 << st d: : endl ;
r et ur n 0;
}
01.10.2007. Raunarski praktikum 4 - Vjebe 01 35
Doseg Doseg
Zadatak: Koja je vrijednost varijable j u slijedeem programu:
i nt i = 42;
i nt mai n( )
{
i nt i = 100;
i nt j = i ;
/ / . . .
}
Zadatak: Koja vrijednosti e ispisati slijedei fragment
programskog koda:
i nt i = 100, sum= 0;
f or ( i nt i = 0; i ! = 10; ++i )
sum+= i ;
st d: : cout << i << " " << sum<< st d: : endl ;
01.10.2007. Raunarski praktikum 4 - Vjebe 01 36
Kvalifikator const Kvalifikator const
Motivacija:
for (int index = 0; index != 512; ++index) {
// ...
}
int bufSize = 512; // velicina input buffera
for (int index = 0; index != bufSize; ++index) {
// ...
}
const int bufSize = 512;
for (int index = 0; index != bufSize; ++index) {
// ...
}
01.10.2007. Raunarski praktikum 4 - Vjebe 01 37
Kvalifikator const Kvalifikator const
Primjeri:
const i nt buf Si ze = 512;
const doubl e pi = 3. 14159;
buf Si ze = 0; / / gr eska
const st d: : st r i ng hi = " hel l o! " ; / / ok
const i nt i , j = 0; / / gr eska
01.10.2007. Raunarski praktikum 4 - Vjebe 01 38
Kvalifikator const Kvalifikator const
Zadatak: Koje od slijedeih linija koda su legalne?
( a) const i nt buf ;
( b) i nt cnt = 0;
const i nt sz = cnt ;
( c) cnt ++; sz++;
01.10.2007. Raunarski praktikum 4 - Vjebe 01 39
Reference Reference
Referenca je alternativno ime za varijablu
( konstantni pointer s "automatskim" dereferenciranjem)
Primjer:
i nt i = 1024;
i nt & r ef Val 1 = i ; / / ok
i nt & r ef Val 2; / / gr eska
i nt & r ef Val 3 = 42; / / gr eska
const reference:
const i nt &i r = 1024;
doubl e dval = 3. 14159;
const i nt &i r 2 = dval ;
01.10.2007. Raunarski praktikum 4 - Vjebe 01 40
Reference Reference
Zadatak: Koje od slijedeih definicija su pogrene?
Kako biste ih ispravili?
( a) i nt i val = 1. 01;
( b) i nt &r val 1 = 1. 01;
( c) i nt &r val 2 = i val ;
( d) const i nt &r val 3 = 1;
Zadatak: Koja od slijedeih pridruivanja su pogrena?
( a) r val 2 = 3. 14159;
( b) r val 2 = r val 3;
( c) i val = r val 3;
( d) r val 3 = i val ;
01.10.2007. Raunarski praktikum 4 - Vjebe 01 41
Reference Reference
Zadatak: Koja je razlika izmeu definicija u (a) i
pridruivanja u (b)? Jesu li neka ilegalna?
( a) i nt i val = 0;
const i nt &r i = 0;
( b) i val = r i ;
r i = i val ;
Zadatak: to ispisuje slijedei programski kod?
i nt i , &r i = i ;
i = 5; r i =10;
st d: : cout << i << " " << r i <<
st d: : endl ;
01.10.2007. Raunarski praktikum 4 - Vjebe 01 42
typedef typedef
Primjeri:
t ypedef doubl e wages;
t ypedef i nt exam_scor e;
t ypedef wages sal ar y;
/ / doubl e hour l y, weekl y;
wages hour l y, weekl y;
/ / i nt t est _r esul t ;
exam_scor e t est _r esul t ;
01.10.2007. Raunarski praktikum 4 - Vjebe 01 43
Enumerirani tipovi Enumerirani tipovi
Primjer:
/ / pon == 0, . . . , ned == 6
enumdani {pon, ut o, sr i , cet , pet , sub,
ned};
dani d = ut o;
Primjer:
/ / pr va_zona==101, dr uga_zona==102,
/ / t r eca_zona==103
enumsms_par ki ng {pr va_zona=101, dr uga_zona,
t r eca_zona};

You might also like