printf

UVOD
Za razliku od C-a, programski jezik C++ je objektno orijentirani programski jezik.
Zamisao objektnog programiranja je da se složeni zadatak razdijeli na manje dijelove koji se
onda mogu međusobno neovisno rješavati.
Jezik je nastao osamdesetih godina 20.tog stoljeća kao naprednija verzija C-a. Postoji više
verzija prevoditelja (kompajlera) za C++, a najpoznatiji su: Dev C++; Microsoft Visual C++ i
Borland C++ Builder.
Osnovna struktura programa
Svaki program napisan u C-u ili C++ ima svoj izgled (strukturu).
U nastavku ćemo pokazati koji su elementi jedno programa napisanog u C++ programskom
jeziku:
Linije programa koje počinju s znakom # programske naredbe, već su to pretprocesorske
naredbe C programa prevodiocu (kompajleru) koje se izvršavaju prije kompajliranja.
Prevodilac ili kompajler je zaseban program koji je "zadužen" za prevođenje naredbi
programskog jezika u strojni jezik.
Naredba #include <iostream> poziva datoteku iostream.h koja sadrži skup naredbi
zaduženih za komunikaciju s programom, a <cstdlib> cstdlib.h koja sadrži opis funkcija
ulaza-izlaza za C++.
Unutar vitičastih zagrada nalaze se deklaracije varijabli (koje će kasnije biti opisane) te slijede
naredbe programa koje čine naredbe za ulaz, računanje i ispis rezultata.
Naredbom using namespace std; obavještavamo prevoditelja da ćemo koristiti standardne
nazive naredbi.
Prva linija programa, main, definira funkciju ili grupu zavisnih programskih naredbi. Funkcije
su sastavni dijelovi programa u C++u te se ta glavna ili osnovna zove main. Većina programa
sadrži još nekoliko dodatnih funkcija koje imaju svoje ime.
Svaka naredba u programu završava sa točkom-zarezom ( ; ), osim uvjetne naredbe (if-else).
Naredbom system ("PAUSE"); zaustavljamo program dok ne pritisnemo neku tipku. To nam
je važno prilikom izvođenja programa.
Naredba return 0; najčešće stoji na kraju programa, a ustvari govor da funkcija main() ne
vraća vrijednost. Kada budete učili o potprogramima tada ćete više saznati što radi ova
naredba.
Uz program poželjno je pisati i komentar tako da onaj tko čita program može shvatiti o čemu
se radi. Komentari se pišu unutar slijedećih znakova /* */ ili se bilo gdje u retku upišu
znakovi za dvije kose crte //
Naredbe programa nalaze se unutar vitičastih zagrada i neke osnovne bit će opisane u
slijedećim lekcijama .
1
Primjer1: Program računa i ispisuje zbroj za a=5 i b=3.
Primjer 2: Program ispisuje pozdravnu poruku u više redaka na zaslonu.
2
Tipovi podataka
Računalu je važno s kakvim podacima barata. Ovisno o vrsti razlikujemo:
• Cjelobrojne tipovi podataka (int)
• Realne tipovi podataka (obične (float) i dvostruke preciznosti(double))
• Znakovne tipovi podataka (char i string)
• Korisničke definirane tipove (strukture)
Svaki tip podatak zauzima određenu veličinu (memoriju) u računalu i ima određeni doseg ili
opseg. U sljedećoj tablici dan je prikaz vrsta podataka, veličine u bitovima koju taj podatak
zauzima u memoriji računala i opseg u kojem se može nalaziti u programskom jeziku C.
Tip podatka
char
signed char
unsigned char
short int
unsigned int
int
long
unsigned long
float
double
long double
Veličina u bitovima
8
8
8
16
16
16
32
32
32
64
80
Opseg
-128 do 127
-128 do127
0 do 255
-32768 do 32767
0 do 65535
-32768 do 32767
-2147483648 do 2147483647
0 do 4294967295
3,4x10-38 do 3,4x1038
1,7x10-308 do 1,7x10308
3,4x10-4932 do 1,1 x104932
Osnovni tip cijelog broja je int. On može imati negativnu ili pozitivnu vrijednost unutar
prikazanih granica. Tip podatka long koristi se kada nam je za varijablu potrebno veće
područje. Tipovi podataka mogu biti predznačni signed i to znači da je u jednom bitu
smještena informacija o tome da li je broj pozitivan ili negativan. Neke varijable ne mogu
nikada poprimiti negativnu vrijednost pa ih deklariramo kao nepredznačne ili unsigned.
Realni brojevi imaju decimalni dio. Zovemo ih još i floating-point (plivajući zarez)
brojevima. Ime su dobili po načinu predstavljanja takvih brojeva u memoriji računala. Taj tip
podatka naziva se float. Tipovi podataka doble i long double su poput tipa float, jedino
omogućavaju da se smjeti veći broj znamenaka sa većom preciznošću..
Za znakovni tip podataka koristimo se sa char (što je isto kao i signed char). Ukoliko
želimo koristiti kompletan set znakova treba upotrijebiti unsigned char. Kada baratamo s
riječima i rečenicama možemo koristiti i tip - string (niz znakova).
Često se javlja potreba da kod izvođenja programa želimo zadržati sadržaj ekrana da
pročitamo rezultate izvođenje programa. Za to će nam poslužiti naredba getch() koja učita
jedan znak i nastavlja program, bez pritiska na tipku Enter. Često se koristi kao posljednja
naredba u programu,a nalazi se u datoteci funkcija conio.h
3
Aritmetički operatori
Operacija
Zbrajanje
Oduzimanje
Množenje
Dijeljenje
Ostatak cjelobrojnog dijeljenja
Na primjer 7%2=1 jer je 7 podijeljeno s 2
jednako 3, a ostatak je jedan
Operator
+
*
/
%
Matematičke funkcije
Osnovne koje na početku treba znati:
Opis funkcije
Drugi korijen pozitivnog broja
Potenciranje (xy)
Zapisivanje
sqrt(x)
pow(x,y)
Funkcije se nalaze u biblioteci funkcija math.h pa je na početku programa potrebno napisati
naredbu #include <math.h>
Varijable
Varijable u programu su promjenjive veličine. Mogu biti:
- brojčane (cijeli ili decimalni broj)
- znakovne
Najbolje je da se svaka varijabla koja se koristi u programu deklaira na početku programa, ali
u C++ se može deklarirati bilo gdje u programu. Deklaracija se sastoji od tipa podatka i
jednog ili više imena varijabli.Osim deklaracije ponekad je varijable potrebno i inicijalizirani
tj. postaviti na početnu vrijednost, najčešće je to 0, ali može biti i 1 (na primjer kod množenja
brojeva). Ako se varijabla u ne postavi na početnu vrijednost ona će biti nepredvidiva tj.
početna vrijednost može biti bilo koji broj pa će program krivo raditi (računati).
Imena varijabli
Sva imena varijabli trebaju započinjati slovom engleskog alfabeta ili podvlakom _. Za ostatak
imena koriste se slova ili brojevi. Znakovi interpunkcije, odnosno kontrolni znakovi se ne
smiju koristiti. Za prepoznavanje imena varijabli bitna su prva 32 znaka. Broj znakova iznad
32 se zanemaruje. Postoje razlike između malih i velikih slova tj. program ih prepoznaje kao
različite znakove u imenima varijabli.
4
Primjeri deklaracija varijabli:
int broj;
char znak;
float temp;
/*cjelobrojna varijabla*/
/*znakovna varijabla*/
/*decimalna varijabla*/
Varijabla broj deklarirana je kao cijeli broj. Varijabla znak deklarirana je kao znak tj. ona
može biti bilo koje slovo ili broj, ali brojevi koji su deklarirani kao znak ne mogu se
oduzimati, zbrajati, množiti i dijeliti niti nad njima mogu vršiti bilo koje matematičke
operacije.
Varijabla temp deklarirana je kao decimalni broj.
Konstante
Konstante imaju tijekom programa određenu vrijednost koja se ne može promijeniti. Ključna
riječ u deklariranje i inicijalizaciju konstante je const iza koje slijedi tip konstante i njezina
vrijednost.
Primjeri konstanti:
const float pi=3.14159;
const int a=8;
Pravila koja vrijede za određivanje imena varijabli vrijede i za imena konstanti.
Naredba cin
Naredbom cin unosimo podatke s tipkovnice i pridružujemo ih varijablama u programu.
Varijable kojima želimo pridružiti vrijednosti zapisujemo iza naredbe cin. Na primjer,
naredbom
cin>>a;
uz pomoć tipkovnice, pridružujemo varijabli a broj ili slovo, a naredbom
cin >>a>>b
pridružujemo vrijednosti varijablama a i b.
Važna napomena: Varijable prethodno trebamo deklarirati.
Naredba cout
Naredbom cout ispisujemo tekst, vrijednosti matematičkih izraza i vrijednosti varijabli u
programu. Tekst koji želimo ispisati navodimo unutar navodnika, a varijable čije vrijednosti
želimo ispisati pišemo iza naredbe. Na primjer, naredbom
cout<<"Pozdrav";
ispisuje se pozdravna poruka Pozdrav na zaslonu računala, a naredbom
5
cout <<2+2;
ispisuje se broj 4 jer je to vrijednost matematičkog izraza 2+2.
Vrijednosti varijabli ispisujemo tako da ih navodimo iza naredbe cout. Na primjer
cout<< a;
ispisuje na zaslonu računala vrijednost varijable a.
Primjer1: Program ispisuje pozdravnu poruku u jednom retku na zaslonu računala
Primjer 2: Programom se unosi broj i ispisuje njegov kvadrat.
Formatirani upis i ispis
Upoznali smo naredbe za upis i ispis cin i cout. One ne zahtijevaju nikakvu posebnu
naznaku po kojem će se formatu vršiti unos i ispis podataka i koriste se u slučajevima kada
nam format zapisa nije važan. Međutim postoje situacije kada moramo navoditi format zapisa,
na primjer u radu s datoteka pa ćemo u nastavku pokazati koje se naredbe koriste za
formatirani upis i ispis podatak u C++.
6
Funkcija ulaza - scanf
Funkcija koja je zadužena za spremanje podataka u određene varijable zove se scanf. Ona se
može koristiti za različite tipove podataka koji se na različite načine spremaju u memoriju.
Zbog toga je potrebno funkciji scanf opisati koji tip podataka želimo čitati. Opći oblik
funkcije scanf je:
scanf ("opis_formata",[adresa, adresa..]);
U programu to pišemo ovako: scanf("%d",&a);
opis_formata sačinjava niz znakova koji sadrže jedan ili više opisanih formata. Opis formata
se sastoji od oznake postotka (%) iza kojeg slijedi slovo, koje opisuje tip podatka koji se
upotrebljava. Jedan ili više opisa formata je smješteno između dvostrukih navodnika, a
najčešće korišteni opisi formata nalaze se u priloženoj tablici.
Funkcija
char
int
float (decimalni)
float (eksponencijalni)
string (niz znakova)
unsigned
long int
double
long double
scanf
%c
%d
%f
%e
%s
%u
%ld
%lf
%Lf
printf
%c
%d
%f
%e
%s
%u
%ld
%lf
%Lf
Slijedeći neophodni dio funkcije scanf je adresa na koju će podaci biti spremljeni. Potrebno
je napomenuti da je potrebno navesti adresu varijable pomoću znaka &. Svaka varijabla u C++
ima specifičnu adresu u memoriji.
Potrebno je voditi računa da se ova funkcija koristi za definirani oblik i tip podatka koji je
potrebno unijeti. Međutim, ako ulazni podatak ne odgovara ulaznom formatu, ponašanje
funkcije je nepredvidivo što rezultira pogrešnim izvođenjem programa.
Stoga je važno da vodite računa o pravilnom zapisivanju opisa formata kojeg koristite.
Funkcija izlaza - printf
Suprotnost funkciji scanf, koja daje vrijednost varijabli, je funkcija printf, koja pokazuje
vrijednost varijabli na ekranu. Poziv funkcije printf izgleda:
printf ("opis_formata",varijabla,varijabla,...);
U programu to pišemo: printf("Rezultat je %d", a);
opis_formata može opcionalno sadržavat tekst koji će se ispisati. Ukoliko prikazujete
vrijednost jedne ili više varijabli, potrebno je na odgovarajuće mjesto upisati opis formata
pretvorbe za svaku varijablu. Opisi formata za funkciju scanf su isti kao za funkciju printf.
7
Postoji nekoliko znakova koji kontroliraju kako se tekst prikazuje na ekranu, a funkcija
printf omogućava da se bilo koji od tih znakova ispiše na ekranu.
Sekvenca
\a
\b
\f
\n
\r
Ime
Alert
Backspace
Formated
Newline
Carriage ret
\t
Horizontal tab
\v
\\
Vertical tab
Backslash
\'
Single quote
\''
Double quote
\?
Question mark
\OOO
\xHHH
Značenje
Aktiviranje zujala
Vraćanje unatrag jedan znak
Start nove strane ili ekrana
Pomicanje u novu liniju
Povratak na početak linije
Pomicanje na narednu tab
poziciju
Pomicanje prema dolje
Prikazivanje kose crte
Prikazivanje jednostrukog
navodnika
Prikazivanje dvostrukih
navodnika
Prikazivanje znaka pitanja
Prikazivanje znakova sa
oktalno zadanim ASCII
kodom
Prikazivanje znakova sa
heksadecimalno zadanim
ASCII kodom
Sada možemo pristupi izradi jednostavnog programa.
Primjer 1: Unesi dva realna broja i ispiši njihov umnožak i zbroj.
8
Primjer 2: Napiši program kojim će te unijeti radijus kruga i izračunati opseg i površinu
kruga.
Opširnije o naredbama scanf i printf
U naredbi scanf i printf se može pisati više formata zapisa zajedno što znači da unosimo i
ispisujemo više vrijednosti varijabli istovremeno.
Formati zapisa, u naredbi scanf se mogu odvojiti razmakom ili zarezom što uvjetuje i način
upisa (na primjer s razmakom unosimo 2 3 , a zarezom 2,3)
Primjer 1: Unesi dva cijela broja i ispisi njihov zbroj.
(Napomena: za unos i ispis koristi funkciju scanf i printf tako da se brojevi unose s
razmakom, npr: 2 3)
9
Primjer 2: Unesi dva cijela broja i ispisi njihov zbroj.
(Napomena: za unos i ispis koristi funkciju scanf i printf tako da se brojevi unose s zarezom
npr: 2,3)
Objašnjenje:
Broj mjesta rezerviran za ispis detaljnije se regulira brojem ispred formata.
Na primjer za ispis cijelih brojeva možemo napisati:
printf("\nZbroj brojeva %3d %2d je %4d ",a,b,c); gdje stoji da će za prvi broj u
ispisu biti rezervirana 3 mjesta za drugi 2 za rezultat zbrajanja 4 mjesta.
Za ispis decimalnih brojeva možemo napisati:
printf ("\n Zbroj brojeva %.4f %.2f je %.3f ",a,b,c);
gdje %f znači da se radi o decimalnim brojevima, .4 označava da
će za ispis decimalnog
dijela prvog broja biti rezervirana 4 mjesta, za decimalni dio drugog 2, a za decimalni dio
trećeg broja 3 mjesta.
Operatori inkrement i dekrement
Operator inkrement označava UVEĆAVANJE varijable za 1, a dekrement UMANJENJE za
1.
Tako na primjer x=x+1 možemo zapisati kao x++ ili ++x.
Ako je x=1 onda će nakon izvršavanja svake od sljedećih naredbi
x++
++x
poprimiti vrijednost 2.
Međutim u matematičkom izrazu vrlo je važno na kojem mjestu pišemo inkrement jer on
utječe na konačan rezultat. Pogledajmo primjer
x
Neka je x=5
Napišemo li u programu: y=++x to znači da će se prvo x uvećati za jedan a zatim pridružiti
varijabli y. Rezultat je: x=6 i y=6
10
Ako napišemo y=x++, tada se prvo x pridruži varijabli y pa se x -u doda jedan. Rezultat je:
y=5, x=6.
Isto vrijedi i za operaciju dekrement.
Relacijski operatori
Računala u svom radu upotrebljavaju jednostavnu logiku sa dvije vrijednosti; ukoliko je uvjet
istinit (true), vrijednost je 1; ukoliko je lažan (false), vrijednost je 0. Relacijski operatori
prikazani su u slijedećoj tablici:
Operator
>
>=
<
<=
==
!=
Značenje
veći od
veći od ili jednak
manji od
manji od ili jednak
jednak
nije jednak
Primjer
5>4
5>=x
4<5
x<=5
5==5
5!=4
Logički operatori
Moguće je u testu kombinirati više od jednog uvjeta. To postižemo upotrebom jednog od tri
logička operatora prikazana u slijedećoj tablici:
Operator
&&
||
!
Značenje
I (AND), svi uvjeti moraju biti istiniti da rezultat uvjeta bio istinit
ILI (OR), najmanje jedan od uvjeta mora biti istinit da bi rezultat uveta bio istinit
NE (NOT), negacija uvjeta
Primjer 1:
(a==c)&&(a>d)
rezultat je istinit samo ukoliko je a jednak c i a veći od d. Programski jezik C radi tako da
ukoliko je prvi uvjet (sa lijeve strane) lažan, drugi uvjet se neće testirati, jer je I izraz lažan,
ukoliko je jedan od uvjeta lažan.
Primjer 2:
(a==c)||(a>d)
rezultat je istinit ukoliko je bilo koji od uvjeta istinit. Ukoliko je prvi uvjet istinit, nije
potrebno daljnje testiranje, rezultat je svakako istinit.
11
If i if..else naredbe
Jednostavna if naredba ima oblik:
if (uvjetni izraz){
naredba ili blok naredbi;
}
Uvjet može biti jednostavan relacijski izraz ili kombinacija izraza spojenih s logičkim
operatorima. Izraz mora biti unutar okruglih zagrada. Naredba if radi tako da se ispita uvjet i
u skladu sa istinitom ili lažnom vrijednošću uvjetnog izraza izvršavaju naredbe. Ukoliko je
izraz istinit, naredba ili blok naredbi, koje slijede, se izvršavaju. Ukoliko želimo koristiti blok
naredbi, one moraju biti zatvorene unutar vitičastih zagrada.
Primjer 1: Unesi broj. Ako je uneseni broj pozitivan ispiši njegov prethodnik, a ako je
negativan ispiši njegov sljedbenik.
Primjer 2: Napiši program kojim će se unijeti tri realna broja te ispisati najmanji.
12
Višestruki izbor pomoću if ....else
Ovaj oblik izbora ima slijedeći oblik:
if (uvjetni izraz){
naredba ili blok naredbi;
}
else{
alternativna naredba ili blok naredbi;
}
Izjave if...else je moguće ugrađivati jednu u drugu. U sljedećem općem primjeru zelena
petlja je ugrađena u plavu.
if (uvjetni izraz 1){
naredba ili blok naredbi;
}
else{
if (uvjetni izraz 2){
naredba ili blok naredbi;
}
else{
alternativna naredba ili blok naredbi;
}
}
ili
if (uvjetni izraz 1){
if (uvjetni izraz 2){
naredba ili blok naredbi;
}
else{
alternativna naredba ili blok naredbi;
}
}
else{
naredba ili blok naredbi;
}
13
Primjer 1: Unijeti dva broja. Ako je prvi veći od drugog ispisati njihov zbroj, a ako nije (prvi
veći od drugog) ispisati njihov umnožak.
Ponavljanje izvršavanja naredbi pomoću petlji
Naredbe if, if-else i swich izvršavaju uvjet i naredbe samo jednom.
Čest je slučaj u praksi da naredbe moramo izvršiti više od jednog puta, kao na primjer u
slučaju učitavanja ili ispisa veće količine podataka. Za slučaj kada istu naredbu ponavljamo
više puta koristimo petlje.
Petlje označavaju naredbu ili niz naredbi koje će se izvršavati više puta za redom, dok se ne
ispuni neki, unaprijed zadan uvjet.
U C-u i C++u koriste se tri petlje: for, while i do-while.
Petlja for
Programsku petlju for u C++-u zapisujemo na sljedeći način:
for (inicijalizacija
kontrolne varijable)
{
blok naredbi;
}
kontrolne
varijable;
UVJET;
promjena
vrijednosti
Objašnjenje:
Inicijalizacija kontrolne varijable podrazumijeva postavljanje početne vrijednosti.
Početna vrijednost je UVIJEK broj koji se pridružuje varijabli petlje. Najčešće početna
vrijednost iznosi 1, ali može imati i drugu vrijednost 100, 200, ili bilo koji drugi broj.
Uvjet podrazumijeva postavljanje uvjeta izvršavanja petlje. Ako je uvjet zadovoljen, naredbe
unutar petlje će se izvršiti. Ako uvjet nije zadovoljen (ispunjen) petlja će se završiti i program
će nastaviti sa svojim izvođenjem s prvom prvom naredbom izvan petlje.
14
Kontrolna varijabla, kontrolira izvođenje petlje i svaki put kad se naredbe unutar petlje
izvedu, ona promijeni svoju vrijednost. Njezina uloga, najčešće je da "broji" koliko se puta
petlja izvela pa korak promjene kontrolne varijable najčešće iznosi 1. Međutim, postoje
programske situacije u kojima korak, odnosno promjena kontrolne varijable može iznositi 2 ili
3. Općenito promjena kontrolne varijable može biti bilo koji cijeli broj.
Primjer 1: Ispiši prvih 20 prirodnih brojeva, svaki u svom redu.
Na kraju ispiši i vrijednost varijable i nakon izvođenja petlje.
Primjer 2: Ispiši parne brojeve od 20 do 450.
15
Primjer 3: Ispiši sve prirodne brojeve između 1 i N, koji su djeljivi sa 3.
Petlja while
Petlja while izvršava jednu ili više naredbi, sve dok je zadani uvjet istinit.
While naredbu pišemo:
while (uvjet)
{
blok naredbi;
}
Kod petlje while se može dogoditi da se naredbe unutar petlje ne izvrše niti jednom; ako
uvjet nije zadovoljen.
Kod petlje do-while, ne postoji takav slučaj, odnosno naredbe se uvijek bar jednom izvedu.
16
Primjer 1: Za niz od 5 različitih brojeva ispiši zbroj.
Petlja do-while
Za razliku od while petlje ova petlja se izvede bar jednom jer se uvjet ispituje na njezinom
kraju. Naredbe unutar petlje se izvršavaju dok je uvjet istinit (dok ne postane lažan). Kada
uvjet postane lažan završava se petlja i program se nastavlja izvođenjem prve naredbe iza
zagrade petlje.
Naredba se zapisuje na sljedeći način:
do{
blok naredbi;
} while (uvjet);
Obratite pažnju da se točka-zarez koja označava kraj naredbe zapisuje iza while uvjeta.
17
Primjer:Za niz prirodnih brojeva od 1-N ispiši sumu (zbroj ) neparnih.
Funkcije
Funkcije su cjelovite skupine naredbi koje izvršavanjem ispunjavaju određene zahtjeve.
Omogućavaju raščlanjivanje problema na jednostavnije - manje cjeline, čime doprinose boljoj
preglednost izvornog koda i jednostavnijem rješenjem. Funkcija se definira na slijedeći
način:
tip_funkcije ime_funkcije(najava liste_argumenata)
{
najava lokalnih varijabli;
naredbe;
return izlazna_vrijednost;
}
gdje je:
- tip_funkcije određuje tip vrijednosti koju pozvana funkcija vraća u nadređenu funkciju,
a može biti bilo koji od osnovnih tipova podataka (int, char, float, double, void),
- ime_funkcije je identifikator preko kojeg se funkcija poziva, dok je
- lista_argumenata lista formalnih parametara sa pripadajućim tipovima preko kojih se niz
podataka iz nadređene funkcije prenose u pozvanu funkciju.
Funkcija u glavni program vraća jednu ili niti jednu vrijednost ovisno o tipu funkcije.
Za prijenos vrijednosti u nadređeni program koristi se naredba return;.
Funkcija se poziva na slijedeći način: ime_funkcije(stvarna lista_argumenata);
Funkcije se mogu pozivati u izrazima, petljama, ili kao argumenti u pozivima drugih funkcija.
Svaka korištena funkcija se mora najaviti prije poziva.
18
Primjer1: Napiši program kojim će se pomnožiti cijela dva broja i ispisati rezultat.
Za množenje cijelih brojeva napiši funkciju.
Primjer 2: Napiši funkciju za traženje najmanjeg od 3 učitana broja.
Zatim napiši glavni program koji će pozvati napisanu funkciju i ispisati njezino rješenje.
19
Zadaci za samostalni rad:
1. Napiši program koji će zbrajati dva broja pomoću funkcije za zbrajanje.
2. Napiši program koji će vršiti potenciranje unesenog broja pomoću funkcije za
potenciranje.
3. Napiši program koji omogućuje unošenje duljina stranica pravokutnika pa pomoću
funkcija za računanje površine i opsega računa i ispisuje površinu i opseg.
Polja ili nizovi
Nizovi su skupine podataka koji predstavljaju jednu cjelinu. Niz ima svoje ime, tip i veličinu
tj. Zauzima određeni prostor u memoriji računala. Niz se sastoji od članova niza koji imaju
svoju vrijednost i mjesto.
Nizove u procesu programiranju koristimo kada želimo raditi s više podataka koji su
organizirani u retke i stupce, istog su tima i imena. Međusobno se razlikuju po svom mjestu i
svojoj vrijednosti. Stoga ih je lakše premještati, sortirati i s njima vršiti različite računske
operacije.
Nizovi mogu sadržavati:
- brojeve (cijele ili decimalne)
- znakove (slova i posebne znakove)
Ovisno o tome razlikujemo numeričke i znakovne nizove. U definiranom nizu, svi podaci
moraju biti istog tipa. Nije moguće u istom nizu miješati brojeve i znakove. Svaki član u nizu
ima svoje mjesto. To mjesto zovemo INDEKS. Osim mjesta, član niza ima i svoju vrijednost.
Na primjer: Ako kažemo da želimo definirati niz imena A koji će imati 7 članova i čiji će
članovi biti cijeli brojevi, onda ćemo u programskom to napisati ovako: int A[7].
Grafički prikazano to izgleda ovako :
A[0]
2
A[1]
3
A[2]
5
A[3]
4
A[4]
5
A[5]
34
A[6]
56
Vidimo da svaki član niza ima svoje mjesto (indeks) i vrijednost. Indeksi idu od 0-6 i zapisani
su unutar uglatih zagrada.
Tako na primjer vrijednost prvog člana niza A[0] iznosi 2, drugog ,A[1], iznosi 3 itd. Uočimo
da članovi niza idu od 0 do N-1 gdje je N broj koji govori koliko ima članova niza.
Postoje jednodimenzionalni, dvodimenzionalni i višedimenzionalni nizovi.
Jednodimenzionalni nizovi
Jednodimenzionalni nizovi imaju samo jedan niz podataka. Na primjer niz A prikazan u
tablici ima 7 članova. Svi članovi su cijeli brojevi i nalaze se poredani su jedan iza drugoga (u
nizu).
A[0]
34
A[1]
5
A[2]
3
A[3]
21
A[4]
5
A[5]
3
A[6]
76
20
Kako bi program mogao raditi s nizom, na početku programa potrebno je rezervirati memoriju
u računalu. To se radi naredbom za deklaraciju koja se općenito zapisuje:
tip_niza naziv_niza [dimenzije] ;
Na primjer sljedeće deklaracije označavaju:
– da je deklariran niz cijelih brojeva koji se zove a i ima ukupno 10 članova, a
indeksi idu od 0 do 9
float X[8] – da je deklariran niz decimalnih brojeva koji se zove X i ima ukupno 8 članova ,
a indeksi idu od 0 do 7
char b[30] - da je deklariran niz od 30 znakova
int a[10]
Važno je uvijek rezervirati više prostora nego što će se u programu koristiti jer će inače
program neće raditi ispravno. Na primjer ako deklariramo da ćemo koristiti niz od 10 članova,
a unesemo 20 program neće moći prihvatiti preostalih 10 članova niza te neće moći ispravno
raditi.
Niz se može zadati unutar programa ili unosom s tipkovnice (naredbom cin ili scanf). Ako
se vrijednosti članova niza zadaju unutar programa navode se unutar vitičastih zagrada npr:
naredbom A[6]={2,34,1,67,99,7}; je zadan niz A kojeg čini 6 cijelih brojeva.
Kada se vrijednosti članova niza unose preko tipkovnice (naredbom cin) koristi se petlja for.
Petljom for unose se jedna po jedan član niza, povećavanjem kontrolne varijable za jedan. U
nastavku je dio programskog koda koji pokazuje unos članova niza pomoću petlje for.
for (i=0;i<N;i++) {
cin>>X[i];
}
Za ispis članova niza također se koristi petlja for:
for (i=0;i<N;i++) {
cout>>X[i];
}
21
Primjer 1: Unesi N članova niza X pomoću for petlje te ih zatim ispiši na zaslon računala,
također petljom for.
Primjer 2: Unesi N članova niza te ispiši najmanji element u nizu.
22
Dvodimenzionalni nizovi
Karakteristika dvodimenzionalnih nizova je da imaju više redaka i stupaca.Tablicom u
nastavku predstavljen je cjelobrojni niz naziva
A.
1. redak
2. redak
1. stupac
2
0
2. stupac
4
3
3. stupac
5
9
4.stupac
6
7
Čitajući tablicu, članovi niza su sljedeći:
A[0,0] = 2
A[0,1] = 4
A[0,2] = 5
A[0,3] = 6
A[1,0] = 0
A[1,1] = 3
A[1,2] = 9
A[1,3] = 7
Prvi broj unutar uglatih zagrada je redak, a drugi stupac.
Ako članove niza zadajemo u programu onda to za, prethodno tablicom prikazani niz,
zapisujemo ovako:
int A[2][4]={{2,4,5,6},{0,3,9,7}};
gdje prvi broj označava broj redaka, a drugi broj stupaca. Kao i kod jednodimenzionalnih
nizova prvi redak i stupac imaju redni broj (index) 0.
Dvodimenzionalni niz, se primjerice u praksi koristi za rješavanje problema sortiranja niza
(od najvećeg do najmanjeg ili od najmanjeg do najvećeg). U nastavku je primjer sortiranja
niza korištenjem jednodimenzionalnog niza.
Pokušajte riješiti isti zadatak korištenjem dvodimenzionalnog niza.
23
Primjer: Unesi niz od N cijelih brojeva te ispiši sortiran niz od najmanjeg do najvećeg.
Nizovi znakova
Za rad s nizom znakova možemo koristiti tip string ili char. Tip string se koristi u slučaju
ako radimo s riječima ili rečenicama, dok tip char radi samo s jednim znakom. DEfiniramo li
polje ili niz znakova tipa char, također ćemo moći raditi s riječima ili rečenicama.
Pri rad s tipom string na početku programa potrebno je izvršiti deklaraciju varijabli
naredbom;
string ime_varijable;
Budući da varijabla string prilikom unosa unese znakove jedne riječi, postoji posebna
naredba za unos cijele rečenice:
getline(cin, ime_varijable);
24
Primjer 1: Unesi i ispiši svoje ime.
Primjer 2: Unesi rečenicu " Danas učim programiranje u C++." te ju nakon unosa ispiši na
zaslonu računala.
Niz znakova možemo i definiramo kao jednodimenzionalni nizi čiji su elementi znakovi
(char).
Znakovni niz se deklarira kao i svaki jednodimenzionalni niz, navođenjem tipa char, imena
niza i njegove duljine.
Kod određivanja duljine niza znakova treba voditi računa o tome da niz znakova završava nul
znakom (\0) koji zauzima jedno mjesto niza.
Niz se inicijalizira tako da se njegov sadržaj navodi unutar dvostrukih navodnika ( " " ).
Za učitavanje i ispis znakovnih nizova mogu se koristiti standardni načini učitavanja i
ispisivanja elemenata jednodimenzionalnog niza
(cout , cin , printf(), scanf() u kombinaciji s petljom for).
Osim ovog načina mogu se koristiti i funkcije:
- gets() - koja omogućuje unošenje niza znakova sa standardnog ulaza.
- puts() - koja omogućava ispis niza znakova na standardni izlaz.
(Obje funkcije nalaze u biblioteci stdio.h)
25
Primjer 1: Napiši program kojim se unosi niz znakova i ispisuje duljina učitanog niza.
Strukture
Struktura je kombinacija skupa istih ili različitih tipova podataka koje formira sam korisnik,
prema vlastitim potrebama.
U C++u se struktura općenito zapisuje:
struct ime_strukture
{
najava članova strukture;
};
gdje je struct ključna riječ koja označava početak najave strukture, ime_strukture koju
najavljujemo, a unutar vitičastih zagrada navodimo sve čalnove(varijable) koje želimo kreirati
strukturom.
Varijable strukture mogu se navesti :
a) odmah iza strukture
struct ime_strukture
{
najava članova strukture;
} lista strukturnih varijabli;
- ili u posebnoj naredbi čiji je oblik
struct ime_strukture lista_strukturnih_varijabli;
Članovima strukturne varijable pristupa se preko imena strukturne varijable i strukturne točke
(.) operatora.
U nastavku je primjer programa u kojem se unose podaci za: ime, prezime, matični broj,
prosjek i datum rođenja za sve učenike jednog razreda (najviše 40). Nakon unosa svih
26
podataka traži se učenik s najboljim prosjekom te se na kraju programa na zaslonu računala
ispisuju svi podaci za učenika koji ima najbolji prosjek.
Objašnjenje: U programu su definirane dvije strukture: datum i ucenik. Struktura datum služi
za unos datuma rođenja učenika i sastoji se od dana, mjeseca i godine rođenja. Druga
struktura se zove ucenik i sadrži 2 niza znakova (za ime i prezime), matični broj i prosjek
ocjena. Niz (polje) razred se sastoji od struktura tipa učenik.
Na primjer poziv za ispis varijable razred[0].rodjendan.godina će dati za ispis godine rođenja
za 1. učenika, a razred[1].prosjek će dati ispis prosjeka za 2. učenika.
27
U nastavku je isti primjer, ali uz korištenje naredbi za formatirani ulaz i izlaz (printf i scanf).
28
Datoteke
Datoteke omogućuju pohranjivanje velike količine podataka koji se mogu koristiti neovisno o
programu.
Datoteke mogu biti tekstualne ili binarne. U nastavku će biti opisane tekstualne datoteke.
2 su osnovna načina upisa/ispisa podataka u datoteku:
- formatirani
- neformatirani
Neformatirani način upisa i ispisa podataka iz datoteke koristi naredbe:
ofstream: za upisivanje podataka u datoteku
ifstream: za čitanje podataka iz datoteke
fstream: za čitanje i pisanje podataka u datoteku
a obavlja se kombinacijama ključnih riječi open i close.
Primjer1: Otvaranje datoteke primjer.txt i upis teksta "Ovo je primjer pisanja teksta u
datoteku". Datoteka će se nalaziti u radnoj mapi tvrdog diska te se može pročitati izlaskom iz
C++ a i pokretanjem programa Blok za pisanje (NotePad).
29
Primjer 2: Ispis (čitanje) sadržaja prethodnim zadatkom kreirane datoteke primjer.txt.
Želimo li koristiti formatirani upis/spis podataka u datoteku koristiti ćemo naredbe fscanf()
i fprintf().
Prije otvaranja datoteke programu ćemo naredbom FILE *identifikator; najaviti da ćemo
raditi s datotekom. Identifikator je naziv datoteke koji ćemo koristiti u programu, a zvjezdica
govori da se radi o pokazivaču.
Datoteku ćemo otvoriti funkcijom fopen(), a nakon uporabe zatvoriti funkcijom fclose();.
Općenito se te funkcije zapisuju:
fopen("ime_datoteke","način_otvaranja");
fclose(identifikator);
Ime datoteke zadaje se po istom pravilu kao i naziv varijable, a način otvaranja datoteke
(tekstualne) određuje njezine mogućnosti. Tako na primjer može postojati datoteka koja se
može samo čitati ili u koju se mogu samo zapisivati podaci samo. Načini otvaranja se bilježe
slovom (r, w, r+) i detaljnije su opisani u tablici.
30
Način otvaranja
"r"
"w"
"a"
"r+"
"w+"
"a+"
Objašnjenje
Otvara tekstualnu datoteku za čitanje. Ako datoteka ne postoji javlja
pogrešku.
Otvara tekstualnu datoteku za pisanje u nju.
Otvara tekstualnu datoteku za dodavanje novih podataka na njen kraj.
Otvara tekstualnu datoteku za čitanje i pisanje. Ako ne postoji javlja
pogrešku.
Otvara tekstualnu datoteku za čitanje i pisanje. Ako datoteka ne postoji
kreirat će ju. Ako datoteka postoji, svi podaci iz nje bit će izbrisani prije
upisivanja novih.
Otvara tekstualnu datoteku za dodavanje novih podataka na njen kraj.
Ako datoteka ne postoji bit će kreirana
Za pisanje u datoteku koristi se nekoliko funkcija. Najčešće korištene funkcije su fprintf() i
funkcija fwrite() koja je pogodna za upisivanje blokova podataka.
Za čitanje podataka iz datoteke najčešće se koriste funkcije fscanf() i fread() - koja se
često koristi u kombinaciji sa strukturama.
U programima za rad s datotekama često ćemo naići na dio programskog koda kojim se
ispituje da li je datoteka ispravno otvorena. Ako je datoteka deklarirana sa FILE *f; onda taj
dio koda izgleda ovako:
if(f==NULL)
{
printf("Greska pri otvaranju");
exit(1);
}
Ako je uvjet (f==NULL) ispunjen na zaslonu računala će se ispisat poruka "Greška pri
otvaranju".
31
Primjer 1: Napišite program koji u radnoj mapi kreira datoteku test1.txt i u nju smješta prvih
100 cijelih brojeva.
(Napomena: nakon izvođenja programa izađite i u radnoj mapi provjerite da li imate
datoteku test1.txt.
Njezin sadržaj možete pročitati s programom Blok za pisanje (NotePad))
Primjer 2: Napišite program koji će pročitati sadržaj iz datoteke iz prošlog zadatka i ispisati
njezin sadržaj na zaslonu računala.
32
Objekti i klase
U novije vrijeme u konceptu programiranja koriste se objekti i klase.
Objekt u realnom svijetu, može biti: automobil ili bicikl, a u programskoj igri lopta ili neki
lik. Svaki objekt je definiran stanjem i ponašanjem; na primjer, stanje lika u igri može biti: lik
trči, skače ili stoji, a ponašanje lika možemo definirati brzinom trčanja i visinom skoka. U
programu je objekt opisan varijablama koje mu određuju stanje i metodama koje mu određuju
ponašanje.
Klasa predstavlja nacrt (predložak) objekta. Stoga se uvijek prvo kreiraju klase na temelju
kojih se proizvode objekti. Na primjer, kada kreiramo klasu za lik, u igri možemo kreirati više
likova koji mogu imati drugačije stanje (npr:neki lik može letjeti) i ponašanje (ima brzinu
letenja).
Pogledajte u nastavku video u kojem učenici kroz primjere u razredu objašnjavaju osnovne
pojmove objektnog programiranja, a to su:
- klase
- objekti
- svojstva
- metode i
- događaji
(Napomena: videozapis je na engleskom jeziku)
http://msdn.microsoft.com/en-us/beginner/cc963989.aspx
U C++u definiranje klasa slično je definiranju struktura u programskom jeziku C, s tim da je
ključna riječ class, a ne struct. U klasama je također potrebno zadati varijable koje će biti
dostupne cijelom programu. Takve varijable zovemo javne i u C++ se zapisuju s public.
33
Primjer 1: U ovom primjeru kreirana je klasa koja se zove Primjer i koja sadrži funkciju
Ispis().
Funkcija Ispis() ispsuje tekst "Ispis teksta na zaslon racunala koristenjem klase Ispis" na
zaslonu računala.
34
Primjer 2:
U primjeru 2 zadana je klasa pravokutnik koja ima dvije varijable: stranicu a i stranicu b. To
su "stanja" pravokutnika, odnosno pravokutnik je određen veličinama tih stranica.U klasi se
nalaze i dvije funkcije: povrsina() i opseg() koje mu određuju "ponašanje", odnosno određeno
je pravokutniku možemo računati opseg i površinu.
U glavnom programu naredbom pravokutnik prvi; je deklariran objekt prvi prema predlošku
koji je opisan u klasi pravokutnik. Zna se da objekt ima dva stanja prvi.str1 i prvi.str2. Budući
da su to javne varijable u klasi pravokutnik, naredbom prvi.opseg(); se može dobiti izračun
opsega za objekt prvi, a naredbom prvi.povrsina(); površina za objekt prvi.
35