c++

213
OSNOVE PROGRAMIRANJA u C++ Kako pokrenuti i izvesti primjer u programu MS Visual C++ 2008 Express Edition Kako pokrenuti i izvesti primjer u programu Dev C++

Upload: marko-knezevic

Post on 13-Aug-2015

339 views

Category:

Documents


3 download

DESCRIPTION

skripta

TRANSCRIPT

Page 1: C++

OSNOVE PROGRAMIRANJA u C++

 

 

Kako pokrenuti i izvesti primjer u programu  MS Visual C++ 2008 Express Edition

Kako pokrenuti i izvesti primjer u programu Dev C++

 

 

Page 2: C++

Programiranje C++ 2

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:

#include <cstdlib>#include <iostream>using namespace std;int main(){  deklaracija varijabli;  naredbe programa;

system ("PAUSE");return 0;} 

Linije programa koje počinju s znakom # nisu 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 mašinski 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. Ta se naredba može zamijeniti i naredbom #include <stdio> na početku programa.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 .

Page 3: C++

Programiranje C++ 3

Primjer1: Program računa i ispisuje zbir za a=5 i b=3.

#include <cstdlib>#include <iostream>using namespace std;int main(){int a,b,c; /*deklaracija varijabli*/a=5;b=3;c=a+b; //racunanjecout << c<<endl; //ispis zbrojasystem ("PAUSE");return 0;}

Izlaz:

8

Press any key to continue . . .

Primjer 2: Program ispisuje pozdravnu poruku u više redaka na ekranu.

#include <cstdlib>#include <iostream>using namespace std;int main(){cout << "Pozdrav";cout << " ";cout << " 2. razredu ";cout << endl;system ("PAUSE");return 0;}

Izlaz:

Pozdrav 2. razredu

Press any key to continue . . .

Page 4: C++

Programiranje C++ 4

Tipovi podataka 

Računaru je važno s kakvim podacima radi. 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čunaru i ima određeni veličinu ili obim. U

sljedećoj tablici dan je prikaz vrsta podataka, veličine u bitovima koju taj podatak zauzima u memoriji

računara i obim u kojem se može nalaziti u programskom jeziku C.

Tip podatka Veličina u bitovima Opseg

char 8 -128 do 127

signed char 8 -128 do127

unsigned char 8 0 do 255

short int 16 -32768 do 32767

unsigned int 16 0 do 65535

int 16 -32768 do 32767

long 32 -2147483648 do 2147483647

unsigned long 32 0 do 4294967295

float 32 3,4x10-38 do 3,4x1038

double 64 1,7x10-308 do 1,7x10308

long double 80 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 lon 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).

Page 5: C++

Programiranje C++ 5

Č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

 Aritmetički operatori

Operacija Operator

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.

%

Matematičke funkcije

Osnovne koje na početku treba znati:

Opis funkcije Zapisivanje

Drugi korijen pozitivnog broja

sqrt(x)

Potenciranje (xy) 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

Page 6: C++

Programiranje C++ 6

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.

Primjeri deklaracija varijabli:

int broj;            /*cjelobrojna varijabla*/

char znak;        /*znakovna varijabla*/

float temp;       /*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 tokom 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 tastature i pridružujemo ih varijablama u programu. Varijable kojima želimo pridružiti vrijednosti zapisujemo iza naredbe cin. Na primjer, naredbom cin>>a uz pomoć tastature, pridružujemo varijabli a broj ili slovo, a naredbomcin >>a>>bpridruž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";

Page 7: C++

Programiranje C++ 7

ispisuje se pozdravna poruka Pozdrav na zaslonu računala, a naredbom

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 ekranu računara vrijednost varijable a.

Primjer1: Program ispisuje pozdravnu poruku u jednom retku na zaslonu računala

#include <cstdlib>#include <iostream>using namespace std;int main(){cout << "Pozdrav";

system ("PAUSE");return 0;}

Izlaz:

Pozdrav

Press any key to continue . . .

Primjer 2: Programom se unosi broj i ispisuje njegov kvadrat.

#include <cstdlib>#include <iostream>using namespace std;int main(){int a;

Page 8: C++

Programiranje C++ 8

cout<< "Unesi broj: ";                          /*ispis poruke*/cin >>a; /*unos broja*/cout << " Kvadrat broja a je "<<a*a;     /*ispis kvadrata*/cout << endl;                                    /*ispis praznog retka*/

system ("PAUSE");return 0;

}

Izlaz:

Unesi broj: 10 Kvadrat broja a je 100Press any key to continue . . .

PRIMJERI

1. Program računa zbir dva sabirka. #include<iostream.h> using namespace std;

int main()

Page 9: C++

Programiranje C++ 9

{ int a; int b; int c; cout<<"Program racuna zbir dva sabirka"<<endl; cout<<"Prvi sabirak a="; cin>>a; cout<<"Drugi sabirak b="; cin>>b; c=a+b; cout<<"Zbir c="; cout<<c<<endl; system("PAUSE"); return 0;}

Izlaz:Program racuna zbir dva sabirkaPrvi sabirak a=10Drugi sabirak b=8Zbir c=18Press any key to continue . . .

2. Program računa razliku . #include<iostream.h>

using namespace std;int main(){ int a; int b; int c; cout<<"Umanjenik a="; cin>>a; cout<<"Umanjilac b="; cin>>b; c=a-b; cout<<"Razlika c="; cout<<c<<endl; system("PAUSE"); return 0;}Izlaz:Program racuna razliku dva brojaUmanjenik a=10Umanjilac b=8Razlika c=2Press any key to continue . . .3.Program računa proizvod.

#include<iostream.h>int main(){ float a; float b; float c; cout<<"Program racuna proizvod"<<endl;

Page 10: C++

Programiranje C++ 10

cout<<"Prvi cinilac a="; cin>>a; cout<<"Drugi cinilac b="; cin>>b; c=a*b; cout<<"Proizvod c="; cout<<c<<endl; system("PAUSE"); return 0;} Izlaz:Program racuna proizvodPrvi cinilac a=10

Drugi cinilac b=8Proizvod c=80Press any key to continue . . .

4.Program računa količnik.

#include<iostream.h>int main(){ float a; float b; float c; cout<<"Program racuna kolicnik"<<endl; cout<<"Djeljenik a="; cin>>a; cout<<"Djelitelj b="; cin>>b; c=a/b; cout<<"Kolicnik c="; cout<<c<<endl; system("PAUSE"); return 0;}

Izlaz:Program racuna kolicnikDjeljenik a=10

Djelitelj b=5Kolicnik c=2Press any key to continue . . .

5.Program računa ostatak pri cjelobrojnom dijelenju .

#include<iostream.h>using namespace std;int main(){ int a;

Page 11: C++

Programiranje C++ 11

int b; int c; cout<<"Ostatak pri cijelobrojnom dijelenju"<<endl; cout<<"Djeljenik a="; cin>>a; cout<<"Djelitelj b="; cin>>b; c=a%b; cout<<"Ostatak c="; cout<<c<<endl; system("PAUSE"); return 0;}

Izlaz:Ostatak pri cijelobrojnom dijelenjuDjeljenik a=10

Djelitelj b=4Ostatak c=2Press any key to continue . . .

6. Program računa stepene Kelvina ako se unesu stepeni Celzijusa?

#include<iostream.h>using namespace std;int main(){ float c; float k; cout<<"Program racuna stepene Kelvina"<<endl; cout<<"Stepeni Celzijusa c="; cin>>c; k=c+273.15; cout<<"Stepeni Kelvina k="; cout<<k<<endl; system("PAUSE"); return 0;} Izlaz:Program racuna stepene KelvinaStepeni Celzijusa c=10Stepeni Kelvina k=283.15Press any key to continue . . .

7.Program služi za potenciranje.

#include <iostream>#include <cmath>using namespace std;int main () {

Page 12: C++

Programiranje C++ 12

float baza; float eksponent; cout<<"FUNKCIJE-POTENCIRANJE"<<endl; cout<<"Unesite bazu ="<<endl; cin>>baza; cout<<"Eksponent ="<<endl; cin>>eksponent; float R=pow(baza,eksponent); cout<<"REZULTAT R="<<endl; cout<<R; cout<<endl; system ("pause"); return 0; }

Izlaz:FUNKCIJE-POTENCIRANJEUnesite bazu =15Eksponent =2REZULTAT R=225Press any key to continue . . .

8.Program učitava ugao izražen u stepenima, minutama i sekundama i ispisuje koliko je to radijana.#include<iostream>using namespace std;main(){ float r,h,m,s,pi; cout<<"Konverzija stepena u radijane"<<endl; cout<<"Stepeni h="; cin>>h; cout<<"Minute m="; cin>>m; cout<<"Sekunde s="; cin>>s; pi=3.14; r=pi*(h+m/60+s/3600)/180; cout<<"Radijani r="<<endl; cout<<r; cout<< endl; system("PAUSE"); return 0; }Izlaz:Konverzija stepena u radijaneStepeni h=10Minute m=5Sekunde s=35Radijani r=0.176068Press any key to continue . . .

9.Program učitava ugao u radijanima , a zatim ispisuje u stepenima.#include<iostream.h>using namespace std;main()

Page 13: C++

Programiranje C++ 13

{ float r,s; const float pi =3.14; cout<<"Konverzija radijana u stepene"<<endl; cout<<"Radijani r="; cin>>r; s=r*180/pi; cout<<"Stepeni s="<<s<<endl; system("PAUSE"); return 0; }Izlaz:Konverzija radijana u stepeneRadijani r=1Stepeni s=57.3248Press any key to continue . . .

-Standardne funkcijeABS(x)-apsolutna vrednost od X

SQR(x)-X2 (kvadrat od x)

SQRT(x)-kvadratni koren od x

TRUNC (x)-izdvaja ceo deo realnog argumenta

Na primer: trunc(4.1) daje 4

trunc(-4.1) daje -4

ROUND(x)-zaokružuje argument x do najbližeg cijelog broja

Na primjer: round(5.6) daje 6

round(5.2) daje 5

round(-7.6) daje -8

round(8.5) daje 9

round(-8.5) daje -9

10.Program računa apsolutnu vrijednost broja

#include<iostream.h>#include<cmath>

Page 14: C++

Programiranje C++ 14

using namespace std;int main(){ int a,b; cout<<"Apsolutna vrijednost broja"<<endl; cout<<"broj a="; cin>>a; b=abs(a); cout<<"Apsulutna vrijednost b="; cout<<b<<endl; system("PAUSE"); return 0;}

Izlaz:Apsolutna vrijednost brojabroj a=-25Apsulutna vrijednost b=25Press any key to continue . . .

11.Program zaokružuje argument na najbliži cijeli broj.

#include<iostream.h>#include<cmath>using namespace std;int main(){ float a; int b; cout<<"Zaokruzivanje argumenta-broja"<<endl; cout<<"broj a="; cin>>a; b=round(a); cout<<"Broj b="; cout<<b<<endl; system("PAUSE"); return 0;}

Izlaz:Zaokruzivanje argumenta-brojabroj a=25.7Broj b=26Press any key to continue . . .

12.Program izdvaja ceo deo realnog argunenta (odbacuje decimalna mjesta).

#include<iostream.h>#include<cmath>using namespace std;int main()

Page 15: C++

Programiranje C++ 15

{ float a; int b; cout<<"Program odbacuje decimalna mjesta"<<endl; cout<<"broj a="; cin>>a; b=trunc(a); cout<<"Broj b="; cout<<b<<endl; system("PAUSE"); return 0;} Izlaz : Program odbacuje decimalna mjestabroj a=25.78Broj b=25Press any key to continue . . .

13.Brzina rečne struje je v1 m/s a brzina čamca u odnosu na ovu struju v2. Uraditi program koji računa brzinu čamca u odnosu na obalu ako:

čamac plovi nizvodno čamac plovi uzvodno

#include<iostream>using namespace std;main(){float v1,v2,v;cout<<"Brzina camca"<<endl;cout<<"Brzina rjecne struje v1=";cin>>v1;cout<<"Brzina camca v2=";cin>>v2;v=v1+v2;cout<<"Brzina camca u odnosu na obalu,camac plovi nizvodno v=";cout<<v<<endl;v=v2-v1;cout<<"Brzina camca u odnosu na obalu , camac plovi uz rijeku v=";cout<<v<<endl;system("PAUSE");return 0;}

Izlaz:Brzina camcaBrzina rjecne struje v1=10Brzina camca v2=8Brzina camca u odnosu na obalu,camac plovi nizvodno v=18Brzina camca u odnosu na obalu , camac plovi uz rijeku v=-2Press any key to continue . . .

14.Autobus je prešao prvih s1 km srednjom brzinom v1 km/h , sledećih s2 km srednjom brzinom v2 km/h. Odrediti srednju brzinu autobusa na cijeloj relaciji.

v= st ; s=s1+s2 ; t=t1+t2 ;

t 1=s1v1 ; t 2=

s2v2 ;

v=v1∗v2∗(s1+s2 )v2∗s1+v1∗s2

#include<iostream>using namespace std;

Page 16: C++

Programiranje C++ 16

main(){float s1,s2,v1,v2,v;cout<<"SREDNJA BRZINA NA CIJELOM PUTU"<<endl;cout<<"Duzina prvog dijela puta s1=";cin>>s1;cout<<"Duzina drugog dijela puta s2=";cin>>s2;cout<<"Brzina na prvom dijelu puta v1=";cin>>v1;cout<<"Brzina na dtugom dijelu puta v2=";cin>>v2;v=(v1*v2*(s1+s2))/(v2*s1+v1*s2);cout<<"Srednja brzina na cijelom putu v=";cout<<v<<endl;system("PAUSE");return 0;}

Izlaz:

SREDNJA BRZINA NA CIJELOM PUTUDuzina prvog dijela puta s1=10Duzina drugog dijela puta s2=15Brzina na prvom dijelu puta v1=4Brzina na dtugom dijelu puta v2=6Srednja brzina na cijelom putu v=5Press any key to continue . . .

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++.

Page 17: C++

Programiranje C++ 17

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 scanf printf

char %c %c

int %d %d

float (decimalni) %f %f

float (eksponencijalni) %e %e

string (niz znakova) %s %s

unsigned %u %u

long int %ld %ld

double %lf %lf

long double %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++u 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);

Page 18: C++

Programiranje C++ 18

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.

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 Ime Značenje

\a Alert Aktiviranje zujala

\b Backspace Vraćanje unatrag jedan znak

\f Formated Start nove strane ili ekrana

\n Newline Pomicanje u novu liniju

\r Carriage ret Povratak na početak linije

\t Horizontal tab Pomicanje na narednu tab poziciju

\v Vertical tab Pomicanje prema dolje

\\ Backslash Prikazivanje kose crte

\' Single quote Prikazivanje jednostrukog navodnika

\'' Double quote Prikazivanje dvostrukih navodnika

\? Question mark Prikazivanje znaka pitanja

\OOO   Prikazivanje znakova sa oktalno zadanim ASCII kodom

\xHHH  Prikazivanje znakova sa heksadecimalno zadanim ASCII

kodom

Primjer 1: Unesi dva realna broja i ispiši njihov proizvod i zbir.

#include <cstdlib>#include <iostream>using namespace std;int main(){ float a,b,c,d;printf ("\nUnesi prvi broj");scanf("%f",&a);printf("\nUnesi drugi broj");scanf("%f",&b);

Page 19: C++

Programiranje C++ 19

c=a+b;d=a*b;printf ("\n Umnožak je %f , a zbroj %f ",d,c);system ("PAUSE"); return 0;} Izlaz:

Unesi prvi broj10

Unesi drugi broj5

Umno×ak je 50.000000 , a zbroj 15.000000 Press any key to continue . . .

Primjer 2: Napiši program kojim će te unijeti radijus kruga i izračunati obim i površinu kruga.

#include <cstdlib>#include <iostream>using namespace std;  int main()  {    const float pi=3.14159;    float r,o,p;     printf(" \n Unesi radijus kruga = ");    scanf ("%f",&r);     p=r*r*pi;     o=2*r*pi;     printf(" \n Poršina kruga je p=%f ",p);     printf(" \n Opseg kruga je O=%f ",o);system ("PAUSE"); return 0;  }       Izlaz: Unesi radijus kruga = 10 Povrsina kruga je p=314.158997 Opseg kruga je O=62.831802 Press any key to continue . . .

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 zbir.(Napomena: za unos i ispis koristi funkciju scanf i printf tako da se brojevi unose s razmakom, npr: 2 3)#include <cstdlib>#include <iostream>using namespace std;int main()

Page 20: C++

Programiranje C++ 20

{int a,b,c;printf("\nUnesi dva broja= ");scanf("%d   %d",&a,&b);c=a+b;printf ("\n Zbroj brojeva %d   %d je zbir %d ",a,b,c);

system ("PAUSE");return 0;}Izlaz:Unesi dva broja= 105 Zbroj brojeva 10 5 je zbir 15 Press any key to continue . . .

Primjer 2: Unesi dva cijela  broja i ispisi njihovu razliku.(Napomena: za unos i ispis koristi funkciju scanf i printf tako da se brojevi unose s zarezom npr: 2,3)#include <cstdlib>#include <iostream>using namespace std;int main(){int a,b,c;printf("\nUnesi dva broja= ");scanf("%d,%d",&a,&b);c=a-b;printf ("\n Zbroj brojeva %d  %d Razlika je  %d ",a,b,c);

system ("PAUSE");return 0;}

Izlaz:Unesi dva broja= 10 5 Zbroj brojeva 10 5 Razlika je 5 Press any key to continue . . .Objašnjenje: Broj mjesta rezerviran za ispis detaljnije se regulira brojem ispred formata. Na primjer za ispis cijelih brojeva možemo napisati:printf ("\n Zbroj 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

Page 21: C++

Programiranje C++ 21

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

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

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 operatoriRač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 Primjer

> veći od 5>4

>= veći od ili jednak 5>=x

< manji od 4<5

<= manji od ili jednak x<=5

== jednak 5==5

!= nije jednak 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)

Page 22: C++

Programiranje C++ 22

rezultat je istinit ukoliko je bilo koji od uvjeta istinit. Ukoliko je prvi uvjet istinit, nije potrebno daljnje testiranje, rezultat je svakako istini

If i if..else naredbe

Jednostavna if naredba ima oblik:

 if (uslov){

 naredba ili blok naredbi;

 }

Uslov 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.

#include <cstdlib>#include <iostream>using namespace std;int main(){int a;printf ("Unesi broj:");scanf ("%d",&a);if (a>0)printf("\nPrethodnik je %d",a-1);

Page 23: C++

Programiranje C++ 23

if (a<0)printf("\nSljedbenik je %d",a+1);

system ("PAUSE");return 0;}

Izlaz:Unesi broj:7Prethodnik je 6Press any key to continue . . .Unesi broj:-7Sljedbenik je -6Press any key to continue . . .

Primjer 2: Napiši program kojim će se unijeti tri realna broja te ispisati najmanji.

#include <cstdlib>#include <iostream>using namespace std;int main(){float a,b,c,min;printf("Unesi brojeve");scanf("%f %f %f", &a,&b,&c);min=a;if (b<min)min=b;if (c<min)min=c;printf ("\n Najmanji je %f",min);

system ("PAUSE");return 0;}

Izlaz:Unesi brojeve10 -7 2 Najmanji je -7.000000 Press any key to continue . . .

PRIMJERI

1.Program računa količnik ,a za djeljenik ili djelitelj ako se unese nula(0) program ispisuje greška.

#include <iostream>using namespace std;int main () { float a,b,c; cout<<"Dijelenje"<<endl;

Page 24: C++

Programiranje C++ 24

cout<<"Unesite djeljenik a="; cin>>a; cout<<"Unesite djelitelj b="; cin>>b; if((a==0)||(b==0)) { cout<<"GRESKA"<<endl;} else{ c=a/b; cout<<"Kolicnik c="; cout<<c; cout<<endl;} system ("pause"); return 0; }Izlaz:

DijelenjeUnesite djeljenik a=0Unesite djelitelj b=7GRESKAPress any key to continue . . .

DijelenjeUnesite djeljenik a=12.5Unesite djelitelj b=2Kolicnik c=6.25Press any key to continue . . .

2.Program računa površinu , obim i dijagonalu kvadrata a za stranicu a ako se upiše a<=0 program ispisuje greška.

#include <iostream>#include <cmath>using namespace std;int main () { float a,p,d,o; cout<<"KVADRAT-POVRSINA,OBIM I DIJAGONALA"<<endl; cout<<"Unesite stranicu a =";

Page 25: C++

Programiranje C++ 25

cin>>a; if(a<=0) { cout<<"GRESKA"<<endl;}else{ cout<< "Dijagonala d="; d=a*sqrt(2); cout<<d; cout<<endl; cout<<"Povrsina kvadrata P="; p=pow(a,2); cout<<p; cout<<endl; cout<<"Obim kvadrata O="; o=4*a; cout<<o; cout<<endl;} system ("pause"); return 0; }

Izlaz:KVADRAT-POVRSINA,OBIM I DIJAGONALAUnesite stranicu a =-5GRESKAPress any key to continue . . .

KVADRAT-POVRSINA,OBIM I DIJAGONALAUnesite stranicu a =8Dijagonala d=11.3137Povrsina kvadrata P=64Obim kvadrata O=32Press any key to continue . . .

3.Program računa drugi korijen a ako je potkorjena vrijednost manja od nule(0) , program ispisuje greška.

#include <iostream>#include <cmath>using namespace std;int main () { float broj; float rezultat;

Page 26: C++

Programiranje C++ 26

cout<<"KVADRATNI KORIJEN"<<endl; cout<<"Unesite broj ="; cin>>broj; if(broj<0) { cout<<"Greska"<<endl;}else{rezultat=sqrt(broj); cout<< "Kvadratni korijen -rezultat="; cout<<rezultat; cout<<endl;} system ("pause"); return 0; }

Izlaz:

KVADRATNI KORIJENUnesite broj =-7GreskaPress any key to continue . . .

KVADRATNI KORIJENUnesite broj =16Kvadratni korijen -rezultat=4Press any key to continue . . .

4.Program računa površinu , obim i dijagonalu pravougaonika a za stranice a i b kad se unese vrijednost nula ili manje od nule program ispisuje greška(pogresan upis).

#include <iostream>#include <cmath>using namespace std;int main () { float a,b; float p,d,o; cout<<"PRAVOUGAONIK-POVRSINA,OBIM I DIJAGONALA"<<endl;

Page 27: C++

Programiranje C++ 27

cout<<"Unesite stranicu a ="; cin>>a; cout<<"Unesite stranicu b ="; cin>>b; if(a<=0 ||b<=0 || a<=b) {cout<<"POGRESAN UPIS"<<endl;}else{d=sqrt(pow(a,2)+pow(b,2)); cout<< "Dijagonala d="; cout<<d; cout<<endl; cout<<"Povrsina pravougaonika p="; p=a*b; cout<<p; cout<<endl; cout<<"Obim pravougaonika o="; o=2*a+2*b; cout<<o; cout<<endl;} system ("pause"); return 0; }

Izlaz:PRAVOUGAONIK-POVRSINA,OBIM I DIJAGONALAUnesite stranicu a =-5Unesite stranicu b =8POGRESAN UPISPress any key to continue . . .

PRAVOUGAONIK-POVRSINA,OBIM I DIJAGONALAUnesite stranicu a =10Unesite stranicu b =5Dijagonala d=11.1803Povrsina pravougaonika p=50Obim pravougaonika o=30Press any key to continue . . .

5.Program računa površinu i zapreminu valjka a za pluprečnik r i visinu h ako su <=0 program ispisuje Pogresan upis.

#include <iostream>#include <cmath>using namespace std;int main () { float r,h; float p,v; cout<<"VALJAK-POVRSINA I ZAPREMINA"<<endl;

Page 28: C++

Programiranje C++ 28

cout<<"Unesite poluprecnik r ="; cin>>r; cout<<"Unesite visinu valjka h ="; cin>>h; if(r<=0 ||h<=0 ) {cout<<"POGRESAN UPIS"<<endl;}else{ cout<< "Povrsina valjka p="; p=2*r*3.14*(r+h); cout<<p; cout<<endl; cout<<"Zapremina valjka v="; v=pow(r,2)*3.14*h; cout<<v; cout<<endl;} system ("pause"); return 0; }

Izlaz:

VALJAK-POVRSINA I ZAPREMINAUnesite poluprecnik r =-7Unesite visinu valjka h =5POGRESAN UPISPress any key to continue . . .

VALJAK-POVRSINA I ZAPREMINAUnesite poluprecnik r =10Unesite visinu valjka h =15Povrsina valjka p=1570Zapremina valjka v=4710Press any key to continue . . .

6.Program računa zbir cifara dvocifrenog broja.

#include <iostream.h>main(){int b,j,d,s;cout<<"Zbir cifara dvocifrenog broja"<<endl;cout <<"Broj b=";cin >>b;if ((b>99) || (b<10))

Page 29: C++

Programiranje C++ 29

{cout<<"GRESKA"<<endl;}else{j=b/10;d=b%10;s=j+d;cout<<"Zbir s=";cout<<s<<endl;}system("PAUSE");return 0;}

Izlaz:Zbir cifara dvocifrenog brojaBroj b=145GRESKAPress any key to continue . . .Zbir cifara dvocifrenog brojaBroj b=79Zbir s=16Press any key to continue . . .

9.Program računa zbir cifara trocifrenog broja.

#include<iostream.h>;main(){int b,j,d,s,z;cout<<"Zbir cifara trocifrenog broja"<<endl;cout<<"Unesite trocifreni broj b=";cin>>b;if (b>999)

Page 30: C++

Programiranje C++ 30

{ cout<<"GRESKA"<<endl; } else {j=b/100;d=(b/10)%10;s=b%10;z=j+d+s;cout<<"ZBIR z=";cout<<z<<endl;}system("PAUSE");return 0;}Izlaz:Zbir cifara trocifrenog brojaUnesite trocifreni broj b=1245GRESKAPress any key to continue . . .Zbir cifara trocifrenog brojaUnesite trocifreni broj b=425ZBIR z=11Press any key to continue . . .

10.Program rješava linearnu jednačin Ax+B=0

#include<iostream>using namespace std;main(){float a,b,x;cout<<"Program rjesava linearnu jednacinu Ax+B=0"<<endl;cout<<"a=";

Page 31: C++

Programiranje C++ 31

cin >>a;cout<<"b=";cin >>b;if((a==0)||(b==0)){cout<<"POGRESAN UPIS"<<endl;}else{x=-b/a;cout<<"x=";cout<<x<<endl;cout<<endl;}system("PAUSE");return 0;}

Izlaz:Program rjesava linearnu jednacinu Ax+B=0a=10b=0POGRESAN UPISPress any key to continue . . .

Program rjesava linearnu jednacinu Ax+B=0a=10b=5x=-0.5Press any key to continue . . .

Višestruki izbor pomoću if ....else

Ovaj oblik izbora ima slijedeći oblik:

if (uslov){ naredba ili blok naredbi;}else{

Page 32: C++

Programiranje C++ 32

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 (uslov 1){ naredba ili blok naredbi;}else{   if (uslov 2){   naredba ili blok naredbi;   }   else{   alternativna naredba ili blok naredbi;   }}            ili

if (uslov 1){    if (uslov 2){   naredba ili blok naredbi;   }   else{   alternativna naredba ili blok naredbi;   }}else{naredba ili blok naredbi;}

Primjer 1: Unijeti dva broja. Ako je prvi veći od drugog ispisati njihov zbir, a ako nije (prvi veći od drugog) ispisati njihov proizvod.

#include <cstdlib>#include <iostream>using namespace std;int main(){

Page 33: C++

Programiranje C++ 33

int a,b;cout<<"Unesite brojeve: "; cin >>a>>b;if (a>b) cout<<"\nZbroj je"<<a+b;elsecout <<"\nUmnožak je "<<a*b;

system ("PAUSE");return 0;

Izlaz:

Unesite brojeve: 148Zbroj je22

Press any key to continue . . .

Unesite brojeve: 8

10

Umnozak je 80Press any key to continue . . .

PRIMJERI

1. Napišite program koji za dva unešena cijela broja ispisuje njihov znak!

Primjer 1: Unesite 1. broj: 2 Unesite 2. broj: 1 Brojevi su pozitivni!

Page 34: C++

Programiranje C++ 34

Primjer 2: Unesite 1. broj: -1 Unesite 2. broj: -23 Brojevi su negativni!Primjer 3: Unesite 1. broj: -12 Unesite 2. broj: 1 Različitih su znakova!

Rješenje:// Znakovi broja - znakovi_br.cpp#include<iostream.h>using namespace std;int main(){int a, b;cout<<"Unesite 1. broj: ";cin>>a;cout<<"Unesite 2. broj: ";cin>>b;if(a>0 && b>0)cout<<"Brojevi su pozitivni!"<<endl;else if(a<0 && b<0)cout<<"Brojevi su negativni!"<<endl;elsecout<<"Razlicitih su znakova!"<<endl;system("pause");return 0;}

Izlaz:Unesite 1. broj: -5Unesite 2. broj: 7Razlicitih su znakova!Press any key to continue . . .

Unesite 1. broj: 5Unesite 2. broj: 8Brojevi su pozitivni!Press any key to continue . . .

Unesite 1. broj: -4Unesite 2. broj: -12Brojevi su negativni!Press any key to continue . . .

2. Napišite program koji će za unesene stranice trougla a, b i c, odrediti da li je trougaopravougli ili nije!

Primjer 1: Unesite a: 2 U nesite b: 1 Unesite c: 3 Trougao nije pravougli!

Page 35: C++

Programiranje C++ 35

Primjer 2: Unesite a: 3 Unesite b: 4 Unesite c: 5 Trougao jeste pravougli!Primjer 3: Unesite a: 2 Unesite b: 10 Unesite c: 13 Trougao nije pravougli!

Rješenje:#include<iostream.h>using namespace std;int main(){int a, b, c;cout<<"Unesite a: ";cin>>a;cout<<"Unesite b: ";cin>>b;cout<<"Unesite c: ";cin>>c;if(a*a == b*b + c*c)cout<<"Trougao jeste pravougli."<<endl;else if(b*b == a*a + c*c)cout<<"Trougao jeste pravougli."<<endl;else if(c*c == a*a + b*b)cout<<"Trougao jeste pravougli."<<endl;elsecout<<"Trougao nije pravougli."<<endl;system("pause");return 0;}

Izlaz:Unesite a: 3Unesite b: 4Unesite c: 5Trougao jeste pravougli.Press any key to continue . . .

Unesite a: 2Unesite b: 1Unesite c: 3Trougao nije pravougli.Press any key to continue . . .

3. Napišite program koji rješava linearnu jednačinu oblika ax+b=0, za dato a i b! (nije važno u kojem obliku će rješenje biti ispisano, npr. 3.2 ili 3.20 ili neki drugi oblik, dok je rezultat tačan).

Primjer 1: Unesite a: 6 Unesite b: 3 Rješenje je -0.5Primjer 2: Unesite a: 0 Unesite b: 3 Rješenje ne postoji.Primjer 3: Unesite a: 0 Unesite b: 0 Rješenja ima beskonacno.

Page 36: C++

Programiranje C++ 36

Rješenje:#include<iostream.h>using namespace std;int main(){float a, b;cout<<"Unesite a: ";cin>>a;cout<<"Unesite b: ";cin>>b;if(a==0 && b==0)cout<<"Rjesenja ima beskonacno."<<endl;else if(a==0 && b!=0)cout<<"Rjesenje ne postoji."<<endl;elsecout<<"Rjesenje je "<<-b/a<<"."<<endl;system("pause");return 0;}

Izlaz:Unesite a: 3Unesite b: 2Rjesenje je -0.5.Press any key to continue . . .

Unesite a: 0Unesite b: 3Rjesenje ne postoji.Press any key to continue . . .

Unesite a: 0Unesite b: 0Rjesenja ima beskonacno.Press any key to continue . . .

4. Napišite program koji će za unesene stranice trougla a, b i c, odrediti da li je trougaojednakokraki, jednakostranični ili raznostranični !

Primjer 1: Unesite a: 2 Unesite b: 1 Unesite c: 3 Trougao je raznostranicni!Primjer 2: Unesite a: 3 Unesite b: 3 Unesite c: 5 Trougao je jednakokraki!Primjer 3: Unesite a: 2 Unesite b: 2 Unesite c: 2 Trougao je jednakostranicni!

Rješenje:

Page 37: C++

Programiranje C++ 37

#include<iostream.h>using namespace std;int main(){int a, b, c;cout<<"Unesite a: ";cin>>a;cout<<"Unesite b: ";cin>>b;cout<<"Unesite c: ";cin>>c;if(a==b && b==c)cout<<"Trougao je jednakostranicni."<<endl;else if(a==b || b==c || a==c)cout<<"Trougao je jednakokraki."<<endl;elsecout<<"Trougao je raznostranicni."<<endl;system("pause");return 0;}

Izlaz:Unesite a: 5Unesite b: 3Unesite c: 3Trougao je jednakokraki.

Press any key to continue . . .Unesite a: 4Unesite b: 5Unesite c: 3Trougao je raznostranicni.Press any key to continue . . .

Unesite a: 4Unesite b: 4Unesite c: 4Trougao je jednakostranicni.Press any key to continue . . .

5. Napišite program koji će na osnovu zadanih dužina a, b i c reći može li se od njihkonstruisati trougao ili ne! (svaka stranica mora biti manja od zbira ostale dvije)

Primjer 1: Unesite a: 6 Unesite b: 3 Unesite c: 4 Može se konstriusati trokut!Primjer 2: Unesite a: 7 Unesite b: 3 Unesite c: 4 Ne može se konstriusati trokut!Primjer 3: Unesite a: 5 Unesite b: 2 Unesite c: 4 Može se konstriusati trokut!Rješenje:

#include<iostream.h>

Page 38: C++

Programiranje C++ 38

using namespace std;int main(){

int a, b, c;cout<<"Unesite a: ";cin>>a;cout<<"Unesite b: ";cin>>b;cout<<"Unesite c: ";cin>>c;if(a >= b+c)cout<<"Ne moze se konstruisati trokut."<<endl;else if(b >= a+c)cout<<"Ne moze se konstruisati trokut."<<endl;else if(c >= a+b)cout<<"Ne moze se konstruisati trokut."<<endl;elsecout<<"Moze se konstruisati trokut."<<endl;system("pause");return 0;}

Izlaz:Unesite a: 6Unesite b: 3Unesite c: 4Moze se konstruisati trokut.Press any key to continue . . .

Unesite a: 7Unesite b: 3Unesite c: 4Ne moze se konstruisati trokut.Press any key to continue . . .

Unesite a: 7Unesite b: 3Unesite c: 4Ne moze se konstruisati trokut.Press any key to continue . . .

6. Napišite program koji će za unesene stranice paralelograma a, b i ugla izmenu njihodrediti da li je u pitanju paralelogram, romb, kvadrat ili pravougaonik!

Primjer 1: Unesite a: 20 Unesite b: 10 Unesite ugao: 30 Radi se o paralelogramu!Primjer 2: Unesite a: 22 Unesite b: 11 Unesite ugao: 90 Radi se o pravougaoniku!.Primjer 3: Unesite a: 15 Unesite b: 15 Unesite ugao: 90 Radi se o kvadratu!Primjer 4: Unesite a: 10 Unesite b: 10 Unesite ugao: 70 Radi se o rombu!

Page 39: C++

Programiranje C++ 39

Rješenje:#include<iostream.h>using namespace std;int main(){int a, b, ugao;cout<<"Unesite a: ";cin>>a;cout<<"Unesite b: ";cin>>b;cout<<"Unesite ugao: ";cin>>ugao;if(a==b && ugao==90)cout<<"Radi se o kvadratu."<<endl;else if(a==b)cout<<"Radi se o rombu."<<endl;else if(a!=b && ugao==90)cout<<"Radi se o pravougaoniku."<<endl;elsecout<<"Radi se o paralelogramu."<<endl;system("pause");return 0;}Izlaz:Unesite a: 20Unesite b: 10Unesite ugao: 30Radi se o paralelogramu.Press any key to continue . . .

Unesite a: 22Unesite b: 11Unesite ugao: 90Radi se o pravougaoniku.Press any key to continue . . .

Unesite a: 10Unesite b: 10Unesite ugao: 70Radi se o rombu.Press any key to continue . . .7.Program za uneseni broj ispisuje da je veći od nule, manji ili jednak nuli.

#include <iostream>#include <cmath>using namespace std;int main () { float broj; cout<<"Uporedba broja"<<endl; cout<<"Unesite broj ="<<endl;

Page 40: C++

Programiranje C++ 40

cin>>broj; if(broj<0 ) {cout<<"Broj je manji od 0"<<endl;}else{if (broj>0){cout<<"Broj je veci od 0"<<endl;}else{cout<<"Broj je 0"<<endl;}}cout<<endl; system ("pause"); return 0; }

Izlaz:Uporedba brojaUnesite broj =9Broj je veci od 0Press any key to continue . . .

Uporedba brojaUnesite broj =-7Broj je manji od 0Press any key to continue . . .

Uporedba brojaUnesite broj =0Broj je 0Press any key to continue . . .

6.Program za upisani broj ispisuje jeli broj paran, neparan ili nula (0).

#include <iostream>using namespace std;int main () { int a; cout<<"PARNI , NEPARNI BROJ"<<endl; cout<<endl; cout<<"Unesite broj a=";

Page 41: C++

Programiranje C++ 41

cin>>a;

if(a==0 ) {cout<<"Brj je nula(0)"<<endl;}else{if (a%2==0){cout<<"Broj je paran"<<endl;}else{cout<<"Broj je neparan"<<endl;}}cout<<endl; system ("pause"); return 0; }

Izlaz:

PARNI , NEPARNI BROJUnesite broj a=17Broj je neparanPress any key to continue . . .

PARNI , NEPARNI BROJUnesite broj a=12Broj je paranPress any key to continue . . .

PARNI , NEPARNI BROJUnesite broj a=0Brj je nula(0)Press any key to continue . . .

7.Program računa sistem dvije linearne jednačine.#include <iostream.h>using namespace std;int main () { float a1,b1,c1,a2,b2,c2,D,Dx,Dy,x,y; cout<<"SISTEM DVIJE LINEARNE JEDNACINE"<<endl; cout<<endl; cout<<"Unesite broj a1="<<endl; cin>>a1; cout<<"Unesite broj a2="<<endl;

Page 42: C++

Programiranje C++ 42

cin>>a2; cout<<"Unesite broj b1="<<endl; cin>>b1; cout<<"Unesite broj b2="<<endl; cin>>b2; cout<<"Unesite broj c1="<<endl; cin>>c1; cout<<"Unesite broj c2="<<endl; cin>>c2; D=a1*b2-a2*b1; Dx=c1*b2-c2*b1; Dy=a1*c2-a2*c1; if(Dx==0 || Dy==0) {cout<<"Sistem je neodredjen"<<endl;}else{if(D==0){cout<<"Sistem je protivrecan"<<endl;}else{x=Dx/D;y=Dy/D;cout<<"x=";cout<<x<<endl;cout<<"y=";cout<<y<<endl;}}cout<<endl; system ("pause"); return 0; }Izlaz:SISTEM DVIJE LINEARNE JEDNACINEUnesite broj a1=5Unesite broj a2=4Unesite broj b1=6Unesite broj b2=3Unesite broj c1=5Unesite broj c2=8x=3.66667y=-2.22222Press any key to continue . . .

8.Program ispituje djeljivost dva broja

#include<iostream.h>#include<cmath>using namespace std;main(){ int a,b; cout<<"a="; cin>>a;

Page 43: C++

Programiranje C++ 43

cout<<"b="; cin>>b; if ((a==0)||(b==0)||(a<b)) { cout<<"GRESKA"<<endl; } else { if(a%b==0) { cout<<"BROJEVI SU DJELJIVI"<<endl; } else { cout<<"BROJEVI NISU DJELJIVI"<<endl; } } cout<<endl; system("PAUSE"); return 0; }

Izlaz:a=0b=10GRESKAPress any key to continue . . .

a=10b=5BROJEVI SU DJELJIVIPress any key to continue . . .

a=7b=3BROJEVI NISU DJELJIVIPress any key to continue . . .

9.Program ispituje djeljivost dva broja i računa ostatak pri djelenju #include<iostream.h>#include<cmath>using namespace std;main(){ int a,b,y; cout<<"a="; cin>>a; cout<<"b=";

Page 44: C++

Programiranje C++ 44

cin>>b; if ((a==0)||(b==0)||(a<b)) { cout<<"GRESKA"<<endl; } else { if(a%b==0) { cout<<"BROJEVI SU DJELJIVI"<<endl; } else { y=a%b; cout<<"Ostatak pri djelenju y="; cout<<y<<endl; } } cout<<endl; system("PAUSE"); return 0; }Izlaz:a=8b=0GRESKAPress any key to continue . . .

a=7b=2Ostatak pri djelenju y=1Press any key to continue . . .

a=12b=6BROJEVI SU DJELJIVIPress any key to continue . . .

10.Napisati program za izračunanje vrijednosti y prema izrazu

b/a ; a>0 y= a+3 ; -3<a<=0 a+b ; a<=-3

#include<iostream.h>#include<cmath>using namespace std;main()

Page 45: C++

Programiranje C++ 45

{ float a,b,y; cout<<"a="; cin>>a; cout<<"b="; cin>>b; if (a>0) { y=b/a; cout<<"y="; cout<<y<<endl; } else { if((a>-3)&&(a<=0)) { y=a+3; cout<<"y="; cout<<y<<endl; } else { y=a+b; cout<<"y="; cout<<y<<endl; } } cout<<endl; system("PAUSE"); return 0; } Izlaz: a=2 b=4 y=2 Press any key to continue . . . a=-2 b=6 y=1 Press any key to continue . . . a=-4 b=6 y=2 Press any key to continue . . .

16.Napisati program za izračunanje vrijednosti y prema izrazu

a2+b2; a+b>0 y= 3*a+2*b; a+b=0 b2-a2 ; a+b<0

#include<iostream.h>#include<cmath>using namespace std;main()

Page 46: C++

Programiranje C++ 46

{ float a,b,y; cout<<"a="; cin>>a; cout<<"b="; cin>>b; if ((a+b)>0) { y=pow(a,2)+pow(b,2); cout<<"y="; cout<<y<<endl; } else { if((a+b)==0) { y=3*a+2*b; cout<<"y="; cout<<y<<endl; } else { y=pow(b,2)-pow(a,2); cout<<"y="; cout<<y<<endl; } } cout<<endl; system("PAUSE"); return 0; } Izlaz:

a=4b=6y=52Press any key to continue . . .a=4b=-4y=4Press any key to continue . . .a=4b=-5y=9Press any key to continue . . .

Testiranje višestrukih izbora: switchDugačka serija if i else naredbi se može zamijeniti naredbom za izbor-switch. U slijedećem

primjeru prikazan je izbor jedne opcije iz menija. Kod praktičnog pisanja, često je potrebno na taj način odrediti akciju programa.

-Iskaz continue skače(vraća) na vrh petlje.

Opšta forma naredbe switch je:

Page 47: C++

Programiranje C++ 47

switch (vrijednost)

{

case vrijednost: naredba ili blok naredbi

.......

default: naredba ili blok naredbi

}

Varijabla vrijednost se na početku uspoređuje sa vrijednošću prve case izjave. Ukoliko su iste, izvršava

se program iza dvotočke do kraja switch naredbe ili dok se ne dođe do specijalne izjave break. Ukoliko

vrijednost nije ista sa prvom case izjavom, testira se vrijednost slijedeće case naredbe  tako do

posljednje case naredbe. Ukoliko niti jedna vrijednost nije ista kao vrijednost switch izjave, izvršava se

program iza default naredbe. Naredba default je opcionalna, te ukoliko se ne napiše, u slučaju da niti

jedna vrijednost nije zadovoljena, ne izvršava se ni jedna izjava unutar switch naredbe.

Unutar naredbe switch, na kraju case može se nalaziti naredba break. Ona uvjetuje skok na kraj

switch naredbe. Ukoliko postoji, program se nastavlja izvršavati do kraja switch naredbe ili do izjave

break.

-Iskaz break trenutno izlazi iz petlje

Primjer:  Unesi dva broja. Napravi izbor u kojem će se moći izabrati slijedeće operacija: zbrajanje, oduzimanje množenje i dijeljenje.

#include <cstdlib>#include <iostream>using namespace std;int main(){float a,b,c,d,e,f,g,h;int i;

Page 48: C++

Programiranje C++ 48

printf ("Unesi brojeve");scanf ("%f %f",&a,&b);printf ("\n1 - zbrajanje");printf ("\n2- oduzimanje");printf ("\n3 -množenje");printf ("\n4 - dijeljenje");printf ("\nVaš izbor:");scanf ("%i", &i);switch(i){case 1:printf("\n Zbroj je %f",a+b);break;case 2:printf ("\n Razlika je %f",a-b);break;case 3:printf ("\nUmnožak je %f",a*b);break;case 4:if (b=0)printf("\nNije moguće dijeliti s nulom");elseprintf ("\nKvocjent je %f",a/b);break;default:printf("\n Morate odabrati 1,2,3 ili 4");break;system ("PAUSE");return 0; }}

Izlaz:Unesi brojeve5 21 - zbrajanje2- oduzimanje3 -mno×enje4 - dijeljenjeVaz izbor:2Razlika je 3

1.Program ispisuje prirodne brojeve , računa zbir i proizvod , a ako je n<1 pomoću iskaza break izlazi se iz petlje.

#include <iostream.h>using namespace std; main () { int n;

Page 49: C++

Programiranje C++ 49

int i; int s; int p;

char odgovor; odgovor='d'; while(odgovor!='n'){cout<<"PROGRAM ISPISUJE PRIRODNE BROJEVE ,RACUNA ZBIR I PROIZVOD"<<endl;cout<<endl; cout<<"UNESITE n="; cin>>n; if(n<1)break; for(i=1;i<=n;i=i+1)cout<<i<<endl;cout<<endl;s=0;for(i=1;i<=n;i=i+1)s=s+i;cout<<"ZBIR NIZA s=";cout<<s<<endl;p=1;for(i=1;i<=n;i=i+1)p=p*i;cout<<"PROIZVOD NIZA p=";cout<<p<<endl;cout<<"Zelite li ponovo(d/n)?"<<endl;cin>>odgovor;

}cout<<endl; system("PAUSE"); return 0;}

Izlaz:PROGRAM ISPISUJE PRIRODNE BROJEVE ,RACUNA ZBIR I PROIZVODUNESITE n=-5Press any key to continue . . .

2.Program ispisuje prirodne brojeve ,računa zbir iproizvod pomoću brojačkih petlji (for i do...while) a ako je n<1 continue vraća na vrh petlje.#include <iostream.h>using namespace std; main () { int n; int i,p; int s;

Page 50: C++

Programiranje C++ 50

char odgovor; odgovor='d'; do{cout<<"PROGRAM ISPISUJE PRIRODNE BROJEVE ,RACUNA ZBIR I PROIZVOD "<<endl;cout<<endl; cout<<"UNESITE n="; cin>>n;if (n<1)continue;for(i=1;i<=n;i=i+1)cout<<i<<endl;cout<<endl;s=0;for(i=1;i<=n;i=i+1)s=s+i;cout<<"ZBIR NIZA s=";cout<<s<<endl;p=1;for(i=1;i<=n;i++)p=p*i;cout<<"Proizvod niza P=";cout<<p<<endl;cout<<"Zelite li ponovo(d/n)?"<<endl;cin>>odgovor;}while(odgovor!='n'); system("PAUSE"); return 0;}

Izlaz:PROGRAM ISPISUJE PRIRODNE BROJEVE ,RACUNA ZBIR I PROIZVODUNESITE n=-5PROGRAM ISPISUJE PRIRODNE BROJEVE ,RACUNA ZBIR I PROIZVODUNESITE n=41234ZBIR NIZA s=10Proizvod niza P=24Zelite li ponovo(d/n)?nPress any key to continue . . .

3.Program se koristi kao kalkulator za sabiranje,oduzimanje , množenje i dijelenje dva broja.

#include <iostream.h>using namespace std; main () {float a;float b;int op;cout<<"RACUNSKE OPERACIJE"<<endl;

Page 51: C++

Programiranje C++ 51

cout<<"Unesite broj a=";cin>>a;cout<<"Unesite broj b=";cin>>b;cout<<"BROJEVE CEMO "<<endl;cout<<"1-zbrojiti"<<endl;cout<<"2-oduzeti"<<endl;cout<<"3-mnoziti"<<endl;cout<<"4-dijeliti"<<endl;cout<<"Racunska operacije op=";cin>>op;switch(op){case 1: cout<<a<<"+"<<b<<"="<<a+b<<endl; break; case 2: cout<<a<<"-"<<b<<"="<<a-b<<endl; break; case 3: cout<<a<<"*"<<b<<"="<<a*b<<endl; break;case 4: cout<<a<<"/"<<b<<"="<<a/b<<endl; break; default: cout<< " MORATE UNIJETI 1,2,3 ili 4" <<endl;}cout<<endl;system("PAUSE");return 0;} Izlaz:RACUNSKE OPERACIJEUnesite broj a=25Unesite broj b=5BROJEVE CEMO1-zbrojiti2-oduzeti3-mnoziti4-dijelitiRacunska operacije op=425/5=5

4.Program ispisuje ocijene.

#include <iostream.h>using namespace std; main() {int oc;cout<<"ISPIS OCIJENA"<<endl;cout<<"Ocijena oc=";

Page 52: C++

Programiranje C++ 52

cin>>oc;switch(oc){case 1: cout<<"NEDOVOLJAN"<<endl; break;case 2: cout<<"DOVOLJAN"<<endl; break; case 3: cout<<"DOBAR"<<endl; break;case 4: cout<<"VRLODOBAR"<<endl; break;case 5: cout<<"ODLICAN"<<endl; break; default: cout<<"MORATE UNIJETI 1,2,3,4,5!"<<endl; break;}system("PAUSE");return 0;}

Izlaz:ISPIS OCIJENAOcijena oc=5ODLICANPress any key to continue . . .

5.Program ispisuje dane u sedmici.#include <iostream.h>using namespace std; main() {int dn;cout<<"ISPIS DANA U SEMICI"<<endl;

Page 53: C++

Programiranje C++ 53

cout<<"Dan dn=";cin>>dn;switch(dn){case 1: cout<<"PONEDELJAK"<<endl; break;case 2: cout<<"UTORAK"<<endl; break; case 3: cout<<"SRIJEDA"<<endl; break;case 4: cout<<"CETVRTAK"<<endl; break;case 5: cout<<"PETAK"<<endl; break;case 6:cout<<"SUBOTA"<<endl; break;case 7:cout<<"NEDJELJA"<<endl; default: cout<<"MORATE UNIJETI 1,2,3,4,5,6 i 7!"<<endl;

}system("PAUSE");return 0;}

Izlaz:ISPIS DANA U SEMICIDAN dn=5PETAK

6.Program ispisuje rezultate testa.

#include <iostream.h>using namespace std; main () {float a;int od;cout<<"TEST"<<endl;

Page 54: C++

Programiranje C++ 54

cout<<"Unesite broj bodova a=";cin>>a;cout<<"TEST "<<endl;cout<<"1;0-50 bodova"<<endl;cout<<"2;51-65 bodova"<<endl;cout<<"3;66-80 bodova"<<endl;cout<<"4;81-91 bodova"<<endl;cout<<"5;92-100 bodova"<<endl;cout<<"od=";cin>>od;switch(od){case 1: cout<<"NEDOVOLJAN"<<endl; break;case 2: cout<<"DOVOLJAN"<<endl; break; case 3: cout<<"DOBAR"<<endl; break;case 4: cout<<"VRLODOBAR"<<endl; break;case 5: cout<<"ODLICAN"<<endl; break; default: cout<< " MORATE UNIJETI 1,2,3 ,4 i 5" <<endl;}cout<<endl;system("PAUSE");return 0;}

Izlaz:TESTUnesite broj bodova a=82TEST1;0-50 bodova2;51-65 bodova3;66-80 bodova4;81-91 bodova5;92-100 bodovaod=4VRLODOBAR

Ponavljanje izvršavanja naredbi pomoću petlji

Naredbe if, if-else i swich  izvršavaju uslov 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

Page 55: C++

Programiranje C++ 55

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; USLOV; promjena vrijednosti kontrolne varijable)

{

blok naredbi;

}

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.

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 10 prirodnih brojeva,  svaki  u svom redu. Na kraju ispiši i vrijednost varijable i nakon izvođenja petlje.

#include <cstdlib>#include <iostream>using namespace std;

Page 56: C++

Programiranje C++ 56

int main(){ int i;for (i=1; i<=10; i++){cout <<i << "\n";}cout<<"Nakon petlje i je "<< i<<"\n";system ("PAUSE"); return 0;}

Izlaz:

1

2

3

4

5

6

7

8

9

10

Nakon petlje i je 11

Press any key to continue . . .

Primjer 2: Ispiši parne brojeve od 10 do 50.

#include <cstdlib>#include <iostream>using namespace std;int main()

Page 57: C++

Programiranje C++ 57

{ int i;for (i=10;i<=30; i+=2)  /*početna vrijednost kontrolne varijable je 10 i u svakom koraku povećava za 2*/{cout <<i << "\n";}system ("PAUSE"); return 0;}

10

12

14

16

18

20

22

24

26

30

40

42

44

46

48

50

Press any key to continue . . .

Primjer 3: Ispiši sve prirodne brojeve između 1 i N, koji su djeljivi sa 3.

Page 58: C++

Programiranje C++ 58

#include <cstdlib>#include <iostream>using namespace std;int main(){ int N;cout<<"Unesi broj N = ";cin >>N; cout<<"Brojevi djeljivi s 3 do "<<N<<" su \n";for (int i=1;i<=N; i++){if( i%3==0){cout<<i<<"\n";}} system ("PAUSE"); return 0;}

Izlaz:

Unesi broj N = 13

Brojevi djeljivi s 3 do 13 su

3

6

9

12

Press any key to continue . . .

4.Program vrši ispis niza prirodnih brojeva do broja n i računa zbir niza

Page 59: C++

Programiranje C++ 59

#include <cstdlib>#include <iostream>using namespace std;int main () { int i,n,s;cout<<"Ispis i suma prirodnih brojeva pomocu For-petlje"<<endl;cout<<endl;cout<<"Unesite n=";cin>>n;if(n<1){ cout<<"POGRESAN UNOS"<<endl; } else {cout<<”ISPIS NIZA”<<endl;for(i=1;i<=n;i++)cout<<i<<endl;s=0;for(i=1;i<=n;i=i+1)s=s+i;cout<<"SUMA PRIRODNIH UZASTOPNIH BROJEVA S=";cout<<s<<endl;cout<<endl;

} system("PAUSE"); return 0;}

Izlaz:

Ispis i suma prirodnih brojeva pomocu For-petljeUnesite n=4ISPIS NIZA1234SUMA PRIRODNIH UZASTOPNIH BROJEVA S=10

Press any key to continue . . .

5.Program vrši ispis niza prirodnih brojeva do broja n i računa proizvod

Page 60: C++

Programiranje C++ 60

niza.

#include <cstdlib>#include <iostream>using namespace std;int main () { int i,n,p;cout<<"Ispis uzastopnih prirodnih brojeva i proizvod pomocu For-petlje"<<endl;cout<<endl;cout<<"Unesite n=";cin>>n;if(n<1){ cout<<"POGRESAN UNOS"<<endl; } else {cout<<”ISPIS NIZA”<<endl;for(i=1;i<=n;i=i+1)cout<<i<<endl;p=1;for(i=1;i<=n;i=i+1)p=p*i;cout<<"PROIZVOD PRIRODNIH UZASTOPNIH BROJEVA P=";cout<<p<<endl;cout<<endl;} system("PAUSE"); return 0;}Izlaz:

Ispis uzastopnih prirodnih brojeva i proizvod pomocu For-petljeUnesite n=5ISPIS NIZA12345PROIZVOD PRIRODNIH UZASTOPNIH BROJEVA P=120Press any key to continue . . .

6.Program ispisuje interval(N-K) prirodnih brojeva i računa zbir intervala brojeva

#include <cstdlib>

Page 61: C++

Programiranje C++ 61

#include <iostream.h>using namespace std;int main () { int i,n,k,s;cout<<"Ispis intervala (N-K)prirodnih brojeva i zbir pomocu For-petlje"<<endl;cout<<endl;cout<<"Unesite n=";cin>>n;cout<<"Unesite k=";cin>>k;if(n<1 || k<1 || k<n){ cout<<"POGRESAN UNOS"<<endl; } else {cout<<”ISPIS INTERVALA”<<endl; for(i=n;i<=k;i=i+1) cout<<i<<endl; s=0; for(i=n;i<=k;i=i+1) s=s+i; cout<<"SUMA INTERVALA S="; cout<<s<<endl;} system("PAUSE"); return 0;}

Izlaz:Ispis intervala (N-K)prirodnih brojeva i zbir pomocu For-petljeUnesite n=0Unesite k=5POGRESAN UNOSPress any key to continue . . .Ispis intervala (N-K)prirodnih brojeva i zbir pomocu For-petlje

Unesite n=2Unesite k=6ISPIS INTERVALA23456SUMA INTERVALA S=20Press any key to continue . . .

7.Program ispisuje parne prirodne brojeve do broja n i računa zbir neparnih brojeva.

#include <cstdlib>

Page 62: C++

Programiranje C++ 62

#include <iostream>using namespace std;int main () { int i,n,s;cout<<"ISPIS PARNIH PRIRODNIH BROJEVA I ZBIR NEPARNIH BROJEVA POMOCU FOR-PETLJE"<<endl;cout<<endl;cout<<"Unesite n=";cin>>n;if(n<1){ cout<<"POGRESAN UNOS"<<endl; } else {cout<<”ISPIS PARNIH BROJEVA”<<endl;for(i=1;i<=n;i++)if(i%2==0)cout<<i<<endl;s=0;for(i=1;i<=n;i=i+1)if(i%2!=0)s=s+i;cout<<"SUMA PRIRODNIH NEPARNIH BROJEVA S=";cout<<s<<endl;cout<<endl;

} system("PAUSE"); return 0;}

Izlaz:

ISPIS PARNIH PRIRODNIH BROJEVA I ZBIR NEPARNIH BROJEVA POMOCU FOR-PETLJEUnesite n=6ISPIS PARNIH BROJEVA246SUMA PRIRODNIH NEPARNIH BROJEVA S=9Press any key to continue . . .

8.Program računa zbir n članova harmonijskog niza ∑n=1

∞ 1n=1+ 1

2+ 13+¿⋅¿+ 1

n

Page 63: C++

Programiranje C++ 63

#include <cstdlib>#include <iostream>using namespace std;int main () { float i,n,s;cout<<"Program racuna zbir harmonijskog red "<<endl;cout<<endl;cout<<"Unesite n=";cin>>n;if(n<1){ cout<<"POGRESAN UNOS"<<endl; } else {s=0; for(i=1;i<=n;i=i+1) s=s+1/i; cout<<"Zbir harmonijskog niza S="; cout<<s<<endl;

} system("PAUSE"); return 0;}

Izlaz:Program racuna zbir harmonijskog redUnesite n=4Zbir harmonijskog niza S=2.08333

9.Program ispisuje djelioce učitanog broja

Page 64: C++

Programiranje C++ 64

#include <cstdlib>#include <iostream>using namespace std;int main () { int i,n,s;cout<<"Program ispisuje djelioce ucitanog broja"<<endl;cout<<endl;cout<<"Unesite n=";cin>>n;if(n<1){ cout<<"POGRESAN UNOS"<<endl; } else {cout<<"DJELIOCI UCITANOG BROJA"<<endl;for(i=1;i<=n;i=i+1) if(n%i==0) cout<<i<<endl;} system("PAUSE"); return 0;}

Izlaz:Program ispisuje djelioce ucitanog brojaUnesite n=4DJELIOCI UCITANOG BROJA124

10.Napisati C program koji će pronaći i ispisati na ekran brojeve od 100 do 250 kod kojih je suma cifri djeljiva sa7.#include <iostream>using namespace std;

Page 65: C++

Programiranje C++ 65

main(){      int s,d,j;    //stotine, desetice, jedinice...      for (int i=100; i<250; i++)       //petlja vrti sve 3-cifrene brojeve      {          int temp=i;          j=temp%10;                     //izdvajamo redom cifre broja tako što          temp/=10;                      //prvo tražimo ostatak pri djeljenju          d=temp%10;                     //sa 10, a zatim broj i djelimo sa 10          temp/=10;                      //da se oslobodimo zadnje cifre i           s=temp%10;                     //omogućimo traženje nove          int sum=s+d+j;          if (sum%7==0)                  //provjeravamo da li je suma djeljiva sa 7          cout << i << endl;          //ako jeste, ispisujemo broj      }system ("pause");return 0;}Izlaz:

106

115

124

133

142

149

151

158

160

167

176

185

194

205

214

223

232

239

241

248

Press any key to continue . . .

11.Program ispisuje niz prirodnih brojeva u opadajućem redosljedu i računa proizvod niza.

Page 66: C++

Programiranje C++ 66

#include <cstdlib>#include <iostream.h>using namespace std;int main () { int i,n,p;cout<<"Ispis uzastopnih prirodnih brojeva(opadajući) i proizvod pomocu For-petlje"<<endl;cout <<"n=";cin>>n;if(n<1){ cout<<"POGRESAN UNOS!"<<endl; }else{cout<<”ISPIS OPADAJUCEG NIZA<<endl;for(i=n;i>0;i=i-1)cout<<i<<endl;cout<<"PROIZVOD!"<<endl;p=1;for(i=n;i>0;i=i-1)p=p*i;cout<<"p=";cout<<p<<endl;}system("PAUSE");return 0;}

Izlaz:Ispis uzastopnih prirodnih brojeva(opadajuci) i proizvod pomocu For-petljen=4ISPIS OPADAJUCEG NIZA4321PROIZVOD!p=24

Petlja –While

Page 67: C++

Programiranje C++ 67

Petlja while izvršava jednu ili više naredbi, sve dok je zadani uvjet istinit. While naredbu pišemo:

while (uslov){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.

Primjer 1: Za niz od 5 različitih brojeva ispiši zbroj.

#include <cstdlib>#include <iostream>using namespace std;int main(){ int i, broj,s=0;cout <<"Program za zbrajanje 5 unesenih brojeva ";i=1;                                                     /*postavljanje varijable i na vrijednost 1 */while (i<=5)                                          /* petlja se vrti dok je varijabla i<=5 */{cout <<"\n Unesi "<<i<<". broj = ";cin >> broj;                                          /* unos broja */s=s+broj;                                             /* pribrajanje unesenog broja varijabli s(suma)*/i=i+1;                                   /*povećavanje kontrolne varijable za 1 te vraćanje na ispitivanje uvjeta u while*/}cout<<"\n Zbroj unesenih brojeva je "<<s<<"\n";system ("PAUSE"); return 0;}

Izlaz:

Program za zbrajanje 5 unesenih brojeva

Unesi 1. broj = 5

Unesi 2. broj = 7

Unesi 3. broj = 2

Unesi 4. broj = 4

Unesi 5. broj = 6

Zbroj unesenih brojeva je 24

Press any key to continue . . .

2.Program ispisuje prirodne brojeve do broja 5 pomoću While petlje #include<iostream.h>

Page 68: C++

Programiranje C++ 68

using namespace std;main(){cout<<”ISPIS BROJEVA”<<endl; int i; i=0; while(i<5) { i=i+1; cout<<i<<endl; } system("PAUSE"); return 0;}

Izlaz:ISPIS BROJEVA12345

3.Program ispisuje brojeve do broja n pomoću While petlje.#include<iostream.h>using namespace std;main(){ cout<<"ISPIS BROJEVA"<<endl; int i,n; cout<<"Unesite broj n="; cin>>n; cout<<"ISPIS BROJEVA DO BROJA N"<<endl; i=0; while(i<n) {

i=i+1; cout<<i<<endl; } system("PAUSE"); return 0;}

Izlaz:ISPIS BROJEVAUnesite broj n=5ISPIS BROJEVA DO BROJA N123454.Program ispisuje prirodne brojeve do broja n pomoću While petlje, a za n< 1 program ispisuje greska.

Page 69: C++

Programiranje C++ 69

#include<iostream.h>using namespace std;main(){int i,n;cout<<"Unesite broj n=";cin>>n;if(n<1){cout<<"GRESKA"<<endl;}i=0;while(i<n){i++;cout<<i<<endl;}system("PAUSE");return 0;}

Izlaz:

Unesite broj n=-5GRESKAPress any key to continue . . .Unesite broj n=6123456Press any key to continue . . .

5.Program ispisuje parne brojeve do broja n pomoću While petlje

Page 70: C++

Programiranje C++ 70

#include<iostream.h>using namespace std;main(){int i,n;cout<<”PROGRAM ISPISUJE PARNE BROJEVE”<<endl;cout<<"Unesite broj n=";cin>>n;if(n<1){cout<<"GRESKA"<<endl;}i=0;while(i<n){i=i+1;if(i%2==0)cout<<i<<endl;}system("PAUSE");return 0;}

Izlaz:

Unesite broj n=-12GRESKAPress any key to continue . . .Unesite broj n=6246

6.Program ispisuje neparne brojeve do broja n pomoću While petlje.

#include<iostream.h>

Page 71: C++

Programiranje C++ 71

using namespace std;main(){int i,n;cout<<”PROGRAM ISPISUJE NEPARNE BROJEVE”<<endl;cout<<"Unesite broj n=";cin>>n;if(n<1){cout<<"GRESKA"<<endl;}i=0;while(i<n){i=i+1;if(i%2!=0)cout<<i<<endl;}system("PAUSE");return 0;}

Izlaz:

Unesite broj n=71357

7.Program računa kvadrat broja pomoću While petlje.

#include <iostream.h>

Page 72: C++

Programiranje C++ 72

using namespace std;main () { float a; float b; char odgovor; odgovor='d'; while(odgovor!='n'){cout<<"PROGRAM RACUNA KVADRAT BROJA POMOCU WHILE PETLJE"<<endl;cout<<endl; cout<<"UNESITE BAZU a=”; cin>>a;b=a*a;cout<<"Kvadrat unesenog broja="<<endl;cout<<b;cout<<endl;cout<<"Zelite li ponovo(d/n)?"<<endl;cin>>odgovor;}cout<<endl; system("PAUSE"); return 0;}

Izlaz:

PROGRAM RACUNA KVADRAT BROJA POMOCU WHILE PETLJEUNESITE BAZU a=10Kvadrat unesenog broja=100Zelite li ponovo(d/n)?dPROGRAM RACUNA KVADRAT BROJA POMOCU WHILE PETLJEUNESITE BAZU a=8Kvadrat unesenog broja=64Zelite li ponovo(d/n)?n

Petlja Do-While

Page 73: C++

Programiranje C++ 73

Za razliku od while petlje ova petlja se izvede bar jednom jer se uslov 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.

 

Primjer:Za niz prirodnih brojeva od 1-N ispiši sumu (zbroj ) neparnih.

#include <cstdlib>#include <iostream>using namespace std;int main(){ int p, N, zbroj=0;cout<<" \nUnesi broj N= ";cin>>N;p=1;do {zbroj = zbroj + p; p=p+2;} while (p<=N);cout<< "\nZbroj neparnih brojeva od 1 do " << N<< " iznosi "<< zbroj<<"\n";system ("PAUSE"); return 0;}

Izlaz:

Unesi broj N= 6

Zbroj neparnih brojeva od 1 do 6 iznosi 9

Press any key to continue . . .

1.Program ispisuje tekst pomoću do...while petlje.#include<iostream.h>using namespace std;main()

Page 74: C++

Programiranje C++ 74

{int i;cout<<"KOLIKO POZDRAVA=";cin>>i;do{cout<<"ZDRAVO"<<endl;i--;}while(i>0);system("PAUSE");return 0;}

Izlaz:KOLIKO POZDRAVA=4ZDRAVOZDRAVOZDRAVOZDRAVO

2.Program ispisuje brojeve do broja n pomoću do...while petlje.

#include<iostream.h>using namespace std;main(){int i,n;cout<<"ISPIS BROJEVA"<<endl;cout<<"Unesite broj n=";cin>>n;i=0;do{i++;cout<<i<<endl;}while(i<n);system("PAUSE");return 0;}

Izlaz:ISPIS BROJEVAUnesite broj n=512345Press any key to continue . . .

3.Program ispisuje parne brojeve do broja n pomoću do...while petlje.

#include<iostream.h>using namespace std;

Page 75: C++

Programiranje C++ 75

main(){int i,n;cout<<"ISPIS PARNIH BROJEVA"<<endl;cout<<"Unesite broj n=";cin>>n;i=0;do{i++;if(i%2==0)cout<<i<<endl;}while(i<n);system("PAUSE");return 0;}

Izlaz:

ISPIS PARNIH BROJEVAUnesite broj n=92468Press any key to continue . . .

4.Program računa kvadrat broja pomoću do..while petlje.

#include <iostream.h>

Page 76: C++

Programiranje C++ 76

using namespace std; main () { float a; float b; char odgovor; odgovor='d'; do {cout<<"PROGRAM RACUNA KVADRAT BROJA POMOCU DO- WHILE PETLJE"<<endl;cout<<endl; cout<<"UNESITE BAZU a="<<endl; cin>>a;b=a*a;cout<<"Kvadrat unesenog broja="<<endl;cout<<b;cout<<endl;cout<<"Zelite li ponovo(d/n)?"<<endl;cin>>odgovor;}while(odgovor!='n'); system("PAUSE"); return 0;}

Izlaz:PROGRAM RACUNA KVADRAT BROJA POMOCU DO- WHILE PETLJEUNESITE BAZU a=10Kvadrat unesenog broja=100Zelite li ponovo(d/n)?dPROGRAM RACUNA KVADRAT BROJA POMOCU DO- WHILE PETLJEUNESITE BAZU a=5Kvadrat unesenog broja=25Zelite li ponovo(d/n)?nPress any key to continue . . .

Kombinovani zadaci –brojačke pelje

Page 77: C++

Programiranje C++ 77

1.Program ispisuje ,sabira i množi brojeve do broja n , pomoću brojačkih petlji( for i while)

#include <iostream.h>using namespace std; main () { int n; int i; int s; int p; char odgovor; odgovor='d'; while(odgovor!='n'){cout<<"PROGRAM ISPISUJE PRIRODNE BROJEVE I RACUNA ZBIR "<<endl;cout<<endl; cout<<"UNESITE n="; cin>>n; for(i=1;i<=n;i=i+1)cout<<i<<endl;cout<<endl;s=0;for(i=1;i<=n;i=i+1)s=s+i;cout<<"ZBIR NIZA s=";cout<<s<<endl;p=1;for(i=1;i<=n;i=i+1)p=p*i;cout<<"PROIZVOD NIZA p=";cout<<p<<endl;cout<<"Zelite li ponovo(d/n)?"<<endl;cin>>odgovor;}cout<<endl; system("PAUSE"); return 0;}

Izlaz:PROGRAM ISPISUJE PRIRODNE BROJEVE I RACUNA ZBIRUNESITE n=41234ZBIR NIZA s=10PROIZVOD NIZA p=24Zelite li ponovo(d/n)?nPress any key to continue . . .

2.Program ispisuje ,sabira i množi brojeve do broja n , pomoću brojačkih

Page 78: C++

Programiranje C++ 78

petlji( for i do...while)

#include <iostream.h>using namespace std; main () { int n; int i,p; int s; char odgovor; odgovor='d'; do{cout<<"PROGRAM ISPISUJE PRIRODNE BROJEVE ,RACUNA ZBIR I PROIZVOD "<<endl;cout<<endl; cout<<"UNESITE n="; cin>>n;if (n<1)cout<<"GRESKA-NEMA ISPISA BROJEVA"<<endl; for(i=1;i<=n;i=i+1)cout<<i<<endl;cout<<endl;s=0;for(i=1;i<=n;i=i+1)s=s+i;cout<<"ZBIR NIZA s=";cout<<s<<endl;p=1;for(i=1;i<=n;i++)p=p*i;cout<<"Proizvod niza P=";cout<<p<<endl;cout<<"Zelite li ponovo(d/n)?"<<endl;cin>>odgovor;}while(odgovor!='n'); system("PAUSE"); return 0;}

Izlaz:PROGRAM ISPISUJE PRIRODNE BROJEVE ,RACUNA ZBIR I PROIZVODUNESITE n=41234ZBIR NIZA s=10Proizvod niza P=24Zelite li ponovo(d/n)?nPress any key to continue . ...

Funkcije

Page 79: C++

Programiranje C++ 79

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 definiše 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.

 Primjer1: Napiši program kojim će se pomnožiti cijela dva broja i ispisati rezultat. Za množenje cijelih brojeva napiši funkciju. #include <iostream>#include <math.h>using namespace std;

int pomnozi(int x,int y) /*funkcija za množenje*/{int rez; /*lokalna varijabla*/rez=x*y;return rez;}

int main() /*glavni program*/{int p,a,b;cout <<" Unesi brojeve za množenje =";cin >>a>>b; p=pomnozi (a,b); /*poziv funkcije*/cout << "\n Proizvod je:"<< p<< "\n"; system ("PAUSE");return 0;}

Izlaz:Unesi brojeve za mnozenje =105Proizvod je:50Press any key to continue . . .

Page 80: C++

Programiranje C++ 80

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.

#include <iostream>#include <math.h>using namespace std;int najmanji (int x, int y, int z)   /*funkcija za određivanje najmanjeg*/{ int min; min=x;if (y<min) min=y;if(z<min)min=z;return min;}

int main(){int p,a,b,c;cout << " Unesi brojeve :"; /*upis brojeva*/cin >>a>>b>>c; p=najmanji (a,b,c);                             /*poziv funkcije*/cout << " Najmanji je : "<<p<<"\n" ;system ("PAUSE");return 0;}

Izlaz:Unesi brojeve: -2-1717 Najmanji je : -17Press any key to continue . . .

3.Napiši program koji će zbrajati dva broja pomoću funkcije za zbrajanje.

Page 81: C++

Programiranje C++ 81

#include <iostream>#include <math.h>using namespace std;

int zbroj(int x,int y) /*funkcija za zbrajanje*/{int rez; /*lokalna varijabla*/rez=x+y;return rez;}

int main() /*glavni program*/{int p,a,b;cout <<" Unesi brojeve za sabiranje =";cin >>a>>b; p=zbroj (a,b); /*poziv funkcije*/cout << "\n Zbir je:"<< p<< "\n"; system ("PAUSE");return 0;}

Izlaz:

Unesi brojeve za sabiranje =10

5

Zbir je:15

Press any key to continue . . .

4.Program računa površinu pravougaonika

#include <iostream.h>

Page 82: C++

Programiranje C++ 82

using namespace std;float PovPravougaonik (float x, float y){cout<<" PovPravougaonik(),preuzima" <<x<<"i"<<y<<"\n";return(x*y);}int main(){ cout<<"U main "<<endl; float a,b,p; cout<<"Unesite stanicu a="; cin>>a; cout<<"Unesite stranicu b="; cin>>b; if (a<=0 || b<=0) { cout<<"GRESKA"<<endl; } else { cout<<"POZIVAM PovPravougaonik()"<<endl; p=PovPravougaonik(a,b); cout<<"Nazad u main"<<endl; cout<<"p="<<p; cout<<endl; cout<<"Izlazim !"<<endl;} system("Pause"); return 0;}

Izlaz:

U mainUnesite stanicu a=-5Unesite stranicu b=10GRESKAPress any key to continue . . .U mainUnesite stanicu a=8Unesite stranicu b=4POZIVAM PovPravougaonik() PovPravougaonik(),preuzima8i4Nazad u mainp=32Izlazim !Press any key to continue . . .

5.Program računa obim pravougaonika

#include <iostream.h>

Page 83: C++

Programiranje C++ 83

using namespace std;float ObimPravougaonik (float x, float y){return(2*x+2*y);}int main(){ float a,b,o; cout<<"Unesite stanicu a="; cin>>a; cout<<"Unesite stranicu b="; cin>>b; if (a<=0 || b<=0) { cout<<"GRESKA"<<endl; } else { o=ObimPravougaonik(a,b); cout<<"o="<<o; cout<<endl;} system("Pause"); return 0;}

Izlaz:Unesite stanicu a=-8Unesite stranicu b=4GRESKAPress any key to continue . . .Unesite stanicu a=9Unesite stranicu b=4o=26Press any key to continue . . .

-Prototipovi funkcijePrototip funkcije je iskaz, što znači da završava znakom tačka-zarez. On se sastoji od povratnog tipa funkcije, imena i liste parametara.

Page 84: C++

Programiranje C++ 84

Primjer:usigned short int FindArea (int length , int width) ;

povratni tip ime parametri (int tip parametra , a length i width imena parametara).

Prototip funkcije i definicija funkcije se moraju potpuno slagati po povratnom tipu , imenu i listi parametara.#include<iostream.h>using namespace std;int Povrsina(int duzina,int sirina);int main(){ int duzina; int sirina; int p; cout<<"duzina="; cin>>duzina; cout<<"sirina="; cin>>sirina; p=Povrsina(duzina,sirina); cout<<"Povrsina p="; cout<<p; cout<<" kvadratnih metara\n\n"; system("pause"); return 0;} int Povrsina(int d,int s) { return d*s; cout<<endl; }

Izlaz:duzina=10sirina=5Povrsina p=50 kvadratnih metaraPress any key to continue . . .

-Lokalne promjenjive

Page 85: C++

Programiranje C++ 85

Možete ne samo predati promjenjive funkciji , nego i deklarisati promjenjive unutar funkcije .Za to se koriste lokalne promjenjive, koje su tako nazvane jer postoje samo lokalno unutar same funkcije.Po pvratku iz funkcije one nisu više raspoložive. U C++promjenjive možete definisati bilo gde unutar funkcije , ne samo na njenom vrhu.Opseg promjenjive je blok u kojem je ona definisana.Promenljive sa lokalnim opsegom vaznosti( krace receno „lokalne promenljive“) su „vidljive“ samo unutar jednog bloka naredbi( telo funkcije, telo petlje) u kojem su definisane.

1.Program prikazuje promjenjive koje su ograničene na blok #include<iostream.h>void myFunc();int main(){ int x=5; cout<<"\n U main x je:"<<x; myFunc(); cout<<"\n Povratak u main, x je:"<<x; cout<<endl; system("pause"); return 0;}void myFunc(){int x=8;cout<<"\n U myFunc, lokalni x je:"<<x;{cout<<"\n U bloku unutar myFunc, x je:"<<x;int x=9;cout<<"\n Izrazito lokalni x:"<<x;}cout<<"\n Izvan bloka ,u myFunc ,x:"<<x;}

Izlaz:U main x je:5U myFunc, lokalni x je:8U bloku unutar myFunc, x je:8Izrazito lokalni x:9Izvan bloka ,u myFunc ,x:8Povratak u main, x je:5Press any key to continue . . .

2.Program računa površinu i obim kvadrata korištenjem lokalnih promjenjivih (a1 i a).

Page 86: C++

Programiranje C++ 86

#include<iostream.h>using namespace std;float KvadratFunc();int main(){ float a1,p; cout<<"Stranica kvadrata za povrsinu a1="; cin>>a1; KvadratFunc(); p=a1*a1; cout<<"Povrsina kvadrata p="; cout<<p<<endl; cout<<endl; system("pause"); return 0;}float KvadratFunc(){float a,o;cout<<"Stranica kvadrata za obim a=";cin>>a;o=4*a;{cout<<"Obim kvadrata o=";cout<<o<<endl;}cout<<"Program se vraca i racuna povrsinu za a1 u main:"<<endl;}

Izlaz:Stranica kvadrata za povrsinu a1=10Stranica kvadrata za obim a=5Obim kvadrata o=20Program se vraca i racuna povrsinu za a1 u main:Povrsina kvadrata p=100

Press any key to continue . . .

3.Program ispisuje parne brojeve niza, računa sumu niza , ispisuje neparne brojeve niza , a na kraju bloka vraća se i ispisuje parne brojeve.

Page 87: C++

Programiranje C++ 87

#include<iostream.h>using namespace std;int NizFunc();int main(){ int i,n,s,p ; cout<<"Unesite n za parne brojeve="; cin>>n; NizFunc(); cout<<"ISPIS PARNIH BROJEVA NIZA"<<endl; for(i=1;i<=n;i++) if(i%2==0) cout<<i<<endl; cout<<endl; system("pause"); return 0;}int NizFunc(){int i,s,n;cout<<"SUMA NIZA PRIRODNIH BROJEVA"<<endl;cout<<"Unesite n za racunanje sume niza n=";cin>>n;s=0;for(i=1;i<=n;i++)s=s+i;cout<<"Suma niza s=";cout<<s<<endl;{int i,n;cout<<"ISPIS NEPARNIH BROJEVA"<<endl;cout<<"Unesite n za ispis neparnih brojeva n=";cin>>n;for(i=1;i<=n;i++)if(i %2!=0)cout<<i<<endl;}cout<<"KRAJ BLOKA"<<endl;}

Izlaz:Unesite n za parne brojeve=9SUMA NIZA PRIRODNIH BROJEVAUnesite n za racunanje sume niza n=5Suma niza s=15ISPIS NEPARNIH BROJEVAUnesite n za ispis neparnih brojeva n=81357KRAJ BLOKAISPIS PARNIH BROJEVA NIZA2468Press any key to continue . . . 4.Program računa površinu i obm pravougaonika , kruga i kvadrata koristeći lokalne promjenjive.

Page 88: C++

Programiranje C++ 88

#include<iostream.h>using namespace std;float PovFunc();int main(){ float a,b,r,p,o ; cout<<"Unesite stranicu a="; cin>>a; PovFunc(); cout<<"POVRSINA KVADRATA"<<endl; p=a*a; cout<<"p="; cout<<p<<endl; cout<<"OBIM KVADRATA"<<endl; o=4*a; cout<<"Obim o="; cout<<o<<endl; system("pause"); return 0;}float PovFunc(){float a,b,o,p;cout<<"POVRSINA PRAVOUGAONIKA"<<endl;cout<<"Unesite stranicu a=";cin>>a;cout<<"Unesite stranicu b=";cin>>b;p=a*b;cout<<" Povrsina p=";cout<<p<<endl;cout<<"OBIM PRAVOUGAONIKA"<<endl; Izlaz:o=2*a+2*b; Unesite stranicu a=4.5cout<<" Obim o="; POVRSINA PRAVOUGAONIKAcout<<o<<endl; Unesite stanicu a=5{ Unesite stranicu b=4float r,o,p; Povrsina p=20const float pi=3.14; OBIM PRAVOUGAONIKAcout<<"POVRSINA KRUGA"<<endl; Obim o=18cout<<"Unesite poluprecnik r="; POVRSINA KRUGAcin>>r; Unesite poluprecnik r=10p=r*r*pi; Povrsina p=314cout<<" Povrsina p="; OBIM KRUGAcout<<p<<endl; Obim o=6.28cout<<"OBIM KRUGA"<<endl; KRAJ BLOKA o=2*r*pi; POVRSINA KVADRATA cout<<" Obim o="; p=20.25cout<<o<<endl; OBIM KVADRATA} Obim o=18cout<<"KRAJ BLOKA"<<endl; Press any key to continue......}

-Globalne promjenjive

Page 89: C++

Programiranje C++ 89

Promjenjive koje su definisane izvan svake funkcije imaju globalni opseg , pa su zbog toga raspoložive u svakoj funkciji u programu, uključujući main().

1.Program demonstrira rad globalnih i lokalnih promjenjivih#include<iostream.h>using namespace std;void myFunction(); //prototipint x=5,y=7; //globalne promjenjiveint main(){ cout<<"x iz main:"<<x<<"\n"; cout<<"y iz main:"<<y<<"\n"; myFunction(); cout<<"Povratak iz myFunction!\n\n"; cout<<"x iz main:"<<x<<"\n"; cout<<"y iz main:"<<y<<"\n"; system("pause"); return 0;}void myFunction(){ int y=10; cout<<"x iz myFunction:"<<x<<"\n"; cout<<"y iz myFunction:"<<y<<"\n"; }

Izlaz:

x iz main:5y iz main:7

x iz myFunction:5y iz myFunction:10

Povratak iz myFunction!

x iz main:5y iz main:7Press any key to continue . . .

2.Program demonstrira globalne i lokalne promjenjive za računanje površine i obima jednakostraničnog trokuta

Page 90: C++

Programiranje C++ 90

#include<iostream.h>using namespace std;float PovFunction();int main(){ float a,h,p; cout<<"Stranica a="; cin>>a; cout<<"Visina h="; cin>>h; PovFunction(); cout<<"Povratak iz PovFunction!\n\n"; cout<<"POVRSINA JEDNAKOSTRANICNI TROKUT"<<endl; cout<<"a iz main:"<<a<<"\n"; cout<<"h iz main:"<<h<<"\n"; p=a*h/2;; cout<<"Povrsina p="; cout<<p<<endl; system("pause"); return 0;}float PovFunction(){float a,o;cout<<"Stranica u PovFunction a=";cin>>a;cout<<"OBIM JEDNAKOSTRANICNOG TROKUTA"<<endl;o=3*a;cout<<"Obim o=";cout<<o<<endl;cout<<"Obim o iz PovFunction:"<<o<<"\n"; }

Izlaz: Stranica a=10.5Visina h=4Stranica u PovFunction a=8.4OBIM JEDNAKOSTRANICNOG TROKUTAObim o=25.2Obim o iz PovFunction:25.2Povratak iz PovFunction!POVRSINA JEDNAKOSTRANICNI TROKUTa iz main:10.5h iz main:4Povrsina p=21Press any key to continue . .

3.Program demonstrira globalne i lokalne promjenjive za računanje površine i

Page 91: C++

Programiranje C++ 91

zapremine valjka. #include<iostream.h>using namespace std;float MyFunction();int main(){ float r,h,p; const float pi=3.14; cout<<"VALJAK"<<endl; cout<<"Poluprecnik valjka r="; cin>>r; cout<<"Visina valjka h="; cin>>h; MyFunction(); cout<<"Povratak iz MyFunction!\n\n"; cout<<"Poluprecnik valjka r iz main:"<<r<<"\n"; cout<<"Visina valjka h iz main:"<<h<<"\n"; cout<<"POVRSINA VALJKA"<<endl; p=2*r*pi*(r+h); cout<<"Povrsina p="; cout<<p<<endl; system("pause"); return 0;}float MyFunction(){ float r,h,v; const float pi=3.14; cout<<"ZAPREMINA VALJKA U MyFunction"<<endl; cout<<"Poluprecnik r="; cin>>r; cout<<"Visina h="; cin>>h; cout<<"Poluprecnik valjka r iz MyFunction:"<<r<<"\n"; cout<<"Visina valjka h iz myFunction:"<<h<<"\n"; cout<<"ZAPREMINA"<<endl; v=r*r*h*pi; cout<<"Zapremina valjka v="; cout<<v<<endl; }Izlaz:VALJAKPoluprecnik valjka r=10.4Visina valjka h=8ZAPREMINA VALJKA U MyFunctionPoluprecnik r=12.6Visina h=10.5Poluprecnik valjka r iz MyFunction:12.6Visina valjka h iz myFunction:10.5ZAPREMINAZapremina valjka v=5234.32Povratak iz MyFunction!Poluprecnik valjka r iz main:10.4Visina valjka h iz main:8POVRSINA VALJKAPovrsina p=1201.74Press any key to continue . . .

-Argumenti funkcije

Page 92: C++

Programiranje C++ 92

Za svaki argument treba posebno navesti njegov tip, a broj argumenata nije ogranicen i ne moraju svi argumeti funkcije biti istog tipa. Argumenti koji se predaju funkciji su za nju lokalni .Promjene izvršene na argumentima ne utiču na vrednosti u pozivajućoj funkciji . Ovo je poznato kao predavanje po vrednosti , što znači da se u funkciji pravi lokalna kopija svakog argumenta.

1.Program demonstrira predavanje po vrednosti.

#include <iostream.h>using namespace std;void swap(int x, int y);int main(){ int x=5,y=10; cout<<"Main. Pre zamjene,x:"<<x<<"y:"<<y<<"\n"; swap(x,y); cout<<"Main. Posle. zamjene,x:"<<x<<"y:"<<y<<"\n"; system("pause"); return 0;}void swap(int x, int y){ int temp; cout<<"Swap. Pre. zamjene, x:"<<x<<"y:"<<y<<"\n"; temp=x; x=y; y=temp; cout<<"Swap. Posle. zamjene, x:"<<x<<"y:"<<y<<"\n";}

Izlaz: Main. Pre zamjene,x:5y:10Swap. Pre. zamjene, x:5y:10Swap. Posle. zamjene, x:10y:5Main. Posle. zamjene,x:5y:10Press any key to continue . . .

Page 93: C++

Programiranje C++ 93

2.Program demonstrira predavanje po vrednosti. #include <iostream.h>using namespace std;void swap(int x, int y);int main(){ int x=5,y=10; cout<<"Main. Pre zamjene,x="<<x<<"y="<<y<<"\n"; swap(x,y); cout<<"Main. Posle. zamjene,x="<<x<<"y="<<y<<"\n"; system("pause"); return 0;}void swap(int x, int y){ int a,b; cout<<"Swap. Pre. zamjene, x="<<x<<"y="<<y<<"\n"; cout<<"a="; cin>>a; cout<<"b="; cin>>b; x=2*a; cout<<"x="; cout<<x<<endl; cout<<"y="; cout<<y<<endl; cout<<"Swap. Posle. zamjene, x="<<x<<"y="<<y<<"\n";}

Izlaz:

Main. Pre zamjene,x=5y=10Swap. Pre. zamjene, x=5y=10a=10b=15x=20y=10Swap. Posle. zamjene, x=20y=10Main. Posle. zamjene,x=5y=10Press any key to continue . . .

Page 94: C++

Programiranje C++ 94

3. Program demonstrira predavanje po vrednosti.

#include <iostream.h>using namespace std;int promjeni (int vrijednost);int main(void){ int original=1000; cout<<"U main"<<endl; cout<<"original="; cout << original << endl; cout << promjeni (original) << endl; cout<<"U main"<<endl; cout<<"original="; cout << original << endl; system ("pause"); return 0;}int promjeni (int vrijednost){ cout<<"U promjeni"<<endl; vrijednost=0; cout<<"vrijednost="; return vrijednost;}

Iziaz:

U mainoriginal=1000U promjenivrijednost=0U mainoriginal=1000Press any key to continue . . .

Vidimo da vrijednost originalne varijable ostaje nepromjenjena iako ju funkcija mjenja u 0. To je zato što funkcija zapravo mjenja vrijednost njene kopije, a ne i same varijable.

Page 95: C++

Programiranje C++ 95

-Povratne vrednosti

Funkcije vraćaju vrednost , ili void. Void je signal kompajleru da nikakva vrednost neće biti vraćena. Da biste vratili vrednost iz funkcije , napišete ključnu reč return- za njom sledi vrednost koju želite da vratite. Sama vrednost će ,možda , biti izraz koji vraća vrednost.Na primjer: return 5;return (x>5);return (MyFunction() );Primjer 1 i 3 su legalni return iskazi , uz pretpostavku da funkcija Myfunction vraća vrednost..Vrednost u drugom iskazu return (x>5) biće nula ako x nije veći od 5, ili će biti 1. Kada se susretne return , iskaz koji sledi se vraća kao vrednost.

1.Primjer višestrukih return izraza

#include<iostream.h>int Doubler(int AmountToDouble);int main(){ int result=0; int input; cout<<"Unesite broj izmedju 0 i 10000 za udvostrucenje:"; cin>>input; cout<<"\nPre pozivanja udvostrucivaca..."; cout<<"\nulaz:"<<input<<"udvostrucen:"<<result<<"\n"; result=Doubler(input); cout<<"\nPovratak iz udvostrucivaca...\n"; cout<<"\n ulaz:"<<input<<"udvostrucen:"<<result<<"\n"; system("pause"); return 0;}int Doubler(int original){ if(original<=10000) return original*2; else return -1; cout<<"Ovde ne mozete!\n";}

Izlaz:

Unesite broj izmedju 0 i 10000 za udvostrucenje:9000Pre pozivanja udvostrucivaca...ulaz:9000 udvostrucen:0Povratak iz udvostrucivaca...ulaz:9000 udvostrucen:18000 Unesite broj izmedju 0 i 10000 za udvostrucenje:11000Pre pozivanja udvostrucivaca...ulaz:11000udvostrucen:0Povratak iz udvostrucivaca...ulaz:11000udvostrucen:-1Press any key to continue . . .

Page 96: C++

Programiranje C++ 96

2.Program računa površinu (return izrazi)

#include<iostream.h>using namespace std;int Povrsina(int d,int s);int main(){ int d; int s; int p; cout<<"d="; cin>>d; cout<<"s="; cin>>s; p=Povrsina(d,s); cout<<"Povrsina p="; cout<<p; cout<<" kvadratnih metara\n\n"; system("pause"); return 0;}int Povrsina(int d,int s){ if((d<=0)||(s<=0)) return 0; return d*s; } Izlaz:Duzina d=10Sirina s=5Povrsina p=50 kvadratnih metaraPress any key to continue . . .

Page 97: C++

Programiranje C++ 97

3.Programa koji sadrži funkciju prost (return izrazi)

#include <iostream.h>#include <math.h>using namespace std;int prost (long int n);int main(){ long int n; cout << "n="; cin >> n; for (int i=2; i<=n; i++) if (prost(i)) cout << "Broj " << i << " je prost.\n"; system("pause"); return 0;}int prost (long int n){ for (int i=2; i<=sqrt(n); i++) if (n%i==0) return 0; return 1;}

Izlaz:

n=13Broj 2 je prost.Broj 3 je prost.Broj 5 je prost.Broj 7 je prost.Broj 11 je prost.Broj 13 je prost.Press any key to continue . . .

Page 98: C++

Programiranje C++ 98

-Podrazumevani parametri Za svaki parametar koji deklarišete u prototipu i definiciji funkcije pozivajuća funkcija mora predati vrednost.Predata vrednost mora biti deklarisanog tipa . Ako imate funkciju deklarisanu kao funkciju long myFunction(int);-ona mora prihvatiti celobrojnu promenjivu.

1.Program demonstrira upotrebu podrazumjevanih vrednosti.#include<iostream.h>using namespace std;int Zapremina (int d,int s=2,int b=4);int main(){ int d=20; int s=5; int b=6; int v; cout<<"ZAPREMINA PRIZME"<<endl; v=Zapremina(d,s,b); cout<<"Prva zapremina iznosi v="; cout<<v; cout<<" kvadratnih metara\n\n"; v=Zapremina(d,s); cout<<"U drugom pozivu zapremina iznosi v="; cout<<v; cout<<" kvadratnih metara\n\n"; v=Zapremina(d); cout<<"U tecem pozivu zapremina iznosi v="; cout<<v; cout<<" kvadratnih metara\n\n"; system("pause"); return 0;}int Zapremina(int d,int s,int b){ return d*s*b; }

Izlaz:

ZAPREMINA PRIZMEPrva zapremina iznosi v=600 kvadratnih metaraU drugom pozivu zapremina iznosi v=400 kvadratnih metaraU tecem pozivu zapremina iznosi v=160 kvadratnih metaraPress any key to continue . . .

Page 99: C++

Programiranje C++ 99

Preklapaju će funkcije C++ omogućava da kreirate više od jedne funkcije sa istim imenom.Ovo se naziva preklapanje funkcije. Funkcije se moraju razlikovati po svojim listama parametara , različitim tipom parametara , različitim brojem parametara, ili jednim i drugim.Primjer:int myFunction (int,int);int myFunction (long,long);int myFunction (long);Preklapanje funkcije se naziva i funkcijski polimorfizam. Poly znači više , a morph znači forma.Funkcijski polimorfizam se odnosi na sposobnost da se funkcija optereti više od jednog značenja.Primjeri:1.Program računa površinu pravugaonika i dijagonalu kvadrata. Demonstracija funkcijskog polimforizma-preklapajuće funkcije #include<iostream.h>#include<cmath>using namespace std;int PovFunkcija(int a,int b);int PovFunkcija(float a1);int main(){ int a; int b; float a1; int p; float d; cout<<“Stranica a=“; cin>>a; cout<<“Stranica b=“; cin>>b; cout<<“Stranica kvadrata a1=“; cin>>a1; p=PovFunkcija(a,b); d=PovFunkcija(a1); cout<<“POVRSINA PRAVOUGAONIKA“<<endl; cout<<“Povrsina pravougaonika p1=“; cout<<p; cout<<“ kvadratnih metara\n\n“; cout<<“DIJAGONALA KVADRATA“<<endl; cout<<“Dijagonala d=“; cout<<d; cout<<“ metara\n\n“; system(„pause“); return 0;}int PovFunkcija(int a,int b){ return a*b; } int PovFunkcija(float a1) { return a1*sqrt(2); } Izlaz:Stranica a=10Stranica b=5Stranica kvadrata a1=10.5POVRSINA PRAVOUGAONIKAPovrsina pravougaonika p1=50 kvadratnih metaraDIJAGONALA KVADRATADijagonala d=14 metaraPress any key to continue . . .

Page 100: C++

Programiranje C++ 100

2.Program računa proizvod.Demonstracija funkcijskog polimforizma-preklapajuće funkcije . #include<iostream.h>using namespace std;int Funkcija(int d,int s );float Funkcija(int d);int main(){ int d=40; int s=50.8; int p; float b; p=Funkcija(d,s); b=Funkcija(d); cout<<"Proizvod p="; cout<<p; cout<<endl; cout<<"Proizvod b="; cout<<b; cout<<endl; system("pause"); return 0;}int Funkcija(int d,int s){ return d*s; } float Funkcija(int d) { return 2*d; }

Izlaz:Proizvod p=2000Proizvod b=80Press any key to continue . . .

Page 101: C++

Programiranje C++ 101

-Inline funkcija

Kada definišete funkciju , kompajler, normalno, kreira samo jedan skup instrukcija u memoriji.Kada pozovete funkciju, izvršenje programa „skače“ na te instrukcije , a po povratku iz funkcije, ono se vraća na sledeću liniju u pozivajuću funkciju .Ako pozovete 10 puta, program skače na isti skup instrukcija svaki put. Ovo znači da postoji samo jedna kopija funkcije, a ne 10.

Ako je funkcija deklarisana ključnom rečju inline , kompajler ne kreira pravu funkciju: on kopira kod iz inline funkcije , direktno u pozivajuću funkciju . Ne obavlja se nikakav skok, a to je kao da ste napisali iskaze u pozivajućoj funkciji.

1.Program za demonstriranje inline funkcije

#include<iostream.h>inline int Double(int );int main(){ int target; cout<<"Unesite broj:"; cin>>target; cout<<"\n"; target=Double(target); cout<<"Rezultat:"<<target<<endl; target=Double(target); cout<<"Rezultat:"<<target<<endl; target=Double(target); cout<<"Rezultat:"<<target<<endl; system("pause"); return 0;}int Double(int target){ return 2*target;}

Izlaz:

Unesite broj:20Rezultat:40Rezultat:80Rezultat:160Press any key to continue . . .

Page 102: C++

Programiranje C++ 102

2.Demonstriranje inline funkcije

#include<iostream.h>inline int Double(int );int main(){ int x; cout<<"Unesite broj:"; cin>>x; x=Double(x); cout<<"Rezultat:"<<x<<endl; x=Double(x); cout<<"Rezultat:"<<x<<endl; x=Double(x); cout<<"Rezultat:"<<x<<endl; system("pause"); return 0;}int Double(int x){ return 2*x;}

Izlaz:

Unesite broj:50Rezultat:100Rezultat:200Rezultat:400Press any key to continue . . .

Page 103: C++

Programiranje C++ 103

-Rekurzija

Funkcija može pozvati samu sebe i to se naziva rekurzija. Rekurzija može biti direktna ili indirektna. Direktna je kada funkcija poziva samu sebe . Indirektna je kada funkcija poziva drugu funkciju, koja , onda, poziva prvu funkciju. Važno je uočiti da se, kada funkcija poziva samu sebe , izvršava njena nova kopija. Da bismo ilustrovali rešavanje problema korišćenjem rekurzije razmotrite Fibonaccievu seriju:

1,1,2,3,5,8,13,21,34....

Prva dva broja su 1.Svaki broj ,posle drugog, predstavlja zbir dva broja pre njega. Uopšteno govoreći , n-ti broj je zbir n-2 i n-1, sve dok je n:2.Rekurzivne funkcije treba da zaustave uslov. U Fibonaccievvoj seriji n<3 je uslov za zaustavljanje.

1.Demonstriranje rekurzije korišćenjem Fibonaccieve serije. #include<iostream.h>int fib(int n);int main(){int n, answer;cout<<"Unesite broj koji treba pronaci:";cin>>n;cout<<"\n\n";answer=fib(n);cout<< answer << "je" << n <<".ti Fibonacciev broj\n";system("pause");return 0;}int fib (int n){ cout<<"U procesu fib("<< n <<")..."; if (n<3) { cout<<"Vraca 1!\n"; return (1);}else{ cout<<"Poziva se fib("<<n-2<<") i fib("<< n-1 <<").\n"; return(fib(n-2)+fib(n-1));}}

Izlaz: Unesite broj koji treba pronaci:5U procesu fib(5)...Poziva se fib(3) i fib(4).U procesu fib(3)...Poziva se fib(1) i fib(2).U procesu fib(1)...Vraca 1!U procesu fib(2)...Vraca 1!U procesu fib(4)...Poziva se fib(2) i fib(3).U procesu fib(2)...Vraca 1!U procesu fib(3)...Poziva se fib(1) i fib(2).U procesu fib(1)...Vraca 1!U procesu fib(2)...Vraca 1!5je5.ti Fibonacciev brojPress any key to continue . . .

Page 104: C++

Programiranje C++ 104

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] A[1] A[2] A[3] A[4] A[5] A[6]

2 3 5 4 5 34 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-N-1 gdje je N broj koji govori koliko ima članova niza.

Postoje jednodimenzionalni, dvodimenzionalni i višedimenzionalni nizovi.

Page 105: C++

Programiranje C++ 105

Jednodimenzionalni nizoviNiz je kolekcija lokacija za smještanje podataka , od kojih svaka sadrži isti tip podataka.Sve te lokacije nazivaju se elementi niza. 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] A[1] A[2] A[3] A[4] A[5] A[6]

34 5 3 21 5 3 76

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:

int a[10] – 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

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];}

Page 106: C++

Programiranje C++ 106

Primjer 1: Unesi N članova niza X pomoću for petlje te ih zatim ispiši na ekranu računara, također for petljom .

#include <cstdlib>#include <iostream>using namespace std;int main(){int i,N; int X[10];                           /*deklaracija niza od 10 cijelih brojeva*/cout<<"Zadaj 0<N<10 = ";  /*broj N mora biti manji od 10 jer je deklariran niz od maksimalno 10 članova*/cin >>N; for (i=0;i<N;i++)               /*upis članova niza*/ { cin>>X[i];                        /*upis i-tog člana niza*/}

Cout<<“Ispis clanova niza „<<endl;

for (i=0;i<N;i++)               /*ispis članova niza for petljom*/ {  cout << X[i];                  /*ispis i- tog člana niza*/cout <<endl;                  /*ispis praznog retka (end line)*/} system ("PAUSE");return 0;}

Izlaz:

Zadaj 0<N<10 = 3

8

9

4

Ispis clanova niza

8

9

4

Press any key to continue . . .

Page 107: C++

Programiranje C++ 107

Primjer 2: Unesi N članova niza te ispiši najmanji element u nizu.

#include <cstdlib>#include <iostream>using namespace std;int main(){int polje[100];int N,i, j, min;cout<<"Unesi N:";cin>>N;for(i = 0; i < N; i++){cout<< "\nUnesite polje[" << i << "] = ";cin>> polje[i];}min=polje[0];// traženje najmanjegfor(i = 0; i < N; i++)if(polje [i] < min){min = polje[i];}cout<< "\n Najmanji je:"<<min;system ("PAUSE");return 0;}Izlaz:Unesi N:3

Unesite polje[0] = 8

Unesite polje[1] = 12

Unesite polje[2] = 4

Najmanji je:4Press any key to continue . . .

Page 108: C++

Programiranje C++ 108

3.Program deklariše niz od pet integera i kako se popunjava svaki od njih.

#include<iostream.h>using namespace std;int main(){ int Niz[5]; int i; for(i=0;i<5;i++) { cout<<"UNOS ELEMENATA Niza["<<i<<"]:"; cin>>Niz[i]; } for(i=0;i<5;i++) cout<<i<<":"<<Niz[i]<<endl; system("PAUSE"); return 0;}

Izlaz:

UNOS ELEMENATA Niza[0]:5UNOS ELEMENATA Niza[1]:3UNOS ELEMENATA Niza[2]:8UNOS ELEMENATA Niza[3]:7UNOS ELEMENATA Niza[4]:40:51:32:83:74:4Press any key to continue . . .Napomena!Elementi niza se broje od nule

Page 109: C++

Programiranje C++ 109

4.Program ispisuje elemente niza

#include <iostream.h>using namespace std; main () {int polje[5]={10,20,30,40,50};cout<<polje[0]<<endl;cout<<polje[1]<<endl;cout<<polje[2]<<endl;cout<<polje[3]<<endl;cout<<polje[4]<<endl;system("PAUSE");return 0;}

Izlaz:1020304050Press any key to continue . . .

5.Program koji ispisuje jedan od elementa niza.

#include <iostream.h>using namespace std; main () {int polje[5]={10,20,30,40,50};cout<<polje[0]<<endl;cout<<polje[2]<<endl;system("PAUSE");return 0;}

Izlaz:1030Press any key to continue . . .

Page 110: C++

Programiranje C++ 110

6.Program za unos 5 elemenata niza , ispis trećeg elementa ,zbir i proizvod elemenata niza.

#include <iostream.h>using namespace std; main () {int Niz[5];int x;int s,p;cout<<"UNOS ELEMENATA NIZA[5]"<<endl;for (x=0;x<5;x=x+1){ cin>>Niz[x];}cout<<"ISPIS 3 ELEMENATA NIZA"<<endl;{cout<< Niz[3]<<endl;}cout<<"ZBIR ELEMENATA NIZA s=";s=0;for (x=0;x<5;x=x+1)s=s+Niz[x];{cout<<s<<endl;cout<<endl;}cout<<"PROIZVOD ELEMENATA NIZA p=";p=1;for (x=0;x<5;x=x+1)p=p*Niz[x];{cout<<p<<endl;}system("PAUSE");return 0;}

Izlaz:

UNOS ELEMENATA NIZA[5]479101ISPIS 3 ELEMENATA NIZA10ZBIR ELEMENATA NIZA s=31PROIZVOD ELEMENATA NIZA p=2520Press any key to continue . . .

Page 111: C++

Programiranje C++ 111

7.Program za unos n elemenata , ispis, zbir i proizvod elemenata niza.#include <iostream.h>using namespace std; main () {int element[0];int n;int x;int s,p;cout<<"UNOS ELEMENATA,ISPIS ELEMENATA, ZBIR I PROIZVOD ELEMENATA"<<endl;cout<<endl;cout<<"BROJ ELEMENATA n=";cin>>n;if(n<1){cout<<"GRESKA"<<endl;}else{cout<<"UNOS ELEMENATA"<<endl;for (x=1;x<=n;x=x+1){ cin>>element[x];}cout<<"ISPIS ELEMENATA"<<endl;for (x=1;x<=n;x=x+1){cout<< element[x]<<endl;}cout<<"ZBIR ELEMENATA s=";s=0;for (x=1;x<=n;x=x+1)s=s+element[x];{cout<<s<<endl;cout<<endl;}cout<<"PROIZVOD ELEMENATA p=";p=1;for (x=1;x<=n;x=x+1)p=p*element[x];{cout<<p<<endl;}}system("PAUSE");return 0;}Izlaz:UNOS ELEMENATA,ISPIS ELEMENATA, ZBIR I PROIZVOD ELEMENATABROJ ELEMENATA n=4UNOS ELEMENATA79318ISPIS ELEMENATA79318ZBIR ELEMENATA s=37

Page 112: C++

Programiranje C++ 112

PROIZVOD ELEMENATA p=3402

8.Program za unos n elemenata niza , ispis i zbir parnih elemenata niza.#include <iostream.h>using namespace std; main () {int element[0];int n;int i;int s,p;cout<<"UNOS ELEMENATA NIZA,ISPIS PARNIH ELEMENATA I ZBIR PARNIH ELEMENATA"<<endl;cout<<endl;cout<<"BROJ ELEMENATA n=";cin>>n;if(n<1){cout<<"GRESKA"<<endl;}else{cout<<"UNOS ELEMENATA"<<endl;for (i=1;i<=n;i=i+1){ cin>>element[i];}cout<<"ISPIS PARNIH ELEMENATA"<<endl;for (i=1;i<=n;i++)if(element[i]%2==0){cout<< element[i]<<endl;}cout<<"ZBIR PARNIH ELEMENATA s=";s=0;for (i=1;i<=n;i=i+1)if(element[i]%2==0)s=s+element[i];{cout<<s<<endl;cout<<endl;}}system("PAUSE");return 0;}

Izlaz:UNOS ELEMENATA NIZA,ISPIS PARNIH ELEMENATA I ZBIR PARNIH ELEMENATABROJ ELEMENATA n=4UNOS ELEMENATA18427ISPIS PARNIH ELEMENATA842ZBIR PARNIH ELEMENATA s=50Press any key to continue . . .

Page 113: C++

Programiranje C++ 113

9.Program za unos n elemenata , ispis i zbir neparnih elemenata.

#include<iostream.h>using namespace std;main(){

int Niz[0];int n,i,s;cout<<"UNOS N ELEMENATA NIZA,ISPIS I PROIZVOD NEPARNIH ELEMENATA"<<endl;cout<<"Broj elemenata niza n=";cin>>n;if(n<1){

cout<<"GRESKA"<<endl;}

else{

cout<<"UNOS ELEMENATA"<<endl;for(i=1;i<=n;i++){

cin>>Niz[i];}

cout<<"ISPIS NEPARNIH ELEMENATA"<<endl;for(i=1;i<=n;i++)if(Niz[i]%2!=0){

cout<<Niz[i]<<endl;}

cout<<"ZBIR NEPARNIH ELEMENATA s=";s=0;for(i=1;i<=n;i++)if(Niz[i]%2!=0)s=s+Niz[i];{

cout<<s<<endl;cout<<endl;}

system("pause");return 0;}}

Izlaz:

UNOS N ELEMENATA NIZA,ISPISI PROIZVOD NEPARNIH ELEMENATABroj elemenata niza n=3UNOS ELEMENATA4711ISPIS NEPARNIH ELEMENATA711ZBIR NEPARNIH ELEMENATA s=18

Page 114: C++

Programiranje C++ 114

10.Program ispisuje najveći element niza.

#include <iostream.h>using namespace std;int main () {int Element[0];int i;int r;int n;cout<<"ISPIS NAJVECEG ELEMENTA U NIZU"<<endl;cout<<"BROJ ELEMENATA n=";cin>>n;if(n<1){cout<<"GRESKA"<<endl;}cout<<"UPIS ELEMENATA NIZA"<<endl;for (i=0;i<n;i=i+1){ cin>>Element[i];}cout<<"ISPIS NIZA"<<endl;for (i=0;i<n;i=i+1){cout<< Element[i]<<endl;}r=Element[0];for(i=0;i<n;i=i+1){if(r<Element[i]){r=Element[i]; }}cout<<"NAJVECI JE ELEMENT"<<endl; cout<<r<<endl;system("PAUSE");return 0;}

Izlaz:

ISPIS NAJVECEG ELEMENTA U NIZUBROJ ELEMENATA n=3UPIS ELEMENATA NIZA-1274832ISPIS NIZA-1274832NAJVECI JE ELEMENT48

Page 115: C++

Programiranje C++ 115

11.Program ispisuje najmanji član niza.

#include <iostream.h>using namespace std; main () {int Niz[0];int i;int r;int n;cout<<"ISPIS NAJMANJEG ELEMENTA U NIZU"<<endl;cout<<"BROJ ELEMENATA n=";cin>>n;if(n<1)cout<<"GRESKA"<<endl;cout<<"UNOS ELEMENATA U NIZ"<<endl;for (i=0;i<n;i++){ cin>>Niz[i];}cout<<"ISPIS Niza"<<endl;

for (i=0;i<n;i++){cout<<Niz[i]<<endl;}r=Niz[0];for(i=0;i<n;i++){if(r>Niz[i]){r=Niz[i]; }}cout<<"NAJMANJI JE ELEMENT=";cout<<r<<endl;system("PAUSE");return 0;}

Izlaz:

ISPIS NAJMANJEG ELEMENTA U NIZUBROJ ELEMENATA n=3UNOS ELEMENATA U NIZ5-58ISPIS Niza5-58NAJMANJI JE ELEMENT=-5

Page 116: C++

Programiranje C++ 116

12.Program sortira elemente niza od najvećeg do najmanjeg.

#include <iostream.h>using namespace std;int main () {int Niz[0];int zamjena;int privremeni;int i;int n;cout<<"SORTIRANJE OD NAJVECEG DO NAJMANJEG ELEMENTA NIZA"<<endl;cout<<"BROJ ELEMENATA n=";cin>>n;cout<<"UNOS ELEMENATA NIZA"<<endl;for (i=0;i<n;i=i+1){ cin>>Niz[i];}do{ zamjena=0; for(i=0;i<(n-1);i=i+1) { if(Niz[i]<Niz[i+1]){ privremeni=Niz[i]; Niz[i]=Niz[i+1]; Niz[i+1]=privremeni; zamjena=1; } }}while(zamjena==1);cout<<"Sortirano elemenata"<<endl;for(i=0;i<n;i=i+1){ cout<<Niz[i]<<endl; } system("PAUSE"); return 0; }Izlaz:SORTIRANJE OD NAJVECEG DO NAJMANJEG ELEMENTA NIZABROJ ELEMENATA n=4UNOS ELEMENATA NIZA-5-278432Sortirano polje8432-5-27

Page 117: C++

Programiranje C++ 117

13.Program sortira elemente niza od najmanjeg do najvećeg. #include <iostream.h>using namespace std;int main () {int Niz[0];int zamjena;int privremeni;int i;int n;cout<<"SORTIRANJE OD NAJMANJEG DO NAJVECEG ELEMENTA NIZA"<<endl;cout<<"BROJ ELEMENATA NIZA n=";cin>>n;cout<<"UNOS ELEMENATA U NIZ"<<endl;for (i=0;i<n;i++){ cin>>Niz[i];}do{ zamjena=0; for(i=0;i<(n-1);i=i+1) { if(Niz[i]>Niz[i+1]){ privremeni=Niz[i]; Niz[i]=Niz[i+1]; Niz[i+1]=privremeni; zamjena=1; } }}while(zamjena==1);cout<<"Sortirano elemenata"<<endl;for(i=0;i<n;i=i+1){cout<<Niz[i]<<endl;}system("PAUSE");return 0;}

Izlaz:SORTIRANJE OD NAJMANJEG DO NAJVECEG ELEMENTA NIZABROJ ELEMENATA NIZA n=3UNOS ELEMENATA U NIZ-7-254Sortirano polje-25-74

Page 118: C++

Programiranje C++ 118

14. Napišite program koji učitava 5 cijelih brojeva i onda saopštava kvadrate unesenihbrojeva!Primjer 1: ulaz: Unesi brojeve: 1 2 3 4 5 izlaz: 1 4 9 16 25

Rješenje:

// Ispisuje kvadrate za 10 unesenih brojeva, kvadrati.cpp#include <iostream.h>using namespace std;int main(){int niz[10];cout<<"Unesi brojeve: "<<endl;for(int i=0; i<5; i++)cin>>niz[i];cout<<”kvadrati niza:”<<endl;for(int i=0; i<5; i++)cout<<niz[i]*niz[i]<<" ";cout<<endl;system("pause");return 0;}Izlaz:Unesi brojeve:24579Kvadrati niza:4 16 25 49 81Press any key to continue . . .

Page 119: C++

Programiranje C++ 119

15. Napišite program koji učitava 5 brojeva, a zatim prvo ispisuje brojeve unesene podneparnim rednim brojem, a zatim pod parnim brojem!Primjer 1: ulaz: Unesi brojeve: 1 2 4 6 7 izlaz:1 4 7 2 6

Rješenje:// Ispisuje brojeve nesene pod neparnim, a onda parnim brojem, prvi_treci.cpp#include <iostream.h>using namespace std;int main(){int niz[10];cout<<"Unesi brojeve: "<<endl;for(int i=0; i<10; i++)cin>>niz[i];// Ispisujemo prvo prvi broj, pa treci... (Napomena: Prvi broj u nizu je na poziciji 0)cout<<”Ispis brojeva na neparnoj poziciji:”<<endl;for(int i=0; i<10; i=i+2)cout<<niz[i]<<" ";cout<<endl;// Sada ispisujemo drugi, cetvrti... (Napomena: Drugi broj je na poziciji 1)cout<<”Ispis brojeva na parnim pozicijama:”<<endl;for(int i=1; i<10; i=i+2)cout<<niz[i]<<" ";cout<<endl;system("pause");return 0;}

Izlaz:Unesi brojeve:7911825Ispis brojeva na neparnoj poziciji:7 11 25Ispis brojeva na parnim pozicijama:9 8Press any key to continue . . .

Page 120: C++

Programiranje C++ 120

16. Napišite program koji učitava 10 brojeva a zatim saopštava zbir susjednih brojeva!

Primjer 1: ulaz: Unesi brojeve: 1 2 4 6 7 9 11 12 34 10 izlaz: 3 6 10 13 16 20 23 46 44

Rješenje:// Ispisuje zbir susjednih brojeva, susjedni.cpp#include <iostream>using namespace std;int main(){int niz[10];cout<<"Unesi brojeve: "<<endl;for(int i=0; i<10; i++)cin>>niz[i];// Petlja ide od 0 do 9, jer su uvijek susjedni brojevi [i] i [i+1]// (Kad bi isla do 10, onda bi [i+1] bilo 10, a taj elemenat niza ne postoji, postoje 0 - 9)for(int i=0; i<9; i++)cout<<niz[i]+niz[i+1]<<" ";cout<<endl;system("pause");return 0;}

Izlaz:

Unesi brojeve:10 14 5 7 8 12 10 8 35 1524 19 12 15 20 22 18 43 50Press any key to continue . . .

Page 121: C++

Programiranje C++ 121

17. Napišite program koji saopštava da li je unešeni niz od 10 brojeva strogo opadajući, ili nije!

Primjer 1: ulaz: Unesi brojeve: 1 2 4 6 7 9 11 12 34 10 izlaz: nije opadajuciPrimjer 2: ulaz: Unesi brojeve: 10 9 8 7 7 5 2 3 2 1 izlaz: nije opadajuciPrimjer 3: ulaz: Unesi brojeve: 15 12 8 7 6 5 4 3 2 1 izlaz: jeste opadajuci

Rješenje:// Provjerava da li je niz opadajuci, opadajuci.cpp#include <iostream>using namespace std;int main(){int niz[10];bool jeste = true; // Varijabla [jeste] je logicka, i postavimo je na true - tacno.cout<<"Unesi brojeve: "<<endl;for(int i=0; i<10; i++)cin>>niz[i];/* Ako u nizu nadjemo dva susjedna broja, a da je sadasnji manji od narednog,niz nije opadajuci, a varijablu [jeste] postavimo na false - netacno */for(int i=0; i<9; i++)if(niz[i]<=niz[i+1]) // ispunjava se samo ako niz nije opadajucijeste = false;if(jeste == true)cout<<"jeste opadajuci"<<endl;elsecout<<"nije opadajuci"<<endl;system("pause");return 0;}

Unesi brojeve:2 5 8 9 12 14 17 20 25 27nije opadajuciPress any key to continue . . .Unesi brojeve:17 15 12 10 9 8 7 6 3 1jeste opadajuciPress any key to continue . . .

Page 122: C++

Programiranje C++ 122

18. Napišite program koji učitava 5 brojeva a zatim saopštava unatraške kako se vrijednosti mijenjaju u odnosu na zadnji broj!

Primjer 1: ulaz: Unesi brojeve: 11 12 34 10 11 izlaz: pada raste pada pada

Primjer 2: ulaz: Unesi brojeve: 2 2 1 3 4 izlaz: pada pada raste isto

Primjer 3: ulaz: Unesi brojeve: 10 9 8 7 6 5 izlaz: raste raste raste raste

Rješenje:// Provjerava mijenjanje vrijednosti, mijenjanje.cpp#include <iostream>using namespace std;int main(){int niz[5];cout<<"Unesi brojeve: "<<endl;for(int i=0; i<5; i++)cin>>niz[i];for(int i=4; i>0; i--) // provjeravamo unatraske{if(niz[i]<niz[i-1])cout<<"raste ";else if(niz[i]==niz[i-1])cout<<"isto ";elsecout<<"pada ";}/* ovdje je [i-1] jer provjeravamo unatraske izmedju clana [i] i onog prije njega [i-1]. */system("pause");

return 0;

}

Izlaz:

Unesi brojeve:7 13 4 8 11pada pada raste pada Press any key to continue . . .

Page 123: C++

Programiranje C++ 123

19. Napisati program u koji ucitava 10 brojeva, pa u jedan red ispisuje prane, a u drugineparne.

Primjer 1: ulaz:Unesi brojeve: 1 2 3 4 5 6 7 8 9 10 izlaz: 2 4 6 8 10 1 3 5 7 9Primjer 2: ulaz:Unesi brojeve: 2 2 -5 1 3 5 7 13 9 10 izlaz: 2 2 10 -5 1 3 5 7 13 9Primjer 3: ulaz:Unesi brojeve: 1 8 7 3 6 5 111 112 303 11 izlaz: 8 6 112 1 7 3 5 111 303 11

Rješenje:// Ispisuje prvo parne, a u naredni red neparne brojeve za 10 unesenih, par_nep.cpp#include <iostream>using namespace std;int main(){int niz[10];cout<<"Unesi brojeve: "<<endl;for(int i=0; i<10; i++)cin>>niz[i];for(int i=0; i<10; i++){// ispisuje prvo parneif(niz[i]%2==0)cout<<niz[i]<<" ";}cout<<endl; // pomjeramo kursor u naredni redfor(int i=0; i<10; i++){// sada ispisujemo neparneif(niz[i]%2!=0)cout<<niz[i]<<" ";}cout<<endl;system("pause");return 0;}

Izlaz:Unesi brojeve:346853122564 6 8 12 2 63 5 3 5Press any key to continue . . .

20. Napišite program koji učitava 10 brojeva a zatim saopštava aritmetičku sredinu

Page 124: C++

Programiranje C++ 124

susjednih brojeva!

Primjer 1:ulaz:Unesi brojeve: 1 2 3 4 5 6 7 8 9 10 izlaz: 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5

Primjer 2:ulaz:Unesi brojeve: 1 3 5 7 9 7 5 3 1 -1 izlaz: 2 4 6 8 8 6 4 2 0

Primjer 3:ulaz:Unesi brojeve:1 11 2 1 4 5 6 12 11 10 izlaz:6 6.5 1.5 2.5 4.5 5.5 9 11.5 10.5

Rješenje:

// Aritmeticka sredina susjeda, aritmeticka.cpp

#include <iostream>

using namespace std;

int main()

{

float niz[10];

cout<<"Unesi brojeve: "<<endl;

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

cin>>niz[i];

cout<<” Ispis aritimetčke sredine susjednih brojeva:”<<endl;

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

cout<<(niz[i]+niz[i+1])/2<<" ";

cout<<endl;

system("pause");

return 0;

}

Unesi brojeve:

4 5 7 8 1 6 7 10 4 3

Ispis aritimetčke sredine susjednih brojeva:

4.5 6 7.5 4.5 3.5 6.5 8.5 7 3.5

Press any key to continue . . .

Page 125: C++

Programiranje C++ 125

21. Napišite program koji učitava 7 brojeva a zatim unatraške saopštava njihovu parnost!

Primjer 1: ulaz: Unesi brojeve: 1 2 3 4 5 6 7 izlaz: nep par nep par nep par nepPrimjer 2: ulaz: Unesi brojeve: 1 3 5 7 9 7 5 izlaz:nep nep nep nep nep nep nepPrimjer 3: ulaz: Unesi brojeve: 1 11 2 1 4 5 6 izlaz:par nep par nep par nep nep

Rješenje:// Saopstava parnost unatraske, parnost.cpp#include <iostream>using namespace std;int main(){int niz[7];cout<<"Unesi brojeve: "<<endl;for(int i=0; i<7; i++)cin>>niz[i];for(int i=6; i>=0; i--){if(niz[i]%2==0)cout<<"par ";elsecout<<"nep ";}cout<<endl;system("pause");return 0;}

Izlaz:

Unesi brojeve: 1 2 3 4 5 6 7nep par nep par nep par nepPress any key to continue . . .

Page 126: C++

Programiranje C++ 126

22. Napišite program koji učitava 10 brojeva a zatim saopštava kumulativnu sumu brojeva niza.

Primjer 1: ulaz: Unesi brojeve: 1 2 3 4 5 6 7 8 9 10 izlaz: 1 3 6 10 15 21 28 36 45 55

Primjer 2: ulaz: Unesi brojeve: 1 3 5 7 9 7 5 5 7 8 izlaz: 1 4 9 16 25 32 37 42 49 57

Primjer 3:ulaz: Unesi brojeve: 1 11 2 1 4 5 6 2 3 4 izlaz:1 12 14 15 19 24 30 32 35 39

Rješenje:// Kumulativna suma, suma.cpp#include <iostream>using namespace std;int main(){int niz[10];int suma = 0;cout<<"Unesi brojeve: "<<endl;for(int i=0; i<10; i++)cin>>niz[i];for(int i=0; i<10; i++){suma = suma + niz[i];cout<<suma<<" ";}cout<<endl;system("pause");return 0;}

Izlaz:

Unesi brojeve:1 2 3 4 5 6 7 8 9 101 3 6 10 15 21 28 36 45 55Press any key to continue . . .

Page 127: C++

Programiranje C++ 127

23. Napišite program koji saopštava da li je unešeni niz od 10 brojeva strogo rastući, ili nije!

Primjer 1: ulaz: Unesi brojeve: 1 2 4 6 7 9 11 12 34 50 izlaz: jeste rastuci

Primjer 2: ulaz: Unesi brojeve: 10 9 8 7 7 5 2 3 2 1 izlaz: nije rastuci

Primjer 3: ulaz: Unesi brojeve: 2 3 4 4 6 8 9 19 29 30 izlaz: nije rastuci

Rješenje:// Provjerava da li je niz rastuci, rastuci.cpp#include <iostream>using namespace std;int main(){int niz[10];bool jeste = true; // Varijabla [jeste] je logicka, i postavimo je na true - tacno.cout<<"Unesi brojeve: "<<endl;for(int i=0; i<10; i++)cin>>niz[i];/* Ako u nizu nadjemo dva susjedna broja, a da je sadasnji veci od narednog,niz nije rastuci, a varijablu [jeste] postavimo na false - netacno */for(int i=0; i<9; i++)if(niz[i]>=niz[i+1]) // ispunjava se samo ako niz nije rastucijeste = false;if(jeste == true)cout<<"jeste rastuci"<<endl;elsecout<<"nije rastuci"<<endl;system("pause");return 0;}

Izlaz:

Unesi brojeve:3 5 8 7 9 16 10 14 15 20nije rastuciPress any key to continue . . .

Unesi brojeve:4 5 9 11 13 15 17 19 20 25jeste rastuciPress any key to continue . . .

Page 128: C++

Programiranje C++ 128

Dvodimenzionalni nizovi

Karakteristika dvodimenzionalnih nizova je da imaju više redaka i stupaca.Tablicom u nastavku predstavljen je cjelobrojni niz naziva A.

  1. stupac 2. stupac 3. stupac 4.stupac

1. redak 2 4 5 6

2. redak 0 3 9 7

Čitajući tablicu, članovi niza su sljedeći:

A[0,0] = 2A[0,1] = 4A[0,2] = 5A[0,3] = 6

A[1,0] = 0A[1,1] = 3A[1,2] = 9A[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.

Page 129: C++

Programiranje C++ 129

Primjer: Unesi niz od N cijelih brojeva te ispiši sortiran niz od najmanjeg do najvećeg elementa.

#include <cstdlib>#include <iostream>using namespace std;int main(){int A[100];int N,i, j, temp;cout<<"Unesi N:";cin>>N;for(i = 0; i < N; i++){cout<< "\nUnesite polje[" << i << "] = ";cin>> A[i];}// sortiranje niza (od najmanjeg do najvećeg)cout<<“Sortiranje niza:“<<endl;for(i = 0; i < N-1; i++)for(j = i+1; j < N; j++)if(A [i] > A[j]){temp = A[i];A[i] = A[j];A[j] = temp;}for(i = 0; i<N; i++)cout<< A[i] << "\n";system ("PAUSE");return 0;}

Izlaz:

Unesi N:5Unesite polje[0] = 12Unesite polje[1] = 4Unesite polje[2] = 3Unesite polje[3] = -9Unesite polje[4] = 11Sortiranje niza:-9341112Press any key to continue . . .

Page 130: C++

Programiranje C++ 130

OBJAŠNJENJE: 

47 78 17 53 61A[0] A[1] A[2] A[3] A[4]

Za i=0, j će poprimiti vrijednosti 1,2,3 i 4, što znači da će se element niza A[0] uspoređivati s ostalim

elementima. Svaki put kad neki drugi element bude manji id elementa A[0], doći će do zamjene

vrijednosti.

i j    0 1 A[0]>A[1]

47>78

Nejednakost ne vrijedi pa ne treba ništa raditi

0 2 A[0]>A[2]

47>17

Nejednakost vrijedi pa se zamijene vrijednosti sada je A[0]=17, A[2]=47

0 3 A[0]>A[3]

17>53

Nejednakost ne vrijedi pa ne treba ništa raditi

0 4 A[0]>A[4]

17>61

Nejednakost ne vrijedi pa ne treba ništa raditi

 Nakon prvog prolaza na prvom mjestu u nizu nalazi se najmanji element. Niz sada izgleda:

17 78 47 53 61A[0] A[1] A[2] A[3] A[4]

 Sad od preostalih elementa (od mjesta 1 do 4) tražimo najmanji:

i j    1 2 A[1]>A[2]

78>47

Nejednakost vrijedi pa se zamijene vrijednosti sada je A[1]=47, A[2]=78

1 3 A[1]>A[3]

47>53

Nejednakost ne vrijedi pa ne treba ništa raditi

1 4 A[1]>A[4]

47>61

Nejednakost ne vrijedi pa ne treba ništa raditi

Page 131: C++

Programiranje C++ 131

Nakon drugog prolaza niz izgleda:

17 47 78 53 61A[0] A[1] A[2] A[3] A[4]

 

i j    2 3 A[2]>A[3]

78>53

Nejednakost vrijedi pa se zamijene vrijednosti sada je A[2]=53, A[3]=78

2 4 A[2]>A[4]

53>61

Nejednakost ne vrijedi pa ne treba ništa raditi

Sada niz izgleda ovako:

17 47 53 78 61A[0] A[1] A[2] A[3] A[4]

 

i j    3 4 A[3]>A[4]

78>61

Nejednakost vrijedi pa se zamijene vrijednosti sada je A[3]=61, A[4]=78

 Petlje su završene, a samim tim i postupak sortiranja, niz koji će biti ispisan izgleda:

17 47 53 61 78A[0] A[1] A[2] A[3] A[4]

 Sortiranje je završeno!

 

Page 132: C++

Programiranje C++ 132

1. Napisati program koji će sa tastature prvo učitati prirodni broj n koji mora biti između 2 i 10. Nakon toga učitati n x n realnih brojeva u matricu. Pretpostaviti da u matricu može stati najviše 10x10 brojeva. Pronaći i na ekran ispisati sumu svakog reda matrice i proizvod svake kolone matrice. #include <iostream.h>#define max 10main (){    int matrica[max][max], suma[max], proizvod[max];    int n;    cout << "n=";    cin >> n;    for (int i=1; i<=max; i++)    {        suma[i]=0;        proizvod[i]=1;    }    for (int i=1; i<=n; i++)        for (int j=1; j<=n; j++)        {              cout <<"Mat["<<i<<","<<j<<"]=";            cin >> matrica[i][j];            suma[j]+=matrica[i][j];            proizvod[i]*=matrica[i][j];        }    for (int i=1; i<=n; i++)        cout<<"Suma["<<i<<"]="<<suma[i]<<endl;    for (int i=1; i<=n; i++)        cout<<"Proizvod["<<i<<"]="<<proizvod[i]<<endl;    return 0;}Izlaz:n=2Mat[1,1]=4Mat[1,2]=5Mat[2,1]=6Mat[2,2]=7Suma[1]=9Suma[2]=13Proizvod[1]=24Proizvod[2]=35Press any key to continue . . .

Page 133: C++

Programiranje C++ 133

2.Program ispisuje višedimenzionalni niz (dva reda i četri kolone) tj. ispisuje redove .

#include<iostream.h>using namespace std;main(){ int niz[2][4]={{11,12,13,14},{21,22,23,24}}; int i; cout<<"ISPIS PRVOG REDA"<<endl; for(i=0;i<4;i++) { cout<<niz[0][i]<<endl; } cout<<"ISPIS DRUGOG REDA"<<endl; for(i=0;i<4;i++) { cout<<niz[1][i]<<endl; } system("pause"); return 0;

Izlaz:ISPIS PRVOG REDA11121314ISPIS DRUGOG REDA21222324Press any key to continue . . .

Page 134: C++

Programiranje C++ 134

3.Program ispisuje višedimenzionalni niz

#include<iostream.h>using namespace std;int main(){ int DvodNiz[5][2]={{0,0},{1,2},{2,4},{3,6},{4,8}}; int i,j; for(i=0;i<5;i++) for(j=0;j<2;j++) { cout<<"DvodNiz["<<i<<"]["<<j<<"]:"; cout<<DvodNiz[i][j]<<endl; } system("pause"); return 0; }

Izlaz:DvodNiz[0][0]:0DvodNiz[0][1]:0DvodNiz[1][0]:1DvodNiz[1][1]:2DvodNiz[2][0]:2DvodNiz[2][1]:4DvodNiz[3][0]:3DvodNiz[3][1]:6DvodNiz[4][0]:4DvodNiz[4][1]:8Press any key to continue . . .

Page 135: C++

Programiranje C++ 135

4.Program sa tastature učitava prirodni broj n(između 2 i 10) ,a nakon toga učitati n x n brojeva u matricu. Pretpostaviti da u matricu može stati najviše 10 x 10 brojeva.

#include <iostream.h>#define max 10main (){ int matrica[max][max]; int n,i,j; cout << "n="; cin >> n; if (n<2 || n>10) { cout<<"GRESKA"<<endl; } else { for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) { cout <<"Mat["<<i<<","<<j<<"]="; cin >> matrica[i][j]; }} system("pause"); return 0;}

Izlaz:

n=3

Mat[1,1]=4

Mat[1,2]=5

Mat[1,3]=6

Mat[2,1]=4

Mat[2,2]=7

Mat[2,3]=8

Mat[3,1]=9

Mat[3,2]=1

Mat[3,3]=4

Press any key to continue . . .

Page 136: C++

Programiranje C++ 136

5.Napisati parne članove niza veće od aritmetičke sredine. #include <iostream>#define max 10using namespace std;main(){      int n, niz[max], s=0;      float as;      cout << "n=";      cin >> n;      for (int i=0; i<n; i++)      {          cout << "NIZ[" << i << "]=";          cin >> niz[i];          s+=i;      }      as=s/n;      for (int i=0; i<n; i++)          if (niz[i]>as && niz[i]%2==0)             cout << "NIZ[" << i << "]=" <<niz[i]<< " zadovoljava uslov. \n";            system ("pause");      return 0;}

Izlaz:

n=3

NIZ[0]=4

NIZ[1]=2

NIZ[2]=6

NIZ[0]=4 zadovoljava uslov.

NIZ[1]=2 zadovoljava uslov.

NIZ[2]=6 zadovoljava uslov.

Press any key to continue . . .

Page 137: C++

Programiranje C++ 137

6.Napisati C++ program koji će s tastature prvo učitati prirodni broj m koji mora biti između 2 i 10. Nakon toga učitati mxm cijelih brojeva u matricu A. Odrediti najveći broj u matrici te načiniti matricu B istih dimenzija koja će za elemente matrice sadržavati produkt najvećeg elementa i svih ostalih elemenata matrice A.

#include <iostream>#define dim 10using namespace std;main(){      int n,a[dim][dim],b[dim][dim],max=0;      cout << "n=";      cin >> n;      for (int i=1; i<=n; i++)          for (j=1;j<=n; j++)          {              cout <<"a["<<i<<","<<j<<"]=";              cin >>a[i][j];              if (a[i][j]>max)                 max=a[i][j];          }      for (int i=1; i<=n; i++)          for (j=1;j<=n; j++)              b[i][j]=max*a[i][j];      system ("pause"); return 0;}

Izlaz:n=3a[1,1]=4a[1,2]=8a[1,3]=2a[2,1]=1a[2,2]=5a[2,3]=4a[3,1]=9a[3,2]=10a[3,3]=2Press any key to continue . . .

Page 138: C++

Programiranje C++ 138

7.Napisati C++ program koji će s tastature prvo učitati cijeli broj m. Taj broj m mora biti pozitivan i ne veći od veličine matrice A (za matricu predvidjeti najviše 10x10 elemenata). Program zatim treba učitati s tastature realne brojeve u matricu A veličine m x m. Nakon toga s tastature unijeti m cijelih brojeva u vektor V koji je veličine 10 elemenata. Program zatim treba brojeve iz vektora V dodati elementima matrice A koji su na glavnoj dijagonali. Tako dobivenu matricu ispisati na ekran.#include <iostream>#include <vector>#define max 10using namespace std;main(){      int n;      float a[max][max];      vector <float> v;      cout << "n=";      cin >> n;      if (!(n>0 && n<max))         exit(0);      for(int i=1; i<=n; i++)              for (int j=1; j<=n; j++)              {                  cout << "a["<<i<<","<<j<<"]=";                  cin >> a[i][j];              }      for (int i=1; i<=n; i++)          {               float temp;               cout << "vektor["<<i<<"]=";               cin >> temp;               v.push_back(temp);          }      for(int i=1; i<=n; i++)              for (int j=1; j<=n; j++)                  {                       if (i==j)                          a[i][j]+=v[i];                  }      for(int i=1; i<=n; i++)              {              cout << endl;              for (int j=1; j<=n; j++)                  cout <<a[i][j]<<" ";               }                   system ("pause");      return 0;}Izlaz:n=3a[1,1]=5a[1,2]=8a[1,3]=4a[2,1]=6a[2,2]=1a[2,3]=1a[3,1]=3a[3,2]=2a[3,3]=5vektor[1]=2vektor[2]=4vektor[3]=39 8 46 4 13 2 5 Press any key to continue . . .

Page 139: C++

Programiranje C++ 139

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);

Primjer 1: Unesi i ispiši svoje ime.

#include <cstdlib>#include <iostream>#include <string>using namespace std;int main(){ string ime;                             /*deklaracija stringa (niza znakova)*/cout <<"Unesi svoje ime =";cin >> ime;cout <<"Tvoje ime je "<<ime;cout<<"\n";                           /*prelazak u novi red*/system ("PAUSE"); return 0;}

Izlaz:

Unesi svoje ime =MARKO

Tvoje ime je MARKO

Press any key to continue . . .

Page 140: C++

Programiranje C++ 140

Primjer 2: Unesi rečenicu " Danas učim programiranje u C++." te ju nakon unosa ispiši na monitoru računala.

#include <cstdlib>#include <iostream>#include <string>using namespace std;int main(){ string recenica;                     /*deklaracija stringa (niza znakova) za varijablu recenica*/cout <<"Unesi recenicu = ";getline(cin,recenica);              /*unos rečenice pomoću naredbe getline*/cout <<recenica;cout<<"\n";system ("PAUSE"); return 0;}

Izlaz:

Unesi recenicu = Danas ucim programiranje u C++

Danas ucim programiranje u C++

Press any key to continue . . .

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)

 

Page 141: C++

Programiranje C++ 141

Primjer 1: Napiši program kojim se unosi niz znakova i ispisuje duljina učitanog niza.

#include <cstdlib>#include <iostream>#include <string>using namespace std;int main(){ char a[80];int i=0;printf("upisite niz znakova: ");gets(a);while (a[i+1]!='\0')i++;printf("upisali ste niz: ");puts(a);printf("Duljina mu je %d znakova",i+1);system ("PAUSE"); return 0;}

Izlaz:

upisite niz znakova: Maja je student

upisali ste niz: Maja je student

Duljina mu je 15 znakova

Press any key to continue . . .

Page 142: C++

Programiranje C++ 142

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 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.

Page 143: C++

Programiranje C++ 143

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.#include <cstdlib>#include <iostream>#include <string>using namespace std;struct datum{int dan;int mjesec;int godina;};struct ucenik{char ime[15];char prezime[15];int maticni;float prosjek;struct datum rodjendan;}razred[40];         /*polje razred čiji su članovi strukture tipa ucenik*/int main(){int n,i,k;float max;cout<<"\nKoliko ima ucenika? ";cin>>n;if (n>40)cout<<"Broj ucenika ne moze biti >40";else{for(i=0;i<n;i++)          /*unos podataka za pojedinog učenika u polje razred*/{cout<<"\nIme: ";cin>>razred[i].ime;cout<<"\nPrezime: ";cin>>razred[i].prezime;cout<<"\nMaticni u imeniku: ";cin>>razred[i].maticni;cout<<"\nProsjek: ";cin>>razred[i].prosjek;cout<<"\nRodjen dan: ";cin>>razred[i].rodjendan.dan;cout<<"\nRodjen mjesec: ";cin>>razred[i].rodjendan.mjesec;cout<<"\nRodjen godina: "; cin>>razred[i].rodjendan.godina;}max=razred[0].prosjek;    /*određivanje najboljeg prosjeka*/k=0;for(i=0;i<n;i++)if (max<razred[i].prosjek){max=razred[i].prosjek;k=i;}/*ispis najboljeg*/cout<<"\nNajbolji je "<<razred[k].ime<<" " <<razred[k].prezime;cout<<"\nMaticni broj "<<razred[k].maticni;cout<<"\nRodjen "<<razred[k].rodjendan.dan<<razred[k].rodjendan.mjesec<< razred[k].rodjendan.godina;cout<<"\nS prosjekom "<<razred[k].prosjek;} system ("PAUSE"); return 0;}

Page 144: C++

Programiranje C++ 144

 Izlaz:

Koliko ima ucenika? 2

Ime: mladen

Prezime: milković

Maticni u imeniku: 1011

Prosjek: 6

Rodjen dan: 10

Rodjen mjesec: 12

Rodjen godina: 1989

Ime: maja

Prezime: milković

Maticni u imeniku: 1010

Prosjek: 8.5

Rodjen dan: 10

Rodjen mjesec: 12

Rodjen godina: 1989

Najbolji je maja milković

Maticni broj 1010

Rodjen 10121989

S prosjekom 8.5

Press any key to continue . . .

Page 145: C++

Programiranje C++ 145

U nastavku je isti primjer, ali uz korištenje naredbi za formatirani ulaz i izlaz (printf i scanf).

#include <cstdlib>#include <iostream>#include <string>using namespace std;

struct datum{int dan;int mjesec;int godina;};struct ucenik{char ime[15];char prezime[15];int maticni;float prosjek;struct datum rodjendan;}razred[40];     /*polje razred koje se sastoji od struktura ucenik*/int main(){int n,i,k;float max;printf("\nKoliko ima ucenika? ");scanf("%d",&n);if (n>40)printf("Broj ucenika ne moze biti >40");else{for(i=0;i<n;i++)       /*unos podataka za svakog učenika u polje razred*/{printf("\nIme: ");scanf("%s",razred[i].ime);printf("\nPrezime: ");scanf("%s",razred[i].prezime);printf("\nMaticni u imeniku:");scanf("%d",&razred[i].maticni);printf("\nProsjek: ");scanf("%f",&razred[i].prosjek);printf("\nRodjen dan: ");scanf("%d",&razred[i].rodjendan.dan);printf("\nRodjen mjesec: ");scanf("%d",&razred[i].rodjendan.mjesec);printf("\nRodjen godina: ");scanf("%d",&razred[i].rodjendan.godina);}max=razred[0].prosjek;     /*određivanje najboljeg prosjeka*/k=0;for(i=0;i<n;i++)if (max<razred[i].prosjek){max=razred[i].prosjek;

Page 146: C++

Programiranje C++ 146

k=i;}/*ispis najboljeg*/printf("\nNajbolji je %s %s",razred[k].ime,razred[k].prezime);printf("\nMaticni broj %d",razred[k].maticni);printf("\nRodjen %d.%d.%d",razred[k].rodjendan.dan,razred[k].rodjendan.mjesec,razred[k].rodjendan.godina);printf("\nS prosjekom %.2f",razred[k].prosjek);} system ("PAUSE"); return 0;}

Izlaz:

Koliko ima ucenika? 2

Ime: maja

Prezime: milkovic

Maticni u imeniku:1010

Prosjek: 8.5

Rodjen dan: 10

Rodjen mjesec: 12

Rodjen godina: 1989

Ime: milan

Prezime: milkovic

Maticni u imeniku:1011

Prosjek: 9

Rodjen dan: 27

Rodjen mjesec: 5

Rodjen godina: 1987

Najbolji je milan milkovic

Maticni broj 1011

Rodjen 27.5.1987

S prosjekom 9.00

Press any key to continue . . .

Page 147: C++

Programiranje C++ 147

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).

#include <iostream>#include <fstream>using namespace std;

int main () {ofstream test;                                   /*deklaracija datoteke test - opcija:upisivanje podataka*/test.open ("primjer.txt");                 /*otvaranje datoteke primjer.txt u radnoj mapi na tvrdom disku*/test << "Ovo je primjer pisanja teksta u datoteku \n";                 /*upis teksta u datoteku*/test.close();                                                                        /*zatvaranje datoteke*/system ("PAUSE");return 0;}

Izlaz:

Page 148: C++

Programiranje C++ 148

Primjer 2: Ispis (čitanje) sadržaja prethodnim zadatkom kreirane datoteke primjer.txt.

#include <iostream>#include <fstream>#include <string>using namespace std;

int main () {string redak;                                              /*deklaracija tekstualne varijable redak*/ifstream test ("primjer.txt");                       /*deklaracija datoteke test - opcija:čitanje podataka iz datoteke*/if (test.is_open())                                       /*ispitivanje da li je datoteka ispravno otvorena*/{while (! test.eof() )                                     /*čitaj dok nije kraj datoteke (End Of File)*/{getline (test,redak);                                    /*uzmi iz datoteke test jedan red teksta i stavi ga u varijablu redak*/cout << redak << endl;                                /*ispis teksta retka na zaslon računala*/}test.close();}

else cout << "Ne mogu otvoriti datoteku";        /*ispis ako uvjet test.is_open() nije ispunjen*/

system ("PAUSE");return 0;}

Izlaz:Ovo je primjer pisanja teksta u datotekuPress any key to continue . . .Ž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.

Page 149: C++

Programiranje C++ 149

 

Način otvaranja

Objašnjenje

"r" Otvara tekstualnu datoteku za čitanje. Ako datoteka ne postoji javlja pogrešku.

"w" Otvara tekstualnu datoteku za pisanje u nju.

"a" Otvara tekstualnu datoteku za dodavanje novih podataka na njen kraj.

"r+" Otvara tekstualnu datoteku za čitanje i pisanje. Ako ne postoji javlja pogrešku.

"w+"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.

"a+"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".

 

Page 150: C++

Programiranje C++ 150

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))#include <cstdlib>#include <iostream>using namespace std;int main(){ FILE *f;int i;f=fopen("test1.txt","w");                /*otvaranje datoteke za čitanje i pisanje*/if(f==NULL)                                   /*ispitivanje valjanosti otvaranja datoteke*/{printf("Greska pri otvaranju");exit(1);}for(i=1;i<=100;i++)                        /*upis podataka u datoteku; for petljom; brojeva od 1-100*/fprintf(f,"%d\n",i);fclose(f);                                     /*zatvaranje datoteke*/system ("PAUSE"); return 0;}

Izlaz:

Page 151: C++

Programiranje C++ 151

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.#include <cstdlib>#include <iostream>using namespace std;int main(){

FILE *f;int a;f=fopen("test1.txt","r");            /*ponovno otvaranje datoteke*/if(f==NULL){printf("Greska pri otvaranju");exit(1);}

while (!feof(f))                        /*citanje iz datoteke - dok nije kraj !feof*/{fscanf(f,"%d\n",&a);printf("\n%d",a);                     /*ispis na zaslon računala*/}

fclose(f);                                /*zatvaranje datoteke*/

system ("PAUSE"); return 0;}Izlaz:

Page 152: C++

Programiranje C++ 152

Objekti i klase

Klase u jeziku C++ su složeni tipovi podataka koji se satoje od uređenih nizova elemenata koji mogu da budu međusobno različitih tipova. Ti elementi nazivaju se članovi klase. Podaci klasnih tipova predstavljaju primjerke date klase i nazivaju se objekti . Pojam podatak obuhvata kako vrednost standardnih tipova , tako i objekte klasnih tipova. Kvalitativno se razlikuju pojedinačni podaci i nizovi. Prosti(skalarni) podaci , pokazivači strukture i objekti smatraju se pojedinačnim podacima. Članovi klasa mogu da budu podaci ili funkcije.Vrednosti podataka članova čine stanje (vrednost) objekta i nazivaju se polja ili atribut i klase , odnosno objekta.Funkcije članovi služe za izvođenje raznih operacija nad podacima članovima (poljima) čime mjenjaju stanje objekta na koji se primjenjuju. Nazivaju se metode klase.

Osnovni pojmovi objektnog programiranja su:- klase- objekti- svojstva- metode i- događajiU 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 privatne u C++ se zapisuju s public i private.-Privatnim(private) članovima se može pristupiti samo unutar metode same klase.-Javnim (public) članovima se može pristupiti kroz svaki objekt klase-protected privilegovani pristup

Klasa se definiše naredbom class i deklariše se:class Ime_klase { <podaci_clanovi> <objekti_clanovi> <funkcije_clanice> };

Page 153: C++

Programiranje C++ 153

1. Pristup javnim članovima klase.

#include<iostream.h>using namespace std;class Cat{public: int itsAge; }; int main() { Cat Milan; Milan.itsAge=5; cout<<"Milan ima"; cout<<Milan.itsAge<< "godina"<<endl; system("PAUSE"); return 0; }

Izlaz:Milan ima 5godinaPress any key to continue . . .

2.Pristup javnim članovima

#include<iostream.h>using namespace std;class Cat{public: int itsAge; int itsWeight; }; int main() { Cat Milan; Milan.itsAge=5; cout<<"Milan ima"; cout<<Milan.itsAge<< "godina"<<endl; Cat Marko; Marko.itsWeight=10; cout<<"Marko ima"; cout<<Marko.itsWeight<< "godina"<<endl; system("PAUSE"); return 0; }

Izlaz:Milan ima 5godinaMarko ima 10godinaPress any key to continue . . .

Page 154: C++

Programiranje C++ 154

Primjer 3: U ovom primjeru kreirana je klasa koja se zove Primjer i koja sadrži funkciju Ispis().Funkcija Ispis() ispsuje tekst "Ispis teksta na ekranu racunala koristenjem klase Ispis" na ekranu računala.#include <iostream>using namespace std;class Primjer              /*deklaracija klase koja se zove Primjer i koja u sebi sadrži funkciju Ispis()*/{public:  void Ispis()           {  cout << "Ispis teksta na ekranu racunala koristenjem klase Ispis\n" << endl;  }};int main(){Primjer tekst;                    /*deklaracija objekta imena test prema "nacrtu"u klasi Primjer*/tekst.Ispis();                         /*poziv funkcije Ispis() nad objektom test*/

system ("PAUSE");return 0;}

Izlaz.Ispis teksta na ekranu racunala koristenjem klase IspisPress any key to continue . . .

4.U ovom primjeru kreirana je klasa tekst i koja sadrži funkciju pisi() koja ispisuje tekst „ Ovo je nas tekst“#include<cstdlib>#include<iostream.h>using namespace std;class tekst{public:void pisi(){cout<<"Ovo je nas tekst"<<endl;}};int main(){tekst t;t.pisi();cout<<endl;system("PAUSE");return 0;}

Izlaz:Ovo je nas tekstPress any key to continue . . .

Page 155: C++

Programiranje C++ 155

5.U ovom programu kreirana je klasa tekst koja sadrži funkciju pisi()

#include<cstdlib>#include<iostream.h>using namespace std;class tekst{public:void pisi(){cout<<"Ovo je nas tekst"<<endl;}};int main(){tekst prvi;tekst drugi;tekst treci;prvi.pisi();drugi.pisi();treci.pisi();cout<<endl;system("PAUSE");return 0;}

Izlaz:

Ovo je nas tekstOvo je nas tekstOvo je nas tekstPress any key to continue . . .

Page 156: C++

Programiranje C++ 156

6.Program sadrži dvije klase tekst1 i tekst2 i funkciju pisi()

#include<cstdlib>#include<iostream>using namespace std;class tekst1{public:void pisi(){cout<<"Ovo je klasa tekst1"<<endl;}};class tekst2{public: void pisi() {cout<<"Ovo je klasa tekst2"<<endl;}};int main(){cout<<"Zovemo metodu klase tekst1"<<endl;tekst1 t1;t1.pisi();cout<<"Zovemo metodu klase tekst2"<<endl;tekst2 t2;t2.pisi();cout<<endl;system("PAUSE");return 0;}

Izlaz:

Zovemo metodu klase tekst1Ovo je klasa tekst1Zovemo metodu klase tekst2Ovo je klasa tekst2Press any key to continue . . .

Page 157: C++

Programiranje C++ 157

7.Napisati program koji računa površinu pravougaonika a pristup članovima private (varijabla c int tipa) i public (( metoda naslov() i metoda povrsina (int a i int b))

#include<cstdlib>#include<iostream>using namespace std;class pravougaonik{private:int c;public:void naslov(){cout<<"Povrsina pravougaonika"<<endl;cout<<endl;}int povrsina(int a,int b){ c=a*b; return (c);}};int main(){ pravougaonik p; p.naslov(); cout<<"Povrsina je "; cout<<p.povrsina(2,3); cout<<endl<<endl;system("PAUSE");return 0;}

Izlaz:

Povrsina pravougaonikaPovrsina je 6Press any key to continue . . .

Page 158: C++

Programiranje C++ 158

8.Program računa površinu pravougaonika pomoću dvije void metode a)Metoda unesi gde se unose brojevi u varijablu a i varijablu b b) Metodom povrsina izračunava se povrsina i ispisuje rezultat

#include<cstdlib>#include<iostream>using namespace std;class pravougaonik{private:int a;int b;int c;public:void unesi(void){cout<<"Unesi stranicu a="<<endl;cin >>a;cout<<"Unesi stranicu b="<<endl;cin >>b;}void povrsina(void){ c=a*b; cout<<"Povrsina je "<<c<<endl;}};int main(){ pravougaonik p; p.unesi(); p.povrsina(); cout<<endl;system("PAUSE");return 0;} Izlaz:

Unesi stranicu a=10Unesi stranicu b=5Povrsina je 50Press any key to continue . . .

Page 159: C++

Programiranje C++ 159

9.Program računa površinu i obim pravougaonika pomoću dvije void metode a)Metoda unesi gde se unose brojevi u varijablu a i varijablu b b) Metodom povrsina izračunava se povrsina i obim ispisuje rezultat

#include<cstdlib>#include<iostream>using namespace std;class pravougaonik{private:int a;int b;int p;int o;public:void unesi(void){cout<<"Unesi stranicu a="<<endl;cin >>a;cout<<"Unesi stranicu b="<<endl;cin >>b;}void povrsina(void){ p=a*b; cout<<"Povrsina je "<<p<<endl; o=2*a+2*b; cout<<"Obim je "<<o<<endl;}};int main(){ pravougaonik p; p.unesi(); p.povrsina(); cout<<endl;system("PAUSE");return 0;}

Izlaz:

Unesi stranicu a=8Unesi stranicu b=4Povrsina je 32Obim je 24

Press any key to continue . . .

Page 160: C++

Programiranje C++ 160

10. 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.

#include <iostream>#include <math.h>

using namespace std;

class pravokutnik         /*klasa pravokutnik koja sadrži dvije funkcije: povrsina() i opseg()*/{public:float str1,str2;

 float povrsina() {  float pov;  pov=str1*str2; return pov; } float opseg () {  float opseg;  opseg=2*(str1+str2);  return opseg; } }; int main(){pravokutnik prvi;prvi.str1=5;prvi.str2=6;cout<<"Za a= "<<prvi.str1<<" i b= "<<prvi.str2<<"\nPovrsina je: "<<prvi.povrsina()<<"\n";cout<< "a opseg je: "<<prvi.opseg()<<"\n";system ("PAUSE"); return 0;}

Izlaz:Za a= 5 i b= 6Povrsina je: 30a opseg je: 22Press any key to continue . . .

Page 161: C++

Programiranje C++ 161

11.Program računa površinu i obim pravougaonika-klase

#include <iostream>#include <math.h>

using namespace std;

class Pravougaonik /*klasa pravougaonik koja sadrži dvije funkcije: povrsina() i opseg()*/{public:float str1,str2;

float povrsina() { float pov; pov=str1*str2; return pov; } float opseg () { float opseg; opseg=2*(str1+str2); return opseg; } }; int main(){Pravougaonik prvi;cout<<"Unesite prvu stranicu"<<endl;cin>> prvi.str1;cout<<"Unesite drugu stranicu"<<endl;cin>>prvi.str2;cout<<"Za a= "<<prvi.str1<<" i b= "<<prvi.str2<<"\nPovrsina je: "<<prvi.povrsina()<<"\n";cout<< "Opseg je: "<<prvi.opseg()<<"\n";system ("PAUSE"); return 0;}

Izlaz:

Unesite prvu stranicu10unesite drugu stranicu5Za a= 10 i b= 5Povrsina je: 50Opseg je: 30Press any key to continue . . .

Page 162: C++

Programiranje C++ 162

-Konstruktor i destruktorUloga konstuktora je da direktno dodeljuje vrednost nekih promenljivih u klasi prije izvršavanja main() funkcije Konstruktor bi trebalo da inicijalizuje članove objekta na neke početne vrednosti za koje smatramo da bi trebalo da ih imaju pre nego što se krene sa upotrebom objekta. To može da bude rezervisanje memorije, postavljanje pokazivača na NULL, otvaranje fajla, učitavanje podataka iz konfiguracionog fajla i tome slično.Destruktor oslobađa zauzetu memoriju. . Destruktor treba da "počisti" za sobom koliko je to moguće, jer se poziva kada se objekat uništava: znači da oslobodi memoriju, zatvori otvorene fajlove, upiše podatke u konfiguracioni fajl itd.Definisanje konstruktoraclass PovrsinaValjka{public:    PovrsinaValjka(); //To jest definicja konstruktora};

PovrsinaValjka::PovrsinaValjka(){    //Tu inicijalizujemo}

Konstruktor – specijalna funkcija članica koja omogućava inicijalizaciju objekta prilikom njegovog kreiranja.

Konstruktor ima isto ime kao i klasa kojoj pripada. Konstruktor nema tip – čak ni void! Konstruktor se automatski poziva svaki put kad se kreira neki objekat. Klasa ne mora da ima konstruktor. Objekti mogu da se inicijalizuju drugim funkcijama članicama. Praksa pokazuje da je najbolje da se objekat inicijalizuje konstruktorom

Primjer:

class Time { private: int hh, mm, ss;

public: ... Time() { hh = mm = ss = 0; } ...

}; ... Time t;

Destruktori – slično konstruktoru – još jedna specijalna funkcija članica klase Destruktor se poziva svaki put kad se uništava neki objekat. Destruktor suštinski ne uništava objekat (objekat će biti uništen i u slučaju da klasa nema

definisan destruktor) - destruktor služi za “čišćenje memorije” (bitno kod objekata koji dinamički alociraju memoriju).

Klasa može da ima samo jedan destruktor. Nije dozvoljeno preklapanje imena. Destruktor nema argumenata! Destruktor nema tip! Destruktor ima isto ime kao konstruktor, ali se ispred stavlja tilda (~). Intuitivno se može napraviti

analogija sa bitskim operatorom negacije, jer se destruktor ponaša kao komplement konstruktora. class Time

{public: ... ~Time(); ...

};

Page 163: C++

Programiranje C++ 163

1.Program računa površinu pravougaonika uz primjenu konstruktora

#include<cstdlib>#include<iostream>using namespace std;class pravougaonik{private:int a;int b;public:pravougaonik(void) // konstruktor//{cout<<"Unesi stranicu a="<<endl;cin >>a;cout<<"Unesi stranicu b="<<endl;cin >>b;}int povrsina(void){return(a*b);}};int main(){ pravougaonik p; cout<<"Povrsina je "<<p.povrsina()<<"."<<endl; cout<<endl;system("PAUSE");return 0;}

Izlaz:

Unesi stranicu a=5Unesi stranicu b=4Povrsina je 20.Press any key to continue . . .

Page 164: C++

Programiranje C++ 164

2.Program računa obim pravougaonika uz primjenu konstruktora

#include<cstdlib>#include<iostream>using namespace std;class pravougaonik{private:int a;int b;public:pravougaonik::pravougaonik(void) // konstruktor//{cout<<"Unesi stranicu a="<<endl;cin >>a;cout<<"Unesi stranicu b="<<endl;cin >>b;}int obim(void){return(2*a+2*b);}};int main(){ pravougaonik o; cout<<"Obim je "<<o.obim()<<"."<<endl; cout<<endl;system("PAUSE");return 0;}

Izlaz:

Unesi stranicu a=10Unesi stranicu b=5Obim je 30.

Press any key to continue . . .

Page 165: C++

Programiranje C++ 165

3.Program računa površinu pravougaonika koristeći dva konstruktora #include<cstdlib>#include<iostream>using namespace std;class pravougaonik{private:int a;int b;public:pravougaonik(void) // konstruktor 1//{cout<<"Unesi stranicu a="<<endl;cin >>a;cout<<"Unesi stranicu b="<<endl;cin >>b;}pravougaonik(int a1, int b1) // konstruktor 2//{a=a1;b=b1;}int povrsina(void){return(a*b);}};int main(){ pravougaonik p1; cout<<"Povrsina je "<<p1.povrsina()<<"."<<endl; cout<<endl; pravougaonik p2(3,4); cout<<"Za p2(3,4) povrsina je "<<p2.povrsina()<<"."<<endl; cout<<endl;system("PAUSE");return 0;}

Izlaz:

Unesi stranicu a=4Unesi stranicu b=2Povrsina je 8.

Za p2(3,4) povrsina je 12.

Press any key to continue . . .

Page 166: C++

Programiranje C++ 166

3 a.Program računa površinu pravougaonika koristeći dva konstruktora

#include<cstdlib>#include<iostream>using namespace std;class pravougaonik{private:int a;int b;public:pravougaonik::pravougaonik(void)// konstruktor 1//{cout<<"Unesi stranicu a="<<endl;cin >>a;cout<<"Unesi stranicu b="<<endl;cin >>b;}pravougaonik::pravougaonik(int a1, int b1)// konstruktor 2//{a=a1;b=b1;}int povrsina(void){return(a*b);}};int main(){ pravougaonik p1; cout<<"Povrsina je "<<p1.povrsina()<<"."<<endl; cout<<endl; pravougaonik p2(3,4); cout<<"Za p2(3,4) povrsina je "<<p2.povrsina()<<"."<<endl; cout<<endl;system("PAUSE");return 0;}

Izlaz:Unesi stranicu a=5Unesi stranicu b=4Povrsina je 20.

Za p2(3,4) povrsina je 12.

Press any key to continue . . .

Page 167: C++

Programiranje C++ 167

4.Primjena konstruktora na brojačku petlju

#include <iostream.h>class Inkrement{ public: Inkrement( int b=0, int i=1 ); void dodaj() { stanje += korak; } void print(); private: int stanje; const int korak; };Inkrement::Inkrement(int b,int i) : korak (i) { stanje = b; }void Inkrement::print(){ cout << "stanje=" << stanje << ", korak=" << korak << endl;}main(){ Inkrement data(10,5); cout << "Prije petlje : "; data.print(); for ( int j=1; j<4; j++ ) { data.dodaj(); data.print(); }

system("PAUSE");return 0;}

Izlaz:

Prije petlje : stanje=10, korak=5stanje=15, korak=5stanje=20, korak=5stanje=25, korak=5Press any key to continue . . .

Page 168: C++

Programiranje C++ 168

5.Program računa udaljenost između tačaka

#include <iostream.h>#include <math.h>#define K(a,b) pow(((a)-(b)),2)class Tacka{ public: Tacka (double=0, double=0); double getX() const; double getY() const; double daljina(Tacka) const; void pisiTacka() const; private: double x, y;};Tacka::Tacka(double xx, double yy) { x = xx; y = yy; }double Tacka::getX() const { return x; }double Tacka::getY() const { return y; }double Tacka::daljina(Tacka t) const { return sqrt(K(x,t.x)+K(y,t.y)); }void Tacka::pisiTacka() const { cout << "("<<x<<","<<y<<")"; }main(){ Tacka tA(3,4); const Tacka tO; // konstantan objekat cout<<"A: "<<tA.getX()<<","<<tA.getY()<<endl; cout<<"O: "<<tO.getX()<<","<<tO.getY()<<endl; cout<<"A: "; tA.pisiTacka(); cout<<endl; cout<<"O: "; tO.pisiTacka(); cout<<endl; cout << "Udaljenost od A"; tA.pisiTacka(); cout << " do O"; tO.pisiTacka(); cout << " iznosi: " << tA.daljina(tO) << endl; cout << "Udaljenost od O"; tO.pisiTacka(); cout << " do A"; tA.pisiTacka(); cout << " iznosi: " << tO.daljina(tA) << endl; system("PAUSE"); return 0;}

Izlaz:

A: 3,4O: 0,0A: (3,4)O: (0,0)Udaljenost od A(3,4) do O(0,0) iznosi: 5Udaljenost od O(0,0) do A(3,4) iznosi: 5Press any key to continue . . .

Page 169: C++

Programiranje C++ 169

-Nasljeđivanje

Page 170: C++

Programiranje C++ 170

1.Program računa kvadrat i kub broja metodom nasljeđivanja

#include<cstdlib>#include<iostream>using namespace std;class kvadrat{protected:int br;public:void unos(void){cout<<"Unesite broj: "<<endl;cin>>br;}int izracun(void){ return(br*br);}};class kub:public kvadrat // formirana klasa kub koja naslje]uje varijable i metode klase kvadrat//{public:int izracun(void){return(br*br*br);}};int main(){kvadrat objekt1;objekt1.unos();cout<<"Kvadrat je"<<objekt1.izracun()<<endl;cout<<endl;kub objekt2;objekt2.unos();cout<<"Kub je "<<objekt2.izracun()<<endl;cout<<endl,system("PAUSE");return 0;}Izlaz:Unesite broj:3Kvadrat je9

Unesite broj:3Kub je 27

Press any key to continue . . .

Page 171: C++

Programiranje C++ 171

2.Program računa površinu i dijagonalu kvadrata metodom nasleđivanja

#include<cstdlib>#include<iostream>using namespace std;class kvadrat{protected:float a;public:void unos(void){cout<<"Unesite stranicu kvadrata: "<<endl;cin>>a;}float izracun(void){ return(a*a);}};class dijagonala:public kvadrat// formirana klasa dijagonala koja naslje]uje varijable i metode klase kvadrat/{public:float izracun(void){return(a*1.41);}};int main(){kvadrat objekt1;objekt1.unos();cout<<"Povrsina kvadrata je "<<objekt1.izracun()<<endl;cout<<endl;dijagonala objekt2;objekt2.unos();cout<<"Dijagonala kvadrata je "<<objekt2.izracun()<<endl;cout<<endl,system("PAUSE");return 0;}

Izlaz:Unesite stranicu kvadrata:10Povrsina kvadrata je 100

Unesite stranicu kvadrata:10Dijagonala kvadrata je 14.1

Press any key to continue . . .

Page 172: C++

Programiranje C++ 172

Pokazivači i referenceKao što im ime kaže, pokazivači (eng. pointers) su objekti koji pokazuju na neki drugi objekt. Jednostavnije rečeno, jedina funkcija im je pokazivati na neki drugi objekt ili varijablu da bismo preko njih mogli pristupiti onome na što pokazuju. Oni, sami od sebe nemaju nikakvu vrijednost, odnosno vrijednost im je NULL (mora se to eksplicitno navesti). Početnici obično ne vide smisla postojanju pokazivača pa je za sada najbolje da ih promatrate, u terminologiji operativnih sistema, kao izvjesne prečace (shortcuts) do nekog objekta ili varijable.

Na koji način pokazivač pokazuje na nešto? Naime, da bi pokazivač mogao obavljati svoju funkciju mi

mu moramo proslijediti adresu onoga na što će on pokazivati. Ne vrijednost tog objekta, ne neku

proizvoljnu vrijednost, nego samo adresu. Na taj način ćemo preko njega moći pristupiti tom objektu radi

čitanja njegove vrijednosti ili pak promijeniti vrijednost objekta preko pokazivača. Sintaksa deklaracije

pokazivača je

tip_na_koji_pokazuje * ime_pokazivača

Napomena: sasvim je nebitno da li pišete pokazivač kao ‘tip* pok’, ‘tip *pok’ ili ‘tip * pok’ jer C++ kompajler ionako “ne vidi” ove razmake. Do vas i vašeg stila je da izaberete jedan od načina.

Kada pokazivač deklariramo, onda ga inicijaliziramo adresom nekog drugog objekta koristeći znak

ampersand (&) ili adresni operator. Sada pokazivač sadrži adresu tog objekta odnosno pokazuje na

njega. Sintaksa inicijalizacije je

pokazivač = &neki_objekt;

Pretpostavimo da imamo varijablu imena broj

float broj = 3.14;

Idemo napraviti pokazivač koji će pokazivati na tu varijablu:

float broj = 3.14;

float *pok_broj;    // ovo jepok_broj = &broj;   // pokazivač

Ali jednostavnije ga je napisati u jednom redu:

float *pok_broj = &broj;Što smo time učinili? Kako biste lakše razumjelo, pročitajte taj nepoznati dio s desna na lijevo:nađi varijablu broj, uzmi njenu adresu (adresu dohvaćamo pomoću znaka &) i smjesti ju u varijablu pok_broj koja je pokazivač (pokazivači se od običnih varijabli razlikuju po znaku * ispred imena) na varijablu tipa float.

Page 173: C++

Programiranje C++ 173

1.Pokazivač koji pokazuje na varijablu

#include <iostream>using namespace std;int main(){ float broj = 3.14;float *pok_broj = &broj;cout << broj;system("PAUSE"); return 0;}

Izlaz:3.14Press any key to continue . . .

Pokazivač smo mogli napisati i ovako:

float* pok_broj = &broj;   // premjestili smo zvjezdicu

No takav pristup ima jednu manu. Ako želimo stvoriti više pokazivača moramo napisati ovako:

float* pok1;float* pok2;

A prvim pristupom je to moguće i ovako:

float *pok1, *pok2;

U ovom primjeru ćemo promjeniti vrijednost varijable broj, ali pomoću pokazivača (pok_broj):float broj = 3.14;

float *pok_broj = &broj;*pok_broj = 1337;

Kada bismo ispisali vrijednost varijable broj vidjeli bismo da sadrži brojčanu vrijednost 1337:

2.Program za promjenu vrijednosti varijable pomoću pokazivača

#include <iostream>using namespace std;int main(){ float broj = 3.14;float *pok_broj = &broj;*pok_broj = 1337; cout << broj;char cekaj; cin >> cekaj;system(„PAUSE”); return 0;}

Izlaz:1337

Page 174: C++

Programiranje C++ 174

Time smo zaključili da se između pokazivača i varijable na koju pokazuje stvara nekakva veza.Recimo da smo se predomislili i želimo da pokazivač pokazuje na drugu adresu. Tu nipošto ne bismo smjeli obrisati varijablu broj jer bi se stvorio pokazivač koji ne pokazuje na ništa. Takve pokazivače nazivamo nul-pokazivačima. Njima su se u C-u uglavnom ispitivale greške prilikom izvođenja.

3.Pokazivač pokazuje na drugu varijablu:#include <iostream>using namespace std;int main(){ float broj = 3.14; float drugiBroj = 192.12;float *pok_broj = &broj;*pok_broj = 13.37;pok_broj = &drugiBroj;*pok_broj = 73.31;cout << "Prvi broj = " << broj << endl << "Drugi broj = " << drugiBroj << endl; char cekaj;cin >> cekaj;system(„PAUSE“);    return 0;}

Izlaz:Prvi broj = 13.37Drugi broj = 73.31

Ovim smo se izvukli od nepotrebnog kreiranja novog pokazivača već smo mu samo promjenili sadržaj tj. adresu na koju pokazuje. Kao što možete vidjeti prilikom mjenjanja adrese nismo stavljali znak * jer nismo mijenjali varijablu na koju pokazivač pokazuje, već smo mijenjali sadržaj pokazivača.

/* <KORISNO> */

Znak * predstavlja vrijednost varijable na koju pokazivač pokazuje, a bez znaka * pristupamo adresi na koju pokazivač pokazuje.

4. Pokazivač možemo interpretirati kao varijablu koja sadrži heksadecimalnu adresu neke druge varijable.#include <iostream>using namespace std;int main(){float broj = 3.14;float *pok_broj = &broj; *pok_broj = 13.37; cout << "Vrijednost varijable na koju pokazujem = " << *pok_broj << endl << "Adresa varijable na koju pokazujem = " << pok_broj << endl; char cekaj;cin >> cekaj;return 0;system(„PAUSE“);}

Izlaz:Vrijednost varijable na koju pokazujem = 13.37Adresa varijable na koju pokazujem = 0x22ff44

Page 175: C++

Programiranje C++ 175

Vrijednost varijable na koju pokazujem = 13.37Adresa varijable na koju pokazujem = 0x7fff81fc2d14

Adresa varijable može biti bilo koja heksadecimalna vrijednost.

/* </KORISNO> */

Na pokazivače možemo koristiti sve operatere kao i za obične varijable (samo moramo paziti da koristimo znak * tj. da pristupamo sadržaju varijable, a ne njenoj adresi).

5. Primjer pokazivača na pokazivač:

#include <iostream>using namespace std;int main(){ float broj = 3.14;float *pok_broj = &broj; float **pok_na_pok = &pok_broj; cout << "Adresa na koju pokazuje prvi pokazivac = " << pok_broj << endl << "Adresa prvog pokazivaca = " << pok_na_pok << endl << "Adresa varijable na koju pokazuje drugi pokazivac = " << pok_na_pok << endl; char cekaj; cin >> cekaj;system(„PAUSE“); return 0;}Izlaz:Adresa na koju pokazuje prvi pokazivac = 0x22ff44Adresa prvog pokazivaca = 0x22ff40Adresa varijable na koju pokazuje drugi pokazivac = 0x22ff40

Kao što se vidi pokazivač na pokazivač ima dva znaka *. Opet ćemo olakšati i pročitati s desna na lijevo:Uzmi adresu pokazivaca pok_broj i smjesti ju u varijablu pok_na_pok koja je pokazivač na pokazivač na tip float.Program će nam ispisati tri adrese, a iz druge dvije možemo zaključiti da pok_na_pok zaista pokazuje na pok_broj.

Page 176: C++

Programiranje C++ 176

Reference su u biti varijable vrlo slične pokazivačima, ali daleko jednostavnije. U C-u nisu postojale pa su nove i za C programere.

Sada nećemo koristiti brojčanu varijablu (čisto da vidite da se pokazivači i reference mogu primjeniti na sve tipove podataka). Evo primjera:

string ime = "Pero";string &ref_ime = ime;

Stvorili smo referencu na varijablu ime. Reference su vrlo jednostavne za shvatiti, a pedstavljaju drugo ime varijable. Sada možemo jednostavno mjenjati vrijednost varijable ime ovako:

#include <iostream>#include <cstring>

using namespace std;

int main(){

    string ime = "Pero";

    string &ref_ime = ime;

    ref_ime = "Marko";

    cout << ime;        char cekaj;

    cin >> cekaj;

    return 0;system („PAUSE“);}

Izlaz:MarkoKao što vidite program će ispisati "Marko". Već možete primjetiti da ne morate misliti na nikakve zvjezdice, već samo prilikom deklariranja varijable stavite znak & uz ime reference.