Está en la página 1de 9

Osnove Raunarstva Uvod u prvi tutorijal

Akademska 2014/2015
Enil Paji

OSNOVE RAUNARSTVA
Analiza drugog tutorijala
i dodatni zadaci
(sa ponavljanjem bitnijih stvari u vezi tutorijala
i naglaavanjem na este greke studenata)

Osnove Raunarstva Uvod u prvi tutorijal


Akademska 2014/2015
Enil Paji
Osnovni cilj tutorijala 2 jeste upoznavanjem sa nainima razliitih tokova izvravanja
programa. Upoznajemo se sa tzv. grananjem, gdje se, zavisno od uslova, program izvrava na
neki od unaprijed definiranih naina i sa tzv. uslovnim izvravanjem dijela programa.
Takoer, kao jedan od ciljeva, jeste upoznavanje sa logikim i relacionim operatorima u
jeziku C.
Grananje i uslovno izvravanje programa: Izvodi se uz pomo if, else if, else i goto
kljunih rijei C jezika. Postoje unaprijed definirana pravila kako emo mi definirati
ponaanje naeg programa prilikom grananja., tj. koji dio kda e se izvriti pod kojim
uslovima. Pogledajmo sada opi oblik if konstrukcije u C-u
if (nek_uslov)
{
/* naredbe - dio kda ako je uslov zadovoljen */
}

Ovo je tzv. uslovno izvravanje dijela programa. Kd napisan u if bloku (unutar {} zagrada)
e biti izvren jedino ako bude zadovoljen uslov neki_uslov. Linije kda iza if bloka, tj.
nakon } zagrade e biti izvrene neovisno da li je neki_uslov zadovoljen ili ne, to
predstavlja nastavak izvravanja programa normalnim tokom.
Ako elimo da granamo program, tj. ako elimo da nam program izvri neto ako je uslov
zadovoljen, a neto drugo ako uslov nije zadovoljen, tada koristimo i else blok.
if (nek_uslov)
{
/* naredbe - dio kda ako je uslov zadovoljen */
}
else
{
/* naredbe - dio kda ako uslov nije zadovoljen */
}

Takoer, imamo i else if blok koji se izvrava ako if blok nije izvren tj. ako uslov u if
bloku nije taan. Razlika izmeu else i else if bloka jeste ta to se za else if blok
moe specificirati uslov, dok se kd iz else bloka izvrava ako se niti jedan on navedenih
uslova nije izvrio. Takoer, moemo imati vie else if uslova, ali samo jedan else.
Slijedi poopteni izgled if else if else bloka.
if (neki_uslov)
{
/* naredbe }
else if (drugi_uslov)
{
/* naredbe zadovoljen,
}
else
{
/* naredbe }

dio kda ako je uslov zadovoljen */

dio kda ako uslov neki_uslov nije


ali jeste zadovoljen drugi_uslov */

dio kda ako niti jedan uslov nije zadovoljen */

Osnove Raunarstva Uvod u prvi tutorijal


Akademska 2014/2015
Enil Paji
Vano je da shvatimo da se else if blok moe zamijeniti novim if blokom. Pogledajmo
primjer:
if (neki_uslov)
{
}
else if (drugi_uslov)
{
}

Kd iznad je ekvivalentan kdu ispod. Ovo e nam pomoi da lake itamo i tumaimo else
if uslove.
if (neki_uslov)
{
/* naredbe - dio kda ako je uslov zadovoljen */
}
else
{
if (drugi_uslov)
{
/* Ovo je na else if uslov */
}
}

Konkretne primjere emo napisati nakon to uvedemo logike i relacione operatore.


Logiki operatori: Oni slue za povezivanje vie uslova na logikom nivou. Npr. sljedea
reenica zahtijeva i i ili pri vezivanju njenih dijelova Ulazak u klub zahtijeva da je
osoba punoljetna ili da ima 16 godina i da je u drutvu sa punoljetnom osobom. Sa
programerske strane gledano, to bi izgledalo, u pseudo kdu, kao:
Moze_uci_u_klub = Punoljetan OR (Ima_16_godina AND U_drutvu_je_punoljetne_osobe)

Navedimo sada logike operatore sa kojima emo se susretati kroz ovaj predmet.

Logiko ILI &&


Logiko I || (dva pipe | znaka)
Logiko NE ! (negacija)

Jako je vano da, pri (logikom) kombinovanju vie uslova, ne mijeamo I (&&) i ILI (||)
operatore. Primjere ovih operatora emo navesti ispod, nakon to uvedemo relacione
operatore.
Relacioni operatori: Kao to im i sam naziv govori, oni slue za definisanje relacija izmeu
dva operanda. Tako, uz pomo relacionih operatora mi moemo definisati odnose vei od,
manji od, jednako, vei ili jednak od i slino. Takoer, vrlo esto se kombinuju sa
iznad opisanim logikim operatorima.

Osnove Raunarstva Uvod u prvi tutorijal


Akademska 2014/2015
Enil Paji
Navedimo sada sve relacione operatore:

== (jednako nemojte pomijeati sa =) 1


!= (razliito, tj. nije jednako)
> (vee)
>= (vee ili jednako)
< (manje)
<= (manje ili jednako)

vrlo esta greka studenata jeste da pomijeaju operator poreenja na jednako (==) i
operator dodjele (=). Naravno, u tim situacijama program ne radi ispravno, a vrlo je teko
pronai greku. Stoga, odmah vodite rauna pa ete stei rutinu pri pisanju ovih operatora.
Takoer da napomenemo da se konstrukcija poput a == b ita kao a je jednako b u
smislu jednakosti varijabli a i b, dok se konstrukcija poput a = b ita kao a postaje b ili
varijablu b dodjeljujemo varijabli a ili u varijablu a smjetamo varijablu b. Iz samog
itanja konstrukcija vidimo ta znai prva a ta druga konstrukcija.
Nakon to smo uveli potrebne pojmove, preimo na primjere. Neka imamo varijablu tipa int
sa imenom broj_godina. Neka takoer trebamo ispitati vrijednost te varijable i ispisati
odreenu poruku ako je njena vrijednost 17 ili manje, te drugu poruku ukoliko nije (tj. ukoliko
ima vrijednost 18 ili vie):
if (broj_godina < 18)
{
printf (Niste punoljetni!\n);
}
else
{
printf (Punoljetni ste...\n);
}

Primjer iznad se mogao napisati i drugaije, npr.

if (broj_godina >= 18)


{
printf (Punoljetni ste...\n);
}
else
{
printf (Niste punoljetni!\n);
}

Navedimo sada primjer kda sa else if blokom. Neka je potrebno, u zavisnosti od trenutne
temperature, ispisati odgovarajuu poruku. Ispitujemo vrijednost cjelobrojne varijable sa
imenom temperatura koja uva vrijednosti temperature u stepenima Celzijusa.

Osnove Raunarstva Uvod u prvi tutorijal


Akademska 2014/2015
Enil Paji
if (temperatura > 35)
{
printf (Vrue je\n);
}
else if (temperatura < 35 && temperatura > 14)
{
printf (Toplo je\n);
}
else
{
printf (Hladno je\n);
}

Ovdje smo, u else if bloku, koristili i logiki operator I (&&) gdje smo povezali dva
uslova da bismo provjerili da li je temperatura manja od 35 C ali i vea od 14 C.
Pisanje vitiastih zagrada {} nije obavezno ukoliko se blok sastoji od samo jedne narebe,
tako npr. sljedea dva isjeka su funkcionalno ekvivalentna:
if (broj < 0)
{
printf (Broj je negativan\n);
}

Je funkcionalno ekvivalentno sljedeem isjeku:


if (broj < 0)
printf (Broj je negativan\n);

Obratimo panju da ovo vrijedi jedino ukoliko se u bloku nalazi samo jedna naredba! Npr.
sljedei kd e pomnoiti broj sa -1 bez obzira da li je broj negativan ili ne.
if (broj < 0)
printf ("Broj je negativan\n"); broj = broj * -1;

Ovaj kd iznad e ispisati Broj je negativan onda kada je broj manji od nule, ali e, bez
obzira na negativnost broja uvijek broj pomnoiti sa -1. Pogledajmo konkrenije primjere.
int broj = -2;
if (broj < 0)
printf ("Broj je negativan\n"); broj = broj * -1;
/* Ispisuje: "Broj je negativan", te pomnoi broj sa -1 */

Primjer ispod e takoer pomnoiti broj sa -1.


int broj = 100;
if (broj < 0)
printf ("Broj je negativan\n"); broj = broj * -1;
/* Ne ispisuje ovu poruku iznad, ali ipak POMNOI broj sa -1*/

Osnove Raunarstva Uvod u prvi tutorijal


Akademska 2014/2015
Enil Paji
Zbog toga ako imamo dvije ili vie naredbi u bloku, potrebno je koristiti vitiaste zagrade, jer
napisani primjer iznad je ekvivalentan sljedeem:
int broj = 100;
if (broj < 0)
{
printf ("Broj je negativan\n");
}
broj = broj * -1;

Ukoliko se pojavi veliki broj uslova i logikih operatora koji ih povezuju, moemo uslove
grupirati uz pomo zagrada: if ((mjesec == 1 && dan >= 10) || (mjesec == 2
&& dan <= 10)).
Napomenimo jo da logiki operator NE (!) ima najvei prioritet od navedenih. Za njim
slijedi logiko I (&&), pa onda logiko ILI (||). Vano je da obraate panju na ovo. Primjer:
if (a>b && c<d || e==f) se evaluira kao if ((a>b && c<d) || e==f) a ne kao
if (a>b && (c<d || e==f)). Ukoliko elimo da prvo upotrijebimo || operator, onda
moramo koristiti zagrade.
Pogledajmo sada kako radi if konstrukcija, tj. kako se uslov evaluira i ispituje. Naime,
blok kda nakon if (uslov) e biti izvren ako je uslov taan. Ali ta znai da je uslov
taan? Kako se ispituje tanost uslova? Odgovor je sljedei: ukoliko je uslov broj razliit od
nule, tada se uslov smatra tanim. Uslov se smatra netanim ukoliko je broj jednak nuli, i to
jedino tada. Pogledajmo primjer:
if (100)
printf ("TACNO\n");

Isjeak iznad e zaista ispisati TACNO, ba kao i isjeci koji slijede:


if (1)
printf ("TACNO\n");
if (-5)
printf ("TACNO\n");
if (2.77)
printf ("TACNO\n");
if (-2 + 11)
printf ("TACNO\n");

Ali sljedei isjeci nee ispisati TACNO:


if (0)
printf ("TACNO\n");
if (7 7)
printf ("TACNO\n");
if (2 3 + 1)
printf ("TACNO\n");

Osnove Raunarstva Uvod u prvi tutorijal


Akademska 2014/2015
Enil Paji
Sa jo dva primjera pokaimo kako izgledaju ispisi:
if (100) /* Ispisuje TACNO */
printf ("TACNO\n");
else
printf ("NETACNO\n");
if (0) /* Ispisuje NETACNO */
printf ("TACNO\n");
else
printf ("NETACNO\n");

Moe se postaviti pitanje kako se evaluiraju izrazi poreenja, npr. if (a > 2)? Pa na
gotovo identian nain, uz samo jednu malu izmjenu: ukoliko je poreenje tano, ono e se
evaluirati u 1, a ukoliko je netano, evaluirati e se u 0. Npr. if (10 > 2) e biti isto kao
if (1) tj. tano, dok e if (3 > 5) biti isto kao if (0) tj. netano. Moemo ovo i
provjeriti, pogledajmo:
printf ("10 > 3 = %d, dok je 3 > 10 = %d", 10 > 3, 3 > 10);

Isjeak iznad e ispisati 10 > 3 = 1, dok je 3 > 10 = 0.


Pogledajmo jo primjer sa logikim operatorom NE (!). On predstavlja klasinu negaciju.
Unarni je operator tj. primjenjuje se samo na jedan operand. Primjer:
if (!(broj < 0))
printf ("Broj je pozitivan ili nula\n");

Takoer, navedimo zanimljivu provjeru da li je broj jednak nuli ili nije:


if (broj) /* Isto kao: if (broj != 0) */
printf ("Broj je razlicit od nule.\n");
else
printf ("Broj je jednak nuli.");

Ili, obrnuto napisano:


if (!broj)
printf ("Broj je jednak nuli.");
else
printf ("Broj je razlicit od nule.\n");

Zadaci za samostalan rad:


Zadatak 1: Napisati program koji od korisnika trai da unese 3 cijela broja, te provjerava da
li su ti brojevi u nekom od sljedeih intervala: [-20, -8], [-1, 1], [40, 50], [77, 101]. Program
za svaki broj treba da ispie kojem intervalu pripada odnosno da ne pripada niti jednom
intervalu. Na kraju, program treba da ispie da li svi uneseni brojevi pripadaju jednom te
istom intervalu. Primjeri:
Unesite 3 cijela broja: 3 1 -14
Broj 3 ne pripada niti jednom intervalu
Broj 1 pripada intervalu [-1, 1]
Broj -14 pripada intervalu [-20, -8]
Svi brojevi ne pripadaju jednom te istom intervalu.

Osnove Raunarstva Uvod u prvi tutorijal


Akademska 2014/2015
Enil Paji

Primjer 2:
Unesite 3 cijela broja: 80 77 90
Broj 80 pripada intervalu [77, 101]
Broj 77 pripada intervalu [77, 101]
Broj 90 pripada intervalu [77, 101]
Svi brojevi pripadaju jednom intervalu

(Ukoliko pametno smislite logiku rjeavanja zadatka, ova posljednja provjera za sve brojeve
moe biti trivijalna, stoga dobro razmislite da, kada ve pojedinano ispitujete pripadnost
brojeva, moete i zapisati kojem je intervalu pripadao, te e finalna provjera biti lahka. Hint:
imajte dodatne varijable koje e uvati pripadnost pojedinih brojeva odreenim
intervalima.)
Zadatak 2: Napisati program koji od korisnika trai da unese tri broja koji predstavljaju dan,
mjesec i godinu. Nakon toga e program ispisati datum u sljedeem formatu Uneseni datum
je X. mjesec Y. godine. Primjer:
Unesite dan, mjesec i godinu (razdvojite razmakom): 21 9 2008
Uneseni datum je 21. septembar 2008. godine

Program treba da izvri provjeru ulaznih podataka (mjesec ne smije biti manji od 1 niti vei
od 12, dan mora biti u odreenim granicama nije potrebno da provjeravate broj dana za
odreeni mjesec npr. februar da ima 28/29 dana, april 30 i slino, a godina ne smije biti manja
od 1 niti vea d 4000). U sluaju da se unese pogrean podatak, program treba ispisati
Pogreni ulazni podaci! i zavriti sa radom.
Zadatak 3: Napisati program koji e koristiti kao jednoupotrebni jednostavni kalkulator.
Program najprije izlistava operacije koje korisnik moe koristiti, a zatim, nakon to je korisnik
odabrao operaciju, unosi jedan ili dva broja/operanda (u zavisnosti od operacije) i vri tu
operaciju nad njima. Potrebno da je se meu ponuenim operacijama nau:
Operacija
Sabiranje
Oduzimanje
Mnoenje
Dijeljenje
Kvadriranje
Korjenovanje

Znak
+

*
/
#
&

Broj operanada
2
2
2
2
1
1

Primjer 1:

Primjer 2:

--- Moj mini kalkulator --Sabiranje: +


Oduzimanje: Mnozenje: *
Dijeljenje: /
Kvadriranje: #
Korjenovanje: &

--- Moj mini kalkulator --Sabiranje: +


Oduzimanje: Mnozenje: *
Dijeljenje: /
Kvadriranje: #
Korjenovanje: &

Odaberite operaciju: *
Unesite prvi broj: 11
Unesite drugi broj: 15.5

Odaberite operaciju: #
Unesite broj: 23
Rezultat: 23^2 = 529

Rezultat: 11 * 15.5 = 170.5

Osnove Raunarstva Uvod u prvi tutorijal


Akademska 2014/2015
Enil Paji
Primjer 3:

Primjer 4:

--- Moj mini kalkulator --Sabiranje: +


Oduzimanje: Mnozenje: *
Dijeljenje: /
Kvadriranje: #
Korjenovanje: &

--- Moj mini kalkulator --Sabiranje: +


Oduzimanje: Mnozenje: *
Dijeljenje: /
Kvadriranje: #
Korjenovanje: &

Odaberite operaciju: %
GRESKA: Nepostojeca operacija!

Odaberite operaciju: Unesite prvi broj: 2311


Unesite drugi broj: 6003

Primjer 5:

Rezultat: 2311 6002 = -3692

--- Moj mini kalkulator --Sabiranje: +


Oduzimanje: Mnozenje: *
Dijeljenje: /
Kvadriranje: #
Korjenovanje: &
Odaberite operaciju: /
Unesite prvi broj: 51
Unesite drugi broj: 0
GRESKA: Dijeljenje sa nulom!

Za korijen, tj. operaciju & bi trebalo ispisati: Rezultat: 100^(1/2) = 10, za


uneseni broj 100.
Za dodatnu vjebu studenti mogu dodati i vei broj operacija ukoliko ele, npr. sinus, cosinus,
n-ti korijen, stepenovanje i slino.

También podría gustarte