Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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)
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 }
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 */
}
}
Navedimo sada logike operatore sa kojima emo se susretati kroz ovaj predmet.
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.
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);
}
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.
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);
}
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 */
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");
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);
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:
Odaberite operaciju: *
Unesite prvi broj: 11
Unesite drugi broj: 15.5
Odaberite operaciju: #
Unesite broj: 23
Rezultat: 23^2 = 529
Primjer 4:
Odaberite operaciju: %
GRESKA: Nepostojeca operacija!
Primjer 5: