Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword or section
Like this
15Activity
0 of .
Results for:
No results containing your search query
P. 1
Tehnike programiranja /kroz programski jezik C++/- Dr. Zeljko Juric

Tehnike programiranja /kroz programski jezik C++/- Dr. Zeljko Juric

Ratings: (0)|Views: 1,222 |Likes:
Published by Etf_Unsa

More info:

Published by: Etf_Unsa on Feb 24, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

04/11/2013

pdf

text

original

 
: Tehnike programiranja /kroz programski jezik C++/Predavanje 1.Radna skripta za kurs “Tehnike programiranja” na Elektrotehni
č
kom fakultetu u Sarajevu1
Predavanje 1
Ovi materijali namijenjeni su onima koji su odslušali kurs “Osnove ra
č
unarstva” naElektrotehni
č
kom fakultetu u Sarajevu po novom nastavnom programu, kao i svima onima koji ve
ć
  poznaju osnove programiranja u programskom jeziku C, a žele da pre
đ
u na programski jezik C++. Sobzirom da je programski jezik C++ isprva bio zamišljen kao nadgradnja jezika C, gotovo svi programi pisani u jeziku C ujedno predstavljaju ispravne C++ programe. Ipak, kompatibilnost izme
đ
u C-a i C++-anije stoprocentna, tako da postoje neke konstrukcije koje su ispravne u jeziku C, a nisu u jeziku C++.Takvi primjeri
ć
e biti posebno istaknuti. S druge strane, bitno je napomenuti da mnoge konstrukcije iz jezika C, mada rade u jeziku C++, treba izrazito izbjegavati u jeziku C++, s obzirom da u jeziku C++ postoje mnogo bolji, efikasniji i sigurniji na
č
ini da se ostvari isti efekat. Treba shvatiti da je C++ danasipak posve novi programski jezik, bitno druga
č
iji od C-a, mada u principu visoko kompatibilan sa njim.Rješenja koja su dobra (a ponekad i jedina mogu
ć
a) u C-u, u C++-u mogu biti veoma loša. Stoga bitivrlo dobar programer u C-u naj
č
ć
e ne zna
č
i biti dobar C++ programer. Vrijedi
č
ak obrnuto: ispo
č
etkasu nabolji C programeri obi
č
no katastrofalno loši C++ programeri, sve dok se ne naviknu na filozofijunovog jezika i na novi na
č
in razmišljanja. Stoga
ć
e uvodna poglavlja uglavnom biti posve
ć
ena onimaspektima jezika C koje nije preporu
č
ljivo koristiti u C++-u, dok 
ć
e specifi
č
nosti na
č
ina razmišljanja uC++-u do
ć
i kasnije.Po
č
nimo od prvog C programa iz ve
ć
ine udžbenika o C-u – tzv. “Hello world” / ”Vozdra raja” programa:
#include <stdio.h>main() {printf("Vozdra raja!\n");
return
0;}
Č
ak ni ovaj posve jednostavan C program nije ispravan u C++-u prema posljednjem standarduISO 98 jezika C++, kojeg
ć
emo se u ovim materijalima pridržavati (bez obzira što
ć
e mnogi C++kompajleri ipak prevesti i izvršiti ovaj program). Naime, u ovom primjeru, funkcija “
main
” nema povratni tip. U C-u se tada podrazumijeva da je povratni tip “
int
”, dok se u C++-u povratni tip
uvijek mora navoditi
. Dakle, u C++-u bi ispravna bila sljede
ć
a varijanta:
#include <stdio.h>
int
main() {printf("Vozdra raja!\n");
return
0;}
Ovo je, bar za sada, ispravno C++ rješenje. Me
đ
utim, ve
ć
pojavom sljede
ć
eg C++ standarda, postojivelika mogu
ć
nost da se ni ovo rješenje ne
ć
e smatrati ispravnim. Naime, standardna biblioteka funkcija prilago
đ
ena jeziku C, kojoj izme
đ
u ostalog pripada i zaglavlje “
stdio.h
”, ne uklapa se dobro u nekemoderne koncepte jezika C++. Stoga
ć
e ve
ć
ina kompajlera na gornji program dati upozorenje da jeupotreba zaglavlja “
stdio.h
” izrazito nepreporu
č
ljiva (engl.
deprecated 
) u jeziku C++, i da vjerovatnou budu
ć
nosti ne
ć
e biti podržana. Umjesto toga, po ISO 98 C++ standardu, napravljene su nove verzijezaglavlja standardne biblioteke za one elemente jezika C++ koji su naslije
đ
eni iz jezika C, a koje sunapravljene tako da se bolje uklapaju u koncepte jezika C. Stoga, ukoliko je “
pqr.h
” naziv nekogzaglavlja standardne biblioteke jezika C, u C++-u umjesto njega treba koristiti zaglavlje imena “
cpqr
”,dakle, bez sufiksa “
.h
” i sa prefiksom “
c
” (npr. “cstdio” umjesto “
stdio.h
”,
cmath
” umjesto
math.h
”,
cctype
” umjesto “
ctype.h
”, itd.). Stoga, potpuno ispravna verzija gornjeg programa uC++-u glasi ovako:
 
Dr. Željko Juri
ć
: Tehnike programiranja /kroz programski jezik C++/ Predavanje 1.Radna skripta za kurs “Tehnike programiranja” na Elektrotehni
č
kom fakultetu u Sarajevu2
#include <cstdio>
int
main() {std::printf("Vozdra raja!\n");
return
0;}
Ovdje vidimo još jednu novinu: kvalifikator “
std::
” ispred imena funkcije “
printf
”. Ovo je jedna od novina zbog koje su uop
ć
e i uvedena nova zaglavlja – tzv. imenici. Imenici su osobina jezikaC++ koja je uvedena tek nedavno. Naime, pojavom velikog broja nestandardnih biblioteka razli
č
itih proizvo
đ
a
č
a bilo je nemogu
ć
e sprije
č
iti konflikte u imenima koje mogu nastati kada dvije razli
č
ite biblioteke upotrijebe isto ime za dva razli
č
ita objekta ili dvije razli
č
ite funkcije. Na primjer, biblioteka zarad sa bazama podataka može imati funkciju nazvanu “
update
” (za ažuriranje podataka u bazi), dok neki autor biblioteke za rad sa grafikom može odabrati isto ime “
update
” za ažuriranje grafi
č
kog prikaza na ekranu. Zbog toga je odlu
č
eno da se imena (identifikatori) svih objekata i funkcija mogu po potrebi razvrstavati u
imenike
(kao što se datoteke mogu razvrstavati po folderima). Dva razli
č
ita objektaili funkcije mogu imati isto ime, pod uvjetom da su definirani u razli
č
itim imenicima. Identifikatoru
ime
” koji se nalazi u imeniku “
imenik 
” pristupa se pomo
ć
u konstrukcije “
imenik 
::
ime
”. Dalje, standard propisuje da se svi objekti i sve funkcije iz standardne biblioteke jezika C++ moraju nalaziti u imeniku
std
”. Odatle poti
č
e kvalifikacija “
std::printf
”. Sli
č
nu kvalifikaciju bismo morali dodati ispred svihdrugih objekata i funkcija iz standardne biblioteke (npr. “
std::sqrt
” za funkciju “
sqrt
” iz zaglavlja
cmath
”, koja ra
č
una kvadratni korijen).Stalno navo
đ
enje imena imenika može biti naporno, stoga je mogu
ć
e pomo
ć
u klju
č
ne rije
č
i
using
” navesti da
ć
e se podrazumijevati da se neki identifikator uzima iz navedenog imenika, ukolikose ime imenika izostavi. Sljede
ć
i primjer pokazuje takav pristup:
#include <cstdio>
using
std::printf;
int
main() {printf("Vozdra raja!\n");
return
0;}
Ovim smo naveli da se podrazumijeva da identifikator “
printf
” uzimamo iz imenika “
std
”, akose druga
č
ije ne kaže eksplicitnim navo
đ
enjem imenika ispred identifikatora. Možemo tako
đ
er re
ć
i da seneki imenik (u našem primjeru “
std
”) podrazumijeva ispred
bilo kojeg identifikatora
ispred kojeg nijeeksplicitno naveden neki drugi imenik, na na
č
in kao u sljede
ć
em primjeru:
#include <cstdio>
using namespace
std;
int
main() {printf("Vozdra raja!\n");
return
0;}
Ovakvo rješenje
ć
emo pretežno koristiti u svim primjerima tokom kursa radi jednostavnosti, madase ovakvo rješenje ne preporu
č
uje, jer na taj na
č
in u program “uvozimo” cijeli imenik (ovo je logi
č
kiekvivalentno pozicioniranju u neki folder pri radu sa datotekama),
č
ime narušavamo osnovni razlog zbogkojeg su imenici uop
ć
e uvedeni. Ipak, razvrstavanje identifikatora po razli
č
itim imenicima je tehnikakoja se koristi uglavnom pri razvoju vrlo velikih projekata.Mada su prethodni primjeri dotjerani tako da budu u potpunosti po standardu jezika C++, oni jošuvijek nisu “u duhu” jezika C++, zbog korištenja biblioteke “
cstdio
” i njene funkcije “
printf
”, kojesu isuviše “niskog nivoa” sa aspekta jezika C++, koji je konceptualno jezik višeg nivoa nego C (zapravo,
 
Dr. Željko Juri
ć
: Tehnike programiranja /kroz programski jezik C++/ Predavanje 1.Radna skripta za kurs “Tehnike programiranja” na Elektrotehni
č
kom fakultetu u Sarajevu3
C++ je “hibridni jezik”, u kojem se može programirati na “niskom nivou”, na “visokom nivou”, u proceduralnom, neobjektnom stilu, kao i u objektno-orijentiranom stilu, pa
č
ak i u nekim apstraktnimstilovima kao što su generi
č
ki i funkcionalni stil programiranja, za razliku od jezika kao što je Java, kojiforsira isklju
č
ivo objektno-orijentirani stil, i kad treba, i kad ne treba). Slijedi primjer koji radi isto što isvi prethodni primjeri, samo pisan u duhu jezika C++:
#include <iostream>
using namespace
std;
int
main() {cout << "Vozdra raja!\n";
return
0;}
U ovom primjeru je umjesto funkcije “
printf
” upotrijebljen tzv.
objekat izlaznog toka podataka
 (engl.
output stream
)
cout
”, koji je povezan sa standardnim izlaznim ure
đ
ajem (obi
č
no ekranom).Ovaj objekat definiran je u biblioteci “
iostream
”, i kao i svi objekti iz standardnih biblioteka, tako
đ
er se nalazi u imeniku “
std
” (da nismo “uvezli” imenik “
std
”, morali bismo pisati “
std::cout
”, ina
č
e binam kompajler javio da ne poznaje objekat “
cout
”, što je vrlo
č
esta greška kod po
č
etnika). Znak “<<” predstavlja
operator umetanja
(engl.
insertion
) u izlazni tok, koji pojednostavljeno možemo
č
itati kao“šalji na”. Stoga konstrukcija
cout << "Vozdra raja!\n";
 “ume
ć
e” niz znakova (string)
"Vozdra raja\n"
(podsjetimo se da je “\n” znak za prelaz u novi red) uizlazni tok, odnosno “šalje ga” na standardni izlazni ure
đ
aj (ekran).Prvi argument operatora “
<<
” je obi
č
no neki objekat izlaznog toka (postoje i drugi objekti izlaznogtoka osim “
cout
”, npr. objekti izlaznih tokova vezani sa datotekama), dok drugi argument može biti proizvoljni ispisivi izraz. Na primjer, sljede
ć
e konstrukcije su posve legalne (uz pretpostavku da jeuklju
č
ena biblioteka “
cmath
”, u kojoj je deklarirana funkcija “
sqrt
” za ra
č
unanje kvadratnog korijena):
cout << 32 – (17 + 14 * 7) / 3;cout << 2.56 - 1.8 * sqrt(3.12);
Primijetimo da objekat izlaznog toka “
cout
” sam “vodi ra
č
una” o tipu podataka koji se “ume
ć
u” utok, tako da nije potrebno eksplicitno specificirati tip podatka koji se ispisuje, kao što bismo morali prilikom korištenja funkcije “
printf
”, gdje bismo morali pisati nešto poput:
printf("
%
d", 32 – (17 + 14 * 7) / 3);printf("
%
f", 2.56 - 1.8 * sqrt(3.12));
Važno je napomenuti da konstrukcija poput “
cout << 2 + 3
” u jeziku C++
tako
đ 
er predstavljaizraz 
, kao što je izraz i sama konstrukcija “
2 + 3
”. Šta je rezultat ovog izraza? U C++-u rezultatoperatora umetanja primjenjen na neki objekat izlaznog toka kao rezultat daje ponovo isti objekatizlaznog toka (odnosno “
cout
” u našem primjeru), što omogu
ć
ava
nadovezivanje
operatora “<<”, kao usljede
ć
em primjeru:
cout << "2 + 3 = " << 2 + 3 << "\n";
 Naime, ovaj izraz se interpretira kao
((cout << "2 + 3 = ") << 2 + 3) << "\n";
 Drugim rije
č
ima, u izlazni tok se prvo ume
ć
e string
"2 + 3 = "
. Kao rezultat tog umetanja dobijamo ponovo objekat “
cout
” kojem se šalje vrijednost izraza “
2 + 3
” (odnosno 5). Rezultat tog umetanja je

Activity (15)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
irina_makedonija liked this
Harun Sjenar liked this
termo4 liked this
Harun Sjenar liked this
PeraMali89 liked this
Amela Bambur liked this
dacabuba liked this
Milan Ilić liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->