Preuzmi skriptu - Osnovna škola Kamenica

 Uvod u programski jezik
EDIN PAŠIĆ 2013 BIHAĆ SADRŽAJ
UVOD ....................................................................................................................................... iv 1. RAZVOJNO OKRUŽENJE ................................................................................................... 1 1.1. Izgled programa ........................................................................................................... 3 1.2. Kreiranje datoteke ........................................................................................................ 4 1.3. Struktura programa....................................................................................................... 7
1.4. Pokretanje programa .................................................................................................... 8 1.5. Greške .......................................................................................................................... 9
2. NAREDBE ZA IZLAZ I ULAZ .......................................................................................... 12 2.1. Početni program ......................................................................................................... 12 2.2. Naredba cout .............................................................................................................. 13 2.3. Varijacije naredbe cout .............................................................................................. 13 2.4. Osnovni tipovi podataka ............................................................................................ 17
2.5. Deklaracija varijabli ................................................................................................... 19 2.6. Operatori i izrazi ........................................................................................................ 21 2.6.1. Operator pridruživanja........................................................................................ 21 2.6.2. Inicijalizacija varijabli ........................................................................................ 21 2.6.3. Aritmetički operatori .......................................................................................... 22 2.7. Naredba za ulaz .......................................................................................................... 25
2.8. Zadaci za samostalan rad ........................................................................................... 29 3. MATEMATIČKE FUNKCIJE ............................................................................................ 29 3.1. Decimalni brojevi ....................................................................................................... 31 3.1.1. Fixed ................................................................................................................... 31 3.1.2. Setprecision ........................................................................................................ 31 3.2. Ostali manipulatori ..................................................................................................... 32
4. NAREDBE ........................................................................................................................... 33 4.1. Sekvenca ili blok ........................................................................................................ 33 4.2. Relacijski operatori .................................................................................................... 34
4.3. Selekcije ..................................................................................................................... 34 4.3.1. Naredba if ........................................................................................................... 34
4.3.2. Naredba if-else.................................................................................................... 36
4.2.3. Zadaci za samostalan rad .................................................................................... 40
4.4. Logički operatori ........................................................................................................ 41 4.4.1. Zadaci za samostalan rad .................................................................................... 45
4.5. Ciklusi ili petlje .......................................................................................................... 46 4.5.1. For petlja ............................................................................................................. 46
4.5.2. Zadaci za samostalan rad .................................................................................... 52
4.5.3. While petlja ........................................................................................................ 54
4.5.4. Do while petlja ................................................................................................... 57
4.5.5. Naredba break ..................................................................................................... 58
4.5.6. Zadaci za samostalan rad .................................................................................... 58
5. NIZOVI (POLJA) ................................................................................................................ 59 5.1. Jednodimenzionalni nizovi......................................................................................... 59 ii 5.2. Zadaci za samostalan rad ........................................................................................... 64 6. STRING ............................................................................................................................... 64 6.1. Deklaracija stringa ..................................................................................................... 65 6.2. Čitanje i ispisivanje znakova ...................................................................................... 65 6.3. Ispitivanje znakova..................................................................................................... 66 6.4. Rad sa stringom (nizom znakova) .............................................................................. 70 6.5. Zadaci za samostalan rad ........................................................................................... 75 7. ZADACI SA OPĆINSKIH TAKMIČENJA ........................................................................ 76 7.1. Zadaci 2010 ................................................................................................................ 76 7.2. Zadaci 2011 ................................................................................................................ 79 7.3. Zadaci 2012 ................................................................................................................ 82 7.4. Zadaci 2013 ................................................................................................................ 85 8. ZADACI SA KANTONALNIH TAKMIČENJA ................................................................ 88 8.1. Zadaci 2011 ................................................................................................................ 88 8.2. Zadaci 2012 ................................................................................................................ 91 8.3. Zadaci 2013 ................................................................................................................ 94 9. TEORETSKI ZADACI SA OPĆINSKIH TAKMIČENJA ................................................. 97 9.1. Zadaci 2010 ................................................................................................................ 97 9.2. Zadaci 2011 ................................................................................................................ 98 9.3. Zadaci 2012 ................................................................................................................ 99 9.4. Zadaci 2013 .............................................................................................................. 102 10. TEORETSKI ZADACI SA KANTONALNIH TAKMIČENJA ..................................... 105 10.1. Zadaci 2011 ............................................................................................................ 105 10.2. Zadaci 2012 ............................................................................................................ 106 10.3. Zadaci 2013 ............................................................................................................ 109 iii UVOD
Ova skripta je namijenjena učenicima koji žele naučiti programirati u C++, a nemaju neko
prethodno znanje ni o jednom programskom jeziku. Naravno, bilo kakvo predznanje o
programskim jezicima bi bilo od velikog značaja za bolje razumijevanje, ali nije neophodno.
Napisana je da služi kao interni udžbenik u OŠ "Kamenica" za pripremu učenika za
takmičenja iz programiranja u Unsko-sanskom kantonu.
Skripta se sastoji iz nekoliko dijelova. U prvom dijelu je objašnjena instalacija programskog
paketa Code Blocks. Također, u nekoliko narednih strana je opisan program i sve opcije koje
su nam potrebne za nesmetan rad. U drugom dijelu su opisane naredbe za ulaz i izlaz. Njih
treba dobro svladati i ne prelaziti u sljedeće poglavlje dok se dobro ne savladaju. U trećem
dijelu su opisane matematičke funkcije samo nama potrebne i načini ispisivanja decimalnih
brojeva. U četvrtom dijelu se bavimo naredbama od proste naredbe do ciklusa. Peti dio
obrađuje nizove i to samo jednodimenzionalni niz. Nizovi su nam potrebni više u šestom
poglavlju gdje string obrađujemo preko niza. Ostala poglavlja sadrže zadatke i pitanja s
općinskih i kantonalnih takmičenja u USK održanih posljednjih godina.
Svako poglavlje sadrži određen broj riješenih primjera koje treba dobro proučiti. U rješenju
svakog primjera se nalazi tekst koji opisuje kako se dolazi do rješenja, te kako program radi.
Na kraju svakog poglavlja se nalazi određen broj zadataka namijenjenih za samostalan rad.
Preporučuje se da se svi zadaci riješe prije nego li se pređe na naredno poglavlje, jer svaki od
njih donosi neko novo znanje, neki novi trik. Programiranje je u početku teško, pa nemojte
odmah odustajati. Imajte na umu da se programiranje uči na greškama.
Oni koji žele koristiti ovu skriptu u svom radu trebaju se javiti na e-mail. Kao i svaka, i ova
skripta sadrži greške, pa sve sugestije i primjedbe pošaljite na e-mail:
[email protected]
iv 1. RAZVOJNO OKRUŽENJE
Programsko okruženje koje ćemo koristiti za pisanje naših programa naziva se Code Blocks.
Ovo sam okruženje odabrao jer je besplatno, ugodnog izgleda, lako se instalira i malih je
dimenzija. Posjeduje sve osobine koje su potrebne za učenje programiranja, a i više od toga.
Kako instalirati Code Blocks? Moramo imati instalacijski CD ili ako imamo internet, onda
treba otići na stranicu:
http://www.codeblocks.org/downloads/26#windows
Dobićemo sljedeći link (Slika 1) i odaberemo codeblocks-12.11mingw-setup.exe tj. kliknemo
na BerliOS (može i na Sourceforge.net), gdje pokazuje crvena strelica, te sačekamo par
sekundi i preuzimanje će početi automatski.
Slika 1
Kad smo preuzeli datoteku, onda možemo krenuti s instalacijom programa. Inače instalacija je
jednostavna, samo Next, Next, Next, itd. Ali evo ipak malo detaljnijeg upustva. Kao i kod
svake instalacije, kliknemo dva puta malo brže da bi pokrenuli instalaciju. Računar će nas
pitati želimo li zaista pokrenuti ovaj program na šta ćemo mi reći (kliknuti Run). Ako imate
Windows 7 operativni sistem, onda je preporučeno da instalaciju započnete kao administrator
(admin), tako što kliknete desnim dugmetom miša na instalacijsku datoteku Code Blocks-a i
odaberete Run as admin. Potom ćete dobiti čarobnjak koji će vas voditi kroz instalaciju tj.
odaberete Next. Zatim dobijete prozor o licenci, tu odaberemo I Agree. U sljedećem prozoru
ako nije, označimo sve i odaberemo Next, slika 2.
1 Slika 2
A zatim odaberemo Install. Sačekamo par minuta, pa kad se završi instalacija pojavit će se
prozor u kojem vas računar pita želite li pokrenuti Code Blocks, odaberemo Yes (Da). Nakon
toga, će se pojaviti prozor:
Slika 3 Lista otkrivenih kompajlera
Ovo pretstavlja pronađene kompajlere na vašem računaru. Odaberete prvi tj. GNU GCC
Compiler i kliknete na OK. I to je to. Instalirali ste Code Blocks. U slučaju da koristite
operativni sistem Windows 7 može se dogoditi da vam kompajler ne bude pronađen. Tada ga
morate vi pronaći. Kako? Pa odmah nakon instalacije računar će vas pitati želite li pokrenuti
Code Blocks, odgovorite potvrdno. Nakon toga on će potražiti kompajlere na vašem računaru.
Dobit ćete sliku prethodno. No, ako ne pronađe GNU GCC Compiler, tada će pisati Invalid. U
tom slučaju, pokrenete program Code Blocks (slika 4) odabrate
2 Settings
Compiler
Zatim, kliknuti redom na 1, 2, i 3 kao na slici 4. A zatim na OK. Ako ni ovo ne pomogne onda
otići u folder gdje je instaliran Code Blocks i vidjeti gdje se nalazi folder kompajlera pod
imenom MinGW. Zatim taj put napisati ručno npr. kao što na ovoj slici piše
C:\CodeBlocks\MinGW (ne ovaj nego vaš).
Slika 4 Compiler settings (Podešavanje kompajlera)
1.1. Izgled programa
Pokrenemo Code Blocks. Nakon pokretanja programa, pojavit će se na početku mali prozor
koji sadrži kratke upute. Ako ne želimo da nam se pojavljuje pri sljedećem pokretanju
programa otkačimo kvačicu i kliknemo na OK. Izgled programa Code Blocks je:
3 Slika 5 Izgled programa Code Blocks
1.2. Kreiranje datoteke
Sada ćemo naučiti kako kreirati datoteku u koju ćemo pisati naše kodove. Ima više načina
kako to uraditi. Mi ćemo navesti jedan koji možda nije najkraći, ali za početnike je najbolji.
Uradimo sljedeće, kliknemo na: 1. File
2. New
3. File..
Slika 6 Kreiranje source datoteke
4 Dobivmo sljedeći prozor u kojem kliknemo na drugu sličicu ispod koje piše C/C++ source, a
zatim na Go.
Slika 7 Izbor datoteke
U sljedećem koraku samo kliknemo na Next. Potom odaberemo C++ i kliknemo na Next.
Pazite da u ovom koraku ne odaberete jezik C, jer onda nećete moći raditi s nekim
naredbama.
Slika 8 Izbor jezika
5 Još malo i gotovi smo. U ovom prozoru trebamo odabrati mjesto na računaru gdje će se
nalaziti naša datoteka odnosno naš program. To činimo tako što kliknemo na sličicu gdje piše
File name with full path odnosno na tri tačke (...).
Slika 9 Izbor lokacije na disku
Pojavit će se još jedan prozor, u kojem odaberemo:
1. gdje će biti program i
2. upišemo njegovo ime, te kliknemo na Spremi (Save), slika 10.
Slika 10 Izbor foldera (mape) gdje će biti program
6 Folder (mapu) gdje biti vaši programi napravite prije. U ovom slučaju to je folder ZadaciC++.
U imenu foldera, gdje će biti vaši programi ne smije biti kvačica nad slovima. Također, put
do tog folder ne smije sadržavati nad slovima kvačice, jer se može vrlo lako desiti da vam
program neće raditi tj. neće ga moći kompajler naći. Stoga je najbolje kreirati folder gdje će
biti programi odmah čim otvorimo C particiju ili neku drugu.
Na kraju kliknemo na Finish. Nova datoteka izvornog koda naziva Prvi program.cpp je
stvorena.
Slika 11 Izgled kreirane datoteke
1.3. Struktura programa
Za ljude koji tek uče programirati, najbolji način učenja je da napišu program. Pa ćemo i mi
krenuti tim putem. U prethodnom dijelu smo naučili kako napraviti source file (datoteku u
koju ćemo pisati naše naredbe - kodove). Napišimo sljedeći kod na mjestu gdje piše "Tu
pišemo naredbe!!!", slika 11.
Naredbe za prvi program:
7 Objasnimo sada značenje svake linije koda.
#include<iostream>
Linija počinje s znakom Hach # (taraba). To je pretprocesorska radnja koja računaru kaže da u
naš program uključi iostream datoteku.
using namespace std;
U drugom redu koda je napisana naredba using namespace std;. Ovdje su using i
namespace ključne riječi pomoću kojih se aktivira određeno područje imena, u našem slučaju
std, koji je naziv imenika u kojem su obuhvaćene sve standardne funkcije, te funkcije iz
iostream biblioteke.
int main()
Treći red sadrži int main(). Svaki program u C++ mora da ima bar jednu main (glavnu)
funkciju. Deklaracija int ispred main znači da funkcija vraća cjelobrojnu vrijednost, pa se na
samom kraju programa mora staviti naredba return 0;. Umjesto tipa int mogli smo staviti
void, pa tada na kraju nebi morali pisati return 0;.
cout<<"Moj prvi program";
Ovo ispisuje poruku na ekran monitora tačno kako piše u navodnicima. Inače, cout<< je
naredba za ispis podataka na ekran monitora.
1.4. Pokretanje programa
Sada ćemo naučiti kako pokrenuti program. Dakle, kreirali smo datoteku i napisali (prepisali)
TAČNO prethodni kod. Kako pokrenuti program? Ima više načina. Najjednostavniji i najlakši
je da na tastaturi pritisnemo tipku
8 F9
Nakon toga računar će kompajlirati vaš kod i pokrenuti program, pod uslovom da ste sve
ispravno napisali. Ako je bilo tako dobit ćemo prozor crne boje s bijelim slovima, slika 12.
Slika 12 Izgled izvršenja programa
Ako smo napravili neku sintaksičku (pravopisnu) grešku tj. zaboravili smo jedno slovo ili
tačku-zarez (;), onda nam se neće pojaviti ovakav crni prozor nego ćemo dobiti upute kako da
popravimo greške.
1.5. Greške
Greške su česte, naročito kod početnika. Zaboravljeno slovo, tačka-zarez, krivo napisana neka
naredba, zaboravljena zagrada itd. su samo neke od najčešćih grešaka. Ne brinite, one nisu
veliki problem, jer nam Code Blocks kaže gdje je i šta ne valja. A gdje se nalaze te važne
informacije? Na dnu prozora. Ako npr. u prethodnom kodu izostavimo ; koje se nalazi iza
navodnika, te pokrenimo program tipkom F9, dobićemo upozorenje o greškama, slika 13.
Analizirajmo na šta nas kompajler upozorava.
Prva linija: D:\Prvi program.. kaže da je to u funkciji int main() (jer može biti više funkcija,
mi za sada imamo jednu).
Druga linija: Čitamo samo ispod Message (poruka) šta piše, a piše sljedeće:
error: expected ' ; ' before 'return'
a znači:
greška: očekivano (vjerovatno) je problem u ' ; ' tačka-zarezu, GDJE?, prije naredbe return
Crveni kvadratić također ukazuje gdje se pogreška nalazi (imati na umu da NIJE u istoj liniji
gdje je kvadratić nego prije kvadratića tj. u liniji broj 6.)
9 Slika 13 Analiza napravljenih greški
Također, ispod naziva Line stoji broj koji označava gdje je mogući problem. U našem slučaju
to je broj 7.
Ako se ovaj izvještaj ne vidi, onda ga uključimo (učinimo vidljivim) pritiskom na tipku
F2
Kad popravimo greške pritisnemo tipku F9 da bi ponovo kompajlirali i pokrenuli program.
Ako se opet pojave greške popravljamo dok nam na dnu ne bude pisalo 0 errors tj. dok ne
dobijemo crni prozor.
U slučaju da ne vidimo brojeve linija, onda ih uključimo tako što kliknemo na
Settings → Editor
Dobivamo sljedeći prozor, u kojem, gdje piše Show line numbers označimo kvačicom i
kliknemo na Ok, slika 14.
10 Slika 14 Brojevi linija (line nubers)
Kod treba biti lijepo napisan da bi bio pregledan, zbog kasnijih popravki. Da se mi ne bi
previše oko toga zamarali, kada napišemo kod (program), onda jednostavno kliknemo desnim
dugmetom miša i odaberemo Format use Astyle.
Može se desiti da sa ovom inačicom programa imate problem kada želite napisati
vitičaste zagrade { }.
Problem je u plugin-u i treba ga isključiti na sljedeći način:
Plugins → Manage Plugins...
Dobivamo jedan prozor u kojem tražimo gdje piše DoxyBlocksB (slika 15), označimo i
odaberemo Disable i zatvorimo prozor, pa nam više neće raditi probleme.
Također, ako ne želimo da nam provjerava pravopis teksta u navodnicima ili komentarima
(budući da provjerava engleski jezik, kod nas će sve podvući kao da je netačno (pogrešno)
napisano, pa ga je poželjno isključiti), kao i u prethodnom slučaju odaberemo
Plugins → Manage Plugins...
Tražimo gdje piše SpellChecker, i kliknemo na Disable, te zatvorimo prozor.
11 Slika 15 Upravljanje plugin‐ovima
2. NAREDBE ZA IZLAZ I ULAZ
2.1. Početni program
Kada dobijemo neki problem da riješimo tj. da napišemo odgovarajući program onda
slijedimo nekoliko koraka koji su potrebi u svakom programu.
Radimo sljedeće:
1. Kreiramo datoteku u koju ćemo pisati kod (to radimo na prethodno opisan način)
2. Napišemo sljedeći kod (ovaj kod ima svaki program i zato ga naučimo NAPAMET):
#include<iostream>
using namespace std;
int main()
{
return 0;
}
12 3. Kompajliramo i pokrenemo program tipkom F9.
Ako dobijemo crni prozor, onda je sve OK, ako ne popravljamo greške. Poslije toga
pristupamo rješavanju zadanog problema. Svaki zadatak treba na ovakav način rješavati da bi
se izbjegle nepotrebne greške, a koje je nekada teško otkriti.
2.2. Naredba cout
Naredbu cout smo već upoznali u našem prvom programu, a sada ćemo se s njom detaljnije
upoznati. Za izlaz (ispis) na ekran monitora koristimo identifikator cout <<. Funkcija cout
usmjerava podatke s izlaznog toka na ekran monitora. Ispis podataka se ostvaruje operatorom
ispisa (<<).
ZAPAMTITI: Tekst koji ispisujemo naredbom cout stavljamo u znake navoda
Slika 16 Naredba cout
2.3. Varijacije naredbe cout
Jedna od najboljih metoda koje nam pomažu da bolje razumijemo funkcioniranje programa i
pojedinih naredbi jest da u program unesemo manje izmjene, a zatim opažamo kakve
posljedice će takve izmjene izazvati. Napisat ćemo nekoliko različitih varijanti jednog te istog
programa, te navesti njihova izvršavanja da bi mogli izvući određene zaključke.
Naš prvi program:
Rezultat pokretanja programa:
#include<iostream>
using namespace std;
int main()
{
cout<<"Moj prvi program"; return 0;
}
13 ZAKLJUČAK: Ništa se na izlazu (ekranu) ne mijenja pisali mi naredbe u jednom ili više
redova.
#include<iostream>
using namespace std;
int main()
{
cout<<
"Moj prvi program";
return 0;
}
ZAKLJUČAK: Ništa se ne mijenja.
#include<iostream>
using namespace std;
int main()
{
cout
<<
"Moj prvi program";
return 0;
}
Ili
#include<iostream>
using namespace std;
int main()
{
cout
<<
"Moj prvi program";
return 0;
}
ZAKLJUČAK: Ništa se ne mijenja. Pisali mi naredbe u jednom redu ili u više redova, pa čak
i razmak između naredbi, ništa se ne mijenja, ne utiče na rezultat programa.
14 #include<iostream>
using namespace std;
int main()
{
cout<<"Moj prvi program."<<"Ucim C++.";
return 0;
}
ZAKLJUČAK: Ove dvije rečenice su ispisane spojene. Ako želimo da poslije tačke imamo
razmak onda u prvoj rečenici poslije tačke napravimo jedan razmak ili u drugoj rečenici prije
riječi učim napravimo jedan razmak. Ako ispisujemo više rečenica ili pak više varijabli
pomoću jedne naredbe cout, tada samo jednom napišemo cout, a za ispis koristimo
identifikator <<.
Sada ćemo koristiti dvije cout naredbe.
#include<iostream>
using namespace std;
int main()
{
cout<<"Moj prvi program.";
cout<<"Ucim C++.";
return 0;
}
ZAKLJUČAK: Rezultat isti, ništa se nije promijenilo. Možemo koristiti više naredbi cout
tako da je svaka u novom redu ili jednu. Ako koristimo jednu naredbu cout uočiti da nju
napišemo jednom a identifikator << pišemo za svaki ispis.
Kako da nam poslije tačke bude razmak? Odgovor je jednostavan. Trebamo samo ispisati
jedan prazan razmak u prvoj ili drugoj rečenici, isto je. Mi ćemo ispisati tri u prvoj da se
dobro vidi što se hoće reći.
#include<iostream>
using namespace std;
int main()
{
cout<<"Moj prvi program.
cout<<"Ucim C++.";
";
return 0;
}
15 ZAKLJUČAK: Ako hoću da ispišem razmak, to uradim tako što u znacima navoda napravim
razmaka koliko mi treba.
Postavlja se pitanje, kako da druga rečenica bude u novom redu? Kako to uraditi?
Kada želimo dobiti JEDAN PRAZAN RED ili PREĆI U NOVI RED onda koristimo
naredbu endl.
#include<iostream>
using namespace std;
int main()
{
cout<<"Moj prvi program."<<endl;
cout<<"Ucim C++.";
return 0;
}
Šta ako stavimo dvije endl naredbe?
#include<iostream>
using namespace std;
int main()
{
cout<<"Moj prvi program."<<endl<<endl;
cout<<"Ucim C++.";
return 0;
}
ZAKLJUČAK: Dobili smo novi red i jedan prazan red.
Ispis četiri reda.
#include<iostream>
using namespace std;
int main()
{
cout<<"Moj prvi program.";
cout<<endl<<endl;
cout<<endl;
cout<<endl;
cout<<"Ucim C++.";
return 0;
}
16 ZAKLJUČAK: Uočimo da naredbu endl ne možemo koristiti ako prije nismo stavili naredbu
cout.
Zadatak 1. Napisati program koji će na ekranu (zaslonu) monitora ispisati tekst tačno ovako
kako izgleda.
Danas je lijep dan. Ucim C++.
Idem u osnovnu skolu.
Imam 10 godina.
Sutra mi je rodjendan.
2.4. Osnovni tipovi podataka
Podatke možemo podijeliti na nepromjenjive (konstante) i promjenjive (varijable). Konstante
su podaci koji tokom izvršavanja programa ne mogu da promjene svoju vrijednost. Varijable
(promjenjive) su podaci koji tokom izvršavanja mogu da promjene svoju vrijednost.
Identifikator predstavlja ime koje dodjeljujemo varijablama, funkcijama itd. Identifikator
(ime) može biti sastavljeno od slova engleskog alfabeta, prvi znak mora biti slovo ili znak
podvučeno „ _ “, brojeva i identifikator ne smije biti jednak nekoj od ključnih riječi.
Pri programiranju, pohranjujemo varijable u memoriji računara, ali računar mora znati kakve
podatke želimo pohraniti, jer ne zauzimaju svi podaci jednaku količinu memorije tj. moramo
reći računaru šta spremamo broj, slova, znakove, itd. Tako ako kažem 13 to je podatak.
Kakav? Brojčani. Ako pak kažem sunce. I ovo je podatak. Kakav? Znakovni. Zbog toga što
podaci mogu biti različiti po tipu (znakovni, brojčani) moramo računaru reći kakav tip
podatka unosimo i s kakvim će podacima on raditi.
Programski jezik C++ ima nekoliko osnovnih tipova podataka:
Tip podatka
znakovni
cjelobrojni
realni
realni dvostruke preciznosti
ne sadrži vrijednosti
Oznaka tipa Broj bitova
Opseg
char
8
0 – 255
int
16
-32768 – 32767
float
32
3.4E-38 – 3.4E+38
double
64
1.7E-308 – 1.E+38
void
0
bez vrijednosti
Prve dvije kolone tabele treba znati NAPAMET, šta znači i kako se piše. Tako pomoću tipa
char možemo spremati znakove (slova, brojeve, upitnik, uzvičnik, i ostalo), int nam govori
da se radi o cijelim brojevima, float o realnim brojevima, double je također realan broj
17 samo u njega može "stati" znatno veći broj. Nekada radimo samo npr. sa pozitivnim
brojevima, pa su nam negativni nepotrebni, da nebi gubili memoriju i da bi mogli spremiti što
veći pozitivan broj onada koristimo modifikator. Tako sa modifikatorom unsigned tip int
zauzima opseg od 0 – 65534.
Osnovni tipovi podataka se mogu modificirati (promijeniti) koristeći jedan ili više
modifikatora:

signed

short

unsigned

long
Sljedeća tabela pokazuje kako se koriste modifikatori, koliko memorije imamo, kolika je
maksimalna i minimalna vrijednost koju možemo staviti u određenu varijablu.
Tip
Količina
Raspon
char
1byte
-127 to 127 or 0 to 255
unsigned char
1byte
0 to 255
signed char
1byte
-127 to 127
int
4bytes
-2147483648 to 2147483647
unsigned int
4bytes
0 to 4294967295
signed int
4bytes
-2147483648 to 2147483647
short int
2bytes
-32768 to 32767
unsigned short int
2bytes
0 to 65,535
signed short int
2bytes
-32768 to 32767
long int
4bytes
-2,147,483,647 to 2,147,483,647
signed long int
4bytes
kao long int
unsigned long int
4bytes
0 to 4,294,967,295
float
4bytes
+/- 3.4e +/- 38 ( 7 cifara)
double
8bytes
+/- 1.7e +/- 308 ( 15 cifara)
long double
8bytes
+/- 1.7e +/- 308 ( 15 cifara)
Međutim, ove vrijednositi ovise i od kompajlera koji koristimo, te također i od računara na
kojem radimo.
18 2.5. Deklaracija varijabli
Kada smo naučili koje tipove podataka imamo, vrijeme je da se upoznamo detaljnije s
varijablama. Već smo rekli da su varijable podaci koji tokom izvršavanja programa mijenjaju
svoju vrijednost.
Sve varijable (promjenjive) koje se koriste u programu potrebno je
deklarirati, odnosno dati im ime (ili identifikator) i odrediti tip.
Tip smo naučili prethodno šta je npr. int, char, double, itd, a ime predstavlja naziv te
varijable i dajete ga vi, onako kao želite. Najbolje je da to ime upućuje na ono na šta se
odnosi. Npr. ako računate obim kvadrata, onda je za ime varijable, u koju ćemo spremiti
vrijednost, poželjno uzeti ime: Obim, ili obim, ili samo slovo O. Može i neko drugo ime npr.
Aligator, ali kad to vidimo u programu koji računa obim nećemo moći zaključiti po tom
imenu da se radi o obimu.
SVE VARIJABLE PRIJE UPOTREBE U PROGRAMU MORAMO DEKLARIRATI,
INAČE ĆE NAM KOMPAJLER JAVITI GREŠKU.
Deklaracija varijabli se obavlja naredbom oblika:
tip podatka ime varijable
Primjer 1.
int a;
int a, b, c;
float zbir;
double x, y, razlika;
long double x, y;
char ime;
19 Vrlo je važno da razumijete šta su varijable i kako se deklariraju. Ako vam nije jasno šta je to
onda pročitajte još jednom, pa još jednom i tako dok ne bude jasno, jer one su dio gotovo
svake linije u programu, s njima radimo, s njima se igramo.
Tako u prethodnom primjeru int a; znači da smo kreirali varijablu, čije ime je a, te u nju
možemo staviti samo cjelobrojnu vrijednost. Na ovaj način mi kažemo računaru da nam
obezbjedi prostor u memoriji koji će se zvati a i da ćemo u njega "skladištiti" tj. pohraniti
samo cjelobrojne vrijednosti (negativne i pozitivne cijele brojeve, te nulu). Ako u ovu
varijablu a pokušamo pridružiti (spremiti, pohraniti) vrijednost odnosno broj 5.23 (decimalni
broj), onda će računar spremiti samo cijeli dio tj. broj 5 a ostalo 0.23 će odbaciti.
Programski jezik C++ razlikuje velika i mala slova, tako je dopušteno služiti se istim
imenom varijable, samo pisano malim, odnosno velikim slovima za dvije različite varijable.
Mjesto deklaracije varijable u programu određuje područje djelovanja određene varijable.
Prema području djelovanja varijable mobu biti globalne i lokalne:
-
globalne varijable, su dostupne kako za čitanje, tako i za promjenu u bilo kojem dijelu
programa, deklariraju se izvan svih funkcija, naredbi, petlji itd.
-
lokalne varijable se deklariraju na početku neke funkcije ili na početku nekog bloka
naredbi. Ove varijable vrijede samo unutar funkcije ili bloka naredbi, jer izlaskom iz
funkcije ili bloka naredbi ove varijable više ne postoje.
Mi ćemo za sada najčešće koristiti globalne varijable. Nemojte da vas ovo zbunjuje. Trenutno
vam nije bitno ako ne znate šta to znači.
20 Ključne riječi koje ne smijete koristiti za imena varijabli i konstanti su:
auto
double
int
enum
volatile
else
long
switch
case
union
break
typedef
char
extern
return
continue
register
float
short
unsigned
continue
struct
const
void
default
goto
sizeof
enum
signed
if
static
while
struct
for
do
2.6. Operatori i izrazi
Kombinacijom varijabli, konstanti i operatora nastaju izrazi. Izrazi su riječi ili simboli koji
određuju da se s varijablama u programu nešto učini. Mogu biti unarni, binarni, ternarni.
2.6.1. Operator pridruživanja
Operatorom pridruživanja ili operatorom za dodjelu vrijednosti se varijabli s njegove lijeve
strane pridružuje (sprema, pohranjuje) vrijednost izraza koja se nalazi na desnoj strani. Tip
vrijednosti izraza treba odgovarati tipu varijable.
Operator pridruživanja je znak jednako: =
Operator pridruživanja se može koristiti zajedno i s još jednim operatorom.
Primjer 2.
a=5; (znači da će varijabli a biti pridružena (spremita, skladištita) vrijednost 5)
a = a + 5; (znači da će varijabli a biti pridružena vrijednost izraza a + 5)
Ovo se može i drukčije zapisati:
a += 5;
Dakle, znak = ne znači da je lijeva strana jednaka desnoj, nego on kaže računaru da ono što je
na desnoj strani znaka jednako pridruži (spremi, skladišti) u varijablu na lijevoj strani znaka
jednako.
2.6.2. Inicijalizacija varijabli
Pridruživanje vrijednosti varijabli prilikom definisanja naziva se inicijalizacija varijable.
Deklaracija i inicijalizacija varijable se može obaviti u istom redu koda.
21 Primjer 3.
int a = 3;
Ovdje smo deklarirali varijablu a tj. odredili smo kakav tip podatka će sadržavati, te smo je
inicijalizirali odnosno pridružili joj vrijednost 3.
Dakle, kada napišemo int a; ili double a, b; mi smo izvršili deklaraciju varijabli, a kad
napišemo int a = 3; ili double a = 5.03, b = 3.25; mi smo izvršili deklaraciju
varijabli i inicijalizaciju (pridruživanje vrijednosti) varijabli.
2.6.3. Aritmetički operatori
Simboli aritmetičkih operatora uglavnom odgovaraju standardnim matematičkim oznakama
aritmetičkih operacija.
C++ operator
Operacija
+
sabiranje
–
oduzimanje
*
množenje
/
dijeljenje
%
ostatak pri cjelobrojnom dijeljenju
Prva tri operatora +, -, i * imaju iste osobine kao u matematici, pa ih ne treba posebno
objašnjavati. Operator dijeljenja / ima isto značenje kao u matematici samo što morate voditi
računa koje brojeve tj. varijable dijelite. Tako npr. ako računamo koliko je 5/2 gdje su 5 i 2
cijeli brojevi rezultat će biti 2, a ne 2.5 kao što bi pokazao kalkulator. Jer su 5 i 2 cijeli
brojevi pa i rezultat će biti cijeli broj tj. računar će odbaciti 0.5. Ako pak računate 5.0/2 ili
5/2.0 ili 5.0/2.0 gdje je jedan realan ili oba tada će rezultat biti 2.5. Ovdje treba samo
voditi s računa sa kojim vrijednostima radimo i kakav rezultat očekujemo cijeli ili realni broj
tj. decimalni.
Zadnji operator % (čitamo modulo) daje kao rezultat ostatak pri CJELOBROJNOM
dijeljenju.
Primjer 4. Izračunajmo sljedeće izraze sa znanjem iz matematike koristeći operatore (oznake)
C++.
4/2 je jednako 2
15/3 je jednako 3
A koliko bi bilo onda 5/2? To je 5/2=2.5.
22 Koliko bi bilo 5%2? Operator modulo % daje ostatak pri cjelobrojnom dijeljenju. Možemo ga
koristiti samo ako su cijeli brojevi u pitanju. Kako naći taj ostatak? Vrlo jednostavno, jer 5/2
možemo zapisati i ovako:
5/2 je jednako 2 jer je 2*2=4 (najbliže broju 5) plus 1 tj.
5/2=2*2+1
Ovo 1 je ostatak pri cjelobrojnom dijeljenju.
Dakle, 5%2=1, jer je 2*2=4 plus 1 jednako 5. Pogledajmo još nekoliko primjera da nam bude
jasan ovaj operator jer se on često koristi u programiranju.
7%2=1, jer je 7/2 najbliže 3 tj. 3*2=6 i do 7 nedostaje 1. Postavite sebi pitanje: Koji broj
pomnožen sa brojem 2 daje broj 7 ili što bliže broju 7? Ono što nedostaje do broja 7 je
ostatak.
8%4=0, jer je 8/4 tačno 2, tj. 2*4=8.
11%3=2, jer je 11/3 najbliže 3 tj. 3*3=9 i do 11 fali 2.
15%4=3, jer je 15/4 najbliže 3 tj. 3*4=12 i do 15 fali 3.
Ako se u izrazu nalazi više operatora, redoslijed izvršavanja ovisi o prioritetu operatora.
Nižeg prioriteta su sabiranje i oduzimanje, a višeg množenje, dijeljenje, cjelobrojno dijeljenje
s ostatkom. Redoslijed prioriteta se može promijeniti upotrebom zagrada ( ), jer one
imaju najviši prioritet tj. izvršava se prvo ono što je u njima, pri tome treba paziti da je broj
otvorenih i zatvorenih zagrada jednak.
Primjer 5.
int a=2;
int b=4;
int c=1;
int rezultat;
23 Izračunajmo sljedeće izraze.
a) rezultat = a – b * c
b) rezultat = (a – b) * c
c) rezultat = a * b + b * c
d) rezultat = ((a * c) – c) * b – a
Rješenje.
a) rezultat = - 2
b) rezultat = - 2
c) rezultat = 12
d) rezultat = 2
Programski jezik C++ ima još dva unarna operatora: uvećaj za jedan ++ (inkrement) i
umanji za jedan – – (dekrement).
Inkrement i dekrement operatori se primjenjuju samo na varijable i ne mogu se primijeniti na
izraze, niti na konstante. Ako se nalaze ispred varijable, onda se vrijednost te varijable prvo
poveća ili umanji za jedan i tako dobivena nova vrijednost se koristi pri izračunavanju izraza.
Ako se operator nalazi iza varijable, tada se prvo izračuna vrijednost izraza, a tek nakon toga
se vrijednost varijable poveća ili umanji za jedan.
Primjer 6.
int a = 3;
int b = 2;
int R;
U programu pišu sljedeće naredbe:
a++;
R = a – b;
Koliki bi bio rezultat?
Rezultat je R = 2, jer će računar prvo izračunati koliko je a++, a to znači povećaj a za 1
odnosno a = a + 1; pa je a sada 4 jer je 3+1 = 4, stoga je R = 4 – 2 = 2.
Ako bi pak pisalo ovako:
R = a++ - b;
Onda bi izračunao izraz s upotrebom a = 3 pa tek bi onda povećao a za 1 tj. R = 3 – 2 = 1.
24 Ako bi napisali ovako:
R = ++a – b;
Prvo bi povećao a za 1, pa bi onda računao s novom vrijednošću od a tj. R = 4 – 2 = 2.
Na isti način se upotrebljava i dekrement -- jedino što on ne povećava za 1 nego smanjuje za
1.
2.7. Naredba za ulaz
Za unošenje podataka s tastature odnosno s ekrana monitora koristimo cin >>. Ovu naredbu
koristimo kada unosimo neke podatke s tastature (glavnog ulaza) u računar. Kako to ide,
pokazaćemo na nekoliko primjera. Upotreba je veoma jednostavna.
Primjer 7. Napisaćemo program koji unosi jedan cijeli broj s tastature u računar i ispisat ćemo
taj isti broj na ekran monitora.
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
cout<<a<<endl;
return 0;
}
Unijeli smo npr. broj 3 i ispisali ga.
Primjer 8. Napišimo sada program koji unosi dva broja i ispisuje ih svaki u novom redu.
#include<iostream>
using namespace std;
int main()
{
int a, b;
cin>>a;
cin>>b;
cout<<a<<endl;
cout<<b<<endl;
return 0;
}
25 Brojeve možemo unijeti i u jednom redu s tim da između njih napravimo jedan prazan razmak
npr. 2 5. Također, možemo ispis napraviti i s jednom naredbom cout.
#include<iostream>
using namespace std;
int main()
{
int a, b;
cin>>a>>b;
cout<<a<<endl<<b<<endl;
return 0;
}
ZAKLJUČAK: Ako unosimo dva ili više brojeva svaki iz novog reda onda pišemo cin>> za
svaku varijablu, a ako ih unosimo u jednom redu onda pišemo
cin>> varijabla >> varijabla;
tj. svaku varijablu odvajamo operatorom za unos >>, a na kraju obavezno dođe tačka-zarez (;).
Sada kada smo naučili unositi podatke možemo preći na rješavanje konkretnih problema.
Zadatak 2. Napisati program koji će unijeti dva cijela broja s glavnog ulaza (tastature) i
ispisati njihov zbir.
Rješenje.
Kada rješavamo zadatak, prvo ga dobro pročitamo i uočimo šta su nam ulazni podaci, šta
izlazni, koliko ćemo varijabli trebati, kojeg će tipa biti itd. U našem slučaju imamo dva broja
tj. trebat ćemo dvije varijable kojima ćemo pridružiti (spremiti) ta dva broja. Kako im dati
ime? Ime birate sami. Treba da je što jednostavnije. Mi ćemo za prvi broj uzeti ime varijable
a, dok za drugi broj neka bude ime varijable b. Zbir kao rezultat treba isto spremiti u treću
varijablu. Pošto se radi o zbiru, neka njeno ime bude veliko Z. Unosimo dva CIJELA broja pa
će varijable a i b biti tipa int, a pošto je zbir dva cijela broja opet cijeli broj to će i varijabla Z
biti tipa int. U zadatku se ne kaže kako će te unijeti brojeve, u jednom ili više redova. To
sami birate po želji, kako vam je lakše. Također, se ne kaže treba li se ispisati prije unosa
kakva poruka. To opet birate sami, da li ćete ispisati nekakvu poruku ili ne. Na izlazu (ekranu)
se traži samo ispis zbira, nikakva poruka. Vi sami birate da li ćete ispisati neku poruku ili ne.
Mi ćemo ovdje navesti sve varijante bez poruka i s njima. U svakom slučaju program je tačan
jer radi ono što se od njega traži, sabira dva broja. Ostale poruke, način ispisa su samo šminka
– da ljepše izgleda.
Prvi slučaj bez ikakvih poruka, unosimo npr. 2 i 3:
26 #include<iostream>
using namespace std;
int main()
{
int a, b, Z;
cin>>a>>b;
Z= a + b;
cout<<Z<<endl;
return 0;
}
Drugi slučaj s porukama korisniku:
#include<iostream>
using namespace std;
int main()
{
int a, b, Z;
cout<<"Unesite prvi broj:";
cin>>a;
cout<<"Unesite drugi broj:";
cin>>b;
Z= a + b;
cout<<"Zbir je "<<Z<<endl;
return 0;
}
Može i ovako:
#include<iostream>
using namespace std;
int main()
{
int a, b, Z;
cout<<"Unesite dva broja:";
cin>>a>>b;
Z= a + b;
cout<<"Zbir je "<<Z<<endl;
return 0;
}
Ovo su neki načini. Vi možete ispisivati kako hoćete, unositi kako hoćete (ako to nije
naglašeno u zadatku), bitno je da program radi ono što se od njega traži.
Navest ćemo još jedan slučaj u kojem ne koristimo varijablu Z, već odmah sabiramo i
ispisujemo na ekran. Ovo je najkraće rješenje zadatka.
27 #include<iostream>
using namespace std;
int main()
{
int a, b;
cin>>a>>b;
cout<<a+b<<endl;
return 0;
}
Zadatak 3. Napisati program koji unosi dva cijela broja, te ispisuje njihov zbir, razliku,
proizvod, količnik i ostatak pri dijeljenju prvog s drugim.
Rješenje. Unosimo npr. 5 i 2.
#include<iostream>
using namespace std;
int main()
{
int a, b, Z, R,P,K,O;
cin>>a>>b;
Z=a+b;
R=a-b;
P=a*b;
K= a/b;
O=a%b;
cout<<"Zbir je "<<Z<<endl;
cout<<"Razlika je "<<R<<endl;
cout<<"Proizvod je "<<P<<endl;
cout<<"Kolicnik je "<<K<<endl;
cout<<"Ostatak je "<<O<<endl;
return 0;
}
Obratiti pažnju na količnik. Računar je napisao da je to 2, a ne 2.5. To je zbog toga što nam
su varijable a i b, te K tipa int. Da dobijemo 2.5 moramo koristiti tip double ili float. No,
nismo mogli navesti tip double jer onda bi nam javio grešku za ostatak. Međutim, to se može
izbjeći uvođenjem novih varijablih A, B,K koje će biti tipa double.
#include<iostream>
using namespace std;
int main()
{
int a, b, Z, R,P,O;
cin>>a>>b;
Z=a+b;
R=a-b;
P=a*b;
O=a%b;
double A, B, K;
A=a;
28 B=b;
K= A/B;
cout<<"Zbir je "<<Z<<endl;
cout<<"Razlika je "<<R<<endl;
cout<<"Proizvod je "<<P<<endl;
cout<<"Kolicnik je "<<K<<endl;
cout<<"Ostatak je "<<O<<endl;
return 0;
}
Varijable možete deklarairati bilo gdje u kodu a ne samo na početku, samo mora biti prije
njihove upotrebe. Imati na umu da se svaki program koji napišete mora testirati. To znači
probati sve moguće kombinacije, pa ako za sve daje tačan rezultat, onda je program dobar
odnosno zadatak tačno riješen. Može se desiti da za neke brojeve program daje tačno rješenje,
a za ostale ne. To onda nije rješenje zadatka.
2.8. Zadaci za samostalan rad
Zadatak 4. Napisati program za računanje obima kvadrata (O=4a).
Zadatak 5. Napisati program za računanje površine pravougaonika (P=ab).
Zadatak 6. Napisati program za računanje obima pravougaonika (O=2a+2b).
Zadatak 7. Napisati program za računanje površine kvadrata (P=a2).
Zadatak 8. Napisati program koji sabira tri broja.
Zadatak 9. Napisati program koji učitava tri broja i ispisuje njihov proizvod.
0 računa vrijednost funkcije
Zadatak 10. Napisati program koji za unešeno
1
2
3
Zadatak 11. Napisati program koji za četiri unijete ocjene iz Informatike računa prosječnu
ocjenu (zaključnu ocjenu). (Uputa. Koristiti tip double ili float za varijable)
Zadatak 12. Na ulazu se unose dva broja. Na izlazu ispisati dvostruku vrijednost prvog broja
i trostruku vrijednost drugog broja.
Zadatak 13. Sa standardnog ulaza (tastatura) se unosi dužina stranice kocke (prirodan broj).
Na izlazu ispisati površinu i zapreminu kocke.
Zadatak 14. Napisati program koji će za uneseni poluprečnik kruga, izračunati njegov obim.
(Uputa.
2
, umjesto
pisati 3.14, za r i O koristiti tip double ili float)
Zadatak 15. Napisati program koji unosi četverocifren broj i ispisuje cifre tog broja počev od
cifre najmanje mjesne vrijednosti (cifre jedinica).
29 3. MATEMATIČKE FUNKCIJE
U C++ postoji mnogo ugrađenih funkcija. Šta to znači? Uzmimo npr. apsolutnu vrijednost
nekog broja. Pošto se to često koristi, pa da ne bi za svaki problem (zadatak) pisali kod
(program) koji računa aposolutnu vrijednost, onda su programeri napisali taj kod i ugradili ga
u jezik a naše je samo da ga upotrebimo kad nam treba. Šta je funkcija u C++ trenutno nije
bitno da znate, već samo kako se primjenjuje. Postoji mnogo ugrađenih matematičkih
funkcija, mi ćemo ovdje navesti samo one koje će nama trebati i koje su vama poznate iz
matematike.
Da bi koristili matematiče funkcije morate prije using namespace std; uključiti matematičku
biblioteku naredbom
#include<cmath>
Vrijednost svih sljedećih funkcija je tipa double. Tip argumenta x i y je double, a argumenta
n je int. Kada upotrebite neku funkciju ona će vam vratiti izračunatu vrijednost koja će biti
tipa double.
pow(x,y)
Stepenovanje (Potenciranje). Vrijednost funkcije
. Ako je
mora da bude
0. Ako je
0, mora biti cijeli broj.
sqrt(x)
Korjenovanje (drugi korijen). Vrijednost funkcije √ ,
abs(n)
Apsolutna vrijednost
0
Primjer 9. Napisaćemo program koji demonstrira upotrebu ovih funkcija.
Rješenje.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a=2, b=4, c=-5;
cout<<pow(3,2)<<endl;
cout<<pow(a,b)<<endl;
cout<<pow(2.135,4)<<endl;
cout<<sqrt(b)<<endl;
cout<<sqrt(a+b)<<endl;
cout<<sqrt(10.250)<<endl;
cout<<abs(c)<<endl;
cout<<abs(5)<<endl;
cout<<abs(-15)<<endl;
return 0;
}
30 0,
3.1. Decimalni brojevi
Naučit ćemo kako oblikovati tj. ispisivati decimalne brojeve. C++ pruža mogućnost da
manipuliramo izlaznim podacima. U tu svrhu koristimo razne manipulatore. Mi ćemo
spomenuti samo neke.
3.1.1. Fixed
fixed je manipulator koji se koristi kada ne želimo da nam broj bude prikazan u naučnom
zapisu (npr. umjesto 1.034292e+004 želimo da bude 10342.92)
Primjer 10. Napisaćemo program koji će zadane brojeve ispisati na ekran bez upotrebe
modulatora fixed i s upotrebom modulatora fixed.
Rješenje.
#include <iostream>
using namespace std;
int main()
{
double a=3.14, b=0.051;
double c=10.122445541;
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<endl;
cout<<fixed;
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
return 0;
}
ZAKLJUČAK: Modulator fixed je dovoljno napisati jednom ispred svih ispisa, te će on
djelovati na sve ispise. Svi ispisi će biti na šest decimala. Nije potrebno uključivati nikakvu
biblioteku.
3.1.2. Setprecision
setprecision(n) je funkcija koja se koristi za ispis decimalnog broja s određenim brojem
cifara, s tim da nulu ne broji, ako je ona na prvom mjestu. Dakle, ona samo govori koliko će
se brojeva prikazati prilikom ispisa decimalnog broja. Umjesto slova n pišemo cijeli broj.
Da bi koristili ovu funkciju moramo uključiti biblioteku
31 #include <iomanip>
Ona se može koristiti za tačno određen ispis decimala u decimalnom broju (zaokruživanje),
tako što se prije ove funkcije napiše naredba fixed.
Primjer 11. Prethodni primjer, gdje su prvo ispisani decimalni brojevi s naredbom
setprecision, a ispod odmah u kombinaciji s naredbom fixed.
Rješenje.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a=3.14, b=0.051;
double c=10.122445541;
cout<<setprecision(3)<<a<<endl;
cout<<setprecision(1)<<b<<endl;
cout<<setprecision(3)<<c<<endl;
cout<<endl<<fixed;
cout<<setprecision(3)<<a<<endl;
cout<<setprecision(3)<<b<<endl;
cout<<setprecision(3)<<c<<endl;
return 0;
}
3.2. Ostali manipilatori
dec – čita ili ispisuje decimalni broj.
oct – čita ili ispisuje oktalni broj.
hex – čita ili ispisuje heksadecimalni broj.
Primjer 12. Ispisat ćemo cijeli broj 15 i 25 u ova tri brojna sistema.
Rješenje.
#include <iostream>
using namespace std;
int main()
{
int n=15, m=25;
cout<<"Ispis broja 15:"<<endl;
cout<<dec<<n<<endl;
cout<<oct<<n<<endl;
cout<<hex<<n<<endl;
cout<<"Ispis broja 25:"<<endl;
cout<<dec<<m<<endl;
cout<<oct<<m<<endl;
cout<<hex<<m<<endl;
return 0;
}
32 4. NAREDBE
Naredba je osnovna jedinica obrade u programima. Mogu se podijeliti na proste, složene i
upravljačke. Upravljačke naredbe ne vrše nikakvu obradu već prenose tok upravljanja na
neko mjesto u programu. To spadaju razne naredbe skokova.
Proste naredbe predstavljaju elementarne obrade koje se ne mogu da podjele na manje
dijelove koji bi i sami bili naredbe, npr.: int a;
ili a=5; ili cout<<a;. Izvršavanje
proste naredbe sastoji se u izračunavanju izraza. Njen opšti oblik je:
izraz ;
ZAPAMTITI: SVAKA NAREDBA SE ZAVRŠAVA SA TAČKA-ZAREZ (;)
Ako stavimo samo ; tada imamo praznu naredbu koja ne radi ništa.
Složene naredbe predstavljaju strukture naredbi kojima se određuje redoslijed izvršavanja
naredbi sadržanih u strukturi (u kodu tj. programu). Mogu biti: sekvenca, selekcije i ciklusi ili
petlje.
4.1. Sekvenca ili blok: { }
Sekvenca je niz naredbi koje se izvršavaju jedna za drugom. Sekvenca se u jeziku C++ piše
unutar velikih (vitičastih) zagrada: { }. U jednom redu može da bude više naredbi ili pak u
svakom redu po jedna. Osnovni kriterij je preglednost.
Načini pisanja naredbi za sekvencu:
1) { naredba1; naredba2; ... naredba n;}
2) {
}
naredba1;
naredba2;
...
naredba n;
Pošto se ispred naredbe1 može da stavi i nekoliko deklarativnih naredbi, zbog toga se
sekvence nazivaju i blokovi.
Doseg (oblast važenja) identifikatora u programiranju označava dio programa u kome se
identifikator koristi. Pa tako ako je na početku bloka definisan neki identifikator, tada je
njegov doseg samo od početka pa do kraja bloka, tj. neće vrijediti izvan bloka odnosno
vitičastih zagrada.
33 Dakle, ako imamo dvije ili više naredbi za koje želimo da se izvrše zajedno jedna iza druge
onda ih stavljamo u vitičaste zagrade tj. u blok. Prije nego li naučimo šta su sekcije,
upoznajmo još jednu vrstu operatora. To su relacijski operatori.
4.2. Relacijski operatori
Relacijskim operatorima se utvrđuje povezanost dviju varijabli, funkcija ili izraza. Računari u
svom radu upotrebljavaju jednostavnu logiku sa dvije vrijednosti: ukoliko je uslov (uvjet)
istinit (true), vrijednost je 1; ukoliko je lažan (false), vrijednost je 0. Relacijski operatori su
prikazani u sljedećoj tablici:
C++ operator
Značenje
Primjer
>
veće od
5>4
>=
veće od ili jednako
5>=x
<
manje od
4<5
<=
manje od ili jednako
x<=5
==
jednako
5==5
!=
različito (nije jednak)
5!=4
4.3. Selekcije
Selekcije su upravljačke strukture koje omogućuju uslovno izvršavanje naredbi. To znači ako
je neki uslov (uvjet) tačan nešto će se desiti (neke naredbe će se izvršiti).
4.3.1.
Naredba if
if (uslov) naredba1;
Ovo je jednostavna naredba if. Funkcionira na sljedeći način: Naredba if ispita da li je
uslov tačan (istinit). Ako je tačan onda se izvrši naredba1. Ako nije tačan, tada se
naredba1 neće izvršiti, nego se nastavlja sa izvršavanjem naredbe koja je sljedeća u
programu.
Uslov (uvjet) mora bit takav da za njega računar može utvrditi da li je tačan ili netačan.
34 Primjer 13.
IZRAZ
USLOV
5 = = 5
DA
a>b
DA
a+b
NE
(a+b)*c<0
DA
5-2
NE
OBJAŠNJENJE
Jer možemo utvrditi da li je izraz tačan ili
netačan.
Jer možemo utvrditi da li je izraz tačan ili
netačan za određene vrijednosti a i b.
Jer ne možemo utvrditi da li je izraz tačan
ili netačan za određene vrijednosti a i b.
Jer možemo utvrditi da li je izraz tačan ili
netačan za određene vrijednosti a,b i c.
Jer ne možemo utvrditi da li je izraz tačan
ili netačan.
NAPOMENA: Ako kao uslov stoji broj 1 ili 0, tada je to ispravan uslov tj. broj 1 za računar
predstavlja tačno, a broj 0 netačno, npr. if (1) naredba1;
Primjer 14. Napisati program koji će komentarisati uneseni cijeli broj a tj. ako je a veće od
nule ispisat će se poruka "Broj je pozitivan", ako je jednak nuli "Broj je jednak nuli", te ako je
manji od nule "Broj je negativan".
Rješenje.
Unosimo jedan broj s tastature i to cijeli broj, pa će deklaracija biti int a. Pošto u zadatku
imao uslov (da je veći od nule, jednak nuli, manji od nule) onda koristimo if naredbu.
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a>0) cout<<"Broj je pozitivan"<<endl;
if(a==0) cout<<"Broj je jednak nuli"<<endl;
if(a<0) cout<<"Broj je negativan"<<endl;
Za unos 5
return 0;
}
Kako program radi? Nakon što vi unesete broj s tastature (to je naredba cin>>a;), računar ide
na sljedeću naredbu
if(a>0) cout<<"Broj je pozitivan"<<endl;
i prvo se provjerava uslov a>0 uvrštava se uneseni broj (npr. u ovom slučaju 5) tj. 5>0 da li je
ovo tačno, postavi si pitanje računar. DA, tačno je. Onda se izvrši naredba koja stoji poslije
okruglih zagrada
cout<<"Broj je pozitivan"<<endl;
35 Ispiše se tekst: "Broj je pozitivan" te se poslije ispiše jedan prazan red tj. pređe se u novi
red naredbom endl;
Nakon toga računar ide dalje s izvršavanjem koda na liniju ispod
if(a==0) cout<<"Broj je jednak nuli"<<endl;
Provjerava da li je uslov a==0 tačan tj. uvrsti broj 5 mjesto a tj. 5==0 i pita se da li je ovo
tačno. NE, nije, pa dio
cout<<"Broj je jednak nuli"<<endl;
koji stoji poslije uslova neće izvršiti, preskočiće ga, jer uslov nije tačan. Zatim, ide na sljedeću
naredbu (liniju koda)
if(a<0) cout<<"Broj je negativan"<<endl;
Ponovo, ispitiva da li je uslov tačan uvrštavajući uneseni broj umjesto varijable a. U našem
slučaju broj 5. Kako 5<0 nije tačno, računar preskače dio iza if naredbe i prelazi na sljedeću
naredbu
return 0;
i time završava program. Dakle, samo je bio tačan uslov u prvoj naredbi if za uneseni broj 5
pa se jedino i ona izvršila. Ovo smo napisali malo detaljnije kako program radi, jer je vrlo
važno da razumijete if naredbu, da bi s njom mogli lakše manipulirati.
NAPOMENA: U prethodnom primjeru smo iza naredbe if imali jednu naredbu i to cout. Šta
ako želimo da se izvrše dvije, tri ili pak više naredbi, ako je neki uslov tačan? Tada koristimo
blok tj. te naredbe stavljamo u vitičastu zagradu.
if (uslov) {naredba1; naredba2; naredba3; itd}
Imati na umu da iza svake naredbe dođe tačka-zarez (;), a da se poslije vitičastih zagrada NE
PIŠE tačka-zarez.
4.3.2.
Naredba if – else
Ova naredba je slična naredbi if, pa sve rečeno za naredbu if vrijedi i za naredbu if –
else. Naredba ima jedan dodatak else koji znači inače. Naredba se piše na sljedeći način:
if (uslov) naredba1; else naredba2;
Naredba if – else radi na sljedeći način: Kao i kod naredbe if prvo se provjerava da li je
uslov tačan (istinit). Ako je uslov tačan, onda se izvršava naredba1, dok se naredba2 ne
izvršava (preskače). Ako je pak uslov netačan, onda se naredba1 ne izvršava (preskače), ali
se izvršava naredba2. Dakle, ako je uslov tačan izvršava se samo naredba1, ako nije tačan
izvršava se samo naredba2.
36 Načini pisanja naredbe if-else:
1) if ( uslov ) naredba1; else naredba2;
2) if ( uslov )
naredba1;
else
naredba2;
3) if ( uslov )
{
naredba11;
naredba12;
...
naredba 1n;
}
else
{
naredba21;
naredba22;
...
naredba 2m;
}
4) if ( uslov) {
naredba11;
naredba12;
...
naredba 1n;
} else {
naredba21;
naredba22;
...
naredba 2m;
}
Ovo su neki najčešći, najpregledniji načini pisanja naredbe if–else, mada ih se vi ne morate
pridržavati tj. pišete u koliko redova hoćete, s kojim razmakom hoćete, bitno je samo da
naredba sadrži svoj osnovni oblik, koji možete lijepo srediti samo s dva klika, tako što
kliknete desnim dugmetom miša i odaberete Format use Astyle, slika 17.
37 Slika 17 Oblikovanje koda
Primjer 15. Napisati program koji unosi dva cijela broja, te ako je njihov zbir veći od nule,
ispisuje njihov proizvod, inače njihovu razliku.
Rješenje.
Trebamo unijeti dva cijela broja, pa odmah znamo da su tipa int, a imena neka budu a i b.
Dakle, int a, b; . Imamo uslov, da je njihov zbir veći od nule tj. a+b>0. Ako je to tačno (za
unesene brojeve), onda će se ispisati njihov proizvod tj. a*b. To je naša naredba1 u if-else
naredbi. Dio inače njihovu razliku, znači, ako je uslov netačan, onda ispiši njihovu razliku tj.
a-b, a ovo je naša naredba2 u if-else naredbi.
#include<iostream>
using namespace std;
int main()
{
int a, b;
cin>>a>>b;
if(a+b>0) cout<<a*b<<endl;
else cout<<a-b<<endl;
Za unos 2 i 3 Za unos ‐2 i 1 return 0;
}
Primjer 16. Napisati program koji unosi tri cijela broja i ispisuje najvećeg od njih.
Rješenje.
Iz zadatka vidimo da moramo deklarirati tri varijable tipa int (jer su cijeli brojevi). Dajmo im
imena a, b, c tj. int a, b, c; . Odmah iz zadatka se ne vidi da ćemo koristiti if naredbu.
Kao to u zadatku prepoznati? Čim se u vašem govoru javi riječ AKO je nešto tako ONDA će
biti ovo itd. Znamo da relacijski operatori (>, <, ==, itd) mogu uzeti (uporediti) samo dva
broja. Pa ćemo mi uzeti npr. brojeve a i b, te ih uporediti, da vidimo koji je veći (postaviti
38 uslov a>b). Šta ako je uslov tačan? To znači da je broj a veći od broja b. Šta onda da
uradimo? A šta ako je netačan? To znači da je onda broj b veći od broja a, šta da onda
uradimo? Upravo zbog ovog " šta da onda uradimo", moramo uvesti novu varijablu kojoj
ćemo dati ime max i njoj pridružiti (spremiti, u nju skladištiti) broj koji od njih dvojce (od a ili
b) bude veći.
if (a>b) max=a; else max=b;
Ostaje još da uporedimo max i c, pa ko od njih bude veći, taj je onda najveći broj.
Za unos 1, 2 i 3 #include<iostream>
using namespace std;
int main()
{
int a, b, c, max;
cin>>a>>b>>c;
if(a>b) max=a; else max=b;
if(max>c) cout<<"Najveci je "<<max<<endl;
else cout<<"Najveci je "<<c<<endl;
Za unos 1, 3 i 2 Za unos 3, 2 i 1 return 0;
}
Program testirate sa što manjim brojevima tj. za koje znate kakav treba rezultat biti i sve
moguće slučajeve, prije nego li ga proglasite tačnim. U ovom primjeru smo imali tri broja, pa
smo u testiranju morali na sva ti mjesta staviti najveći broj da vidimo da li će ga program
ispravno naći.
Može li se zadatak riješiti bez uvođenja nove varijable? Da, može, upotrebom proširene ifelse-if-else naredbe:
if(uslov1) naredba1;
else if(uslov2) naredba2;
else if(uslov3) naredba3;
else naredba4;
ili
if(uslov1) if(uslov2) naredba2;
else if(uslov3) naredba3;
else naredba4;
Ovdje smo stali na naredbi4, mada možete ići dokle vam je volja. Dakle, ako je uslov1 tačan,
onda izvrši naredbu1, inače (ako nije tako), provjeri da li je uslov2 tačan, pa ako jeste izvrši
naredbu2, inače (ako nije tačan), provjeri je li uslov3 tačan, pa ako jeste izvrši naredbu3, inače
izvrši naredbu4.
39 #include<iostream>
using namespace std;
int main()
{
int a, b, c;
cin>>a>>b>>c;
if(a>b) if(a>c) cout<<"Najveci je "<<a<<endl;
else cout<<"Najveci je "<<c<<endl;
if(a<b) if(b>c) cout<<"Najveci je "<<b<<endl;
else cout<<"Najveci je "<<c<<endl;
return 0;
}
4.3.3. Zadaci za samostalan rad
Zadatak 17. Napisati program koji unosi dva cijela broja. Ako je prvi veći od nule ispisuje
njhov proizvod, inače njihov zbir.
Zadatak 17. Napisati program koji unosi dva cijela broja. Ako je razlika tih brojeva veća ili
jednaka od nule ispisuje njihov zbir, inače njihov proizvod.
Zadatak 18. Unijeti dva cijela broja. Ako je kvadrat prvog veći od kvadrata drugog broja,
ispisati njhov zbir, a ako nije njihovu razliku.
Zadatak 19. Napisati program koji će provjeriti jesu li dva broja a i b jednaka ili ne.
Zadatak 20. Napisati program koji će provjeriti da li je cijeli broj unesen s tastature veći od 3.
Zadatak 21. Napisati program koji učitava dva broja x, y te ispisuje poruku da li je x<y ili
x>y ili x=y.
Zadatak 22. Napisati program koji učitava dužine tri stranice trougla i ispisuje poruku da li je
trougao pravougli. (Uputa: Zbir dvije stranice mora biti veći od treće, da bi imali trougao)
Zadatak 23. Napisati program koji učitava tri prirodna broja i ispitiva da li su ti brojevi
stranice trougla.
Zadatak 24. Napisati program koji za uneseni prirodan broj provjerava da li paran broj. Ako
jeste ispiše poruku "DA", ako nije poruku "NE". (Uputa. Koristiti operator modulo)
Zadatak 25. Napisati program koji će za uneseni cijeli broj ispitati da li je djeljiv s 5.
Zadatak 26. Napisati program koji od tri unesena cijela broja ispisuje najmanjeg.
Zadatak 27. Napisati program koji za tri unijeta cijela broja a, b i c ispituje da li je jedan od
njih jednak zbiru druga dva. Ako jeste ispisuje poruku npr. " Broj a je jednak zbiru brojeva b i
c", ako nije poruku "Ne". Umjesto a, b i c koristiti konkretne brojeve.
40 Zadatak 28. Napisati program koji unosi dva prirodna broja a i b, i ispisuje poruku, ako je
broj a djeljiv brojem b: "Broj a je djeljiv brojem b", a ako nije poruku "Broj a nije djeljiv
brojem b". Umjesto a i b u poruci koristiti konkretne vrijednosti.
4.4. Logički operatori
Do sada smo u uslovu kod if naredbe koristili relacijske operatore (<, >, ==, itd) i to samo
jedan operator u izrazu. Postavlja se pitanje možemo li kako koristiti više relacijskih
operatora? Jer kad bi mogli koristiti više njih u jednom uslovu, tada bi mogli graditi složenije
uslove. Odgovor je potvrdan. To nam omogućuju logički operatori, koji služe za povezivanje
dva ili više jednostavnih uslova - izraza (sa samo jednim relacijskim operatorom).
Logički operatori u C++ su:
Logički operator C++ operator
!
negacija NE
&&
logički I
logički ILI
Logički operator negacija "ne" je unarni operator, označava se sa ! i zapisuje se ispred
elementa i mijenja njegovu logičku vrijednost iz tačno u netačno ili iz netačno u tačno. U
C++ se tačno označava s brojem 1, a netačno s brojem 0.
Logički operator "I" u oznaci && je tačan (ima vrijednost 1) ako i samo ako su oba operanda
tačna (imaju vrijednost 1), inače je netačan (ima vrijednost 0 u svim ostalim slučajevima).
Označimo jedan operand (izraz) sa A, a drugi sa B, npr. (5+c)<0 je izraz (operand). Budući
da operator I, binarni operator tj. povezuje samo dva operanda, to onda imamo samo četiri
moguća slučaja:
A
0
0
1
1
B A && B
0
0
1
0
0
0
1
1
41 Logički operator "ILI" u oznaci || je tačan (ima vrijednost 1) ako je bar jedan operand
(izraz) tačan tj. netačan je (ima vrijednost 0) samo ako su oba operanda netačna.
A
0
0
1
1
B A || B
0
0
1
1
0
1
1
1
Primjer 17. Izračunati (utvrditi) da li su sljedeći izrazi (uslovi) tačni ili netačni.
5,
1.
a)
1
1
0 && b)
5 && c)
3
0 5 0 && / – 5
0 1,
2.
a)
3,
1 0 || 0 0 || b)
0 || c)
1,
3.
2,
4 a)
1 && b)
&& c)
0 || d)
5
e) !
5 f)
0 || g)
0 && 0 0 && 1
0 || 1 || 0 && 0 && 0 0 5
0 && || 5
&& 0 0 0 || Rješenje.
1) a) Sada umjesto varijabi
i
uvrstimo konkretne vrijednosti, te ispitamo da li je prvi
izraz tačan ili netačan, isto tako za drugi, pa onda primjenimo operator &&, a umjesto
tačno kao što smo rekli pišemo 1, a za netačno 0:
(5+1)>0 && (5-1)>0
42 6>0 && 4>0
1 && 1
1
Dakle, ovaj uslov je tačan.
b) 1
c) 0
2) a) Opet umjesto varijabli uvrstimo vrijednosti.
a>0 || b>0
1>0 || 3>0
1 || 1
1
Dakle, tačno.
b) 1
c) 1
3) a) Sada na isti način samo što gledmo prva dva, pa tako dobiven rezultat s sljedećim.
a>=1 && b>0 && c<0
1>=1 && 2>0 && 4<0
1 && 1 && 0
1 && 0
0
Dakle, netačno
b) 1
c) 0
d) 1
e) 1
f) 1
Pošto smo se upoznali s logičkim operatorima možemo raditi mnogo složenije zadatke.
Primjer 18. Napisati program koji učitava dva cijela broja, te ako je jedan od brojeva
negativan ispisuje njihov proizvod, a ako su pozitivni ispisuje njihovu razliku.
Rješenje.
43 U zadatku se traži da unesemo dva cijela broja, koja ćemo označiti s a i b tj. int a, b; .
Uslov je da se ispiše njihov proizvod, ako je jedan od brojeva negativan. To znači, da će se
ispisati proizvod ovih brojeva, ako je
negativan a, b pozitivan
a pozitivan, b negativan
negativan a, negativan b
odnosno zapisano simbolima
a<0, b>0
a>0, b<0
a<0, b<0
KOJI logički operator upotrebiti? Prethodna tri slučaja moraju biti tačna, a moramo to zapisati
što kraće tj. jednostavnije – kao jedan slučaj. Tu dolaze do izražaja logički operatori. Pomoću
njih ćemo povezati dva izraza (elementarna uslova):
a<0 || b<0
Dovoljno je da je jedan a ili b, nije važno koji, negativan, da bi sve bilo tačno tj. da bi se
ispisao njihov proizvod. A ako nije tako, onda su očito oba pozitivna.
#include <iostream>
using namespace std;
int main(){
int a, b;
cout<<"Unesite dva broja:";
cin>>a>>b;
if (a < 0 || b <0) cout<<a*b<<endl;
else cout <<a-b<<endl;
return 0;
}
Za unos ‐2 i 3 Primjer 19. Napisati program koji unosi cijeli broj A, te provjerava da li se broj A nalazi
između brojeva 1 i 10.
Rješenje.
Unosimo jedan cijeli broj A tj. int A. Uslov je da se broj nalazi između brojeva 1 i 10. To
znači, da broj A mora biti veći od 1 i manji od 10. Koji logički operator koristiti? Sama
prethodna rečenica vam je dala odgovor. To je logičko I tj. &&. Jer da bi broj A bio između
brojeva 1 i 10, on mora biti istovremeno veći od 1 i manji od 10 tj. oba izraza moraju biti
istovremeno tačna, da bi sve ukupno bilo tačno, a to nam daje logičko I.
44 #include <iostream>
using namespace std;
int main(){
int a;
cout<<"Unesite broj:"<<endl;
cin>>a;
if (a >1 && a <10) cout<<"DA"<<endl;
else cout <<"NE"<<endl;
return 0;
}
4.4.1. Zadaci za samostalan rad
Zadatak 29. Napisati program koji unosi cijeli broj i ispisuje poruku "DA" ako je broj veći od
100, a manji od nule, ako nije onda poruku "NE".
Zadatak 30. Napisati program koji unosi prirodan broj N. Ako je broj N djeljiv s 5 i paran
broj, ispisuje poruku "Broj N je djeljiv s 5 i paran je broj", u suprotnom poruku "NE". U
poruci N treba biti konkretna vrijednost.
Zadatak 31. Napisati program koji učitava cijeli broj i provjerava da li je taj broj djeljiv s 5 i
7.
Zadatak 32. Napisati program koji unosi dva cijela broja A i B i koji ispisuje broj A, ako je
zbir i razlika brojeva A i B veće od nule, inače ispisuje broj B.
Zadatak 33. Napisati program koji učitava četiri cijela broja a, b, c i d. Ako je prvi pozitivan i
zbir drugog i četvrtog veći od nule i zbir prvog i trećeg manji od nule ispisuje, proizvod
a*b*c, inače ispisuje koliko je a-b-c.
45 4.5. Ciklusi ili petlje
Ciklusi ili petlje su upravljačkie strukture koje omogućuju ponovljeno izvršavanje neke
naredbe.
Prema zadavanju uslova dokle treba da se petlja ponavlja, mogu da postoje:

petlje koje traju dok je neki uslov ispunjen

petlje koje traju dok neki uslov nije ispunjen

brojačke petlje
4.5.1. For petlja
Jedna od najvažnijih petlji je for petlja. Njena upotreba u programima je neizostavna, zbog
toga je vrlo važno razumjeti kako ona funkcionira. Kada ćemo koristiti for petlju?
AKO JE BROJ PONAVLJANJA POZNAT, TADA KORISTIMO FOR PETLJU
Opći oblik for petlje je:
for (izraz1; uslov; izraz2) naredba;
Izraz1 predstavlja pripremu za ulazak u petlju i njegova vrijednost se samo iskoristi prvi put.
Uslov je logički izraz koji predstavlja uslov za nastavljenje petlje. Dok je tačan petlja se
izvodi, čim postane netačan petlja se prekida.
Izraz2 predstavlja promjenu vrijednosti izraza1 na kraju svakog prolaska kroz petlju.
Načini pisanja for petlje:
1) for(izraz1; uslov; izraz2) naredba;
2) for(izraz1; uslov; izraz2)
naredba;
for(izraz1; uslov; izraz2)
{
naredba1;
naredba2;
}
 Dvije ili više naredbi,
koje pripadaju for petlji
se moraju staviti u
vitičaste zagrade!!!
...
naredba n;
46 3) for(izraz1; uslov; izraz2) {
naredba1
naredba2
...
naredba n
}
Primjer 20. Napisati program koji ispisuje poruku "C++" 10 puta.
Rješenje. Prema znanju koje imamo (bez znanja for petlje) mi bi ovaj zadatak riješili tako što
bi poruku "C++" napisali 10 puta:
cout<<"C++ C++ C++ C++ C++ C++ C++ C++ C++ C++";
Pa i nije neki zamor. No, šta da svaka poruka mora biti u novom redu? Onda bi bilo malo više
posla, ali i to se da. Što će nam onda for petlja? Recimo da smo u zadatku umjesto 10 puta
napisali 1000 ili možda milion puta. Koliko bi nam samo vremena trebalo da to napišemo na
prethodni način? Tu dolazi do izražava moć for petlje. Mi napišemo jednom, a ono se ispiše
koliko puta želimo.
Vratimo se sada rješenju našeg zadatka pomoću for petlje. Iz zadatka znamo da se poruka
"C++" treba ispisati 10 puta. To je naš uslov iz definicije for petlje. Izraz1 u definiciji petlje
označava odakle petlja kreće tj. pretstavlja njenu početnu vrijednost. U našem slučaju će
krenuti od broja 1. Izraz2 u definiciji for petlje označava za koliko će se izraz1 – početna
vrijednost povećati nakon što prgram dođe do kraja for petlje. To je zapravo korak, koji
diktira način ponavljanja. U našem slučaju, izraz2 mora povećati izraz1 svaki put za 1. Jer
trebamo ispisati "C++" 10 puta, pošto krećemo od 1, a trebamo doći do 10. Kako napisati tj.
zapisati izraz1? Najčešće se u tom slučaju koristi varijabla i, može i neko drugo ime. Ali
varijablu i moramo deklarirati na početku, te je tipa int. Kako napisati uslov? Uslov obično
sadrži varijablu iz izraza1 i mora biti logički uslov. U našem slučaju je i<=10. Kako napisati
izraz2? Već smo rekli da on povećava izraz1 tj. početnu vrijednost (može i smanjivati, ali u
našem slučaju povećava). Obično se piše i++, ako povećava za 1. Mogli smo napisati i ovako
i=i+1. To je isto.
47 Konačno rješenje zadatka.
#include <iostream>
using namespace std;
int main(){
int i;
for(i=1; i<=10; i++)
cout<<"C++"<<endl;
return 0;
}
Primjer 21. Napisati program koji će ispisati brojeve od 10 do 1.
Rješenje. Zadatak od nas traži da ispišemo brojeve 10, 9, 8, ... , 1. Dakle, opet imamo
ponavljanje, pa ćemo koristiti for petlju. Sada je početna vrijednost 10, a krajnja 1, pa nam
izraz2 mora biti takav da smanjuje početnu vrijednost. Uslov, petlja mora da se vrti –
ponavlja do 1, pa mora biti oblika i>=1 ili i>0.
#include <iostream>
using namespace std;
int main(){
int i;
for(i=10; i>=1; i--)
cout<<i<<endl;
return 0;
}
Primjer 22. Napisati program koji ispisuje sve parne brojeve između 1 i 15.
Rješenje. Početna vrijednost-izraz1 će nam biti sada i=2 jer je 2 prvi parni broj koji se nalazi
u zadanom intervalu. Uslov će biti i<15, a izraz2 tj. korak će biti i=i+2. Sljedeći parni broj
48 poslije 2 je 4, pa 6, 8, itd. Da bi dobili 4 moramo na 2 tj. početnu vrijednost dodati 2. Isto tako
da bi dobili 6 od 4, moramo na 4 dodati 2, itd., zbog toga mora biti oblika i=i+2. Pojasnimo
malo ovaj izraz. On znači da onu vrijednost koju ima i povećamo za 2, pa novu vrijednost
pridružimo varijabli i. Stara vrijednost se obriše, a nova upiše.
#include <iostream>
using namespace std;
int main(){
int i;
for(i=2; i<15; i=i+2)
cout<<i<<endl;
return 0;
}
Primjer 23. Napisati program koji ispisuje sve brojeve od 1 do 100 koji su djeljivi sa 7.
Rješenje. Ovakav zadatak na prvi pogled se može učiniti teškim. No, vidjet ćemo da nije tako.
Kako trebamo za svaki broj od 1 do 100 provjeriti je li djeljiv sa 7, to nam odmah sugerira da
trebamo koristiti for petlju, jer za svaki broj trebamo uraditi isto. To isto je provjeriti je li
djeljiv s 7 odnosno provjeriti da li je ostatak pri dijeljenju tog broja sa 7 jednak nuli.
Dakle, izraz1 u petlji će nam biti i=1 (mada smo mogli i staviti i=7, ali neka ostane i=1 jer
još uvijek smo početnici). Uslov će biti i<=100. Izraz2-korak će biti 1 odnosno i++. Ostaje
još da odredimo šta će biti u petlji tj. koje će se to naredbe ponavljati. Za svaki broj moramo
naći ostatak i ispitati da li je jednak nuli. Ako jeste ispisati ga. Dakle, to je uslov za if (ako)
naredbu.
#include <iostream>
using namespace std;
int main(){
int i;
for(i=1; i<=100; i++)
if(i%7==0)cout<<i<<endl;
return 0;
}
Primjer 24. Napisati program koji će sabrati sve prirodne brojeve od 1 do 100.
Rješenje. Od anegdota o poznatim matematičarima možda je najčešće prepričavana ona o
velikom matematičaru Karlu Friedrichu Gaussu, iz doba njegova djetinjstva: Jednom zgodom
49 učitelj đacima dade u zadatak neka izračunaju zbir prvih stotinu prirodnih brojeva. Očekivao
je kako će ga djeca, zadubljena u rješavanje, neko duže vrijeme ostaviti na miru, no nemalo se
iznenadio kada je već nakon nekoliko trenutaka mali Gauss javio tačan rezultat.
Zadatak ćemo riješiti upotrebom for petlje, jer trebamo sabrati brojeve 1, 2, 3, ... , 100. Dakle,
imamo ponavljanje. Početna vrijednost (izraz1) će biti i=1. Uslov i<=100. Izraz2 (korak)
i++. Ovo je za sada bilo lahko. Ostaje još da odredimo, šta će to biti u for petlji tj. da
napišemo izraz (formulu) koja će sabirati te brojeve. Prvo ćemo uzeti i deklarirati još jednu
varijablu kojoj ćemo dati ime zbir. Pošto sabiramo samo prirodne brojeve, ona će biti tipa
int. U ovoj varijabli ćemo čuvati naš rezultat (zbir). Varijablu zbir ćemo odmah i
inicijalizirati tj. pridružiti (spremiti, skladištiti) joj broj 0. Ovo činimo zbog toga što varijabla
ima neku vrijednost, obično broj u memoriji, pa bi dobili pogrešan rezultat. Naredba koja će
sabirati brojeve i ujedno čuvati rezultat je
zbir=zbir+i;
#include <iostream>
using namespace std;
int main(){
int i, zbir=0;
for(i=1; i<=100; i++)
zbir=zbir+i;
cout<<zbir<<endl;
return 0;
}
Razmotrimo sada rješenje korak po korak da vidimo kako to funkcionira. Računar dolazi do
for petlje. Početna vrijednost je i=1. Potom provjerava da li je uslov zadovoljen (tačan) tj.
računa i<=100 kad uvrsti i=1 je 1<=100 tačno. Zatim ulazi u for petlju i izvršava naredbu
zbir=zbir+i; tj. kad uvrstimo zbir=0+1 odnosno zbir=1. Pošto u for petlji nema više
naredbi osim prethodne, tada se izvršava izraz2 tj. i++ odnosno i=i+1 tj. i=1+1=2.
Ovo je bio prvi korak u for petlji. Sada ide drugi. Provjerava se uslov: i<=100. Sada je i=2, a
ne 1. Pa je 2<=100 tačno. Ulazi se u for petlju i izvršava naredba zbir=zbir+i=1+2=3. Pazite,
varijabla zbir je u prvom koraku promijenila svoju vrijednost iz 0 u 1. Sada se opet izvrši
izraz2 tj. i postaje i=i+1=2+1=3.
Sada bi išao korak 3, pa 4, 5, itd do 100. Vidimo da naredba zbir=zbir+i zapravo znači:
1+2+3+...+100
Na kraju moramo još ispisati rezultat tj. vrijednost varijable zbir.
50 Primjer 25. Napisati program koji će izračunati (prebrojiti) koliko ima prirodnih brojeva
između 1 i 1000, a koji su djeljivi sa 19.
Rješenje. Ovo je sličan zadatku koji smo prije uradili a tražilo se da ispišemo sve brojeve
djeljive sa 7 između 1 i 100. Brojeve nećemo ispisivati već ćemo izbrojati koliko ih ima.
Kako ćemo to uraditi? Tako što ćemo deklarirati i incijalizirati varijablu s imenom brojac
(može naravno i neko drugo ime) tj. int brojac=0; . Odmah varijablu brojac stavljamo na
vrijednost 0, jer kad nađemo prvog koji je djeljiv s 19, odnosno kad uslov u naredbi if bude
tačan, varijablu povećamo za 1. Pa kad nađemo drugog opet varijablu povećamo za 1. Tu
radnju možemo jednostavno zapisati sa brojac++; ili brojac=brojac+1;. Na kraju ostaje još
samo da ispišemo koliko ih ima.
#include <iostream>
using namespace std;
int main(){
int i, brojac=0;
for(i=1; i<=1000; i++)
if(i%19==0) brojac++;
cout<<brojac<<endl;
return 0;
}
Primjer 26. Napisati program koji učitava prirodan broj i ispisuje poruku da li je taj broj
savršen. (Broj je savršen ako je jednak zbiru svih svojih djelitelja manjih od njega samog, npr.
djelitelji od broja 6 su 1, 2, i 3 te vrijedi 1+2+3=6 ili za 28=1+2+4+7+14).
Rješenje. Ovo je malo teži primjer, jer zahtjeva od nas da kombiniramo prethodne primjere. U
zadatku se od nas traži da provjerimo da li je uneseni prirodan broj savršen. Dajmo ime tom
broju n tj. int n;. Iz definicije savršenog broja slijedi da trebamo naći sve djelitelje unesenog
broja manje od njega samog (to znamo iz prethodnih primjera) i kako kojeg nađemo ujedno ih
sabiramo (to također znamo iz primjera gdje je trebalo sabrati prvih 100 prirodnih brojeva).
Kako će sada izgledati for petlja. Znamo da je izraz1 jednak i=1. Uslov: djelimo sve do
unesenog broja tj. i<n. Izraz2 je i++. Ostaje još samo da vidimo da li je taj zbir jednak
unešenom broju, ako jeste broj je savršen, inače nije.
51 #include <iostream>
using namespace std;
int main(){
int i, n, zbir=0;
cout<<"Unesite prirodan broj: ";
cin>>n;
for(i=1; i<n; i++)
if(n%i==0) zbir=zbir+i;
if(n==zbir) cout<<"Broj je savrsen."<<endl;
else cout<<"Broj nije savrsen."<<endl;
return 0;
}
Primjer 27. Napisati program koji ispisuje sve savršene brojeve koji se nalaze između 1 i
1000.
Rješenje. Ovaj primjer ćemo iskoristiti da demonstriramo kako se koristi petlja u petlji. Jer i u
for petlji može biti jedna ili više for petlji. Također, isto može biti i unutar tih petlji. Iz
prethodnog primjera znamo kako se traži (provjerava) da li je broj savršen. Sada to moramo
uraditi za svaki broj od 1 do 1000. Dakle, trebaće nam for petlja koja ima početnu vrijednost
izraz1 n=1. Uslov: n<=1000, a izraz2 je n++. Unutar ove petlje će biti for petlja iz
prethodnog primjera. Prije nje ćemo morati staviti da je zbir=0; tj. moramo za svaki broj na
ovaj način prije ulaska u drugu petlju resetirati varijbalu zbir odnosno njenu vrijednost.
Unutar te petlje će biti i provjera da li je zbir jednak n tj. ako jeste ispisaćemo broj n, jer je
on tada savršen broj. Pošto ćemo u toj vanjskoj petlji imati tri naredbe: zbir=0; for petlju iz
prethodnog primjera i provjeru je li zbir jednak n, to ćemo ih morati staviti u vitičaste
zagrade.
#include <iostream>
using namespace std;
int main()
{
int i, n, zbir;
for(n=1; n<=1000; n++){
zbir=0;
for(i=1; i<n; i++)
if(n%i==0) zbir=zbir+i;
if(n==zbir) cout<<n<<endl;
}
return 0;
}
52 Primjer 28. Napisati program za ispis prirodnih brojeva od 1 do n.
Rješenje.
#include <iostream>
using namespace std;
int main()
{
int i, n;
cin>>n;
for(i=1; i<=n;i++)
cout<<i<<endl;
Za unos 5 return 0;
}
4.5.2. Zadaci za samostalan rad
Zadatak 34. Napisati program koji će ispisati sve neparne brojeve od 1 do 20.
Zadatak 35. Napisati program koji će ispisati brojeve 10, 20, 30, ... , 100.
Zadatak 36. Napisati program koji ispisuje prirodne brojeve od 5 do 20 unazad.
Zadatak 37. Napisati program koji će ispisati sve brojeve između 1 i 100, koji su djeljivi s
11.
Zadatak 38. Napisati program koji će sabrati sve parne brojeve od 1 do 200.
Zadatak 39. Napisati program za ispis zbira prvih 50 prirodnih brojeva.
Zadatak 40. Napisati program koji će ispisati tri višekratnika (sadržioca) broja 15 uz uslov da
su veći od 50. (Višekratnici ili sadržioci prirodnog broja su svi brojevi koji su djeljivi s tim
brojem)
Zadatak 41. Napisati program za ispis zbira prirodnih brojeva manjih od 500, a djeljivih sa 3
i ispisati koliko takvih brojeva ima. (Rj. zbir=41583, a ima ih 166)
Zadatak 42. Napisati program koji će ispisati višekratnike (sadržioce) unijetog broja n. Broj n
mora biti veći od 5 i manji od 20. Ispisuju se samo višekratnici koji su manji od 150.
Zadatak 43. Napisati program koji ispisuje sve parne brojeve koji se nalaze između brojeva
A i B. Svaki parni broj se ispisuje u novom redu. Brojevi A i B se unose.
Zadatak 44. Napisati program koji sabira sve višekratnike broja 7 koji se nalaze između
zadanih brojeva A i B. Ako između zadanih brojeva nema višekratnika broja 7, ispišite
poruku „Nema traženih visekratnika“.
Zadatak 45. Napisati program koji provjerava da li je unešeni broj prost broj. (Broj
prost ako je djeljiv samo s 1 i sa samim sobom)
Zadatak 46. Napisati program koji će ispisati zbir kvadrata brojeva od 1 do n.
53 1 je
Zadatak 47. Napisati program koji će ispisati sumu (zbir) prirodnih brojeva u intervalu od 1
do n koji su djeljivi sa 3 i sa 7.
Zadatak 48. Napisati program koji će ispisati zbir prirodnih brojeva u intervalu od 1 do n čija
je cifra jedinica 8.
Zadatak 49. Napisati program za izračunavanje proizvoda od 1 do 5.
Zadatak 50. Napisati program za ispis aritmetičke sredine parnih prirodnih brojeva do n.
Zadatak 51. Napisati program koji će izračunati zbir dvocifrenih brojeva kod kojih je zbir
cifara manji od 7.
Zadatak 52. Napisati program koji će ispisati sve dvocifrene brojeve sa drugom cifrom
većom od 6.
Zadatak 53. Napisati program koji će ispisati dvocifrene brojeve kod kojih pri djeljenju sa 3
je ostatak 2.
4.5.3. While petlja
Petlja while se koristi za ponavljanje dijela koda programa kod kojeg broj ponavljanja nije
unaprijed poznat. Dakle, kada ne znamo da li će se pri svakom pokretanju programa ili
petlje while ona izvršiti jednom, dva puta ili deset puta ili pak nijednom. While petlju
možemo koristiti i kada je broj ponavljanja poznat.
Opći oblik while naredbe je:
while ( uslov ) naredba;
Kada računar dođe do while petlje on prvo se provjerava uslov. Ako je uslov (koji mora biti
logički izraz) tačan, izvršava se naredba. Potom se opet provjerava uslov, pa ako je tačan,
izvršava se naredba. Ciklus tj. petlja se završava kada vrijednost uslova postane logička
neistina tj. netačan. Dakle, naredba while se izvršava sve dok je uslov tačan. Treba uočiti
da se može desiti da naredba ne bude nijednom izvršena, ako pri prvoj provjeri uslov, bude
netačan.
Kao i kod for petlje, ako imamo dvije ili više naredbi koje pripadaju while naredbi, onda se
one pišu u vitičastim zagradama tj. u bloku. Rijedak je slučaj kada ćemo koristiti načine
pisanja 1 i 2, većinom 3 ili 4.
54 Načini pisanja while naredbe:
1) while ( uslov ) naredba;
2) while ( uslov )
naredba;
3) while ( uslov )
4) while ( uslov ){
{
}
naredba1;
naredba2;
...
naredba n;
}
naredba1;
naredba2;
...
naredba n;
Primjer 29. Napisati program koji će ispisati brojeve od 1 do 10.
Rješenje. Uzeli smo ovaj lagan zadatak da demonstriramo kako to radi while petlja. Prvo što
trebamo je odrediti je uslov. On treba biti tačan sve dok se ne ispišu svi brojevi. Pošto je
zadnji 10, onda će biti i<=10, gdje smo uzeli varijablu i, te joj odmah pri deklaraciji dali
vrijednost 1, jer je 1 prvi broj koji će se ispisati. Brojeve će ispisivati naredba cout koja će
biti u while petlji. Ostaje još da definiramo šta će nam biti brojač tj. naredbu koja će mijenjati
vrijednost varijable i, da bi uslov nakon ispisa broja 10 bio netačan tj. da bi se while petlja
završila. Kako se brojevi trebaju ispisivati po redu 1, 2, 3, itd to ćemo očito i povećavati za 1.
Pa će brojač biti oblika i=i+1 ili i++.
#include <iostream>
using namespace std;
int main()
{
int i=1;
while(i<=10)
{
cout<<i<<endl;
i++;
}
return 0;
}
Primjer 30. Napisati program koji učitava prirodan broj i ispisuje mu cifre počevši od cifre
najmanje mjesne vrijednost (cifre jedinica) i to svaku u novom redu.
Rješenje. Trebamo unijeti jedan prirodan broj i ispisati mu cifre, svaku u novom redu, počevši
od cifre jedinica. Pošto, ne znamo, koji će broj korisnik unijeti tj. da li će to biti jednocifren,
dvocifren ili pak petocifren broj, koristimo while petlju. Da lakše odredimo šta će biti uslov i
koje će se naredbe nalaziti u while petlji, posmatrajmo jedan konkretan broj npr. 629. Kako
sada dobiti zadnju cifru od broja 629? Tako što ćemo koristiti operator modulo – ostatak pri
55 cjelobrojnom dijeljenju (%). Pa će biti 629%M=9, gdje je M, koji broj? Kako ga odrediti?
Pošto je 9 ostatak, to će očito biti 620 + 9, sada se jasno vidi da je 620=62*10
629 = 620 * 10 + 9
Dakle, M je broj 10. Pa će nam 629%10 dati cifru 9. Kako dobiti drugu cifru? Kada bi imali
broj 62, onda bi bilo lahko. Opet bi napisali 62%10, a to je 2, i dobili bi drugu cifru. Možemo
li kako od broja 629 dobiti broj 62? Imajte na umu da mi radimo s cijelim brojevima i da
ćemo koristiti tip int. Podijelimo broj 629 sa 10. To će dati 62,9. Kako već rekoh, mi ćemo
koristiti tip int, za broj koji bude unosio korisnik, pa će računar odbaciti dio poslije zareza, pa
će ostati samo 62. Sada primjenimo modulo tj. 62%10=2. Kako dobiti treću cifru? Pa na isti
način kao i drugu. Podijelimo 62 sa 10. Dobićemo 6,2. Računar će odbaciti dio poslije zareza,
jer radimo s cijelim brojevima i ostaće broj 6. Konačno, 6%10=6 i tako smo dobili sve tri
cifre. Ako podijelimo još broj 6 sa 10 dobit ćemo 6/10=0,6 tj. 0 jer će računar odbaciti dio
poslije zareza. Dakle, podijelimo li sa 10 još i zadnju cifru (onu koja je ostala zadnja pri
prethodno opisanom načinu ispisivanja cifri broja), uvijek ćemo dobiti broj 0. Stoga će se
petlja ponavljati sve dok je uslov različit od nule.
Šta se je u prethodnom objašnjenju ponavljalo?

tražili smo modulo 10

dijelili smo sa 10
Dakle, označimo s n prirodan broj kojeg unosi korisnik tj. int n;. Naredbe koje će biti u
while petlji su:
cout<<n%10<<endl;
n=n/10;
Uslov je oblika n!=0 jer kad zadnji broj (unašem primjeru broj 6) podijelimo s 10 dobićemo
0, pa dok je god n različito od 0 (nije nula), izvršavat će se while petlja.
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n!=0)
{
cout<<n%10<<endl;
n=n/10;
}
return 0;
}
56 Za unos 629 Testirati program i za jednocifren i dvocifren broj, jer se može desiti da recimo za sve brojeve
daje ispravan rezultat, osim za jednocifrene.
Primjer 31. Napisati program za sabiranje brojeva. Brojevi se unose s tastature. Kada korisnik
unese broj 0, program se završava.
Rješenje.
#include <iostream>
using namespace std;
int main(){
int i, zbir = 0;
cout<< "Unesite broj: ";
cin >> i;
while(i!=0){
zbir=zbir+i;
cout<<"Unesite broj: ";
cin>>i;
}
cout<<"Zbir je "<<zbir<<endl;
return 0;
}
4.5.4. Petlja do while
Naredba do while se također koristi kada nam nije poznat broj ponavljanja, ali za razliku od
for i while petlje ovdje se naredba izvrši bar jednom. Pošto, se kod ove petlje prvo izvrši
naredba, pa se onda provjeri uslov, a kod for i while petlje se prvo provjeri uslov, pa se
izvršavaju naredbe.
Opći oblik do while naredbe je:
do naredba; while(uslov);
ZAPAMTITI: Na kraju obavezno staviti ;
Načini pisanja do while naredbe:
1) do naredba; while(uslov);
2) do
naredba;
while(uslov);
3) do
{
4) do {
naredba1;
naredba2;
...
naredba n;
} while( uslov);
naredba1;
naredba2;
...
naredba n;
}
while(uslov);
57 4.5.5. Naredba break
Iskakanje iz upravljačke strukture se postiže naredbom:
break;
Time se postiže završetak ciklusa (petlje): for, while, do while, skakanjem na prvu naredbu
neposredno iza petlje. Nekad ćete doći u situaciju da želite izađi iz petlje prije nego se završi
tada obično koristite naredbu break.
4.5.6. Zadaci za samostalan rad
Zadatke rješavati upotrebom while petlje.
Zadatak 54. Napisati program za ispis kvadrata prirodnih brojeva od 1 do 5..
Zadatak 55. Napisati program za ispis prirodnih brojeve od 5 do 20 unazad.
Zadatak 56. Napisati program za ispis kvadratnog korijena prirodnih brojeva do 10.
Zadatak 57. Napisati program za ispis prirodnih brojeva od 1 do n.
Zadatak 58. Napisati program za ispis parnih prirodnih brojeva od 1 do n.
Zadatak 59. Napisati program za ispis proizvoda brojeva od 1 do n koji su djeljivi sa 7.
Zadatak 60. Napisati program za brojanje brojeva djeljivih sa 3, za prirodne brojeve od 1 do
n.
5. NIZOVI (POLJA)
Pretpostavimo da trebamo riješiti zadatak u kojem se od nas traži da unesemo npr. 100-tinu
cijelih brojeva. Tada bi za svaki broj trebali po jednu varijablu. Ako bismo uzeli imena slova
abecede a, b, c, itd brzo bi ih potrošili. Mogli bi pisati a1, a2, a3, itd. No, ni ovo nije prikladno
rješenje, jer ne zaboravimo da treba napisati 100-tinu varijabli prilikom deklaracije, pa onda i
kad ih budemo unosili. Postavlja se pitanje, ima li lakšeg i jednostavnijeg način? Ima,
upotrebom nizova ili polja. Šta je to niz?
Niz ili polje je konačni niz podataka istog tipa koji predstavljaju cjelinu.
Primjer 32. Sljedeći brojevi predstavljalju niz:
1, 2, 3, 4, 5, 6, 7, 8 , 9 10
1, 3, 5, -1, 3, 1, 8, 9, 7, 0
1, 1, 1, 1, 1, 1, 1, 1, 1, 1
58 Svi su istog tipa tj. int odnosno cijeli brojevi.
Također, niz može biti sastavljen i od znakova:
a, b, c, d, e, f
a1, a2, a3, a4
arif, elma, murat, omer
Dakle, niz se sastoji od podataka istog tipa. Podaci u nizu se nazivaju elementi (članovi)
niza. Naprimjer u nizu a, b, c, d, e, f elementi (članovi) niza su slova i to slovo a je jedan
element, drugi element je slovo b itd.
Elementi niza se identifikuju pomoću rednog broja unutar niza tj. položaj (mjesto) u nizu je
određeno pomoću rednog broja. Ti redni brojevi nazivaju se indeksi elementa niza.
Prvi element niza u C++ ima obavezno indeks 0, drugi 1, treći 2, itd.
Tako npr. u nizu
a, b, c, d, e, f
slovo a se nalazi na mjestu 0 odnosno ima indeks 0, slovo b indeks 1, c indeks 2, d indeks 3, e
indeks 4 i f indeks 5.
Nizovi mogu biti:

jednodimenzionalni

višedimenzionalni.
Mi ćemo u našoj skripti raditi samo jednodimenzionalne nizove. To su nizovi navedeni u
prethodnom primjeru.
5.1. Jednodimenzionalni nizovi
Sve prethodno što smo rekli vrijedi za jednodimenzionalni niz. Kada kažemo niz, u daljem
tekstu mislimo na jednodimenzionalni niz, da ne bi stalno pisali riječ jednodimenzionalni.
U C++ niz definiramo na sljedeći način:
tip_elementa ime_niza [dužina niza]
Prvo navodimo tip elemenata niza. Pišemo int, ako će elementi biti cijeli brojevi, double ako
će elementi biti realni brojevi, char ako će elementi biti znakovi, itd, isto kao i za varijable.
Drugo pišemo ime niza. Kao i kod varijabli, ime vi dajte i sami birate kako će biti.
Obavezno idu srednje zagrade [], koje se dobiju pritiskom tipki Alt Gr + F i Alt Gr + G.
59 Unutar srednjih zagrada se navodi broj, koji označava dužinu niza tj. govori koliko će niz
imati elemenata.
Primjer 33.
int dan[5];
Na ovaj način smo definisali (deklarirali) niz čije ime je dan, a koji ima pet elemenata tipa
int. Imati na umu da indeksi (mjesta) elemenata niza idu od 0 tj. indeksi su 0, 1, 2, 3, 4.
double A[10];
Na ovaj način smo definisali niz čije je ime A i koji ima deset elemenata tipa double.
char slova[30];
Na ovaj način smo definisali niz čije je ime slova, a ima 30 elemenata tipa char.
Elementima (članovima) deklariranog niza mogu se pridružiti vrijednosti. Pridruživanje
vrijednosti elementu niza:
ime_niza [ indeks elementa] = vrijednost
Primjer 34.
niz [3] = 1;
Na ovaj način smo elementu niza čiji je indeks 3 (pozicija ili mjesto u nizu 3) pridružili
vrijednost 1.
Možemo odmah prilikom deklaracije izvršiti inicijalizaciju niza. Vrijednosti se navode unutar
para vitičastih zagrada, odvojene zarezom.
Primjer 35.
int a[5]= {9, 5, 4, -1, 1}
Sada smo svakom elementu niza pridružili određenu vrijednost.
60 Kako dobiti npr. broj 4 iz niza? Dobićemo ga tako što napišemo ime niza i u srednjim
zagradama indeks (poziciju, mjesto) gdje se broj 4 nalazi tj.:
a[2]
Pogledajmo kako to u tabeli izgleda za svaki element prethodnog niza:
9
a[0]
5
a[1]
4
a[2]
-1
a[3]
1
a[4]
Elemente niza najčešće unosimo for petljom ili while petljom.
Oprez!
U radu s nizovima treba biti oprezan, jer jezik C++ ne provjerava granice niza prilikom
pristupa elementima (članovima) niza. Ako se navede prevelik ili negativan indeks,
prevoditelj neće javiti pogrešku i pri izvršavanju programa pristupit će se memorijskoj adresi
koja nije u području rezerviranom za niz. To će prouzročiti neispravan rad programa. Ako se
izdvaja (dohvaća) element (član) s nedozvoljenim indeksom, rezultat je slučajni broj. Ako se
vrijednost pridružuje članu s nedozvoljenim indeksom, vrijednost će se pohraniti u memoriju
na mjesto predviđeno za druge sadržaje što će vjerojatno prouzročiti pogrešan rad programa.
Primjer 36. Brojeve 1, 5, -1, 4, 5 spremiti u niz broj, te ih ispisati na ekran svaki u novom
redu.
Rješenje.
#include <iostream>
using namespace std;
int main()
{
int a[5]={1, 5, -1, 4, 5};
cout<<a[0]<<endl;
cout<<a[1]<<endl;
cout<<a[2]<<endl;
cout<<a[3]<<endl;
cout<<a[4]<<endl;
return 0;
}
Ovakav način ispisa elemenata niza se koristi samo ako elemenata niza ima malo. Većinom se
koristi for petlja. Jer kako vidimo iz rješenja zadatka dio cout<<a[]<<endl; se ponavlja dok
se samo broj u srednjoj zagradi mijenja.
Prethodni primjer sa for petljom:
61 #include <iostream>
using namespace std;
int main()
{
int i, a[5]={1, 5, -1, 4, 5};
for(i=0;i<5;i++)
cout<<a[i]<<endl;
return 0;
}
Obratiti pažnju na početnu vrijednost, da je i=0 (element s indeksom 0, prvi u nizu), uslov
i<5 mada se je moglo napisati i<=4, ali je prvi način bolji.
Primjer 37. Napisati program koji unosi 10 cijelih brojeva, i ispisuje ih obrnutim redosljedom
u jednom redu s praznim razmakom.
Rješenje. Deklariramo niz tipa int, imena a, dužine 10. Koristimo for petlju za unos brojeva.
Drugu for petlju koristimo za ispis brojeva, s tim da je onda početna vrijednost najveći indeks.
#include <iostream>
using namespace std;
int main()
{
int i, a[10];
for(i=0;i<10;i++)
cin>>a[i];
for(i=9;i>=0;i--)
cout<<a[i]<<" ";
return 0;
}
NAPOMENA: Sasvim je svejedno da li ćete prvo napisati sve brojeve koje unosite s
razmakom obavezno, pa pritisnuti tipku Enter ili ćete napisati prvi broj, pa Enter, drugi broj
pa Enter, itd.
Primjer 38. Napisati program koji će učitati elemente (članove) niza i sortirati ih po rastućem
redoslijedu. (5 članova niza)
Rješenje.
62 #include <iostream>
using namespace std;
int main()
{
int i,j,m;
int a[5];
for(i=0; i<5; i++)
cin>>a[i];
for(i=0; i<4; i++)
for(j=i+1; j<5; j++)
if(a[i]>a[j])
{
m=a[i];
a[i]=a[j];
a[j]=m;
}
for(i=0; i<5; i++)
cout<<a[i]<<" ";
return 0;
}
Razmotrimo rješenje ovog zadatka, da bi shvatili kako sortiranje funkcionira. Kao što vidite
potrebna nam je jedna petlja za unos i jedna za ispis niza. Za rješenje traženog problema
trebaju nam dvije for petlje i to jedna u drugoj. Pojasnimo to na primjeru niza 2, 1, 3, 0, 4.
Prva for petlja
for(i=0; i<4; i++)
uzme prvi element 2 i pomoću druge petlje
for(j=i+1; j<5; j++)
upoređuje ga s ostalim elementima niza. Tako druga petlja prvo uporedi 2 i naredni element
(j=i+1), a to je 1. To radi dio
if(a[i]>a[j])
Ako je to tačno, što u našem slučaju jeste, jer je 2>1, onda ovaj dio u if naredbi
m=a[i];
a[i]=a[j];
a[j]=m;
napravi zamjenu. Broj dva stavi u varijablu m, a na njegovo mjesto stavi broj 1. Zatim, na
mjesto broja 1 stavi broj 2. Varijabla m nam treba da se ne bi broj 2 obrisao kad se na njegovo
mjesto stavlja broj 1. S varijablom m mi broj 2 privremeno premjestimo s tog mjesta da bi ga
sačuvali. Nakon toga niz izgleda ovako 1, 2, 3, 0, 4. Druga petlja, ide dalje pa uzima sljedeći
broj 3 i sad upoređuje s a[i], to je a[0], a to je sad 1. Pošto 1>3, nije tačno, ide na sljedeći broj,
a to je 0. Kako je 1>0, tačno, opet na isti način pravi zamjenu, pa niz izgleda ovako 0, 2, 3, 1,
4. Sad upoređuje a[0] tj. 0 sa 4. Pošto 0>4 nije tačno, ništa se neće desiti. Prva for petlja je
63 imala vrijednost i=0 i ona se je izvršila samo jednom, a druga se je izvršila do kraja. Rezultat
toga je da na prvom mjestu u nizu imamo najmanji broj. Sada se prva pomjera za 1 tj i postaje
1, pa a[i] tj. a[1] uzima drugo mjesto i poredi ga sa ostalim elementima u nizu. Ponavlja se
čitav prethodni postupak. Kad se izvrši druga petlja, na drugom će mjestu biti najmanji broj
od preostalih elemenata niza. I tako će niz biti sortiran. U prvoj petlji uslov je i<4, jer onaj
koji zadnji ostane je i najveći, ali nebi pogriješili kad bi stavili i<5, samo bi računar imao
malo više posla.
5.2. Zadaci za samostalan rad
Zadatak 61. Napisati program koji će učitati niz od 7 cijelih brojeva i sortirati ih od najvećeg
ka najmanjem tj. sortirati ih po opadajućem redosljedu.
Zadatak 62. Napisati program koji će učitati niz od 10 cijelih brojeva i ispisati koliko ima
učitanih negativnih brojeva.
Zadatak 63. Napisati program koji će učitati niz od 8 prirodnih brojeva i ispisati njihovu
aritmetičku sredinu.
Zadatak 64. Napisati program koji će učitati niz od 10 cijelih brojeva i ispitati da li zbir tih
brojeva djeljiv sa 11.
6. STRING
Niz znakova, string, zauzima u memoriji jedan ili više bajtova koji su kontinuirano smješteni.
String u C++ možemo posmatrati kao niz (polje) tipa char. Oznaka kraja stringa, odnosno
posljednji znak svakog stringa je nul znak \0. Prema tome, za string od n znakova potrebno je
n+1 memorijsko mjesto. U niz dužine n znakova možemo pohraniti string maksimalne dužine
od n-1 znaka.
Primjer 39.
Neka je s="Jezik C++". Prikaz stringa s u memoriji bit će:
J
e
z
i
k
s[0]
s[1]
s[2]
s[3]
s[4]
s[5]
C
+
+
\0
s[6]
s[7]
s[8]
s[9]
Pojedinom znaku stringa s moguće je pristupiti i navođenjem njegove pozicije – indeksa u
stringu. Tako je npr. s[4]=k.
64 6.1. Deklaracija stringa
String (niz znakova) deklariramo isto kao i niz s tim da je obavezno tipa char:
char ime [maks_broj_znakova];
ili
char ime[] = inicijalan_sadržaj_stringa;
Primjer 40.
char A[80];
char tekst[]="Jezik C++"
NAPOMENA: Niz znakova je tipa char, ime mu dajemo po želji, a u srednjim zagradama
navodimo koliko ćemo znakova unijeti s tim da moramo voditi računa da na zadnjem mjestu
uvijek dođe nul znak \0 kao oznaka kraja. Računar stavlja nul znak \0, ne vi.
Primjer 41. Napišimo program koji će unositi jednu riječ i ispisivati je, te ispisati prvo slovo
je riječi.
Rješenje.
Za unos dan #include <iostream>
using namespace std;
int main()
{
char rijec[20];
cin>>rijec;
cout<<rijec<<endl;
Za unos dan je lijep cout<<rijec[0]<<endl;
return 0;
}
ZAKLJUČAK: Naredbom cin možemo unijeti samo jednu riječ tj. znakove do prvog
razmaka.
6.2. Čitanje i ispisivanje znakova
Sljedeće funkcije koje ćemo navesti su iz programskog jezika C, no možemo ih koristiti i u
C++, obzirom da je njihova upotreba za početnika jednostavnija.
Da bismo koristili sljedeće funkcije moramo uključiti biblioteku
#include<cstdio>
65 getchar()
putchar(c)
gets(s)
puts(s)
Ova funkcija čita jedan znak, uključujući i bijele znakove, sa glavnog
ulaza(tastature).
Vrijednost funkcije je kod pročitanog znaka ili simbolička konstanta EOF
(end of line) ukoliko je pročitan signal za kraj datoteke kao i u
slučaju greške tokom čitanja. Rezultat je tipa int.
Ova funkcija ispisuje znak c (jedan znak) na glavni izlaz (ekran). Tip
argumenta je int.
Ova funkcija učitava jedan red teksta (do znaka za prelazak u novi red
\n) sa glavnog ulaza (tastature) i smješta ga u s (tipa char[],
odnosno char*). Umjesto znaka \n u niz s stavlja prazan znak \0.
Ova funkcija ispisuje sadržaj niza s (tipa char[], odnosno
char*)do završnog znaka \0 kao red teksta na glavnom izlazu, dodajući
znak za prelazak u novi red \n. Ako tekst sadrži više znakova \n,
rezultat će biti više ispisanih redova. Vrijednost funkcije je tipa int t,
nenegativan broj.
Primjer 42. Napišimo program koji će učitati jedan red teksta (jednu rečenicu ili riječ) i
ispisati ga na ekran monitora. Kao i u prethodnom primjeru ispisat ćemo prvo slovo.
Rješenje.
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char rijec[20];
gets(rijec);
putchar(rijec[0]);
cout<<endl;
puts(rijec);
return 0;
}
Za unos dan je lijep 6.3. Ispitivanje znakova
Funkcije za ispitivanje znakova određuju u koju kategoriju znakova (slovo, cifra, itd) spada
dati znak. Vrijednost svih sljedećih funkcija je tipa logical, a tip argumenta je int (vrijednost
treba da je kod nekog znaka).
Za logičku istinu daju neku nenultu vrijednost, a ne obavezno vrijednost 1, kao što daju
relacijski i logički operatori. Da biste koristili sljedeće funkcije morate napisati u zaglavlju
#include<cctype>
66 isalnum(c)
Da li je c slovo ili broj (cifra) ?
isalpha(c)
Da li je c slovo?
islower(c)
Da li je c malo slovo?
isupper(c)
Da li je c veliko slovo?
isdigit(c)
Da li je c cifra?
isspace(c)
Da li je c bijeli znak?
Pretvaranje velikih slova u mala i obratno
tolower(c)
Ako je c veliko slovo, vijednost funkcije je kod odgovarajućeg malog
slova.
toupper(c)
Ako je c malo slovo, vijednost funkcije je kod odgovarajućeg velikog
slova.
Obavezno naučiti one koje su označene sivom podlogom. Sada ćemo navesti primjer za svaku
funkciju kako se upotrebljava.
Primjer 43. Napisaćemo program koji broji koliko je brojeva u rečenici..
Rješenje.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char rijec[]="Dan 15, mjesec 6, godina 2014";
int i=0;
while(isalnum(rijec[i])) i++;
cout<<"Brojeva ima ukupno "<<i<<endl;
return 0;
}
67 Primjer 44. Napisaćemo program koji ispitiva da li je neki znak slovo ili nije.
Rješenje.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char rijec[]="C++";
int i=0;
while(rijec[i])
{
if(isalpha(rijec[i]))
cout<<"Znak "<<rijec[i]<<" je slovo"<<endl;
else cout<<"Znak "<<rijec[i]<<" nije slovo"<<endl;
i++;
}
return 0;
}
ZAKLJUČAK: U programu dio
while(rijec[i])
će se završiti kada
rijec[i]
postane
netačno, a to će se desiti poslije drugog znaka +, jer smo rekli da je zadnji znak nul znak \0
(NULL) u svakom nizu, a što znači netačno.
Primjer 45. Napisaćemo program koji ispitiva koliko u nizu znakova ima malih, a koliko
velikih slova.
Rješenje.
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char rijec[]="KaMeNicA";
int i=0, m=0, v=0;
while(rijec[i])
{
if(islower(rijec[i])) m++;
if(isupper(rijec[i])) v++;
i++;
}
cout<<"Malih slova je "<<m<<endl;
cout<<"Velikih slova je "<<v<<endl;
return 0;
}
68 Primjer 46. Napisaćemo program koji ispitiva koliko u nizu znakova ima cifara.
Rješenje.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char rijec[]="2014 godina";
int i=0, c=0;
while(rijec[i])
{
if(isdigit(rijec[i])) c++;
i++;
}
cout<<"Cifara ima "<<c<<endl;
return 0;
}
Primjer 47. Napisaćemo program koji ispitiva koliko u nizu znakova ima bijelih znakova tj.
koliko ima razmaka.
Rješenje.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char rijec[]="To je to";
int i=0, bz=0;
while(rijec[i])
{
if(isspace(rijec[i])) bz++;
i++;
}
cout<<"Bijelih znakova ima "<<bz<<endl;
return 0;
}
69 Primjer 48. Napisaćemo program koji pretvara mala u velika i velika u mala slova.
Rješenje.
#include <iostream>
#include <cctype>
#include<cstdio>
using namespace std;
int main()
{
char a[]="Grad Bihac";
char b[]="SARAJEVO";
int i=0;
while(a[i]!=NULL)
{
}
a[i]=toupper(a[i]);
i++;
i=0;
while(b[i]!=NULL)
{
}
b[i]=tolower(b[i]);
i++;
puts(a);
puts(b);
return 0;
}
NAPOMENA: Funkcije toupper i tolower uzimaju samo po jedan znak, zbog toga moramo
koristiti neku od petlji, te to slovo kojeg one vrate mora biti nekom pridruženo (spremeljeno).
6.4. Rad sa stringom (nizom znakova)
U prethodnom dijelu smo upoznali funkcije koje uzimaju samo jedan znak (karakter), a sada
ćemo upoznati funkcije - naredbe koje uzimaju string tj. niz znakova. U jeziku C/C++ ne
postoji nijedan operator za obradu stringa. Zato, za sve uobičajene operacije postoji
odgovarajuća bibliotečka funkcija.
Da bi koristili sljedeće funkcije morate uključiti biblioteku
#include<cstring>
Kod svih sljedećih funkcija argumenti t, u, i s su tipa string, argument n tipa int, a argument
c tipa int (treba da sadrži kod nekog znaka). Nijedna od ovih funkcija ne mijenja sadržaj
argumenta s i u, a sve mijenjaju sadržaj argumenta t. Ovdje je navedeno dosta funkcija,
obavezno naučiti one koje su označene sivom podlogom.
70 strcpy(t,s)
Ova funkcija kopira string s u string t, kopirajući i sve znakove
uključujući i \0.
strncpy(t,s,n)
Ova funkcija kopira najviše n znakova iz stringa s u string t. Ako string
s nema znakova, rezultat se dopunjuje znakovima \0 do dužine n.
strcat(t,s)
Ova funkcija dopisuje string s na kraj stringa t.
strchar(u,c)
Traži prvu pojavu znaka u stringu
strrev(s)
Okreće string (ovi
strlen(s)
Vrijednost funkcije je broj znakova (tipa int) u znakovnom nizu s.
Završni znak \0 se ne ubraja. Broji koliko riječ ili tekst ima slova tj.
znakova.
strupr(s)
Sva mala slova engleske abacede, pretvara u velika, a ostale znakve ne
mijenja
strlwr(s)
Sva velika slova engleske abacede, pretvara u mala, a ostale znakve ne
mijenja
ivo)
Primjer 49. Napisati program koji unosi niz znakova (string) i ispisuje ga u obrnutom
redosljedu.
Rješenje.
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a[256];
gets(a);
puts(strrev(a));
return 0;
}
71 Primjer 50. Napisati program koji unosi niz znakova (string) i ispisuje kolika je dužina niza tj.
koliko je unijeto znakova i razmaka zajedno.
Rješenje.
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a[256];
int b;
gets(a);
b=strlen(a);
cout<<b<<endl;
return 0;
}
NAPOMENA: Kada koristimo funkciju strlen, onda moramo vrijednost koju ona vrati (a to
je broj), pridružiti (spremiti) nekoj varijabli tipa int. Ne možemo je koristiti, kao što je u
prethodnom primjeru upotrebljena funkcija strrev.
Primjer 51. Napisaćemo program koji pretvara mala u velika i velika u mala slova.
Rješenje. Ovaj primjer smo već imali, ali tad smo morali pretvarati znak po znak. Sada je to
mnogo lakše i jednostavnije.
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a[]="Grad Bihac";
char b[]="SARAJEVO";
puts(strupr(a));
puts(strlwr(b));
return 0;
}
Primjer 52. Napisati program koji će učitati niz znakova (riječ ili rečenicu) maksimalne
dužine 256 znakova, te ispisati koliko se puta u rečenici pojavljuje samoglasnik a (brojati i
velika i mala slova). Ako u datom nizu nema samoglasnika a, onda ispisati poruku "Nema
samoglasnika A".
Rješenje. Postavljeni zadatak ćemo riješiti na dva načina. U prvom načinu ćemo koristiti while
petlju, obzirom da ne znamo koliko će znakova korisnik unijeti, ali znamo da je sigurno zadnji
72 znak u nizu nul znak \0 (tj. NULL). Pošto moramo za svaki znak provjeriti da li je jednak a ili
A, to će biti i=0, varijablu brsamog ćemo koristiti da brojimo samoglasnik A, i odmah je
postavljamo na vrijednost 0, jer se može desiti da nema samoglasnika A. Kad se petlja završi,
ona će izbrojati sva pojavljivanja a ili A, a zatim izvan petlje provjeravamo da li je varijabla
brsamog promijenila svoju vrijednost. Ako nije, tj. ako je ostala nula, onda nema
samoglasnika A, a ako je neka druga vrijednost tj. broj, onda ih ima.
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
char slova[256];
int i=0, brsamog=0;
gets(slova);
while(slova[i]!=NULL){
}
if(slova[i]=='a' || slova[i]=='A') brsamog++;
i++;
if(brsamog==0) cout<<"Nema samoglasnika A"<<endl;
else cout<<"Samoglasnika A ima "<<brsamog<<endl;
return 0;
}
U drugom načinu ćemo umjesto while petlje koristiti for petlju. Kod for petlje broj
ponavljanja je unaprijed poznat, zbog toga uvodimo varijablu n, i pomoću funkcije strlen u
nju spremamo (pridruživamo) broj učitanih znakova (ako ima razmaka i oni se broje). Ostalo
ostaje isto. Da li smo umjesto uslova i<n u for petlji, mogli staviti isti uslov kao u while
petlji? Da, mogli smo.
73 #include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char slova[256];
int i, n, brsamog=0;
gets(slova);
n=strlen(slova);
for(i=0;i<n;i++)
if(slova[i]=='a' || slova[i]=='A') brsamog++;
if(brsamog==0) cout<<"Nema samoglasnika A"<<endl;
else cout<<"Samoglasnika A ima "<<brsamog<<endl;
return 0;
}
Primjer 53. Napisati program koji će učitati riječ. Ako je učitana riječ palindrom, ispisaće
poruka "DA", ako nije poruku "NE". Palindrom je igra riječi u kojoj se čitanjem jedne riječi
ili čitave rečenice obrnutim redom dobiva isto značenje kao i pravilnim čitanjem, npr. oko,
Ana, kuk.
Rješenje. Da bismo riješili ovaj zadatak moramo definisati dva znakovna niza. Jedan koji će
se zvati slova i drugi kopijaslova. Nakon što učitamo riječ u niz slova, koristimo funkciju
strlwr da bi sve znakove tj. slova u nizu pretvorili u mala slova, jer se može desiti da
korisnik unese npr. ime Ana. Zatim koristimo funkciju strcpy i kopiramo sve iz niza slova u
niz kopijaslova. Potom, okrećemo niz kopijaslova tj. slova u njemu, u obrnutom redosljedu
(npr. ivo postaje ovi) naredbom strrev. Sada pomoću while petlje (može i for petljom,
prethodni primjer) ispitivamo da li se prvo slovo u nizu slova podudara s prvim slovom u nizu
kopijaslova, pa drugo, i tako redom. Ako se neka slova ne podudaraju, tada varijabla k
promijeni svoju vrijednost s broja 0, a što će značiti da unešena riječ nije palindrom. Ako pak
varijabla k ne promijeni svoju vrijednost tj. ostane broj 0, tada će to značiti da je učitana riječ
palindrom.
74 #include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char slova[256];
char kopijaslova[256];
int i=0, k=0;
gets(slova);
strlwr(slova);
strcpy(kopijaslova,slova);
strrev(kopijaslova);
while(slova[i]!=NULL){
if(slova[i]!=kopijaslova[i]) k++;
i++;
}
if(k==0) cout<<"DA"<<endl;
else cout<<"NE"<<endl;
return 0;
}
6.5. Zadaci za samostalan rad
Zadatak 65. Napisati program koji će zadani string „ZDRAVO SVIJETE“ ispisati malim
slovima.
Zadatak 66. Napisati program koji će učitati string (maksimalno 256 znakova), te ispisati
dužinu stringa (koliko ste znakova unijeli).
Zadatak 67. Napisati program koji će prebrojiti koliko se u učitanom stringu pojavilo
suglasnika R i S. (Brojati mala i velika slova)
Zadatak 68. Napisati program koji će prebrojiti koliko riječi ima učitani string.
Zadatak 69. Napisati program koji će učitanu rečenicu ispisati je s desna na lijevo.
Zadatak 70. Napisati program koji će prebrojati broj velikih slova u učitanom stringu.
Zadatak 71. Napisati program koji će učitiati niz znakova /STRING/ i znak. Ispisati koliko
puta se upisani znak pojavljuje u upisanom stringu.
75 7. ZADACI SA OPĆINSKIH TAKMIČENJA
7.1. Zadaci 2010
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
29.04.2010.
1. zadatak
DIJELI
Za prirodan broj
takav da je
kažemo da je djeljiv s prirodnim brojem
ako postoji prirodan broj
· .
Treba napisati program koji će za dva prirodna broja učitana s tastature ispitati da li je
prvi djeljiv s drugim. Ukoliko jeste, treba na ekranu ispisati njihov količnik, a ukoliko nije
treba ispisati poruku da nije.
Program snimiti pod imenom DIJELI.
Ulazni podaci
S tastature u prvom redu učitavamo prvi prirodan broj, a u drugom drugi prirodan broj.
Izlazni podaci
Na ekranu se u slučaju da je prvi broj djeljiv s drugim ispisuje njihov količnik, a u
slučaju da nije djeljiv, ispisuje se poruka kao u navedenom primjeru.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
100
5
4
8
18
5
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
20
4 nije djeljivo s 8
18 nije djeljivo s 5
76 2. zadatak
SLOVA
Treba napisati program koji će učitati riječ s tastature i ispisati tu riječ bez
samoglasnika..
Program snimiti pod imenom SLOVA.
Ulazni podaci
S tastature u jednom redu učitavamo riječ napisanu velikim slovima.
Izlazni podaci
Na ekranu se velikim slovima ispisuje učitana riječ ali bez samoglasnika. Ukoliko je
učitana riječ bila sastavljena samo od samoglasnika, na ekranu treba ispisati riječ BOSNA.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
INFORMATIKA
BRK
EEOA
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
NFRMTK
BRK
BOSNA
77 3. zadatak
TROUGAO
Treba napisati program koji će za tri prirodna broja učitana s tastature ispitati da li oni
predstavljaju stranice jednakokrakog trougla.
Program snimiti pod imenom TROUGAO.
Ulazni podaci
S tastature u tri reda učitavamo tri prirodna broja.
Izlazni podaci
Na ekranu se ispisuje poruka da li je učitani trougao jednakokraki ili nije, ili uopće nije
trougao.
Primjeri
Tastatura
(ulaz)
Tastatura
(ulaz)
Tastatura
(ulaz)
Tastatura
(ulaz)
Tastatura
(ulaz)
7
5
5
4
4
4
9
8
9
4
3
5
5
7
20
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
Jeste
jednakokraki
Nije
jednakokraki
Jeste
jednakokraki
Nije
jednakokraki
Nije trougao
78 7.2. Zadaci 2011
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
April 2011.
1. zadatak
RECENICA
Treba napisati program koji će za rečenicu učitanu uz pomoć tastature na ekranu
ispisati da li je izjavna, upitna ili uzvična.
Program snimiti pod imenom RECENICA.
Ulazni podaci
Sa tastature u jednom redu učitavamo rečenicu sa odgovarajućim znakom
interpunkcije na kraju (. Ili ? ili !).
Izlazni podaci
Na ekranu se ispisuje jedna od tri moguće poruke: "Recenica je izjavna." ili "Recenica
je upitna." ili "Recenica je uzvicna."
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
Kako si?
Danas je utorak.
Pazi, auto!
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
Recenica je upitna. Recenica je izjavna. Recenica je uzvicna.
79 2. zadatak
BROJEVI
Treba napisati program koji će učitati dva broja s tastature, pa na ekranu prikazati veći.
Ako se unesu dva ista broja, na ekranu se treba pojaviti poruka "Brojevi su jednaki."
Program snimiti pod imenom BROJEVI.
Ulazni podaci
Sa tastature u prvom redu učitavamo prvi broj, a u drugom redu drugi broj.
Izlazni podaci
Na ekranu se ispisuje veći broj. U slučaju da su jednaki, na ekranu se ispisuje poruka
"Brojevi su jednaki."
Primjeri
Tastatura (ulaz) Tastatura (ulaz) Tastatura (ulaz)
1
5
8
3
7
7
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
Broj 5 je veci.
Broj 8 je veci.
Brojevi su jednaki.
80 3. zadatak
KVADRAT
Treba napisati program koji će s tastature učitati stranicu kvadrata (u centrimetrima),
izračunati njegovo obim i površinu, te rezultate prikazati na ekranu.
Program snimiti pod imenom KVADRAT.
Ulazni podaci
Sa tastature u jednom redu učitavamo broj koji predstavlja stranicu kvadrata.
Izlazni podaci
Na ekranu se ispisuje obim i površina kvadrata.
Primjeri
Tastatura (ulaz) Tastatura (ulaz) Tastatura (ulaz)
5
2
7
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
Obim je 20.
Površina je 25.
Obim je 8.
Površina je 4.
Obim je 28.
Površina je 49.
81 7.3. Zadaci 2012
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
27.03. 2012.
1. zadatak
KOCKA
Vrši se popločavanje puta određene dužine (D) i širine (S) sa dvije vrste betonskih
kocki. Dužine ivica kocki su: jedne vrste kocki K1, a druge vrste kocki K2. Napisati program
koji će ispisati broj kocki potrebnih za popločavanje puta, uz poštovanje određenih pravila.
Naime, kod popločavanja puta kockama ne smije biti praznina niti viška kocki, a kocke se
uklapaju na način da se koriste one kojih ide manje.
Ukoliko se niti jednom vrstom kocki ne može popločati put, program treba da ispiše
poruku "NE MOŽE". Vrijednosti D, S, K1 i K2 su pozitivne vrijednosti veće od nule.
Program snimiti pod imenom KOCKA.
Ulazni podaci
Sa tastature se unose ulazni podaci D, S, K1 i K2, gdje su D i S dužina i širina puta, a
K1 ivica jedne vrste kocki, a K2 ivica druge vrste kocki.
Izlazni podaci
Na ekranu se ispisuje broj kocki koliko je potrebno za popločavanje ili poruka "NE
MOŽE" u slučaju da kocki ima viška ili manjka.
Primjeri
Tastatura (ulaz) Tastatura (ulaz) Tastatura (ulaz)
12
54
2
3
75
150
30
15
12
55
5
4
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
72
50
NE MOŽE
82 2. zadatak
PRESTUPNA GODINA
Prestupne godine su sve djeljive sa 4, ako nisu djeljive sa 100, kojima se dodaju one
koje su djeljive sa 400. Napišite program koji na osnovu unešene godine računa da li je
godina prestupna. Ako jeste program će napisati "GODINA xxxx JE PRESTUPNA" a ako
nije ispisaće "GODINA xxxx NIJE PRESTUPNA". xxxx označava godinu koja je unešena na
ulazu.
Program snimiti pod imenom PRESTUPNA_GODINA.
Ulazni podaci
Sa tastature se unosi određena godina – npr. 2012 i program provjerava da li je godina
prestupna.
Izlazni podaci
Na ekranu se u slučaju da je godina prestupna ispisuje tekst "GODINA xxxx JE
PRESTUPNA" a ako nije ispisaće se "GODINA xxxx NIJE PRESTUPNA", gdje xxxx
varijabla gdine koju smo unijeli za prvovjeru-kao u navedenom primjeru.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
2012
2000
1970
Ekran (izlaz)
GODINA 2012 JE
PRESTUPNA
Ekran (izlaz)
GODINA 2000 JE
PRESTUPNA
Ekran (izlaz)
GODINA 1970 NIJE
PRESTUPNA
83 3. zadatak
KVADRATNI KORIJEN
Napisati program koji na osnovu unešenog broja X računa kvadratni korijen brojeva
X, X+1, X+2 i X+3 i ispisuje ih na ekran. Broj X je pozitivan broj.
Program snimiti pod imenom KVADRATNI_KORIJEN.
Ulazni podaci
Sa tastature učitavamo prirodan broj X.
Izlazni podaci
Na ekranu se ispisuje broj X i njegov kvadratni korijen, zatim u novom redu X+1 i
njegov kvadratni korijen, ispod njega X+2 i njegov kvadratni korijen i na kraju u novom redu
X+3 i njegov kvadratni korijen – kao u navedenom primjeru.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
5
9
25
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
BROJ 5 KVADRATNI
KORIJEN 2.23
BROJ 6 KVADRATNI
KORIJEN 2.44
BROJ 7 KVADRATNI
KORIJEN 2.64
BROJ 8 KVADRATNI
KORIJEN 2.82
BROJ 9 KVADRATNI
KORIJEN 3
BROJ 10 KVADRATNI
KORIJEN 3.16
BROJ 11 KVADRATNI
KORIJEN 3.31
BROJ 12 KVADRATNI
KORIJEN 3.46
BROJ 25 KVADRATNI
KORIJEN 5
BROJ 6 KVADRATNI
KORIJEN 5.09
BROJ 7 KVADRATNI
KORIJEN 5.19
BROJ 8 KVADRATNI
KORIJEN 5.29
84 7.4. Zadaci 2013
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
19.03.2013.
1. zadatak
BINARNI
Tradicionalni brojni sistem, koji se izučava u školi i koji se koristi u svakodnevnom
životu se naziva dekadni brojni sistem. To je sistem čija je baza broj 10, a svaki broj u tom
sistemu se zapisuje pomoću 10 cifara: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ako imamo broj 25047 u
dekadnom brojnom sistemu, to znači da je
25047 = 2·104 + 5·103 + 0·102 + 4·10 + 7
Slično dekadnom brojnom sistemu, postoje i drugi brojni sistemi, od kojih je
najpoznatiji binarni brojni sistem. To je brojni sistem kojem je baza broj 2 a ukojem se brojevi
zapisuju pomoću cifara 0 i 1.
Treba napisati program koji s tastature učitava dva prirodna broja B i N, za koje vrijedi
2
9, 100000, te na ekran ispsuje broj N zapisan u brojnom sistemu s bazom B.
Program snimiti pod imenom BINARNI.
Ulazni podaci
Sa tastature se unose prirodni brojevi B i N
Izlazni podaci
Na ekranu se ispisuje broj N zapisan u brojnom sistemu s bazom B.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
2
21
5
59
8
571
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
10101
214
1073
85 2. zadatak
TROUGAO
Tri prirodna broja predstavljaju dužine stranica trougla ako je zbir bilo koja dva veći
od trećeg.
Treba napisati program koji će s tastature učitati 3 prirodna broja A, B i C i na ekranu
(na način kako je prikazano u primjerima) ispisati poruke o tome da li su učitani brojevi
predstavljaju stranice jednakokragog, jednakostraničnog ili pravouglog trougla. Ako tri
učitana broja ne predstavljaju dužine stranica trougla treba ispisati odgovarajuću poruku (kao
u primjeru).
Program snimiti pod imenom TROUGAO.
Ulazni podaci
Sa tastature se unose prirodni brojevi A, B i C.
Izlazni podaci
Na ekranu se, u slučaju da učitani brojevi ne predstavljaju dužine stranica trougla.
Ispisuje poruka "NIJE TORUGAO", dok se u slučaju da učitani brojevi predstavljaju stranice
trougla ispisuje jedna od sljedeće četiri poruke: "JEDNAKOKARKI TROUGAO" (ako je
riječ o jednakokrakom trouglu), "JEDNAKOSTRANICNI" (ako je riječ o jednakostraničnom
trouglu), "PRAVOUGLI" (ako je riječ o pravouglom trouglu) i "TROUGAO" ako nije među
nabrojanim slučajevima. Poruke se ispisuju na način kako je prikazano u primjerima.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
3
3
8
3
5
4
7
2
6
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
NIJE TROUGAO
PRAVOUGLI
TROUGAO
86 3. zadatak
SAMOGLASNIK
S tastature se učitava jedna riječ (niz velikih i malih slova). Na ekranu treba ispisati
broj samoglasnika u učitanoj riječi i riječ u kojoj su u učitanoj riječi umjesto samoglasnika
koji su napisani malim slovom ispisana slova X, a umjesto samoglasnika koji su napisani
velikim slovom ispisana slova x.
Program snimiti pod imenom SAMOGLASNIK.
Ulazni podaci
Sa tastature se unosi riječ (niz znakova koji ne mora predstavljati riječ koja ima
smisla).
Izlazni podaci
Na ekranu se u prvi red ispisuje broj samoglasnika u učitanoj riječi, a u drugom redu
učitana riječ promijenjena na opisan način.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
BoSAnsKa
edFGUeakXWAa
QtZxRVy
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
3
BXSxnskX
6
XdFGxXXKXWxX
0
QtZxRVy
87 8. ZADACI SA KANTONALNIH TAKMIČENJA
8.1. Zadaci 2011
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
10.04. 2011.
1. zadatak
SUMACIF
Emir je naučio programirati. Prvi "ozbiljniji" program koji je napisao izračunava sumu
cifara prirodnog dvocifrenog broja koji se unosi putem tastature. Međutim, ukoliko broj koji
se unosi nije dvocifren nastaju problemo.
Pomozi Emiru i napiši program koji će izračunati i prikazati sumu cifara ako se unese
dvocifren broj. Inače će se na ekranu prikazati poruka da broj nije dvocifren.
Program snimiti pod imenom SUMACIF.
Ulazni podaci
Sa tastature učitavamo jedan prirodan broj.
Izlazni podaci
Na ekranu se ispisuje suma njegovih cifara (ako je dvocifren) ili poruka (ako nije
dvocifren).
Primjeri
Tastatura (ulaz) Tastatura (ulaz)
Tastatura (ulaz)
41
6
142
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
5
Broj nije dvocifren! Broj nije dvocifren!
88 2. zadatak
SLOVAR
Emirova sestra teško izgovara slovo r. On joj je, stoga, odlučio napisati rečenice u
kojima se ovo slovo što više pojavljuje. Pomozi Emiru da napiše program koji će mu izbrojati
koliko puta se slovo r (nalo ili veliko) pojavilo u rečenici koju unese putem tastature. One
rečenice sa kojima bude zadovoljan Emir će prepisati na papir i zamoliti malu sestru da ih
naglas pročita više puta kako bi izvježbala izgovor
Program snimiti pod imenom SLOVAR.
Ulazni podaci
Sa tastature učitati rečenicu.
Izlazni podaci
Na ekranu se ispisuje poruka o broju pojavljivanja slova r (malo ili veliko) u učitanoj
rečenici.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Riba ribi grize rep
Irma i Romi idu u prvi razred. Vracaju se rode.
Ekran (izlaz)
Ekran (izlaz)
Broj pojavljivanja: Broj pojavljivanja:
4
5
89 Tastatura (ulaz)
Ekran (izlaz)
Broj pojavljivanja:
2
3. zadatak
SLIKE
Emir bi trebao slike sa svih ekskurzija sa svoga računara spržiti na CD-ove kako bi ih
podijelio prijateljima iz razreda. Emir ima N slika i one su veličine K megabajta. Svaki CD
ima tačno 700MB prostora.
Pomozi Emiru izračunati koliko najmanje CD-ova mora kupiti svaki od njegovi
prijatelja kako bi na njih mogao snimiti željene slike. Niti jedna slike se ne smije dijelom
snimiti na jedan CD, a dijelom na drugi!
Program snimiti pod imenom SLIKE.
Ulazni podaci
Sa tastature u dva reda učitavamo dva prirodna broja, i to:
-
prirodan broj N (1
1000), broj slika koje Emir želi snimiti na CD-ove,
-
prirodan broj K (1
10), veličina slike u MB.
Izlazni podaci
Na ekranu se ispisuje prirodan broj X koji predstavlja najmanji broj CD-ova potreban
Emiru da snimi sve slike.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
400
5
100
4
101
7
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
3
1
2
Objašnjenje
Damiru treba prebaciti 400
slika veličine 5MB. Za to
mu trebaju 3 CD-a, jer na
3
CD-a
stane
700*3=2100MB.
Objašnjenje
Almi treba prebaciti 100
slika veličine 4MB. Za to
u treba 1 CD, jer na 1 CD
stane 700*1=700MB.
Objašnjenje
Ivanu treba prebaciti 101
sliku veličine 7MB. Za to
mu trebaju 2 CD-a, jer na
2
CD-a
stane
700*2=1400MB.
90 8.2. Zadaci 2011
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
10.05.2012.
1. zadatak
TECAJ
Enesova obitelj vrši pripreme za odlazak na more. Enes je dobio određenu svotu
novaca od majke u KM-a (konvertibilbe marke). Enes planira sakupiti još novca u KM nakon
završetka školske godine (dobijanja knjižica), a nada se de će dobiti nešto od tetke iz
Njemačke gdje se koriste Euri (Eur). Na omoru (Hrvatska) se troše isključivo Kune (Kn).
Pomozimo Enesu da napiše program koji pretvara valutu iz KM-a i Eur-a u Kune kako
bi se Enes lakše snašao na moru.
Program snimiti pod imenom TECAJ.
Ulazni podaci
Sa tastature se unosi vrijednost tečaja Kune (Kn) za Eur, tečaja Kune (Kn) za KM.
Zatim se unosi iznos ušteđenih i dobivenih KM i Eura posebno a koje će Enes razmjenjivati
za Kune. Za 1 KM Enes može dobiti 3,75 Kn, a za 1 Eur se može dobiti 7,5 Kn.
Izlazni podaci
Na ekranu se ispisuje sljedeća poruka:
"Za iznos od ___KM i ___Eur Enes može dobiti ____Kuna."
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
7.5
3.75
100
100
7.5
3.75
75
50
7.5
3.75
150
35
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
Za iznos od 100 KM Za iznos od 75 KM i Za iznos od 150 KM
i 100 Eur, Enes može 50 Eur, Enes može i 35 Eur, Enes može
dobiti 1125.00 Kn
dobiti 656.25 Kn
dobiti 825.00 Kn
91 2. zadatak
DJELJIVOST
Potrebno je napisati programski kod za rješenje sljedećeg problema:
Sa tastature se unosi broj, za koji program provjerava da li je djeljiv sa tri. Ukoliko jeste
djeljiv sa 3 program ispisuje poruku: "Ostatak djeljenja broja ___ sa 3 je 0", a ukoliko nije
program računa prvi manji broj od unešenog broja a koji je djeljiv sa 3 i ispisuje poruku: "Prvi
manji broj od unesenog broja, a djeljiv sa 3 je ____".
Program snimiti pod imenom DJELJIVOST.
Ulazni podaci
Sa tastature se unosi određeni broj a program vrši provjeru uvjeta.
Izlazni podaci
Ukoliko je unešeni broj djeljiv sa 3 program ispisuje poruku:
"Ostatak djeljenja broja ___ sa 3 je 0", a ukoliko nije program traži prvi manji broj od
unesenog a koji je djeljiv sa 3 i ispisuje poruku: "Prvi manji broj od unesenog broja, a koji je
djeljiv sa 3 je __ ".
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
33
256
4356
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
Ostatak djeljenja
broja 33 sa 3 je 0.
Prvi manji broj od
unesenog broja, a
koji je djeljiv sa 3 je
255.
Ostatak djeljenja
broja 4356 sa 3 je 0.
92 3. zadatak
SAMOGLASNICI
Napisati program koji broji (prebrojava) samoglasnike u unesenoj rečenici i ispisuje
njihov zbir na ekran.
Program snimiti pod imenom SAMOGLASNICI.
Ulazni podaci
Sa tastature učitavamo rečenicu određene dužine (broja riječi).
Izlazni podaci
Na ekranu se ispisuje poruka: "Samoglasnici se u rečenici pojavljuju ___ puta" kao u
navedenom primjeru.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
Tastatura (ulaz)
Danas je cijeli dan padala Ovaj zadatak je veoma Veceras je premijera mog
jaka kisa.
jednostavan i nadam se da omiljenog filma u kinu
ću ga uspjesno rijesiti.
Una.
Ekran (izlaz)
Ekran (izlaz)
Ekran (izlaz)
BROJ 5 KVADRATNI BROJ 9 KVADRATNI BROJ 25 KVADRATNI
Samoglasnici se u rečenici Samoglasnici se u rečenici Samoglasnici se u rečenici
pojavljuju 14 puta!
pojavljuju 26 puta!
pojavljuju 19 puta!
93 8.3. Zadaci 2013
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
30.04.2013.
1. zadatak
COKOLADA
Hana je vježbala matematiku i naišla je na jedan slatki zadatak. Potrebno je tablu
čokolade oblika pravougaonika podijeliti na manje dijelove koji će biti oblika kvadrata, ali
pod uvjetom da je taj broj kvadrata najmanji moguć.
Program snimiti pod imenom COKOLADA.
Ulazni podaci
Sa tastature u prva dva reda učitavamo dva prirodna broja M i N (1
M, N
1000),
gdje je M broj redaka a N broj stupaca čokolade.
Izlazni podaci
Na ekranu treba ispisati najmanji broj kvadrata na koji se čokolada može podijeliti.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
3
4
5
5
Ekran (izlaz)
Ekran (izlaz)
4
1
Objašnjenje za prvi primjer
Na slici su dane dvije moguće podjele čokolade od 3 reda i 4 stupca, s tim što je na drugoj
slici prikazana podjela s najmanjim brojem kvadrata.
94 2. zadatak
KAPICA
Tri Amina, Lejla i Emira su u autobusu, da bi sebi putovanje učinile interesantnijim,
igrale igre pogađanja boje kape na njihovim glavama. Svaka od njih na glavi ima kapu crne ili
bijele boje, ali ne zna koje je boje. Međutim, svaka od njih vidi kakve je boje kapa na glavi
drugih dviju. Svaka od njih treba da kaže koliko crnih kapa vidi, te da na osnovu dobijenih
informacija pogodi koje je boje kapa na njenoj glavi.
Treba napisati program koji s tastature učitava koliko crnih kapa vide Amina, Lejla i
Emira, a zatim ispisuje koje su boje kape na njihovim glavama i to tako što za crnu kapu
ispisuje C a za bijelu B.
Program snimiti pod imenom KAPICA.
Ulazni podaci
Sa tastature u prva tri reda učitavamo tri nenegativna broja. U prvom redu je broj crnih
kapa koje vidi Amina, u drugom broj crnih kapa koje vidi Lejla a u trećem redu broj crnih
kapa koje vidi Emira.
Izlazni podaci
Na ekranu treba ispisati u tri reda boju (C ili B) kape koju one imaju na glavi i to u
prvom redu Aminine, u druugom boju Lejline a u trećem redu boju Emirine kape.
Primjeri
Tastatura (ulaz)
Tastatura (ulaz)
2
1
1
0
0
0
Ekran (izlaz)
Ekran (izlaz)
B
C
C
B
B
B
95 3. zadatak
KALADONT
Enes i Lejla igraju igru koja se zove "kaladont". Lejla je bolji igrač, pa je Enes odlučio
samostalno vježbati uz pomoć računara. Igra se sastoji od više partija. Svaka partija počinje
tako što Enes izgovori proizvoljnu riječ. Za svaku sljedeću riječ koju on izgovori mora da
vrijedi da je njenih K početnih slova jednako kao posljednjih K slova prethodno izgovorene
riječi. Ako Enes ne može da smisli riječ koja počinje na odgovarajući način, partija se
završava. Broj izgovorenih riječi tokom jedne partije predstavlja dužinu partije. Potrebno je za
N datih riječi izgovorenih u toku igre odrediti dužinu najduže partije.
Program snimiti pod imenom KALADONT.
Ulazni podaci
Sa tastature se unose dva prirodna broja K i N (1
N
1000, 1
K
20) koji
predstavljaju riječi i broj slova koja mora da se poklapaju i lista od N izgovorenih riječi.
Izlazni podaci
Na ekranu se ispisuje broj koji predstavlja dužinu najduže partije u igri.
Primjeri
Tastatura (ulaz)
Objašnjenje:
9
2
jabuka
kaldont
drvo
vozilo
logor
orkan
maca
carica
car
Učitava se 9 riječi a zahtijevano je podudaranje u 2
posljednja slova prethodne riječi i 2 početna slova
novoizgovorene riječi.
U ovoj igri su bile 3 partije:
jabuka – kaladont (dužina 2)
drvo – vozilo – logor – orkan (dužina 4)
maca – carica – car (dužina 3)
Vidimo da je druga partija najduža i da je njena
dužina 4
Ekran (izlaz)
4
96 9. TEORETSKI ZADACI SA OPĆINSKIH TAKMIČENJA
9.1. Zadaci 2010
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
29.04.2010.
Teorija
1. Računar može raditi 24 sata bez prekida.
DA
NE
2. Spoji par:

 Briše znak desno od kursora
Tipka BACKSPACE 
 Briše znak lijevo od kursora
Tipka DELETE
3. Jedan bajt ima _________ bita, a jedan kilobajt ima _________________ bajta.
4. Zaokruži pet programskih jezika:
1. C
3. NEWTON
5. SQL
7. COBOL
2. PASCAL
4. FORTRAN
6. MS DOS
8. WINDOWS
5. Razvrstaj na ulazne i izlazne jedinice: tastatura, miš, štampač, džojstik, skener.
Ulazne:___________________________________________________________
Izlazne: ___________________________________________________________
6. Povezati kojoj naredbi programskog jezika BASIC odgovara koji opis djelovanja:
INPUT

 završetak programa
REM

 naredba izlaza
PRINT

 naredba grananja
END

 naredba ulaza
IF THEN

 komentar
7. Niz koraka koji jasno i određeno vode ka rješenju nekog problema (ukoliko rješenje
postoji), odnosno daju odgovor da problem nema rješenja (ako rješenje ne postoji, ne
može se dobiti odgovarajućom tačnošću ili u predviđenom vremenu) naziva se
_______________________.
8. S koje strane znaka @ se u nekoj e-mail adresi nalazi e-mail provider?
A: lijeve
B: desne
C: obe
D: ništa od navedenog
9. Koju biste ikonu koristili da kopirate format jedne riječi na drugu?
A:
B:
C:
10. Pritisak na koju ikonu poništava izvršenu komandu?
97 D:
A:
B:
C:
D:
C: Vertical
D: Landscape
11. Vodoravna orijentacija papira je:
A: Portrait
B: Laid
12. Formule u Excelu počinju znakom:
A: =
B: %
C: #
13. Koji od odgovora radi u Excelu isto što i
A: =A1+B2
D: zavisi od formule
=SUM(A1:A2)?
B: =A1+A2
C: =sin(A1/B2)
D: =A1+A2+B1+B2
C: A,B,C,...
D: I,II,III,...
14. Kolone u Excelu su označene:
A: 1,2,3,....
B: A1,A2,A3,...
15. Binarni zapis broja 753 je __________________________________.
9.2. Zadaci 2011
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
24.04.2011.
1. Softver je materijalni dio računara. (Može se opipati rukom) DA
NE
2. Tipka Shift služi za _______________________________________________________.
Tipka CapsLock služi za ___________________________________________________.
3. Jedan megabajt ima ______________ bajta, a jedan gigabajt ima __________megabajta.
4. Zaokruži naredbe koje se koriste u programskom jeziku BASIC:
1. CLS
2. READ
3. INPUT
4. WRITE
5. RENAME
6. IF..THEN
7. CLR
8. FOR
5. Šta je šta? Popuni kvadrate odgovarajućim slovom. (A-ulazna jedinica, B-izlazna jedinica)
 štampač
 skener
 zvučnik
 web kamera
6. Navedi 4 programska jezika za koje si čuo.
_____________
____________
____________
__________
7. Decimalni zapis binarnog broja 10111 jeste _______________.
8. Za ispis na štampaču tekuće stranice našeg dokumenta kji ima 12 stranica koristit ćemo
98 A: naredbu Print iz izbornika
B: pritisak na ikonu
9. Pritisak na koju ikonu sprema naš dokument?
A:
B:
C:
D:
10. Vertikalna orijentacija papira je:
A: Portrait
B: Laid
C: Vertical
D: Landscape
11. MS Excel je sastavni dio:
A: MS Windows
B: MS Office
C: Ne pripada niti jednom
12. Ćelije u Excelu su označene:
A: 1,2,3...
B: A1,A2,A3,....
C: A,B,C,...
D: I,II,III,....
C: u tastaturi
D: na monitoru
13. Obrada podataka u računaru vrši se:
A: u memoriji
B: u procesoru
14. Binarni zapis broja 53 je ____________________________________.
15. Zadnja verzija operativnog sistema Windows jeste:
A: Windows Phone 7
B: Windows 7
C: Windows 2007
D: Windows 2011
9.3. Zadaci 2012
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
27.03.2012.
Na sljedeća pitanja se odgovara tako da se upiše slovo koje se nalazi ispred tačnog odgovora
na za to predviđeno mjesto (crtu):
r/b
bodovi
mogući ostvareni
Pitanje:
2
1.
Koji rezultat će se prikazati prilikom pokretanja formule u
ćeliji C8 (kada pritisnemo tipku ENTER)?
Odgovor: _______
99 Predstavite broj 44 u binarnom obliku:
2
2.
Odgovor: _____________
3.
Ako je brzina prenosa podataka preko ADSL linka 4
Mb/ps, za koliko vremena će se teoretski "download-ati"
datoteka veličine 500 MB?
2
Odgovor: _____________
Kojem od pobrojanih operativnih sistema nije mejsto u
skupini:
a) Windows 7
b) Windows XP
c) Windows Mobile
d) d) Windows 2000
4.
2
Odgovor: _____________
Koji izraz je tačno napisan i predstavlja sljedeću formulu:
0
5.
a)
b)
c)
d)
2
b+a-(c+0)/((p*y)/d)
b+(a-(c+0)/p*y)/d
b+(a-(c+0)/(p*y))/d
d) b+(a-c+0/(p*y))/d
Odgovor: _____________
Softverska licenca je:
6.
a)
b)
c)
d)
Pravo na korištenje određenog softvera (programa)
CD na kojem dobijamo isporučen sofvter
Vrsta softvera
d) Oblik distribucije softvera
2
Odgovor: _____________
Umetanje matematičkih izraza u MS Word se vrši
pokretanjem slijeda naredbi:
7.
a)
b)
c)
d)
InsertObjectMicrosoft Equattion 3.0
ViewObjectMicrosoft Equattion 3.0
ObjectMicrosoft Equattion 3.0
Ni na jedan od ponuđenih načina
Odgovor: _____________
100 2
8.
Koja vrijednost će biti u ćeliji C1 kao rezultat obrade
operacije na slici, pritiskom na tipku ENTER
a) 450
b) 45
c) 4500
d) 30
2
Odgovor: _____________
Koji od navedenih nisu ulazno/izlazni uređaji:
9.
a)
b)
c)
d)
Skener
Ekran osjetljiv na dodir (touch.screen)
Modem
Mikrofon
2
Odgovor: _____________
10.
Korisnik je otvorio dokument u MS Wordu koji se zove
"kontrolni", na istom izvršio određene promjene, pritisnuo
CTRL+S, zatim CTRL+P a nakon toga ALT+F? Upišite
odgovor što se tada dogodilo?
2
Odgovor: _____________
Koja od ponuđenih nije naredba PASCAL-a?
11.
a)
b)
c)
d)
PRIVATE
WRITELN
READLN
BEGIN
2
Odgovor: _____________
http://www.pzusk.ba/index.php?option=com_content&view=category&id=35
U sljedećem linku riječi "pzusk.ba" predstavljaju:
12.
a)
b)
c)
d)
Ime dokumenta i oznaku države
Naziv domene i oznaku države
Ime dokumenta i naziv domene
E-mail adresu domene
2
Odgovor: _____________
Algoritam je:
13.
a) Niz koraka koji vode ka rješenju nekog problema
b) Određen i beskonačan broj koraka koji jasno vode
ka rješenju nekog problema
101 2
c) Određen i konačan broj koraka koji jasno vode ka
rješenju nekog problema (ukoliko rješenje postoji)
d) Neodređen i beskonačan broj koraka koji vode ka
rješenju nekog problema.
Odgovor: _____________
Kada u Excel-u koristimo komandu COPY na ćeliji u
kojoj se nalazi formula, koju od ponuđenih PASTE
OPTION ćemo koristiti da zalijepimo vrijednost formule,
a ne formulu:
a)
14.
2
b)
c)
d)
Odgovor: _____________
Kada u Wordu želimo da isprintamo samo određene
stranice koristiti ćemo:
15.
a) CTRL+S
b) CTRL+P
2
c) Ikonu štampača
d) CTRL+C
Odgovor: _____________
9.4. Zadaci 2013
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
19.03.2013.
U zadacima 1-10 treba zaokružiti slovo ispred tačnog odgovora.
1. Softverska licenca je
A. Microsoft Office
B. Vrsta softvera
C. Pravo na korištenje određenog softvera
D. CD koji dobijemo uz računar
102 2. Programski jezik nije
A. PASCAL
B. NEWTON
C. COBOL
D. JAVA
3. Najmanja adresabilna tačka na ekranu se naziva
A. Pixel
B. Minijatura
C. Ekranska tačkica
D. Point
4. Ikona
u Microsoft Word-u
A. Otvara još jedan postojeći dokument
B. Otvara još jedan prazan dokument
C. Dijeli ekran na dva dijela
D. Kopira selektirani dio na clipboard
5. Koji nivo nije nijedan od tri nivoa komunikacijskog procesa
A. Tehnološki
B. Semantički
C. Hardverski
D. Efektivni
6. Koji broj nije napisan u heksadecimalnom brojnom sistemu
A. BABE
B. BEBE
C. NANE
D. 1234
7. Osnovni dijelovi centralne procesorske jedinice su
A. Procesor i memorija
B. Procesor i hladnjak
C. Procesor i printer
D. Procesor i softver
8. Prva definicija informatike potiče od
A. Francuske akademije nauka
B. Apple-a
103 C. NASA-e i CIA-e
D. Američkog informatičkog društva
9. Dio centralne jedinice gdje se vrši obrada podataka se naziva
A. Procesor
B. Aritmetičko-logička jedinica
C. Podatkovno-obrađivački filter
D. Kompjuter
10. Koju kombinaciju treba pritisnuti za softversko resetiranje računara
A. Ctrl+AltGr+Del
B. Ctrl+AltGr+F1
C. Ctrl+Alt+Del
D. Ctrl+Alt+F1
U zadacima 11-15 treba uraditi traženo.
11. Broj 2013 iz dekadnog brojnog sistema zapisati u binarnom: _______________________.
12. Nakon izvršenja naredbi, A i B će imati sljedeće vrijednosti: A=_______, B=________.
A=2
B=3
A=A+B
A=A+A
IF B>A THEN A=100
B=A+B
13. Ako u Microsoft Excel ćelijama imamo sljedeće zapise:
A1: 10
A2: 15
A3: 20
A4: 25
A5: =SUM(A2:A4)
Nakon što u ćeliju A6 upišemo =COUNT(A1:A5) i pritisnemo tipku ENTER, koji će
sadržaj biti ispisan na ekran u ćeliji A6?
U ćeliji A6 će biti ispisano _______________.
14. Ako imamo 3 memorijske jedinice CD1, CD2 i CD3 sa sljedećim memorijskim
kapacitetima:
CD1 – 1010MB
CD2 – 1GB
CD3 – 1031031KB
Poredati ih po veličini od najvećeg do najmanjeg:________________________________.
15. Broj 2706 iz oktalnog brojnog sistema zapisati u dekadnom: _______________________.
104 10. TEORETSKI ZADACI SA KANTONALNIH TAKMIČENJA
10.1. Zadaci 2011
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
10.05.2011.
1. Informacija i podatak su isto.
DA
NE
2. Softver su svi program koji se nalaze u nekom računaru.
DA
NE
3. Najvažniji dio računara (njegovo srce) je memorija.
DA
NE
4. Ako su uključena mala slova, da bismo aktivirali velika moramo koristiti:
A: CapsLock
B: Ctrl
C: Shift
D: Alt
E: Enter
F: Delete
5. Određenim pojmovima pridruži značenje:
I generacija računara
tranzistor
II generacija računara
integrisana kola
III generacija računara
elektronske cijevi
IV generacija računara
mikroprocesor
6. RAM je memorija iz koje se podaci mogu samo čitati.
DA
NE
7. DOS naredba DIR_p*.exe radi: Prikazuje sve datoteke sa exe ekstenzijom čije ime počinje
sa slovom p.
8. Rezolucija monitora je ukupan broj piksela.
DA
NE
DA
NE
9. Datoteka (engl. File) je skup istovrsnih podataka zapisanih na jednom mjestu i nazvanih
zajedničkim imenom.
DA
10. Naziv bit dolazi od engl. Binary digit što u prevodu znači binarna cifra. DA
NE
NE
11. Dio centralne jedinice gdje se vrši obrada podataka se naziva porcesor, a skraćeni naziv je
CPU.
DA
NE
12. Kako u Excel-u preći u novi red iste ćelije?
A: Ctrl + Alta
B: Shift + Enter
C: Alt + Enter
D: Ctrl + Shift
13. Koji je broj napisan u binarnom brojnom sistemu?
A: 120392
B: 101010
C: 881188
105 D: 1234567890
10.2. Zadaci 2012
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
10.05.2012.
Na sljedeća pitanja se odgovara tako da se upiše slovo koje se nalazi ispred tačnog odgovora
na za to predviđeno mjesto (crtu):
r/b
bodovi
mogući ostvareni
Pitanje:
Koji od sljedećih uređaja vam treba za komunikaciju sa
drugim računarima putem telefonske mreže?
1.
a)
b)
c)
d)
CD-ROM
Modem
Ploter
Zvučnici
2
Odgovor: _______
Šta je od navedenog operativni sistem?
2.
a)
b)
c)
d)
Lotus 1-2-3
PowerPoint 2010
Linux Ubuntu
Corel X5
2
Odgovor: _____________
3.
Koji od navedenih uređaja je prikladan za pravljenje
sigurnosne kopije (backup) sa mrežnog servera podataka?
a)
b)
c)
d)
Modem
Magnetna traka
Ploter
CD/RW
2
Odgovor: _____________
Korisnički ugovor
Agreement):
o
licenci
(End
User
Licence
a) je oblik oglošavanja između autora ili izdavača
softverske aplikacije i korisnika
b) daje korisniku ekskluzivno pravo za kopiranje i
prodaju
softvera
drugim
potecionalnim
korisnicima
4.
106 2
c) garantuje vlasništvo softvera korisniku softvera
d) je zakonski ugovor između autora ili izdavača
softverske aplikacije i korisnika s obzirom na
uslove distribucije, dalje prodaje i ograničenja
upotrebe.
Odgovor: _____________
Šta je od navedenog ispravno ime za sliku ispod?
5.
a)
b)
c)
d)
Naslovna traka
Klizna traka
Statusna traka
Traka menija
2
Odgovor: _____________
.docx je ekstenzija (nastavak) za:
6.
a)
b)
c)
d)
Ekstenzija za Word 1997 dokumenta
Ekstenzija za Excel 2007 dokumenta
Ekstenzija za Word 2007 dokumenta
Niti jedno od pobrojanog
2
Odgovor: _____________
Šta znači skraćenica HTTP?
7.
a)
b)
c)
d)
Hyperlink Transfer protocol
Hyperlink Transmission Procedure
Hypertext Transfer Protocol
Hypertext Transmission Procedure
2
Odgovor: _____________
Simbol na ravnalu Office
aplikacija obojan crnom bojom služi za:
8.
a)
b)
c)
d)
uvlačenje cijelog odlomka
uvlačenje prvog retka
uvlačenje svih redaka osim prvog u odlomku
ništa od navedenog
107 2
Odgovor: _____________
9.
Rezultat izvršenja formule u ćeliji B1 je:
2
Odgovor: _____________
Poredaj po veličini sljedeće kapacitete memorije počevši
od najmanjeg:
10.
a)
b)
c)
d)
e)
1100MB
0.1GB
103kB
1GB
1500kB
2
Odgovor: _____________
Tačan naziv trake na slici je:
11.
a)
b)
c)
d)
startna traka
alatna traka
programska traka
zadaćna traka
2
Odgovor: _____________
Koja će vrijednosti pisati u ćeliji C1 nakon izvršenja
funkcije koja se u njoj nalazi:
2
12.
=IF(SUM(A1:A4)>SUM(B1:B4);AVERAGE(A1:A4);SUM(B1;B4))
Odgovor: _____________
Prikazati realni broj 190.3125(10) binarno i oktalno!
2
13.
Odgovor: _____________
14.
Kolika je vrijednost varijabli g i h nakon izvršenja niza
naredbi? (DIV je rezultat cjelobrojnog dijeljenja, MOD je
ostatak cjelobrojnog dijeljenja).
g=4
h=15
108 2
g=g+h
h=g – h
g=g – h
g=g MOD h
h=g DIV h
Odgovor: _____________
15.
Opcija "Track Changes" u MS Wordu služi za:
a) Praćenje promjena koje se dešavaju u Word
dokumentu
b) Provjeru pravopisa
c) Označavanje novih pojmova u Wordu
d) Ništa od navedenog
2
Odgovor: _____________
10.3. Zadaci 2013
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
30.04.2013.
U zadacima 1-10 treba zaokružiti slovo ispred tačnog odgovora.
1. Za crtanje kružnice i kvadrata u Windows aplikaciji Paint, na tastaturi je potrebno držati
pritisnutu tipku
A. Ctrl
B. Alt
C. Shift
2. Neizostavni dio u svakoj adresi elektronske pošte je
A. @
B. %
C. .com
3. Ulazna jedinica nije
A. Miš
109 B. Tastatura
C. Štampač
4. Koja od navedenih naredbi nije naredba u Pascalu
A. WRITELN
B. PRIVATE
C. READLN
5. Koji je broj zapisan u oktalnom brojnom sistemu
A. 88
B. 77
C. Nijedan
6. Formule u Excelu počinju znakom
A. #
B. =
C. %
7. Vodoravna orijentacija papira je
A. Landscape
B. Portrait
C. Horizonal
8. Koliko jedan gigabajt ima megabajta
A. 102
B. 1000
C. 210
9. Koji od odgovora radi u Excelu isto što i =SUM(A1:B2)
A. =A1+B1+A2+B2
B. =A1+B2
C. =A1/B2
10. Softver se dijeli na
A. Kupovni i prodajni
B. Sistemski i aplikativni
C. Memorijski i procesorski
U zadacima 11-15 treba uraditi traženo.
11. Broj 20122013 iz dekadnog brojnog sistema zapisati u heksadecimalnom:_____________.
12. Nakon izvršenja naredbi, A i B će imati sljedeće vrijednosti: A= _______, B= ________.
A=2
110 B=3
A=A+B
A=A+A
IF B>A THEN A=100
B=A+B
13. Ako u Microsoft Excel ćelijama imamo sljedeće zapise:
A1: 10
A2: 15
A3: 20
A4: 25
A5: =SUM(A2:A4)
Nakon što u ćeliju A6 upišemo =COUNT(A1:A5) i pritisnemo tipku ENTER, koji će
sadržaj biti ispisan na ekranu u ćeliji A6?
U ćeliji A6 će biti ispisano ___________
14. Nakon izvršenja koda i:=17; writeln((i mod 6)+(i div 6); biće odštampano ________
15. Broj 11001011 iz binarnog brojnog sistema zapisati u dekadnom:_________________
111