You are on page 1of 10

Fakultet informacijskih tehnologija

ProgramiranjeI_sylabus.doc indira@fit.ba

Datum: 28.10.2017.
PROGRAMSKA STRUKTURA SELEKCIJA

Svi dosadašnji zadaci i primjeri izvršavali su se sekvencijalno, odnosno sve naredbe


unutar programa su se izvršavale onim redom kojim su se pojavljivale. No, sekvencijalno
izvršavanje naredbi nije dostatno za rješavanje iole kompleksnijih problema. Stoga je
potrebno uvesti kontrolnu (programsku) strukturu – selekciju.
Selekcija se u C++ može predstaviti sljedećim iskazima:

uvjetnim operatorom,
if iskazom,
if – else iskazom i
switch iskazom.

IF ISKAZ

Sintaksu if iskaza se može predstaviti:

if (uvjet)
{blok_naredbi;}

Ili sintaks dijagramom:

Izraz koji
if ( predstavl ) { }
ja uvjet
iskaz

izraz

gdje je if ključna riječ (u našem jeziku se prevodi sa ako);


uvjet je izraz čija je vrijednost tipa bool (istina/laž);
blok naredbi je niz naredbi koje će se izvršiti u slučaju da je vrijednost izračunatog izraza
istina;
If iskaz koristimo za predstavljanje sljedećeg toka aktivnosti:

uvjet
predstavljen
izrazom

da

neka aktivnost
ne

1
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc indira@fit.ba

Na primjer:

if (rezultat_testa<55)
cout<<"Pali ste na testu!";

Uvjet (rezultat_testa<55) se provjerava (evaluira) i ako je istinit, ispisuje se poruka


"Pali ste na testu!" . Ukoliko uvjet nije istinit iskaz cout<<"Pali ste na testu!";
neće biti izvršen. Izvršavanje programa se nastavlja na prvoj sljedećoj naredbi.
U prethodnom primjeru unutar if iskaza se nalazi samo jedna naredba (cout<<"Pali ste
na testu!";), no moguće je i da ukoliko je uvjet istinit treba izvršiti više naredbi. U tom
slučaju govorimo o bloku naredbi i koristimo vitičaste zagrade {}.
Na primjer:

if (radni_sati>40)
{
prekovremeni=radni_sati - 40;
honorar=prekovremeni*satnica;
}

Primjer: Napišite program za jednostavnu igru pogađanja brojeva (u intervalu od 1 do


10).

Dizajn
Podatak Vrsta vrijednosti Tip podatka Identifikator
Broj koji unosi varijabla int pokusaj
korisnik
Broj koji predstavlja varijabla int pogodak
pogodak

start

#include <iostream>
pogodak=7;
using namespace std;
int main()
{
int pogodak = 7;
int pokusaj;
pokusaj
cout << "Zamislio sam broj izmedju 1 i 10" << endl;
cout << "Pokusajte pogoditi o kojem je broju rijec " << endl;
cin >> pokusaj;
if (pokusaj == pogodak)
cout << "Nevjerojatno, pogodili ste" << endl;
pokusaj==pogo
dak system ("pause");
return 0;
}
da

Bravo,
pogodili ne
ste!!!

kraj
2
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc indira@fit.ba

Program radi,ali potrebna su neka poboljšanja. Ako korisnik unese broj 7, dobije poruku
"Nevjerojatno, pogodili ste". Šta se događa ukoliko korisnik unese pogrešan broj? Ništa.
Nema nikakve poruke, nikakve sugestije.
Ukoliko korisniku treba uputiti poruku da nije pogodio traženi broj nužno je upotrijebiti if-
else iskaz.

IF – ELSE ISKAZ

Sintaksu if-else iskaza se može predstaviti:

if (uvjet)
{blok_naredbi_1;}
else
{blok_naredbi_2;}

Ili sintaks dijagramom:

Izraz koji
if ( predstavl ) { } else { }
ja uvjet
iskaz iskaz

izraz izraz

gdje je if ključna riječ (u našem jeziku se prevodi sa ako);


else je također ključna riječ (u našem jeziku se prevodi sa inače)
uvjet je izraz čija je vrijednost tipa bool (istina/laž);
blok naredbi_1 je niz naredbi koje će se izvršiti u slučaju da je vrijednost izračunatog
izraza istina;
blok naredbi_2 je niz naredbi koje će se izvršiti u slučaju kad vrijednost izračunatog
izraza nije istinita;

If- else iskaz se koristi za predstavljanje sljedećeg toka aktivnosti:

3
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc indira@fit.ba

Na primjer:

if (rezultat_testa<55)
cout<<"Pali ste na testu!";
else
cout<<"Polozili ste test!";

Uvjet (rezultat_testa<55) se provjerava (evaluira) i ako je istinit, ispisuje se poruka


"Pali ste na testu!". Ukoliko uvjet nije istinit izvršit će se iskaz cout<<"Polozili
ste test!";.

Primjer s pogađanjem brojeva je moguće unaprijediti.


Moguće je upotrijebiti if-else iskaz za upozoravanje korisnika u slučaju kad njegov
pokušaj pogađanja traženog broja nije korektan.

start

pogodak=7;
#include <iostream>
using namespace std;
int main()
{
pokusaj int pogodak = 7;
int pokusaj;
cout << "Zamislio sam broj izmedju 1 i 10" << endl;
cout << " Pokusajte pogoditi o kojem broju je rijec
da
pokusaj==pogo
ne "<<endl;
dak
cin >> pokusaj;
if (pokusaj == pogodak)
Bravo, Zao mi je, cout <<"Nevjerojatno, pogodili ste" << endl;
pogodili niste else
ste!!! pogodili
cout <<"Zao mi je, niste pogodili"<< endl;
system ("PAUSE>null");
return 0;

}
kraj

Program je poboljšan. Korisnik će dobiti odgovor i kada je njegov pokušaj pogađanja


korektan i kada nije. No, program još uvijek nije dovoljno sličan stvarnoj situaciji. Što se
obično kaže kada je odgovor pogrešan? Broj je veći od tvog pokušaja ili broj je manji od
tvog pokušaja.

4
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc indira@fit.ba

start

pogodak=7;

pokusaj

pokusaj==pogo
da ne
dak

Bravo,
pokusaj>pogod
pogodili da ne
ak
ste!!!

Unijeli ste Unijeli ste


veci broj manji broj
od od
trazenog. trazenog.

kraj

#include <iostream>
using namespace std;

int main()
{
int pogodak = 7;
int pokusaj;
cout << "Zamislio sam broj izmedju 1 i 10" << endl;
cout << " Pokusajte pogoditi o kojem broju je rijec "<<endl;
cin >> pokusaj;
if (pokusaj == pogodak)
cout <<"Nevjerojatno, pogodili ste" << endl;
else
{
if (pokusaj>pogodak)
cout <<"Zao mi je, niste pogodili. Unijeli ste prevelik broj";
else
cout<<"Zao mi je, niste pogodili. Unijeli ste premali broj"<<endl;
}
system ("PAUSE>null");
return 0;

5
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc indira@fit.ba

U bloku neposredno iza ključne riječi else pojavljuje novi if-else iskaz.
Riječ je o tzv. ugniježđenom if-else iskazu, odnosno if-or-if-else formatu (strukturi).

Program je moguće još poboljšati. Naime, moguće je umjesto zadanog broj koji se
pogađa (int pogodak = 7;) koristiti funkciju koja generira „slučajni“ broj. Riječ je o
funkciji rand () iz biblioteke <cstdlib>. No, pri upotrebi funkcije rand () bez dodatnih
ograničenja funkcija će generirati „slučajni“ broj u intervalu od 1 do 32676. Riječ
„slučajni“ je pod navodnicima jer je zapravo riječ o generiranju broja po određenom
algoritmu. Dakle, dobiveni broj nije slučajan u pravom smislu te riječi, ali je moguće
dobiti dovoljan broj različitih brojeva prije nego se skvenca počne ponavljati.

Npr.

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

int main()
{
int slucajni_broj = rand();
cout<<slucajni_broj<<endl;
return 0;
}

Za ograničavanje generiranja „slučajnog“ broja na interval od 1 do 10, potrebno je učiniti


sljedeće:

int pogodak = rand()%10+1;


/* na vrijednost koju funkcija rand() vrati primjenjuje se cjelobrojno dijeljenje s 10
(čiji je mogući rezultat 0,1,2,3,4,5,6,7,8 i 9) te se dodaje +1 (kako bi se mogao
dobiti i broj 10 a izbjeći 0)*/

I ovako poboljšan program ima neke nedostatke. Svaki put kad se pokrene program
dobije se isti broj (ista vrijednost). Ukoliko želite da svaki put prilikom pokretanja
programa program generira različit broj, poželjno je povezati funkciju rand() sa
sistemskim vremenom, a za to je potrebna još jedna funkcija i još jedna biblioteka:

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

int main()
{
srand((unsigned)time(0));
int slucajni_broj = rand()%10+1;
cout << slucajni_broj << endl;
return 0;
}

6
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc indira@fit.ba

ZADATAK: Većina velikih svjetskih gradova redovito vrši mjerenja zagađenja zraka.
Očitavanja se vrše u 12:00 sati na tri različita mjesta u gradu. Prosječna vrijednost ova
tri očitanja se naziva indeks zagađenja. Napišite program za računanje indeksa
zagađenja, te ispišite odgovarajuće poruke. Vrijednost indeksa zagađenja veća ili jednaka
50 smatra se rizičnom, a vrijednost manja od 50 se smatra prihvatljivom.

Analiza i specifikacija problema

Input: mjerenje 1, mjerenje 2, mjerenje 3


Output: indeks zagađenja i odgovarajuće poruke

Dizajn

Podatak Vrsta vrijednosti Tip podatka Identifikator


mjerenje 1 varijabla float mjerenje1
mjerenje 2 varijabla float mjerenje2
mjerenje 3 varijabla float mjerenje3
indeks zagađenja varijabla float indeks

Start

mjerenje1,
mjerenje2,
mjerenje3

indeks=(mjerenje1
+mjerenje2+mjere
nje3)/3

da ne
indeks>=50

Indeks
Indeks
zagađenja
zagađenja
je
je rizičan
prihvatljiv

kraj

7
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc indira@fit.ba

Kod
// upotreba if-else iskaza
#include <iostream>
using namespace std;

int main()
{
float mjerenje1,mjerenje2,mjerenje3,indeks;
const int broj_mjerenja =3;

cout<<"Unesite vrijednosti sva tri mjerenja"<<endl;


cin>>mjerenje1>>mjerenje2>>mjerenje3;
indeks=(mjerenje1+mjerenje2+mjerenje3)/broj_mjerenja;

if (indeks>=50)
cout<<"Indeks zagadjenja je rizican i iznosi "<<indeks<<endl;
else
cout<<"Indeks zagadjenja se smatra prihvatljivim, a iznosi
"<<indeks<<endl;

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

ZADATAK: Napišite program za izračunavanje indeksa tjelesne mase (BMI) te ispišite


odgovarajuće poruke. Indeks tjelesne mase se računa po formuli:
masa
BodyMassIndex= . Masa se izražava u kilogramima, a visina u metrima. Ukoliko
vi sin a 2
vam je indeks tjelesne mase u rasponu od 20 do 25 vaša tjelesna masa je u skladu s
vašom visinom, ukoliko je vaš BMI manji od 20 pothranjeni ste, a ukoliko je veći od 25
naginjete gojaznosti.

Napomena: za rješavanje zadatka primijenite if-or-if-else format

Analiza i specifikacija problema

Input: masa u kg, visina u metrima


Output: BMI

Dizajn

Podatak Vrsta vrijednosti Tip podatka Identifikator


masa varijabla float Masa
visina varijabla float Visina
BMI varijabla float BMI
8
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc indira@fit.ba

Start

masa,
visina

BMI=masa/visina2

da ne
(BMI>=20 )
&&
(BMI<=25)

ne
da BMI<20

Vasa masa
odgovoara
vasoj visini Pothranjeni Naginjete
ste gojaznosti

kraj

9
Programiranje I::Vježbe
http://student.fit.ba/
Fakultet informacijskih tehnologija
ProgramiranjeI_sylabus.doc
indira@fit.ba

Kod

// if-or-if-else format
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
float masa, visina, BMI;

cout<<"Unesite masu u kilogramima"<<endl;


cin>>masa;
cout<<"Unesite visinu u metrima"<<endl;
cin>>visina;

BMI=masa/pow(visina,2);

if ((BMI>=20)&& (BMI<=25)) // u direktnom bloku se nalazi samo jedna naredba-nisu potrebne viticaste zagrade
cout<<"Vasa masa je u skladu s vasom visinom, a BMI iznosi "<<BMI<<endl;
else //u alterantivnom bloku se nalazi vise naredbi-potrebne viticaste zagrade
{
if (BMI<20)
cout<<"Pothranjeni ste "<<endl;
else
cout<<"Naginjete gojaznosti"<<endl;
}

system("pause");
return 0;
}

Programiranje I::Vježbe
http://student.fit.ba/

You might also like