Upload
others
View
11
Download
0
Embed Size (px)
Citation preview
2016
EDIN PAŠIĆ
BIHAĆ
Uvod u programski jezik
Sallallâhu 'alâ sejjidin
Neka je salavat i selam na prvaka Muhammeda a.s.
i na njegovu porodicu
ii
sejjidinâ Muhammedin ve âlih
Neka je salavat i selam na prvaka Muhammeda a.s.
i na njegovu porodicu
lihî ve sellem
Neka je salavat i selam na prvaka Muhammeda a.s.
iii
Predgovor
Ovo je drugo izdanje skripte. Skripta je dopunjena novim zadacima tako da sadrži preko 150
zadataka s primjerima, zadacima za samostalan rad i zadacima s takmičenja. Zadacima
predviđenim za samostalan rad dodali smo primjere za ulaz/izlaz, tako da se lakše može
provjeriti rješenje, jer početnici, kada napišu program, imaju problem da odrede s kojima ga
vrijednostima testirati. Ispravljene su pronađene greške u test primjerima zadataka s
takmičenja.
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" Bihać 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:
iv
SADRŽAJ
1. RAZVOJNO OKRUŽENJE ................................................................................................... 1
1.1. Izgled programa ........................................................................................................... 4
1.2. Kreiranje datoteke ........................................................................................................ 5
1.3. Struktura programa ....................................................................................................... 8 1.4. Pokretanje programa .................................................................................................... 9
1.5. Greške ........................................................................................................................ 10 2. NAREDBE ZA IZLAZ I ULAZ .......................................................................................... 12
2.1. Početni program ......................................................................................................... 12
2.2. Naredba cout .............................................................................................................. 12
2.3. Varijacije naredbe cout .............................................................................................. 13
2.4. Osnovni tipovi podataka ............................................................................................ 16 2.5. Deklaracija varijabli ................................................................................................... 18
2.6. Operatori i izrazi ........................................................................................................ 20
2.6.1. Operator pridruživanja ........................................................................................ 20 2.6.2. Inicijalizacija varijabli ........................................................................................ 21 2.6.3. Aritmetički operatori .......................................................................................... 21
2.7. Naredba za ulaz .......................................................................................................... 24 2.8. Zadaci za samostalan rad ........................................................................................... 28
3. MATEMATIČKE FUNKCIJE ............................................................................................ 30
3.1. Decimalni brojevi ....................................................................................................... 31
3.1.1. Fixed ................................................................................................................... 31 3.1.2. Setprecision ........................................................................................................ 32
3.2. Ostali manipulatori ..................................................................................................... 33 3.3. Zadaci za samostalan rad ........................................................................................... 33
4. NAREDBE ........................................................................................................................... 34
4.1. Sekvenca ili blok ........................................................................................................ 34
4.2. Relacijski operatori .................................................................................................... 35 4.3. Selekcije ..................................................................................................................... 35
4.3.1. Naredba if ........................................................................................................... 35 4.3.2. Naredba if-else .................................................................................................... 37 4.3.3. Zadaci za samostalan rad .................................................................................... 41
4.4. Logički operatori ........................................................................................................ 42
4.4.1. Zadaci za samostalan rad .................................................................................... 47 4.5. Ciklusi ili petlje .......................................................................................................... 47
4.5.1. For petlja ............................................................................................................. 48 4.5.2. Zadaci za samostalan rad .................................................................................... 55 4.5.3. While petlja ........................................................................................................ 57 4.5.4. Do while petlja ................................................................................................... 60 4.5.5. Naredba break ..................................................................................................... 61 4.5.6. Naredba switch ................................................................................................... 61 4.5.7. Zadaci za samostalan rad .................................................................................... 63
5. NIZOVI (POLJA) ................................................................................................................ 64
v
5.1. Jednodimenzionalni nizovi ......................................................................................... 65
5.2. Zadaci za samostalan rad ........................................................................................... 69
6. STRING ............................................................................................................................... 70
6.1. Deklaracija stringa ..................................................................................................... 70
6.2. Čitanje i ispisivanje znakova ...................................................................................... 71
6.3. Ispitivanje znakova ..................................................................................................... 72
6.4. Rad sa stringom (nizom znakova) .............................................................................. 76
6.5. Zadaci za samostalan rad ........................................................................................... 81
7. ZADACI S OPĆINSKIH TAKMIČENJA ........................................................................... 82
7.1. Zadaci 2010 ................................................................................................................ 82
7.2. Zadaci 2011 ................................................................................................................ 85
7.3. Zadaci 2012 ................................................................................................................ 88
7.4. Zadaci 2013 ................................................................................................................ 91 7.5. Zadaci 2014 ................................................................................................................ 94
7.6. Zadaci 2015 ................................................................................................................ 97
7.7. Zadaci 2016 .............................................................................................................. 100 7.8. Zadaci 2017 .............................................................................................................. 103
8. ZADACI S KANTONALNIH TAKMIČENJA ................................................................. 106
8.1. Zadaci 2011 .............................................................................................................. 106
8.2. Zadaci 2012 .............................................................................................................. 109
8.3. Zadaci 2013 .............................................................................................................. 112 8.4. Zadaci 2014 .............................................................................................................. 115
8.5. Zadaci 2015 .............................................................................................................. 119 8.6. Zadaci 2016 .............................................................................................................. 122 8.7. Zadaci 2017 .............................................................................................................. 125
9. TEORETSKI ZADACI S OPĆINSKIH TAKMIČENJA .................................................. 128
9.1. Zadaci 2010 .............................................................................................................. 128
9.2. Zadaci 2011 .............................................................................................................. 129
9.3. Zadaci 2012 .............................................................................................................. 130
9.4. Zadaci 2013 .............................................................................................................. 133 9.5. Zadaci 2014 .............................................................................................................. 136
9.6. Zadaci 2015 .............................................................................................................. 137
9.7. Zadaci 2016 .............................................................................................................. 138 9.8. Zadaci 2017 .............................................................................................................. 140
10. TEORETSKI ZADACI S KANTONALNIH TAKMIČENJA ........................................ 141
10.1. Zadaci 2011 ............................................................................................................ 141
10.2. Zadaci 2012 ............................................................................................................ 142
10.3. Zadaci 2013 ............................................................................................................ 146 10.4. Zadaci 2014 ............................................................................................................ 148
10.5. Zadaci 2015 ............................................................................................................ 149
10.6. Zadaci 2016 ............................................................................................................ 150 10.7. Zadaci 2017 ............................................................................................................ 152
1
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-16.01mingw-setup.exe tj. kliknemo
na Sourceforge.net (može i na FossHub), gdje pokazuje crvena strelica, te sačekamo par
sekundi i preuzimanje će početi automatski.
Slika 1
Kad smo preuzeli instalacijsku datoteku, onda možemo krenuti s instalacijom programa. Inače
instalacija je jednostavna, samo Next, Next, Next, itd. Ali evo ipak malo detaljnijeg uputstva.
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.
2
A zatim odaberemo mjesto gdje će program biti instaliran (instalacijski program sam odabere
mjesto, ako vam ne odgovara možete promijeniti, najbolje ostaviti) i kliknuti na Install.
Slika 3 Odabir foldera
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 2
3
Slika 4 Lista otkrivenih kompajlera
Ovo predstavlja 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 sličnu slici 4. No, ako ne pronađe GNU GCC
Compiler, tada će pisati Invalid. U tom slučaju, pokrenete program Code Blocks (slika 5)
odaberete
Settings → Compiler
Zatim, kliknuti na Toolchain executables kao na slici 5. A zatim na Auto-detect. 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:\Program Files\CodeBlocks\MinGW (obično je ovaj, ali zavisi gdje ste ga instalirali).
4
Slika 5 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:
Slika 6 Izgled programa Code Blocks
5
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:
File ⟶New ⟶File...
Slika 7 Kreiranje source datoteke
Dobivamo sljedeći prozor u kojem kliknemo na drugu sličicu ispod koje piše C/C++ source,
a zatim na Go.
Slika 8 Izbor datoteke
6
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 9 Izbor jezika
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 10 Izbor lokacije na disku
7
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 11.
Slika 11 Izbor foldera (mape) gdje će biti program
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, tj koristiti
engleski alfabet za ime datoteke programa.
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 je stvorena.
8
Slika 12 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 12.
Naredbe za prvi program:
#include<iostream>
using namespace std;
int main(){
cout<<"Moj prvi program";
return 0;
}
9
Objasnimo ukratko značenje svake linije koda.
#include<iostream> → Linija počinje sa znakom Hach # (taraba). To je pretprocesorska
radnja koja računaru kaže da u naš program uključi iostream datoteku.
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()→ 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 ne bi 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
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 13.
Slika 13 Izgled izvršenja programa
10
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 ; koja se nalazi iza
navodnika, te pokrenimo program tipkom F9, dobićemo upozorenje o greškama, slika 14.
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.)
Slika 14 Analiza napravljenih greški
11
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 prozor, u kojem kliknemo na General settings → Other editor settings, i gdje piše
Show line numbers označimo kvačicom i kliknemo na OK, slika 15.
Slika 15 Brojevi linija (Line numbers) Kod treba biti lijepo napisan da bi bio pregledan, zbog kasnijih popravki. Da se mi ne bi
previše oko toga zamarali, kada pišemo kod (program), jednostavno kliknemo desnim
dugmetom miša i odaberemo Format use Astyle.
12
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; }
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
13
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; }
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, ako pišemo u više redova.
14
#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.
#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 Ucim 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.
15
#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; }
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 PRIJEĆ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; }
16
Š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; }
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.
17
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žemo 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 Oznaka tipa Broj bitova Opseg znakovni char 8 0 – 255 cjelobrojni int 16 -32768 – 32767 realni float 32 3.4E-38 – 3.4E+38 realni dvostruke preciznosti double 64 1.7E-308 – 1.E+38 ne sadrži vrijednosti 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
samo u njega može "stati" znatno veći broj. Nekada radimo samo npr. s pozitivnim brojevima,
pa su nam negativni nepotrebni, da ne bi gubili memoriju i da bi mogli spremiti što veći
pozitivan broj onda koristimo modifikator. Tako s modifikatorom unsigned tip int
zauzima opseg od 0 – 65534.
Osnovni tipovi podataka se mogu modificirati (promijeniti) koristeći jedan ili više
modifikatora:
• signed
• unsigned
• short
• 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.
18
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 vrijednosti ovise i od kompajlera koji koristimo, te i od računara na kojem
radimo.
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
19
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;
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
20
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.
Ključne riječi koje ne smijete koristiti za imena varijabli i konstanti su:
auto
long
char
short
default
static
double
switch
extern
unsigned
goto
while
int
case
return
continue
sizeof
struct
enum
union
continue
struct
enum
for
volatile
break
register
const
signed
do
else
typedef
float
void
if
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: =
21
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 u nju) 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.
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
22
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 s 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.
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 s 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.
23
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;
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.
24
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.
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 -- koji 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.
25
#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; }
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 cin>> varijabla;
26
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 prijeć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, hoćete li ispisati nekakvu poruku ili ne. Na izlazu (ekranu)
se traži samo ispis zbira, nikakva poruka. Vi sami birate hoćete li 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čini ispisa su samo
šminka – da ljepše izgleda.
Prvi slučaj bez ikakvih poruka, unosimo npr. 2 i 3:
#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:
27
#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.
#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.
28
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 varijabli 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; 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 deklarirati 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
29
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).
Ulaz: 2. Izlaz: 8.
Zadatak 5. Napisati program za računanje površine kvadrata (P=a2).
Ulaz: 3. Izlaz: 9.
Zadatak 6. Napisati program za računanje površine pravougaonika (P=ab).
Ulaz: 2, 3. Izlaz: 6.
Zadatak 7. Napisati program za računanje obima pravougaonika (O=2a+2b).
Ulaz: 2, 3. Izlaz: 10.
Zadatak 8. Napisati program koji sabira tri broja.
Ulaz: 1, 2, 3. Izlaz: 6.
Zadatak 9. Napisati program koji učitava tri broja i ispisuje njihov proizvod.
Ulaz: 2, 3, 4. Izlaz: 24.
Zadatak 10. 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)
Ulaz: 4, 4, 5, 5. Izlaz: 4.5.
Zadatak 11. Napisati program za računanje površine i zapremine kocke.
Ulaz: 2. Izlaz: P=24, V=8.
Zadatak 12. Napisati program koji unosi dužinu u centimetrima i ispisuje koliko je to u
metrima i kilometrima.
Ulaz: 124. Izlaz: m=1.24, km=0.00124.
Zadatak 13. Napisati program koji unosi dva ugla trougla i ispisuje veličinu trećeg ugla, npr.
Ulaz: 60, 80. Izlaz: 40.
Zadatak 14. Napisati program koji unosi temperaturu u °C (Celzijus) i ispisuje koliko je to °F
(Fahrenheit). (Uputa: Formula za konverziju iz °C u °F je °F = (°C * 9) / 5 + 32)).
Ulaz: 100. Izlaz: 212.
Zadatak 15. Napisati program koji unosi broj dana i ispisuje koliko je to godina, sedmica i
dana. Zanemariti prestupne godine.
Ulaz: 373. Izlaz: 1 godina, 1 sedmica i 1 dan.
30
Zadatak 16. Napisati program koji za uneseno � ≠ 0 računa vrijednost funkcije
�� = �� + � − 1� − 2�� � + 3
Ulaz: 1. Izlaz: 2.
Zadatak 17. Na ulazu se unose dva broja. Na izlazu ispisati dvostruku vrijednost prvog broja
i trostruku vrijednost drugog broja.
Ulaz: 3, 2. Izlaz: 6, 6.
Zadatak 18. Napisati program koji će za uneseni poluprečnik kruga, izračunati njegov obim.
(Uputa: � = 2��, umjesto � pisati 3.14159, za r i O koristiti tip double ili float).
Ulaz: 3. Izlaz: 18.8496.
Zadatak 19. Napisati program koji unosi četverocifren broj i ispisuje cifre tog broja počev od
cifre najmanje mjesne vrijednosti (cifre jedinica).
Ulaz: 1253. Izlaz: 3, 5, 2, 1.
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čke 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.
31
pow(x,y) Stepenovanje (Potenciranje). Vrijednost funkcije ��. Ako je � = 0, mora da bude � > 0. Ako je � < 0, � mora biti cijeli broj.
sqrt(x) Korjenovanje (drugi korijen). Vrijednost funkcije √�, � ≥ 0
abs(n) Apsolutna vrijednost
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; }
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.
32
#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
#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.
33
#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; }
3.3. Zadaci za samostalan rad
Zadatak 20. Napisati program koji unosi dva broja x i y i ispisuje koliko je ��.
Ulaz: 2, 3. Izlaz: 8.
Zadatak 21. Napisati program koji unosi prirodan broj i ispisuje kvadratni korijen tog broja.
Ulaz: 2. Izlaz: 1,41. Rezultat zaokruži na dvije decimale.
34
Zadatak 22. Napisati program koji unosi katete pravouglog trougla i ispisuje hipotenuzu.
Ulaz: 4, 3. Izlaz: 5.00. Rezultat zaokruži na dvije decimale.
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.
35
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.
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: ako je uslov (uvjet) istinit
(true), vrijednost je 1; ako 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.
36
Uslov (uvjet) mora bit takav da za njega računar može utvrditi da li je tačan ili netačan.
Primjer 13.
IZRAZ USLOV OBJAŠNJENJE
5 = = 5 DA Jer možemo utvrditi da li je izraz tačan ili netačan.
a>b DA Jer možemo utvrditi da li je izraz tačan ili netačan za određene vrijednosti a i b.
a+b NE Jer ne možemo utvrditi da li je izraz tačan ili netačan za određene vrijednosti a i b.
(a+b)*c<0 DA Jer možemo utvrditi da li je izraz tačan ili netačan za određene vrijednosti a,b i c.
5-2 NE 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; return 0; }
Za unos 5
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;
37
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;
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:
38
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.
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.
39
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; return 0; }
Za unos 2 i 3
Za unos -2 i 1
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)
40
samo dva broja. Pa ćemo mi uzeti npr. brojeve a i b, te ih uporediti, da vidimo koji je veći
(postaviti 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 usporedimo max i c, pa ko od njih bude veći, taj je onda najveći broj.
#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; return 0; }
Za unos 1, 2 i 3
Za unos 1, 3 i 2
Za unos 3, 2 i 1
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 hoće li ga program
ispravno naći.
Može li se zadatak riješiti bez uvođenja nove varijable? Da, može, upotrebom proširene if-
else-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 naredba4, mada možete ići dokle vam je volja. Dakle, ako je uslov1
tačan, onda izvrši naredba1, inače (ako nije tako), provjeri da li je uslov2 tačan, pa ako
41
jeste izvrši naredba2, inače (ako nije tačan), provjeri je li uslov3 tačan, pa ako jeste izvrši
naredba3, inače izvrši naredba4.
#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 23. Napisati program koji unosi dva broja i ispisuje onog koji je veći.
Ulaz: 1, 5. Izlaz: 5. Ulaz: 5, 1. Izlaz: 5.
Zadatak 24. Napisati program koji unosi prirodan broj i ispisuje poruku "PARAN", ako je
broj paran, inače poruku "NEPARAN".
Ulaz: 2. Izlaz: PARAN. Ulaz: 3. Izlaz: NEPARAN.
Zadatak 25. Napisati program koji unosi broj dana u sedmici (1-7) i ispisuje koji je to dan.
Ulaz: 2. Izlaz: Utorak.
Zadatak 26. Napisati program koji unosi tri ugla i provjerava da li ti uglovi čine trougao.
Ulaz: 30, 60, 90. Izlaz: DA. Ulaz: 60, 60, 90. Izlaz: NE.
Zadatak 27. Napisati program koji unosi dva cijela broja. Ako je prvi veći od nule ispisuje
njihov proizvod, inače njihov zbir.
Ulaz: 4, 3. Izlaz: 12. Ulaz: -4, 3. Izlaz: -1.
Zadatak 28. Unijeti dva cijela broja. Ako je kvadrat prvog veći od kvadrata drugog broja,
ispisati njihov zbir, a ako nije njihovu razliku.
Ulaz: 4, 3. Izlaz: 7. Ulaz: 2, 3. Izlaz: -1.
Zadatak 29. Napisati program koji će provjeriti jesu li dva broja a i b jednaka ili ne.
Ulaz: 5, 5. Izlaz: DA. Ulaz: 6, -6. Izlaz: NE.
Zadatak 30. Napisati program koji će provjeriti da li je cijeli broj unesen s tastature veći od 3.
Ulaz: 8. Izlaz: DA. Ulaz: 1. Izlaz: NE.
42
Zadatak 31. Napisati program koji učitava dva broja x, y te ispisuje poruku da li je x<y ili
x>y ili x=y.
Ulaz: 1, 4. Izlaz: 1 je manje od 4.
Ulaz: 1, 0. Izlaz: 1 je vece od 0.
Ulaz: 5, 5. Izlaz: 5 je jednako 5.
Zadatak 32. Napisati program koji učitava dužine tri stranice trougla i ispisuje poruku da li je
trougao pravougli.
Ulaz: 3, 4, 5. Izlaz: Pravougli. Ulaz: 4, 6, 8. Izlaz: Nije pravougli.
Zadatak 33. Napisati program koji učitava tri prirodna broja i ispitiva da li su ti brojevi
stranice trougla. (Uputa: Zbir dvije stranice mora biti veći od treće, da bi imali trougao).
Ulaz: 3, 4, 5. Izlaz: Da. Ulaz: 1, 2, 3. Izlaz: Ne.
Zadatak 34. Napisati program koji za uneseni prirodan broj provjerava da li neparan broj.
Ulaz: 3. Izlaz: DA. Ulaz: 6. Izlaz: NE.
Zadatak 35. Napisati program koji će za uneseni cijeli broj ispitati da li je djeljiv s 5.
Ulaz: 10. Izlaz: DA. Ulaz: 13. Izlaz: NE.
Zadatak 36. Napisati program koji od tri unesena cijela broja ispisuje najmanjeg.
Ulaz: 1, 2, 3. Izlaz: 1. Ulaz: 2, 1, 3. Izlaz: 1. Ulaz: 2, 3, 1. Izlaz: 1.
Zadatak 37. Napisati program koji će učitati trocifreni prirodan broj. Ispremještati mu cifre
tako da se dobije najveći mogući broj sastavljen od te tri cifre.
Ulaz: 476. Izlaz: 764.
Zadatak 38. Napisati program koji za tri unijeta cijela broja a, b i c ispituje da li je broj a
jednak zbiru brojeva b i c. 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.
Ulaz: 6, 4, 2. Izlaz: Broj 6 je jednak zbiru brojeva 4 i 2.
Ulaz: 5, 6, 1. Izlaz: NE.
Zadatak 39. 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.
Ulaz: 4, 2. Izlaz: Broj 4 je djeljiv brojem 2.
Ulaz: 5, 2. Izlaz: Broj 5 nije djeljiv brojem 2.
43
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) s A, a drugi s 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 B A && B 0 0 0 0 1 0 1 0 0 1 1 1
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 B A || B 0 0 0 0 1 1 1 0 1 1 1 1
44
Primjer 17. Izračunati (utvrditi) da li su sljedeći izrazi (uslovi) tačni ili netačni.
1. # = 5, $ = 1 a) # + 1 > 0&&# − $ > 0b) # >= 5&&$ <= 5c) # + $ + 3 − # − $ > 0&&#/$– 5 < 0
2. # = 1, $ = 3, ( = −1
a) # > 0||$ > 0b) # − $ < 0||( − $ <= 0c) # + ( − $ < #||$ − ( > #
3. # = 1, $ = 2, ( = 4
a) # >= 1&&$ > 0&&( < 0b) # < $&&( > 0&&# + 1 > 0&&( == 0c) # < 0||$ > 0||( <= 0d) # + 5 < 1||$ − 5 > #||( + 5 <= $e) #! = 5f) # > 0||$ < 0&&( > 0g) # == 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
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
45
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.
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
46
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.
#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; }
47
4.4.1. Zadaci za samostalan rad
Zadatak 40. Napisati program koji unosi cijeli broj i ispisuje poruku "DA" ako je broj veći od
100 ili manji od nule, ako nije poruku "NE".
Ulaz: 105. Izlaz: DA. Ulaz: -5. Izlaz: DA. Ulaz: 56. Izlaz: NE.
Zadatak 41. 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.
Ulaz: 10. Izlaz: Broj 10 je djeljiv s 5 i paran je broj.
Ulaz: 25. Izlaz: NE. Ulaz: 12. Izlaz: NE.
Zadatak 42. Napisati program koji učitava cijeli broj i ispitiva da li je taj broj djeljiv s 5 i 7.
Ulaz: 35. Izlaz: DA. Ulaz: 25. Izlaz: NE. Ulaz: 14. Izlaz: NE.
Zadatak 43. Napisati program koji će ispisati da li je uneseni broj prihvaćen. Broj je
prihvaćen ako je zadovoljio sljedeće nabrojane uslove:
• pozitivan
• neparan (da nije djeljiv s 2)
• da nije trocifren (da nije u rasponu od 100 do 999)
• da nije djeljiv sa 7
Ulaz: 3. Izlaz: PRIHVACEN. Ulaz: -5. Izlaz: NIJE PRIHVACEN.
Ulaz: 20. Izlaz: NIJE PRIHVACEN. Ulaz: 101. Izlaz: NIJE PRIHVACEN.
Ulaz: 1645. Izlaz: NIJE PRIHVACEN.
Zadatak 44. 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ća od nule, inače ispisuje broj B.
Ulaz: 5, 2. Izlaz: 5. Ulaz: 3, 6. Izlaz: 6. Ulaz: -2, -6. Izlaz: -6.
Zadatak 45. 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.
Ulaz: 1, 2, -2, 4. Izlaz: -4. Ulaz: 1, 2, 3, 4. Izlaz: -4.
4.5. Ciklusi ili petlje
Ciklusi ili petlje su upravljačke strukture koje omogućuju ponovljeno izvršavanje neke
naredbe.
Prema zadavanju uslova dokle treba da se petlja ponavlja, mogu da postoje:
48
• 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 nastavljanje 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;
}
3) for(izraz1; uslov; izraz2) { naredba1 naredba2 ... naredba n
}
49
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.
50
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 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.
51
#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 sa 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
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.
52
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.
53
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:
dijelimo sve do unesenog broja tj. i<n. Izraz2 je i++. Ostaje još samo da vidimo da li je taj
zbir jednak unesenom broju, ako jeste broj je savršen, inače nije.
54
#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 varijablu zbir odnosno njenu vrijednost.
Unutar te petlje će biti i provjera da li je zbir jednak n tj. ako jeste ispisujemo 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; }
55
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; return 0; }
Za unos 5
4.5.2. Zadaci za samostalan rad
Zadatak 46. Napisati program koji će ispisati sve neparne brojeve od 1 do 20.
Izlaz: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19.
Zadatak 47. Napisati program koji će ispisati brojeve 10, 20, 30, ... , 100.
Izlaz: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.
Zadatak 48. Napisati program koji ispisuje prirodne brojeve od 5 do 20 unazad.
Izlaz: 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5.
Zadatak 49. Napisati program koji ispisuje sve brojeve između 1 i 100, koji su djeljivi s 11.
Izlaz: 11, 22, 33, 44, 55, 66, 77, 88, 99.
Zadatak 50. Napisati program za ispis zbira prvih 50 prirodnih brojeva.
Izlaz: 1275.
Zadatak 51. Napisati program koji će sabrati sve parne brojeve od 1 do 200.
Izlaz: 10100.
Zadatak 52. Napisati program koji unosi prirodan broj i ispisuje sve njegove pozitivne
faktore.
Ulaz: 6. Izlaz: 1, 2, 3, 6.
Zadatak 53. Napisati program koji unosi dva prirodna broja i ispisuje NZD tih brojeva, npr.
Ulaz: 12, 30. Izlaz: NZD(12,30) = 6.
Zadatak 54. 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).
Izlaz: 60, 75, 90.
56
Zadatak 55. Napisati program za ispis zbira prirodnih brojeva manjih od 500, a djeljivih sa 3
i ispisati koliko takvih brojeva ima.
Izlaz: Njihov zbir je 41583, a ima ih 166.
Zadatak 56. 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 dvocifreni višekratnici.
Ulaz: 19. Izlaz: 19, 38, 57, 76, 95.
Ulaz: 7. Izlaz: 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98.
Zadatak 57. 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.
Ulaz: 1, 10. Izlaz: 2, 4, 6, 8.
Zadatak 58. Napisati program koji sabira sve višekratnike broja 7 koji se nalaze između
zadanih prirodnih brojeva A i B. Ako između zadanih brojeva nema višekratnika broja 7,
ispišite poruku „Nema trazenih visekratnika“.
Ulaz: 1, 30. Izlaz: 7, 14, 21, 28.
Ulaz: 1, 6. Izlaz: Nema trazenih visekratnika.
Zadatak 59. Napisati program koji provjerava da li je uneseni broj prost broj. (Broj . > 1 je
prost ako je djeljiv samo s 1 i sa samim sobom)
Ulaz: 7. Izlaz: DA. Ulaz: 4. Izlaz: NE. Ulaz: 1. Izlaz: NE.
Zadatak 60. Napisati program koji će ispisati zbir kvadrata brojeva od 1 do n.
Ulaz: 4. Izlaz: Zbir je 30.
Zadatak 61. Napisati program koji će ispisati sumu (zbir) prirodnih brojeva u intervalu od 1
do n koji su djeljivi s 3 i sa 7.
Ulaz: 1, 50. Izlaz: Zbir je 63.
Ulaz: 1, 20. Izlaz: Nema ih.
Zadatak 62. Napisati program koji će ispisati zbir prirodnih brojeva u intervalu od 1 do n čija
je cifra jedinica 8.
Ulaz: 1, 50. Izlaz: Zbir je 140.
Ulaz: 1, 7. Izlaz: Nema ih.
Zadatak 63. Napisati program za ispis tablice množenja od 1 do 5 unesenim brojem n.
Ulaz: 3. Izlaz: 1*3= 3, 2*3= 6, 3*3= 9, 4*3= 12, 5*3= 15.
Zadatak 64. Napisati program za ispis aritmetičke sredine parnih prirodnih brojeva do n.
Ulaz: 10. Izlaz: 6.5.
Zadatak 65. Napisati program koji će izračunati zbir dvocifrenih brojeva kod kojih je zbir
cifara manji od 7.
57
Izlaz: 520.
Zadatak 66. Napisati program koji će ispisati sve dvocifrene brojeve s cifrom jedinica većom
od 6.
Izlaz: 17, 18, 19, 27, 28, 29, 37, 38, 39, 47, 48, 49, ... , 97, 98, 99.
Zadatak 67. Napisati program koji će ispisati dvocifrene brojeve kod kojih je pri djeljenju s 3
je ostatak 2.
Izlaz: 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, ... , 92, 95, 98.
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.
Načini pisanja while naredbe:
1) while ( uslov ) naredba; 2) while ( uslov ) naredba;
3) while ( uslov ) {
naredba1; naredba2; ... naredba n;
}
4) while ( uslov ){ naredba1; naredba2; ... naredba n;
}
58
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
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 s 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 primijenimo modulo tj. 62%10=2. Kako dobiti treću cifru? Pa na isti
59
način kao i drugu. Podijelimo 62 i 10. Dobićemo 6,2. Računar će odbaciti dio poslije zareza,
jer radimo s cijelim brojevima i ostaje broj 6. Konačno, 6%10=6 i tako smo dobili sve tri
cifre. Ako podijelimo još broj 6 s 10 dobit ćemo 6/10=0,6 tj. 0 jer će računar odbaciti dio
poslije zareza. Dakle, podijelimo li s 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 s 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 (u našem primjeru broj 6) podijelimo s 10 dobijemo 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; }
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.
60
#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
{ naredba1; naredba2; ... naredba n;
} while(uslov);
4) do { naredba1; naredba2; ... naredba n;
} while( uslov);
61
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. Naredba Switch
Naredba switch omogućava da selektiramo kod koji će se izvršiti na osnovu nekog uslova,
tj. provjerava da li izraz odgovara nekoj od konstantnih cjelobrojnih vrijednosti (ili
karaktera).
Opći oblik naredbe switch je:
switch (izraz) { case konstanta_1: blok naredbi_1; break; case konstanta_2: blok naredbi_2; break; . . . case konstanta_n-1: blok naredbi_n-1; break; default: blok naredbi_n; break; }
U slučaju da izraz ima vrijednost konstanta_1, tada se izvršavaju blok naredbi_1, u
slučaju da ima vrijednost konstanta_2 tada se izvršavaju blok naredbi_2, a u slučaju da
nema nijednu od ponuđenih vrijednosti tada se izvršava default odnosno blok
naredbi_n.
62
Ako dobivena vrijednost nije jednaka niti jednoj od navedenih konstanti, izvršit će se blok
naredbi pridružen opciji default. Izvršavanje bloka naredbi prekida se naredbom break.
Ako se blok naredbi u case ne završi s break, nastavlja se izvršavati blok naredbi sljedećeg
case. Opcija default može se i izostaviti, ako za njom ne postoji potreba!
Primjer 32. Napisati program koji učitava ocjenu i ispisuje tu ocjenu riječima.
Rješenje.
#include<iostream> using namespace std; int main() { int ocjena; cout<<"Unesite ocjenu:"<<endl; cin>>ocjena; switch (ocjena) { case 1: cout<<"Nedovoljan"<<endl; break; case 2: cout<<"Dovoljan"<<endl; break; case 3: cout<<"Dobar"<<endl; break; case 4: cout<<"Vrlo dobar"<<endl; break; case 5: cout<<"Odlican"<<endl; break; default: cout<<"Nepostoji takva ocjena"<<endl; } return 0; }
63
4.5.7. Zadaci za samostalan rad
Zadatke rješavati while petljom.
Zadatak 68. Napisati program za ispis kvadrata prirodnih brojeva od 1 do 5.
Izlaz: 1, 4, 9, 16, 25.
Zadatak 69. Napisati program za ispis prirodnih brojeve od 5 do 20 unazad.
Izlaz: 20, 19, 18, ... , 7, 6, 5.
Zadatak 70. Napisati program za ispis kvadratnog korijena prirodnih brojeva do 10.
Izlaz: 1.00, 1.41, 1.73, 2.00, ... , 3.00, 3.16. Rezultat zaokružiti na dvije decimale.
Zadatak 71. Napisati program za ispis prirodnih brojeva od 1 do n.
Ulaz: 5. Izlaz: 1, 2, 3, 4, 5.
Zadatak 72. Napisati program za ispis parnih prirodnih brojeva od 1 do n.
Ulaz: 9. Izlaz: 2, 4, 6, 8.
Zadatak 73. Napisati program za ispis zbira brojeva od 1 do n koji su djeljivi sa 7.
Ulaz: 20. Izlaz: 21. Ulaz: 7. Izlaz: 7. Ulaz: 5. Izlaz: 0.
Zadatak 74. Napisati program za brojanje brojeva djeljivih s 3, za prirodne brojeve od 1 do n.
Ulaz: 7. Izlaz: 2.
Zadatak 75. Napisati program koji za uneseni prirodni broj ispisuje njegovu prvu i zadnju
cifru.
Ulaz: 8. Izlaz: 8. Ulaz: 12. Izlaz: 1, 2. Ulaz: 456. Izlaz: 4, 6. Ulaz: 78931. Izlaz: 7, 1.
Zadatak 76. Napisati program koji unosi prirodan broj i ispisuje zbir njegovih cifara.
Ulaz: 2. Izlaz: 2. Ulaz: 11. Izlaz: 2. Ulaz: 125. Izlaz: 8. Ulaz: 8346. Izlaz: 21.
Zadatak 77. Napisati program koji unosi prirodan broj i ispisuje proizvod njegovih cifara.
Ulaz: 2. Izlaz: 2. Ulaz: 11. Izlaz: 1. Ulaz: 125. Izlaz: 10. Ulaz: 8346. Izlaz: 576.
Zadatak 78. Napisati program koji unosi prirodan broj i ispisuje ga obrnuto.
Ulaz: 1234. Izlaz: 4321.
Zadatak 79. Napisati program koji unosi prirodan broj i provjerava da li je učitani broj
palindrom.
Ulaz: 121. Izlaz: DA; Ulaz: 123, Izlaz: NE.
Zadatak 80. Napisati program koji unosi prirodan broj i ispisuje mu cifre riječima.
Ulaz: 123. Izlaz: Jedan Dva Tri.
Zadatak 81. Napisati program koji unosi dva prirodna broja i ispisuje njihov NZS.
Ulaz: 12, 30. Izlaz: NZS(12,30) = 60.
64
Zadatak 82. Napisati program koji unosi trocifren prirodan broj i ispitiva da li je uneseni broj
Armstrongov (Broj je Armstrongov ako je jednak sumi svojih cifara podignutih na stepen
dužine broja. U našem slučaju, broj je Armstrongov ako je jednak zbiru kubova svojih cifara).
Ulaz: 371. Izlaz: DA (33 + 73 + 13 = 371). Ulaz: 121. Izlaz: NE (13+23+13= 11).
Zadatak 83. Napisati program koji unosi prirodan broj n i ispisuje sve Armstrongove brojeve
u intervalu od 1 do n.
Ulaz: 1000. Izlaz: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407.
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-inu varijabli prilikom deklaracije, pa onda i
kad ih budemo unosili. Postavlja se pitanje, ima li lakšeg i jednostavnijeg načina? Ima,
upotrebom nizova ili polja. Šta je to niz?
Niz ili polje je konačni niz podataka istog tipa koji predstavljaju cjelinu.
Primjer 33. 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
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.
65
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 naziv.
Obavezno idu srednje zagrade [], koje se dobiju pritiskom tipki Alt Gr + F i Alt Gr + G.
Unutar srednjih zagrada se navodi broj, koji označava dužinu niza tj. govori koliko će niz
imati elemenata.
Primjer 34.
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];
66
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 35.
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 36.
int a[5] = {9, 5, 4, -1, 1};
Sada smo svakom elementu niza pridružili određenu vrijednost.
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 5 4 -1 1 a[0] a[1] a[2] a[3] a[4]
Elemente niza najčešće unosimo for petljom ili while petljom.
67
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 37. 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 s for petljom:
#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.
68
Primjer 38. Napisati program koji unosi 10 cijelih brojeva, i ispisuje ih obrnutim
redoslijedom 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 39. Napisati program koji će učitati elemente (članove) niza i sortirati ih po rastućem
redoslijedu. (5 članova niza)
Rješenje.
#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; }
69
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++)
uspoređ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 uspoređ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 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 ne bi pogriješili kad bi stavili i<5, samo bi
računar imao malo više posla.
5.2. Zadaci za samostalan rad
Zadatak 84. 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 redoslijedu.
Ulaz: 2, -1, 3, 1, 5, 0, 7. Izlaz: 7, 5, 3, 2, 1, 0, -1.
70
Zadatak 85. Napisati program koji će učitati niz od 10 cijelih brojeva i ispisati koliko ima
učitanih negativnih brojeva.
Ulaz: 5, -2, 0, -8, 1, 3, -3, -5, 7, 12. Izlaz: 4
Zadatak 86. Napisati program koji će učitati niz od 10 prirodnih brojeva i ispisati njihovu
aritmetičku sredinu.
Ulaz: 2, 3, 4, 1, 5, 6, 10, 8, 9, 13. Izlaz: 6.10.
Zadatak 87. Napisati program koji će učitati niz od 10 cijelih brojeva i ispitati da li zbir tih
brojeva djeljiv s 11.
Ulaz: 2, 3, 4, 1, 5, 6, 10, 8, 9, 7. Izlaz: DA. Ulaz: 2, 3, 4, 1, 5, 6, 10, 8, 9, 13. Izlaz: NE.
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 40.
Neka je s="Jezik C++". Prikaz stringa s u memoriji bit će:
J e z i k C + + \0
s[0] s[1] s[2] s[3] s[4] s[5] 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.
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 41.
char A[80]; ili char tekst[]="Jezik C++"
71
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 42. Napišimo program koji će unositi jednu riječ i ispisivati je, te ispisati prvo slovo
je riječi.
Rješenje.
#include <iostream> using namespace std; int main() { char rijec[20]; cin>>rijec; cout<<rijec<<endl; cout<<rijec[0]<<endl; return 0; }
Za unos dan
Za unos dan je lijep
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. Moramo uključiti biblioteku
#include<cstdio>
getchar()
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.
putchar(c) Ova funkcija ispisuje znak c (jedan znak) na glavni izlaz (ekran). Tip argumenta je int.
gets(s)
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.
puts(s)
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.
72
Primjer 43. 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>
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?
73
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 44. 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; }
Primjer 45. 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; }
74
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 46. 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; }
Primjer 47. 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; }
75
Primjer 48. 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; }
Primjer 49. 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; }
76
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
(spremljeno).
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.
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 → ivo)
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.
77
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
Primjer 50. 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; }
Primjer 51. 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; }
78
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 52. 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 53. 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 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.
79
#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.
#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 54. 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.
80
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 redoslijedu
(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 unesena 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.
#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; }
81
6.5. Zadaci za samostalan rad
Zadatak 88. Napisati program koji će zadani string „ZDRAVO SVIJETE“ ispisati malim
slovima.
Izlaz: zdravo svijete
Zadatak 89. Napisati program koji će učitati string (maksimalno 256 znakova), te ispisati
dužinu stringa (koliko ste znakova unijeli).
Ulaz: Kamion. Izlaz: 6.
Zadatak 90. Napisati program koji će prebrojiti koliko se u učitanom stringu pojavilo
suglasnika R i S. (Brojati mala i velika slova).
Ulaz: Ris. Izlaz: 2. Ulaz: Med. Izlaz: Nema ih.
Zadatak 91. Napisati program koji će prebrojiti koliko riječi ima učitani string.
Ulaz: Danas je lijep dan. Izlaz: 4.
Zadatak 92. Napisati program koji će učitanu rečenicu ispisati je s desna na lijevo.
Ulaz: Izlazak sunca.. Izlaz: acnus kazalzI.
Zadatak 93. Napisati program koji će prebrojati broj velikih slova u učitanom stringu.
Ulaz: DeLL. Izlaz: 3. Ulaz: dan. Izlaz: Nema ih.
82
7. ZADACI S 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 # kažemo da je djeljiv s prirodnim brojem $ ako postoji prirodan broj
/ takav da je # = / ∙ $.
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
Sa 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) 100 5
Tastatura (ulaz) 4 8
Tastatura (ulaz) 18 5
Ekran (izlaz) 20
Ekran (izlaz) 4 nije djeljivo s 8
Ekran (izlaz) 18 nije djeljivo s 5
83
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
Sa 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) INFORMATIKA
Tastatura (ulaz) BRK
Tastatura (ulaz) EEOA
Ekran (izlaz) NFRMTK
Ekran (izlaz) BRK
Ekran (izlaz) BOSNA
84
3. zadatak TROUGAO
Treba napisati program koji će za tri prirodna broja učitana sa tastature ispitati da li
oni predstavljaju stranice jednakokrakog trougla.
Program snimiti pod imenom TROUGAO.
Ulazni podaci
Sa 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) 7 5 5
Tastatura (ulaz) 4 4 4
Tastatura (ulaz) 9 8 9
Tastatura (ulaz) 4 3 5
Tastatura (ulaz) 5 7 20
Ekran (izlaz) Jeste jednakokraki
Ekran (izlaz) Nije jednakokraki
Ekran (izlaz) Jeste jednakokraki
Ekran (izlaz) Nije jednakokraki
Ekran (izlaz) Nije trougao
85
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) Kako si?
Tastatura (ulaz) Danas je utorak.
Tastatura (ulaz) Pazi, auto!
Ekran (izlaz) Recenica je upitna.
Ekran (izlaz) Recenica je izjavna.
Ekran (izlaz) Recenica je uzvicna.
86
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) 1 5
Tastatura (ulaz) 8 3
Tastatura (ulaz) 7 7
Ekran (izlaz) Broj 5 je veci.
Ekran (izlaz) Broj 8 je veci.
Ekran (izlaz) Brojevi su jednaki.
87
3. zadatak KVADRAT
Treba napisati program koji će s tastature učitati stranicu kvadrata (u centimetrima),
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) 5
Tastatura (ulaz) 2
Tastatura (ulaz) 7
Ekran (izlaz) Obim je 20. Povrsina je 25.
Ekran (izlaz) Obim je 8. Povrsina je 4.
Ekran (izlaz) Obim je 28. Povrsina je 49.
88
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) 12 54 2 3
Tastatura (ulaz) 75 150 30 15
Tastatura (ulaz) 12 55 5 4
Ekran (izlaz) 72
Ekran (izlaz) 50
Ekran (izlaz) NE MOŽE
89
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) 2012
Tastatura (ulaz) 2000
Tastatura (ulaz) 1970
Ekran (izlaz) GODINA 2012 JE PRESTUPNA
Ekran (izlaz) GODINA 2000 JE PRESTUPNA
Ekran (izlaz) GODINA 1970 NIJE PRESTUPNA
90
3. zadatak KVADRATNI KORIJEN
Napisati program koji na osnovu unesenog 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) 5
Tastatura (ulaz) 9
Tastatura (ulaz) 25
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
Ekran (izlaz) BROJ 9 KVADRATNI KORIJEN 3 BROJ 10 KVADRATNI KORIJEN 3.16 BROJ 11 KVADRATNI KORIJEN 3.31 BROJ 12 KVADRATNI KORIJEN 3.46
Ekran (izlaz) BROJ 25 KVADRATNI KORIJEN 5 BROJ 6 KVADRATNI KORIJEN 5.09 BROJ 7 KVADRATNI KORIJEN 5.19 BROJ 8 KVADRATNI KORIJEN 5.29
91
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 u kojem 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 ≤ 2 ≤ 9,3 ≤ 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) 2 21
Tastatura (ulaz) 5 59
Tastatura (ulaz) 8 571
Ekran (izlaz) 10101
Ekran (izlaz) 214
Ekran (izlaz) 1073
92
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 jednakokrakog, 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) 3 3 8
Tastatura (ulaz) 3 5 4
Tastatura (ulaz) 7 2 6
Ekran (izlaz) NIJE TROUGAO
Ekran (izlaz) PRAVOUGLI
Ekran (izlaz) TROUGAO
93
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) BoSAnsKa
Tastatura (ulaz) edFGUeakXWAa
Tastatura (ulaz) QtZxRVy
Ekran (izlaz) 3 BXSxnsKX
Ekran (izlaz) 6 XdFGxXXkXWxX
Ekran (izlaz) 0 QtZxRVy
94
7.5. Zadaci 2014
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
18.03.2014.
1. zadatak BRAZIL
Dječak Nermin je učenik prvog razreda devetogodišnje škole i skuplja sličice za
SP2014 u Brazilu. Mama i tata su mu rekli da će mu davati novac za sličice ako on zna
izračunati koliko mu je novca potrebno. Međutim, matematika mu je problem jer još nisu učili
množenje a ni sabiranje brojeva većih od 10. Nermin ima računar ali ne zna programirati.
Zbog toga mu je potrebna tvoja pomoć.
Treba napisati program koji će za uneseni broj paketića sličica i cijenu jednog paketića
izračunati i ispisati na ekran koliko je novaca Nerminu potrebno da obavi tu kupovinu.
Program snimiti pod imenom BRAZIL.
Ulazni podaci
Sa tastature se u jednom redu učitava prirodan broj 3 (1 ≤ 3 ≤ 100kojipredstavljabrojpaketićasličicakojeNerminželikupiti,audrugomreduseučitavaprirodanbrojK1 ≤ K ≤ 100kojipredstavljacijenujednogpaketićasličica.
Izlazni podaci
Na ekranu je potrebno samo ispisati prirodan broj L koji predstavlja ukupan iznos
novca koji je potreban Nerminu da obavi kupovinu.
Primjeri
Tastatura (ulaz) 2 7
Tastatura (ulaz) 50 3
Ekran (izlaz) 14
Ekran (izlaz) 150
Objašnjenje Kako je cijena jednog paketića sličica 7KM, to je Nerminu za kupovinu 2 paketića potrebno 14KM
Objašnjenje Kako je cijena jednog paketića sličica 3KM, to je Nerminu za kupovinu 50 paketića potrebno 150KM.
95
2. zadatak KUPOVINA
Dječak Nermin će uskoro slaviti rođendan. Poznato mu je da će od drugara dobiti
razne poklone, ali isto tako zna da će od odraslih rođaka, a naročito od dida i majke, dobiti i
novac. Mama i tata su mu rekli da će za taj novac moći kupovati omiljene sličice nogometaša
ako bude znao izračunati koliko najviše paketića može kupiti za dobijeni novac a koliko će
mu ostati kusura. Njegovi problemi s matematikom su ti poznati i zbog toga mu je potrebna
tvoja pomoć..
Treba napisati program koji će za unesenu količinu novca i cijenu jednog paketića
izračunati i ispisati na ekran koliko najviše paketića sličica Nermin može kupiti te koliko će
mu novca nakon toga ostati.
Program snimiti pod imenom KUPOVINA.
Ulazni podaci
S tastature se u jednom redu učitava prirodan broj 3 (1 ≤ 3 ≤ 10000) koji
predstavlja iznos novca koji je Nermin dobio, a u drugom redu se učitava prirodan broj K
(1 ≤ K ≤ 100) koji predstavlja cijenu jednog paketića sličica.
Izlazni podaci
Na ekranu je potrebno samo ispisati u jednom redu broj L koji predstavlja najveći broj
paketića koje Nermin može kupiti za iznos novca kojim raspolaže, a u drugom redu ispisati
broj M koji predstavlja kusur koji će Nerminu ostati nakon što kupi L paketića sličica.
Primjeri
Tastatura (ulaz) 13 5
Tastatura (ulaz) 150 10
Ekran (izlaz) 2 3
Ekran (izlaz) 15 0
Objašnjenje Za 13KM Nermin može kupiti najviše 2 paketića sličica po cijeni od 5KM (2 ∗ 5 = 10) i ostanu mu još 3KM (13 − 10 = 3).
Objašnjenje Za 150KM Nermin može kupiti najviše 215 paketića sličica po cijeni od 10KM (15 ∗ 10 = 150) i ostanu mu još 0KM (150 − 150 = 0).
96
3. zadatak STEDNJA
Nerminova sestra Amila je učenica šestog razreda i matematika joj nije veliki
problem. Međutim, Amila voli više šetati nego računati. Za razliku od Nermina, Amila ne
kupuje sličice ali voli štedjeti novac. Odlučila je štedjeti i to tako što će prvi dan u kasicu
ubaciti nekoliko konvertibilnih maraka, drugi dan će ubaciti dvostruko više nego prvi dan,
treći dan će ubaciti dvostruko više nego drugi dan i sve tako redom. Npr. ako prvi dan ubaci
4KM, dugi će dan ubaciti 8KM, treći dan 16KM, četvrti 32KM, itd. Amilu interesuje koliko
će novca imati u kasici nakon nekoliko dana. Amila kao ni Nermin ne zna programirati, ali
zato kao i Nermin vjeruje u tvoju pomoć.
Treba napisati program koji će za uneseni iznos konvertibilnih maraka koji je Amila
ubacila u kasicu prvi dan i broj dana koliko će Amila štedjeti, izračunati i na ekran ispisati
iznos novca koji će Amila tada imati ušteđen.
Program snimiti pod imenom STEDNJA.
Ulazni podaci
S tastature se u jednom redu učitava prirodan broj M (1 ≤ M ≤ 1000) koji predstavlja
iznos novca koji je Amila stavila u kasicu prvi dan, a u drugom redu se učitava prirodan broj
3 (1 ≤ 3 ≤ 20) koji predstavlja broj dana koje je Amila stavljala novac u kasicu.
Izlazni podaci
Na ekranu je potrebno samo ispisati prirodan broj O koji predstavlja iznos koji će
Amila imati u kasici nakon 3 dana štednje.
Primjeri
Tastatura (ulaz) 1 10
Tastatura (ulaz) 7 2
Ekran (izlaz) 1023
Ekran (izlaz) 21
Objašnjenje Amila je u kasicu stavljala redom po danima:1, 2, 4, 8, 32, 64, 128, 256, 512KM. Ukupno je stavila: 1 + 2 + 4 + 8 + 16 +32 + 64 + 128 + 256 + 512 = 1023KM
Objašnjenje Amila je u kasicu stavljala prvi dan 7 a drugi dan 14KM pa je ukupno uštedila 7 + 14 =21KM.
97
7.6. Zadaci 2015
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
17.03.2015.
1. zadatak UNA
Treba napisati program koji će s tastature učitati jedan prirodan broj manji od 15. Ako
je taj broj jednocifren onda treba toliko puta ispisati riječ UNA, a ako je dvocifren, onda riječ
UNA treba ispisati onoliko puta koliko iznosi razlika broja 19 i učitanog broja. Ispis napraviti
u takvom obliku da se prvo napiše redni broj ispisa s tačkom, a zatim riječ UNA. Riječ UNA
svaki put ispisati u novom redu.
Program snimiti pod imenom UNA.
Ulazni podaci
S tastature u jednom redu učitavamo prirodan broj manji od 15.
Izlazni podaci
Na ekranu ispisati redni broj ispisa s tačkom i iza toga riječ UNA. Svaki put u novom
redu.
Primjeri
Tastatura (ulaz) 3
Tastatura (ulaz) 1. UNA 2. UNA 3. UNA
Objašnjenje Broj 3 je jednocifren i ispisujemo 3 puta riječ UNA
Ekran (izlaz) 14
Ekran (izlaz) 1. UNA 2. UNA 3. UNA 4. UNA 5. UNA
Objašnjenje Broj 14 je dvocifren i ispiujemo riječ UNA
19 − 14 = 5puta
98
2. zadatak DIJELI
Za prirodan broj # kažemo da je djeljiv s prirodnim brojem $ ako postoji prirodan broj
/ takav da je # = / ∙ $.
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) 100 5
Tastatura (ulaz) 4 8
Tastatura (ulaz) 18 5
Ekran (izlaz) 20
Ekran (izlaz) 4 nije djeljivo s 8
Ekran (izlaz) 18 nije djeljivo s 5
99
3. zadatak SLOVA
Treba napisati program koji broji (prebrojava) suglasnike u rečenici koja se unosi s
tastature i njihov broj ispisuje na ekran. Složeno slovo LJ se broji kao jedno slovo, ako i slovo
NJ. U primjerima neće biti slova Č, Ć, DŽ, Đ, Š i Ž. Rečenica završava tačkom.
Program snimiti pod imenom SLOVA.
Ulazni podaci
S tastature se u jednom redu učitava prirodan broj 3 (3 ≤ 100) koji predstavlja broj
slova u rečenici, a u drugom redu se učitava rečenica.
Izlazni podaci
Na ekranu se ispisuje broj suglasnika u rečenici.
Primjeri
Tastatura (ulaz) 15 Danas je lijep dan.
Tastatura (ulaz) 25 Djeci je potrebna ljubav i njega.
Ekran (izlaz) 9
Ekran (izlaz) 14
Objašnjenje Suglasnici su: D, N, S, J, L, J, P, D, N i ima ih ukupno 9.
Objašnjenje Suglasnici su: D, J, C, J, P, T, R, B, N, LJ, B, V, NJ, G i ima ih ukupno 14.
100
7.7. Zadaci 2016
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
17.03.2016.
1. zadatak GODINA
Vremenski period od 100 godina se naziva stoljeće ili vijek. Prvo stoljeće je počelo 1.
januara 1. godine i trajalo je do 31. decembra 100. godine. Drugo stoljeće je počelo 1. januara
101. godine i trajalo je do 31. decembra 200. godine. Trenutno smo u 21. stoljeću, koje je
počelo 1. januara 2001. godine. Treba napisati program koji će za učitanu godinu ispisati
kojem stoljeću pripada ta godina.
Program snimiti pod imenom GODINA.
Ulazni podaci
S tastature u jednom redu učitavamo prirodan broj manji od 2100.
Izlazni podaci
Na ekranu ispisati prirodan broj koji predstavlja traženo stoljeće.
Primjeri
Tastatura (ulaz) 2016
Ekran (izlaz) 21
Objašnjenje 2016. godina je u 21. stoljeću.
Tastatura (ulaz) 2000
Ekran (izlaz) 20
Objašnjenje 2000. godina je u 20. stoljeću.
Tastatura (ulaz) 16
Ekran (izlaz) 1
Objašnjenje 16. godina je u 1. stoljeću.
101
2. zadatak ZBIR
Treba napisati program koji će za učitani prirodan broj 5 < 3 < 100 napisati na
koliko se on načina može prikazati u obliku 3 = � + � + P, gdje je � < � < P, tj. na koliko
se načina broj 3 može rastaviti na zbir tri različita prirodna broja �, � i P, takva da je � < � <P.
Program snimiti pod imenom ZBIR.
Ulazni podaci
S tastature u prvom redu učitavamo prvi prirodan broj 3 < 100.
Izlazni podaci
Na ekranu se ispisuje prirodan broj koji predstavlja broj mogućih rastava broja 3 na
traženi zbir.
Primjeri
Tastatura (ulaz) 10
Ekran (izlaz) 4
Objašnjenje
10 = 1 + 2 + 710 = 1 + 3 + 610 = 1 + 4 + 510 = 2 + 3 + 5
Tastatura (ulaz) 12
Ekran (izlaz) 7
Objašnjenje
12 = 1 + 2 + 912 = 1 + 3 + 812 = 1 + 4 + 712 = 1 + 5 + 6 12 = 2 + 3 + 7 12 = 2 + 4 + 6 12 = 3 + 4 + 5
102
3. zadatak ŠETNJA
Djevojčica Amila se nalazi negdje u koordinatnom sistemu (na mjestu s koordinatama
(x,y) ) i kreće u šetnju. Svakim korakom se pomjeri za jedno mjesto i to: L (lijevo – u mjesto
(x-1,y)), D (desno – u mjesto (x+1,y)), V (gore – u mjesto (x,y+1)) ili N (dolje – u mjesto
(x,y-1)). Njena udaljenost od koordinatnog početka je jednaka dužini najkraćeg puta, kojim
Amila može doći do mjesta na kojem se nalazi do koordinatnog početka.
Treba napisati program koji će za učitanu Amilinu početnu poziciju i njen plan šetnje
kao rezultat vratiti poziciju u kojoj se nalazi na kraju, te njene udaljenosti od koordinatnog
početka na početku i na kraju šetnje.
Program snimiti pod imenom SETNJA.
Ulazni podaci
S tastature se u prvom redu učitavaju dva cijela broja x i y (-100<x,y<100), odvojeni
razmakom, koji predstavljaju Amilinu početnu poziciju. U drugom redu se učitava niz koji
predstavlja plan šetnje.
Izlazni podaci
Na ekranu se u prvom redu ispisuje Amilina krajnja pozicija, u drugom redu
udaljenost od koordinatnog početka na početku šetnje, a u trećem redu se ispisuje ta
udaljenost na kraju šetnje. Ispis se vrši u obliku kako je dano u primjeru.
Primjeri
Tastatura (ulaz) -1 -1 NDDDVLVVD
Ekran (izlaz) 2 1 2 3
Objašnjenje Amilin put je bio: (-1,-1), (-1,-2), (0,-2), (1,-2), (2,-2), (2,-1), (1,-1), (1,0), (1,1), (2,1). Udaljenost od tačke (-1,-1) do koordinatnog početka je 2, jer Amili trebaju 2 koraka da pređe taj put, dok je udaljenost tačke (2,1) od koordinatnog početka jednaka 3. Tastatura (ulaz) 3 2 NLLVLLNLNNDN
Ekran (izlaz) -1 -2 5 3
103
7.8. Zadaci 2017
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
14.03.2017.
1. zadatak BOSNA
Treba napisati program koji će s tastature učitati jedan prirodan broj manji od 20. Ako
je taj broj jednocifren onda treba toliko puta ispisati riječ BOSNA, a ako je dvocifren, onda
riječ BOSNA treba ispisati onoliko puta koliko iznosi razlika broja 25 i učitanog broja. Ispis
napraviti u takvom obliku da se prvo napiše redni broj ispisa s tačkom, a zatim riječ BOSNA
svaki put ispisati u novom redu.
Program snimiti pod imenom BOSNA.
Ulazni podaci
S tastature u jednom redu učitavamo prirodan broj manji od 20.
Izlazni podaci
Na ekranu ispisati ispisati s tačkom i iza toga riječ BOSNA. Svaki put u novom redu.
Primjeri
Tastatura (ulaz) 3
Ekran (izlaz) 1. BOSNA 2. BOSNA 3. BOSNA
Objašnjenje Broj 3 je jednocifren i ispisujemo 3 puta riječ BOSNA.
Tastatura (ulaz) 19
Ekran (izlaz) 1. BOSNA 2. BOSNA 3. BOSNA 4. BOSNA 5. BOSNA 6. BOSNA
Objašnjenje Broj 19 je dvocifren i ispisujemo riječ BOSNA
25 – 19 = 6 puta.
104
2. zadatak RIJEC
Treba napisati program koji će učitati riječ s tastature i ispisati samo suglasnike iz te
riječi (u poretku kako su i učiati)
Program snimiti pod imenom RIJEC.
Ulazni podaci
S tastature u prvom u jednom redu učitavamo riječ napisanu velikim slovima (ne dužu
od 20 slova).
Izlazni podaci
Na ekranu se vrlikim slovima ispisuju samo suglasnici iz učitane riječi, i to u poretku
kako su i učitani. Ukoliko je učitana riječ sastavljena samo od samoglasnika, na ekranu treba
ispisati riječ BOSNA.
Primjeri
Tastatura (ulaz) USISAVANJE
Tastatura (ulaz) BRK
Tastatura (ulaz) EEOA
Ekran (izlaz) SSVNJ
Ekran (izlaz) BRK
Ekran (izlaz) BOSNA
105
3. zadatak BROJ
Za prirodan broj kažemo da je savršen ako je jednak sumi svojih pravih djelitelja
(prirodnih brojeva koji ga dijele a manji su od njega). Pravi djelitelji broja 28 su 1, 2, 4, 7, 14.
Kako je broj 28 jednak sumi svojih pravih djelitelja, to je on savršen (28 = 1+2+4+7+14).
Treba napisati program koji će ispisati sve savršene brojeve iz danog intervala.
Program snimiti pod imenom BROJ.
Ulazni podaci
S tastature se u jedom redu učitavaju dva prirodna broja (0<a<b<100000).
Izlazni podaci
Na ekranu se ispisuju svi savršeni brojevi iz intervala [a,b]. Ukoliko u danom intervalu
nema savršenih brojeva, treba ispisati odgovarajuću poruku.
Primjeri
Tastatura (ulaz) 6 51
Ekran (izlaz) 6 28
Objašnjenje Jedini savršeni brojevi iz danog intervala su 6 i 28 (6=1+2+3, 28=1+2+4+7+14).
Tastatura (ulaz) 10 20
Ekran (izlaz) Nema savrsenih brojeva
Objašnjenje U danom intervalu nema savršenih brojeva.
106
8. ZADACI S 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 problemi.
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) 41
Tastatura (ulaz) 6
Tastatura (ulaz) 142
Ekran (izlaz) 5
Ekran (izlaz) Broj nije dvocifren!
Ekran (izlaz) Broj nije dvocifren!
107
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 (malo ili veliko) pojavilo u rečenici koju unese putem tastature. One
rečenice s 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) Riba ribi grize rep
Tastatura (ulaz) Irma i Romi idu u prvi razred.
Tastatura (ulaz) Vracaju se rode.
Ekran (izlaz) Broj pojavljivanja: 4
Ekran (izlaz) Broj pojavljivanja: 5
Ekran (izlaz) Broj pojavljivanja: 2
108
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 ≤ 3 ≤ 1000), broj slika koje Emir želi snimiti na CD-ove,
- prirodan broj K (1 ≤ M ≤ 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) 400 5
Tastatura (ulaz) 100 4
Tastatura (ulaz) 101 7
Ekran (izlaz) 3
Ekran (izlaz) 1
Ekran (izlaz) 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.
109
8.2. Zadaci 2012
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 (konvertibilne 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 odmoru (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) 7.5 3.75 100 100
Tastatura (ulaz) 7.5 3.75 75 50
Tastatura (ulaz) 7.5 3.75 150 35
Ekran (izlaz) Za iznos od 100 KM i 100 Eur, Enes može dobiti 1125.00 Kn
Ekran (izlaz) Za iznos od 75 KM i 50 Eur, Enes može dobiti 656.25 Kn
Ekran (izlaz) Za iznos od 150 KM i 35 Eur, Enes može dobiti 825.00 Kn
110
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 dijeljenja 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) 33
Tastatura (ulaz) 256
Tastatura (ulaz) 4356
Ekran (izlaz) Ostatak djeljenja broja 33 sa 3 je 0.
Ekran (izlaz) Prvi manji broj od unesenog broja, a koji je djeljiv sa 3 je 255.
Ekran (izlaz) Ostatak djeljenja broja 4356 sa 3 je 0.
111
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) Danas je cijeli dan padala jaka kisa.
Tastatura (ulaz) Ovaj zadatak je veoma jednostavan i nadam se da ću ga uspjesno rijesiti.
Tastatura (ulaz) Veceras je premijera mog omiljenog filma u kinu Una.
Ekran (izlaz) Samoglasnici se u rečenici pojavljuju 14 puta!
Ekran (izlaz) Samoglasnici se u rečenici pojavljuju 26 puta!
Ekran (izlaz) Samoglasnici se u rečenici pojavljuju 19 puta!
112
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) 3 4
Tastatura (ulaz) 5 5
Ekran (izlaz) 4
Ekran (izlaz) 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.
113
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 drugom boju Lejline a u trećem redu boju Emirine kape.
Primjeri
Tastatura (ulaz) 2 1 1
Tastatura (ulaz) 0 0 0
Ekran (izlaz) B C C
Ekran (izlaz) B B B
114
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) 9 2 jabuka kaldont drvo vozilo logor orkan maca carica car
Objašnjenje: 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
115
8.4. Zadaci 2014
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
29.04.2014.
1. zadatak SLOVA
Treba napisati program koji broji (prebrojava) suglasnike u rečenici koja se unosi s
tastature i njihov broj ispisuje na ekran. Složeno slovo LJ se broji kao jedno slovo, ako i slovo
NJ. U primjerima neće biti slova Č, Ć, DŽ, Đ, Š i Ž. Rečenica završava tačkom.
Program snimiti pod imenom SLOVA.
Ulazni podaci
S tastature se u jednom redu učitava prirodan broj 3 (3 ≤ 100) koji predstavlja broj
slova u rečenici, a u drugom redu se učitava rečenica.
Izlazni podaci
Na ekranu se ispisuje broj suglasnika u rečenici.
Primjeri
Tastatura (ulaz) 15 Danas je lijep dan.
Tastatura (ulaz) 25 Djeci je potrebna ljubav i njega.
Ekran (izlaz) 9
Ekran (izlaz) 14
Objašnjenje Suglasnici su: D, N, S, J, L, J, P, D, N i ima ih ukupno 9.
Objašnjenje Suglasnici su: D, J, C, J, P, T, R, B, N, LJ, B, V, NJ, G i ima ih ukupno 14.
116
2. zadatak GRADOVI
Na obali nekog ostrva se nalazi n gradova označenih brojevima od 0 do n – 1. Oko
čitavog ostrva je izgrađen autoput koji prolazi kroz svaki od n gradova. Udaljenost između
gradova su dane u nizu gdje prvi broj predstavlja udaljenost između grada 0 i 1, drugi broj
predstavlja udaljenost između gradova 1 i 2, i tako redom, dok zadnji broj predstavlja
udaljenost između grada n-1 i 0.
Treba napisati program koji će za svaki grad odrediti najkraće udaljenosti od svih
ostalih gradova.
Program snimiti pod imenom GRADOVI.
Ulazni podaci
S tastature u prvom redu učitavamo broj gradova (prirodan broj n), a u drugom redu
učitavamo niz realnih brojeva koji predstavljaju udaljenosti između gradova.
Izlazni podaci
Na ekranu se za svaki grad ispisuje najkraće udaljenosti između tog grada i ostalih
gradova.
Primjeri
Tastatura (ulaz) 3 2.3 3.4 0.9
Tastatura (ulaz) 4 2.9 2.1 0.8 4.7
Ekran (izlaz) Udaljenost izmedju gradova 0 i 1 je 2.3 Udaljenost izmedju gradova 0 i 2 je 0.9 Udaljenost izmedju gradova 1 i 0 je 2.3 Udaljenost izmedju gradova 1 i 2 je 3.2 Udaljenost izmedju gradova 2 i 0 je 0.9 Udaljenost izmedju gradova 2 i 1 je 3.2 Slika za objašnjenje
Ekran (izlaz) Udaljenost izmedju gradova 0 i 1 je 2.9 Udaljenost izmedju gradova 0 i 2 je 5.5 Udaljenost izmedju gradova 0 i 3 je 4.7 Udaljenost izmedju gradova 1 i 0 je 2.9 Udaljenost izmedju gradova 1 i 2 je 2.6 Udaljenost izmedju gradova 1 i 3 je 3.4 Udaljenost izmedju gradova 2 i 0 je 5.5 Udaljenost izmedju gradova 2 i 1 je 2.6 Udaljenost izmedju gradova 2 i 2 je 0.8
117
Udaljenost izmedju gradova 3 i 0 je 4.7 Udaljenost izmedju gradova 3 i 1 je 3.4 Udaljenost izmedju gradova 3 i 2 je 0.8 Slika za objašnjenje
118
3. zadatak PROSTI
Za prirodan broj 3, veći od 1, kažemo da je prost ako ne postoji prirodan broj S
1 < S < 3 koji ga dijeli. Treba napisati program koji ispisuje koliko ima prostih brojeva
među prvih N prirodnih brojeva.
Program snimiti pod imenom PROSTI.
Ulazni podaci
S tastature se učitava prirodan broj 3 (3 ≤ 10000).
Izlazni podaci
Na ekranu se ispisuje broj prostih brojeva koji su manji ili jednaki od 3. Ako takvih
brojeva nema, ispisati poruku NEMA IH.
Primjeri
Tastatura (ulaz) 1
Tastatura (ulaz) 20
Ekran (izlaz) NEMA IH
Ekran (izlaz) 8
Objašnjenje Ne postoje prosti brojevi manji ili jednaki od 1. ukupno 9.
Objašnjenje To su brojevi: 2, 3, 5, 7, 11, 13, 17 i 19, i ima ih ukupno 8.
119
8.5. Zadaci 2015
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
16.04.2015.
1. zadatak ŠETNJA
Djevojčica Amila se nalazi negdje u koordinatnom sistemu (na mjestu s koordinatama
(x,y) ) i kreće u šetnju. Svakim korakom se pomjeri za jedno mjesto i to: L (lijevo – u mjesto
(x-1,y)), D (desno – u mjesto (x+1,y)), V (gore – u mjesto (x,y+1)) ili N (dolje – u mjesto
(x,y-1)). Njena udaljenost od koordinatnog početka je jednaka dužini najkraćeg puta, kojim
Amila može doći do mjesta na kojem se nalazi do koordinatnog početka.
Treba napisati program koji će za učitanu Amilinu početnu poziciju i njen plan šetnje
kao rezultat vratiti poziciju u kojoj se nalazi na kraju, te njene udaljenosti od koordinatnog
početka na početku i na kraju šetnje.
Program snimiti pod imenom SETNJA.
Ulazni podaci
S tastature se u prvom redu učitavaju dva cijela broja x i y (-100<x,y<100), odvojeni
razmakom, koji predstavljaju Amilinu početnu poziciju. U drugom redu se učitava niz koji
predstavlja plan šetnje.
Izlazni podaci
Na ekranu se u prvom redu ispisuje Amilina krajnja pozicija, u drugom redu
udaljenost od koordinatnog početka na početku šetnje, a u trećem redu se ispisuje ta
udaljenost na kraju šetnje. Ispis se vrši u obliku kako je dano u primjeru.
Primjeri
Tastatura (ulaz) -1 -1 NDDDVLVVD
Ekran (izlaz) 2 1 2 3
Objašnjenje Amilin put je bio: (-1,-1), (-1,-2), (0,-2), (1,-2), (2,-2), (2,-1), (1,-1), (1,0), (1,1), (2,1). Udaljenost od tačke (-1,-1) do koordinatnog početka je 2, jer Amili trebaju 2 koraka da pređe taj put, dok je udaljenost tačke (2,1) od koordinatnog početka jednaka 3.
120
2. zadatak TEŽINA
Neka je N1 proizvod cifara učitanog broja N>9, N2 proizvod cifara broja N1, N3
proizvod cifara broja N2 itd. Najmanji prirodan broj k za koji vrijedi da je broj Nk jednocifren
broj naziva se "težina" broja N.
Treba napisati program koji za prirodan broj N>9, koji se učitava s tastature, na ekran
ispisuje njegovu "težinu".
Program snimiti pod imenom TEZINA.
Ulazni podaci
S tastature se učitava prirodan broj veći od 9.
Izlazni podaci
Na ekranu se ispisuje težina učitanog broja.
Primjeri
Tastatura (ulaz) 1967
Ekran (izlaz) 5
Objašnjenje 3 = 19673T = 1�9�6�7 = 3783 = 3�7�8 = 1683U = 1�6�8 = 483V = 3�2 = 6
Tastatura (ulaz) 345
Ekran (izlaz) 2
Objašnjenje 3 = 3453T = 3�4�5 = 603 = 6�0 = 0
121
3. zadatak RUKOMET
Na rukometnom kvalifikacionom turniru za završno prvenstvo je učestvovalo 8 ekipa.
Odigrane su 4 utakmice i to ekipa E1 protiv ekipe E2, ekipa E3 protiv ekipe E4, ekipa E5
protiv ekipe E6 i ekipa E7 protiv ekipe E8. U svim utakmicama je poznat pobjednik. Sve
ekipe su postigle različit broj golova. Sveukupni pobjednik kvalifikacija je ekipa koja je
postigla najveći broj golova. Na završno prvenstvo se plasirala i ekipa koja je izgubila
najmanjom razlikom. Ako postoji više ekipa koje su izgubile istom (najmanjom) razlikom,
onda se od njih na završno prvenstvo kvalificira ona ekipa koja je postigla više golova.
Treba napisati program koji će za učitane rezultate utakmica ispisati ime pobjednika
kvalifikacija i poraženu ekipu koja se kvalificirala na završno prvenstvo.
Program snimiti pod imenom RUKOMET.
Ulazni podaci
S tastature se u osam redova učitava 8 različitih prirodnih brojeva, manjih od 100, koji
predstavljaju broj postignutih golova ekipa E1, E2, E3, E4, E5, E6, E7 i E8, redom.
Izlazni podaci
Na ekranu se u jednom redu ispisuje sveukupni pobjednik a u drugom redu poražena
ekipa koja se kvalificirala. Ispis se vrši u obliku kao što je u primjeru.
Primjeri
Tastatura (ulaz) 35 27 31 33 42 39 36 34
Tastatura (ulaz) Sveukupni pobjednik je ekipa E5. plasman je ostvarila i ekipa E8.
Objašnjenje Najviše golova je postigla ekipa E5 (42) i ona je sve ukupni pobjednik. S najmanjom razlikom
(2) su izgubile ekipe E33 i E8. Kako je ekipa E3 postigla 31 a ekipa E8 34 gola, to se dalje plasirala ekipa E8.
122
8.6. Zadaci 2016
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
14.04.2016.
1. zadatak BROJ
Za prirodan broj kažemo da je savršen ako je jednak sumi svojih pravih djelitelja
(prirodnih brojeva koji ga dijele a manji su od njega). Pravi djelitelji broja 28 su 1, 2, 4, 7, 14.
Kako je broj 28 jednak sumi svojih pravih djelitelja, to je on savršen (28=1+2+4+7+14).
Treba napisati program koji će ispisati sve savršene brojeve iz danog intervala.
Program snimiti pod imenom BROJ.
Ulazni podaci
S tastature se u jednom redu učitavaju dva prirodna broja (0 < # < $ < 100000)
manja od 100000 koji su razdvojeni razmakom.
Izlazni podaci
Na ekranu se ispisuju svi savršeni brojevi iz danog intervala. Ukoliko u danom
intervalu nema savršenih brojeva, treba ispisati odgovarajuću poruku.
Primjeri
Tastatura (ulaz)
6 51
Ekran (izlaz)
6
28
Objašnjenje
Jedini savršeni brojevi iz danog intervala
su 6 i 28 (6 = 1+2+3, 28=1+2+4+7+14).
Tastatura (ulaz)
10 20
Ekran (izlaz)
Nema savršenih brojeva.
Objašnjenje
U danom intervalu nema savršenih
brojeva.
123
2. zadatak LINIJA
Amila je na papiru (u pravouglom koordinatnom sistemu) nacrtala 3 duži koje su
paralelne s osom x, a zatim je taj papir dala svom bratu Benjaminu da prebroji nacrtane duži.
Kako se neke od nacrtanih duži "preklapaju" (potpuno ili djelimično), Benjamin ne može
primijetiti da su to različite duži, već će ih u tom slučaju posmatrati kao jednu duž. Duži se
"preklapaju" ako imaju bar jednu zajedničku tačku.
Benjamin treba da odredi dužinu najduže uočene duži.
Treba napisati program koji će za učitane duži ispisati dužinu najduže duži koju „na
slici“ vidi Benjamin.
Napomena: duži koje leže na osi � Benjamin ne može vidjeti, jer su „preklopljene“ s
osom x.
Program snimiti pod imenom LINIJA.
Ulazni podaci
S tastature se u prvom redu učitava prirodan broj 3 (0 < 3 < 100) koji predstavlja
broj duži koje je Amila nacrtala. Zatim se u 3 sljedećih redova učitavaju po 3 cijela broja WX, YZX, Y2X – 1000 < WX, YZX, Y2X < 1000), koji su razdvojeni praznim mjestom, gdje
YZX, WXiY2X, WX predstavljaju pravougle koordinate krajeva X–te duži koju je Amila
nacrtala.
Izlazni podaci
Na ekranu se u jednom redu ispisuje broj koji predstavlja dužinu najduže duži koju
vidi Benjamin.
Primjeri
Tastatura (ulaz)
8
–2 3 12
2 7 8
2 1 5
4 –3 –1
2 4 10 0 –2 16
4 2 10
2 10 12
Ekran (izlaz)
11
Objašnjenje
Kada se nacrtaju sve dane duži,
onda je najduža vidljiva duž ona čiji
su krajevi tačke s pravouglim
koordinatama (1,2) i (12,2), a njena
dužina iznosi 11. Ta duž je nastala
„preklapanjem“ druge, treće, pete i
osme učitane duži.
124
3. zadatak SPIRALA
Napisati program koji za uneseni prirodan broj 3 s tastature ispisuje na ekran
kvadratnu tablicu dimenzija 3 × 3 čiji su elementi niz prirodnih brojeva 1, 2, 3, . . . , 3 koji su
razmješteni u spiralnom redoslijedu u matrici u smjeru kazaljke na satu, počev od gornjeg
lijevog polja.
Program snimiti pod imenom SPIRALA.
Ulazni podaci
S tastature se učitava prirodan broj 30 < 3 < 11.
Izlazni podaci
Na ekranu se ispisuje tražena tablica.
Primjeri
Tastatura (ulaz)
1
Tastatura (ulaz)
2
Tastatura (ulaz)
4
Ekran (izlaz)
1
Ekran (izlaz)
1 2
4 3
Ekran (izlaz)
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
125
8.7. Zadaci 2017
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
04.04.2017.
1. zadatak BROJ
Treba napisati program koji će s tastature učitati niz malih i velikih slova engleskog
alfabeta (bez razmaka). Taj niz slova treba izmijeniti na način da se umjesto učitanog malog
slova na ekran ispisuje veliko „isto takvo slovo“, i obrnuto, da se umjesto učitanog malog
slova na ekran ispisuje malo „isto takvo slovo“.
Program snimiti pod imenom SLOVO.
Ulazni podaci
S tastature u jednom redu učitavamo niz slova engleskog alfabeta (ne duži od 20
slova).
Izlazni podaci
Na ekranu se u jednom redu ispisuju „učitana slova“ s iumijenjenom „veličinom“ u
poretku kako su i učitani.
Primjeri
Tastatura (ulaz)
bOSnA
Tastatura (ulaz)
CAZIN
Tastatura (ulaz)
xTAwqGhj
Ekran (izlaz)
BosNA
Ekran (izlaz)
cazin
Ekran (izlaz)
XtaWQgHJ
126
2. zadatak FAKTOR
Svaki složen prirodan broj se može napisati u obliku proizvoda dva ili više prostih
brojeva. Ti prosti brojevi mogu biti jednaki ili različiti (16 = 2 ∙ 2 ∙ 2 ∙ 2, 6 = 2 ∙ 3, 84 = 2 ∙2 ∙ 3 ∙ 7).
Treba napisati program koji će s tastature učitati prirodan broj veći od 1 i na ekran
ispisati sve njegove proste faktore (ako ima jednakih onda će ih ispisati onoliko puta koliko se
puta oni pojavljuju u njegovom rastavu na proizvod prostih faktora). Ako je broj prost, onda
se ispisuje poruka da je broj prost.
Program snimiti pod imenom FAKTOR.
Ulazni podaci
S tastature se učitava prirodan broj N takav da je 1 < 3 < 20000.
Izlazni podaci
Na ekranu se ispisuju prosti faktori broja N i to u svakom redu po jedan broj. Ako je
broj prost onda samo ispisati odgovarajuću poruku.
Primjeri
Tastatura (ulaz)
81
Ekran (izlaz)
3 3 3 3
Objašnjenje
81 = 3 ∙ 3 ∙ 3 ∙ 3
Tastatura (ulaz)
490
Ekran (izlaz)
2 5 7 7
Objašnjenje
490 = 2 ∙ 5 ∙ 7 ∙ 7
Tastatura (ulaz)
13
Ekran (izlaz)
Broj 13 je prost broj.
Objašnjenje
Broj 13 je prost broj i ne
može se rastaviti na
proizvod dva ili više prostih
brojeva.
127
3. zadatak CRTA
Amila je na papiru (u pravouglom koordinatnom sistemu) nacrtala N duži koje su
paralelne s osom x, a zatim je taj papir dala svojoj sestri Dariji da prebroji nacrtane duži. Kako
se neke od nacrtanih duži „preklapaju“ (potpuno ili djelomično), Darja ne može primjetiti da
su to različite duži, već će ih u tom slučaju posmatrati kao jednu duž. Duži se „preklapaju“
ako imju bar jednu zajedničku tačku. Darija treba da odredi dužinu najduže uočene duži.
Napomena: duži koje leže na osi x Darija ne može vidjeti, jer su „preklopljene“ s osom x.
Treba napisati program koji će za učitane duži ispisati dužinu najduže duži koju „na
slici“ vidi Darija.
Program snimiti pod imenom CRTA.
Ulazni podaci
S tastature se u prvom redu učitava prirodan broj 30 < 3 < 100 koji predstavlja
broj duži koje je Amila nacrtala. Zatim se u N sljedećih redova učitavaju po 3 cijela broja Yi,
YAi, XBi −1000 < WX, YZX, Y2X < 1000, koji su razdvojeni praznim mjestom, gdje
YZX, WX i Y2X, WX predstavljaju pravougle koordinate krajeva i-te duži koju je Amila
nacrtala.
Izlazni podaci
Na ekranu se u jednom redu ispisuje broj koji predstavlja dužinu najduže duži koju
vidi Darija.
Primjeri
Tastatura
(ulaz)
8
-2 3 12
2 7 8
2 1 5
4 -3 -1
2 4 10
0 -2 16
4 2 10
2 10 12
Ekran
(izlaz)
11
Objašnjenje
Kada se nacrtaju sve dane duži, onda najduža vidljiva duž je ona čiji
su krajevi tačke s pravouglim koordinatama (1,2) i (12,2), a njena
dužina iznosi 11. Ta duž je nastala „preklapanjem“ druge, treće, pete
i osme učitane duži.
128
9. TEORETSKI ZADACI S 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:
Tipka DELETE �
Tipka BACKSPACE �
� Briše znak desno od kursora
� Briše znak lijevo od kursora
3. Jedan bajt ima _________ bita, a jedan kilobajt ima _________________ bajta.
4. Zaokruži pet programskih jezika:
1. C
2. PASCAL
3. NEWTON
4. FORTRAN
5. SQL
6. MS DOS
7. COBOL
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: D:
10. Pritisak na koju ikonu poništava izvršenu komandu?
129
A: B: C: D:
11. Vodoravna orijentacija papira je:
A: Portrait B: Laid C: Vertical D: Landscape
12. Formule u Excelu počinju znakom:
A: = B: % C: # D: zavisi od formule
13. Koji od odgovora radi u Excelu isto što i =SUM(A1:A2)?
A: =A1+B2 B: =A1+A2 C: =sin(A1/B2) D: =A1+A2+B1+B2
14. Kolone u Excelu su označene:
A: 1,2,3,.... B: A1,A2,A3,... C: A,B,C,... D: I,II,III,...
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 koji ima 12 stranica koristit ćemo
130
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,....
13. Obrada podataka u računaru vrši se:
A: u memoriji B: u procesoru C: u tastaturi D: na monitoru
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 Pitanje: bodovi mogući ostvareni
1.
Koji rezultat će se prikazati prilikom pokretanja formule u ćeliji C8 (kada pritisnemo tipku ENTER)?
2
Odgovor: _______
131
2.
Predstavite broj 44 u binarnom obliku:
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: _____________
4.
Kojem od pobrojanih operativnih sistema nije mjesto u skupini:
a) Windows 7 b) Windows XP c) Windows Mobile d) d) Windows 2000
2
Odgovor: _____________
5.
Koji izraz je tačno napisan i predstavlja sljedeću formulu:
$ +# − ( + 0
.�S
a) b+a-(c+0)/((p*y)/d) b) b+(a-(c+0)/p*y)/d c) b+(a-(c+0)/(p*y))/d d) d) b+(a-c+0/(p*y))/d
2
Odgovor: _____________
6.
Softverska licenca je:
a) Pravo na korištenje određenog softvera (programa) b) CD na kojem dobijamo isporučen softver c) Vrsta softvera d) d) Oblik distribucije softvera
2
Odgovor: _____________
7.
Umetanje matematičkih izraza u MS Word se vrši pokretanjem slijeda naredbi:
a) Insert�Object�Microsoft Equattion 3.0 b) View�Object�Microsoft Equattion 3.0 c) Object�Microsoft Equattion 3.0 d) Ni na jedan od ponuđenih načina
2
Odgovor: _____________
132
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: _____________
9.
Koji od navedenih nisu ulazno/izlazni uređaji:
a) Skener b) Ekran osjetljiv na dodir (touch.screen) c) Modem d) 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: _____________
11.
Koja od ponuđenih nije naredba PASCAL-a?
a) PRIVATE b) WRITELN c) READLN d) BEGIN
2
Odgovor: _____________
12.
http://www.pzusk.ba/index.php?option=com_content&view=category&id=35
U sljedećem linku riječi "pzusk.ba" predstavljaju:
a) Ime dokumenta i oznaku države b) Naziv domene i oznaku države c) Ime dokumenta i naziv domene d) E-mail adresu domene
2
Odgovor: _____________
13.
Algoritam je:
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
2
133
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: _____________
14.
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)
b)
c)
d)
2
Odgovor: _____________
15.
Kada u Wordu želimo da isprintamo samo određene stranice koristit ćemo:
a) CTRL+S b) CTRL+P
c) Ikonu štampača d) CTRL+C
2
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
134
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
135
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: _______________________.
136
9.5. Zadaci 2014
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
19.03.2014.
U zadacima 1-5 zaokruži jedan tačan odgovor (DA ili NE)!
1. Hardver i softver zajedno čine računarski sistem. DA NE
2. Laptop je najnovija vrsta laserskog štampača. DA NE
3. Memorija koja se nalazi izvan računara naziva se periferna memorija. DA NE
4. Sva obrada podataka se vrši u memoriji. DA NE
5. Komuniciranje putem interneta je najskuplji vid komunikacije. DA NE
U zadacima 6 – 10 zaokruži samo jedan tačan odgovor (A, B ili C)!
6. Komanda CLS u DOS-u
A. briše ekran B. zatvara prozor C. gasi računar
7. Za izvršenje softverskog reseta računara, kombinaciju tipki Ctrl+Alt+Del je potrebno
uzastopno pritisnuti
A. 1 put B. 2 puta C. 3 puta
8. Ulazna jedinica nije
A. miš B. Štampač C. Tastatura
9. Za crtanje kružnice i kvadrata u Windows aplikaciji Paint, na tastaturi je potrebno držati
stisnutu tipki
A. Ctrl B. Alt C. Shift
10. Neizostavni znak u svakoj adresi elektronske pošte je
A. % B. & C. @
11. Zaokruži 5 programskih jezika
1. C+ 2. PASCAL 3. NEWTON 4. FORTRAN
5. JAVA 6. WORD 7. COBOL 8. WINDOWS
12. Poveži 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
U zadacima 14 – 18 dopuni rečenice!
13. Softver se dijeli na _____________________ i ______________________________.
14. Jedan bajt je kombinacija __________ memorijskih ćelija.
137
15. 1MB = ___________ bajta.
16. Najmanja adresabilna tačka na ekranu se naziva ________________________________.
17. Memorija iz koje se podaci mogu uzimati samo radi čitanja je ___________ memorija.
18. Programi koji nemaju nikakvu drugu svrhu osim da nanesu štetu na računaru nazivaju se
računarski ________________________.
19. Pretvori broj 8395 iz dekadnog brojnog sistema u binarni!
20. Ako promjenjive M i N imaju vrijednost M = 10 i N = 20, odredite koje će vrijednosti
promjenjive K i L imati nakon izvršenja sljedećih naredbi
IF ((M < 15) AND (N < 15)) THEN K = N + M ELSE K = N – M
IF ((M > 15) OR (N > 15)) THEN L = N * M ELSE L = N – M
K = _________; L = _________;
9.6. Zadaci 2015
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
19.03.2015.
U zadacima 1 – 5 zaokruži jedan tačan odgovor (DA ili NE)!
1. Virtualna memorija je brža od radne memorije. DA NE
2. Firewall je antivirusni program u sklopu Microsoft Windowsa. DA NE
3. Neizostavni dio u svakoj adresi elektronske pošte je WWW. DA NE
4. Facebook je stariji od Twitera. DA NE
5. Bajt je niz od 10 bitova. DA NE
U zadacima 6 – 10 zaokruži samo jedan tačan odgovor (A, B ili C)!
6. Najveća cifra u oktalnom brojnom sistemu je
A. 5 B. 7 C. 11
7. Ako za zapis cijelog broja pomoću predznaka i apsolutne vrijednosti koristimo 8
bitova, tada je najveći brij koji meožemo zapisati jednak
A. 127 B. 128 C. 256
8. Ulazna jednica nije
A. miš B. štampač C. tastatura
9. Obostrano poravnanje teksta u Microsoft Wordu se naziva
A. Overwrite B. Twoside C. Justify
10. Linux je
138
A. Operativni sistem B. Društvena mreža C. Antivirusni program
11. Neka u Excelovoj tablici imamo sljedeću situaciju
A B C D E F G H I 1 2 1 3 2 0 1 0 3
Ako u ćeliju I1 naredbu = COUNTIF (A1 : G1; ">2") onda će u toj ćeliji, nakon
izvršenja naredbe, biti ispisana vrijednost _____________.
12. U Microsoft Wordu imamo sljedeću situaciju:
Danas je bio lijep dan.¶ Putovali smo na more. ¶ Kada smo došli na more, mama i tata su raspakovaki stvari a ja sam otišla na plažu.¶
Šta je autor teksta napravio na mjestima gdje se pojavljuje znak ¶?________________
_____________________________________________________________________
13. U oktalnom brojnom sistemu izračunati 1703 + 2015 + 4334.
14. Pretvoriti broj 17032015 iz dekadnog u heksadecimalni brojni sistem.
15. Zadane su sljedeće vrijednosti i algoritam
K(1) K(2) K(3) K(4) K(5) K(6) K(7) B 1 0 0 1 0 1 1 5
A = 0
za J = 1, 2, 3, 4, 5, 6, 7 radi
A = 2A
ako je K(J) = 1 tada je A = A + B
Nakon što se izvrše dane naredbe, A ima vrijednost _______________________.
9.7. Zadaci 2016
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
17.03.2016.
U zadacima 1-5 zaokruži jedan tačan odgovor (DA ili NE)!
1. Jednim bitom se može prikazati 8 podataka. DA NE
2. Prvi mikroprocesor poznat je pod nazivom ENIAC. DA NE
3. Neizostavni dio u svakoj adresi elektronske pošte je www. DA NE
4. HTML je simbolički jezik. DA NE
5. Mikrofon je vanjska memorija. DA NE
139
U zadacima 6 – 10 zaokruži samo jedan tačan odgovor (A, B ili C)!
6. Najveća cifra u oktalnom brojnom sistemu je
A. 9 B. 10 C. 11
7. Nastavak za programsku datoteku je
A. .doc B. .xml C. .com
8. U koju memoriju se ne mogu dodavati podaci
A. USB B. RAM C. ROM
9. 1TB je jednak
A. 9999999KB B. 1048576 MB C. 1000GB
10. Kako se naziva program koji se prilikom uključivanja računara prvi učitava u radnu
memoriju računara?
A. Operativni sistem B. Facebook C. Mozilla Firefox
11. Neka u Excelovoj tablici imamo sljedeću situaciju
A B C D E F G H 15 12 -12 -9 14 -12 31 -11
Ako u ćeliju H15 ukucamo naredbu = SUM (B15:E15) onda će u toj ćeliji, nakon
izvršenja naredbe, biti ispisana vrijednost _____________.
12. Na liniji ispred opisa koraka upisati brojeve od 1 do 4 kojima se određuje redoslijed
izvršenja radnji kada u Microsoft Wordu vršimo kopiranje određenog sadržaja:
a) ____ odabrati naredbu "Kopiraj" (Copy)
b) ____ odabrati naredbu "Zalijepi" (Paste)
c) ____ označiti ono što se kopira
d) ____ premjestiti pokazivač (kursor) na mjesto gdje želimo kopirati
13. U binarnom brojnom sistemu izračunati 101011+1001.
14. Pretvoriti broj BA iz heksadecimalnog brojnog sistema u dekadni.
15. Kolike će biti vrijednosti varijabli A, B i C nakon izvođenja sljedećeg algoritma:
A:= 0;
B:= 5;
C:= 10;
A:= A + B + C;
B:= A + B + C;
C:= A + B + C;
Odgovor: A = ________, B = ________, C = ________,
140
9.8. Zadaci 2017
OPĆINSKO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
14.03.2017.
U zadacima 1-5 zaokruži jedan tačan odgovor (DA ili NE)!
1. Sadržaj radne memorije se briše nakon isključivanja računara. DA NE
2. Dropper je program koji služi za rezervisanje prostora u Dropbox-u. DA NE
3. U sljedećoj putanji su 2 foldera – C:\Bosna\gercegovina\Sarajevo.txt. DA NE
4. Prvi korisnik USB sticka je bio Charles Babbage. DA NE
5. Skraćenica mjerne jedinice za rezoluciju skenera je skn. DA NE
U zadacima 6 – 10 zaokruži samo jedan tačan odgovor (A, B ili C)!
6. Funkcija sistema u kojoj se podaci i informacije smještaju na organiziran način kako
bi se mogli dalje obrađivati i koristiti se naziva
A. memorisanje B. kodiranje C. download
7. Paskalova analitička mašina je razvijena u
A. XVII stoljeću B. XXV stoljeću C. X stoljeću
8. Koliko stranica ima tekstualna datoteka od 100KB, ako znamo da na svaku stranicu
stane 400 znakova, a tekst je kodiran proširenim ASCII kodom?
A. 4 B. 40 C. 256
9. Za koju vrijednost promjenjive X vrijedi sljedeća jednakost
X div 100 + (X mod 100) div 10 + X mod 10 = 30
A. 2017 B. 2018 C. 2019
10. Koliko najmanje binarnih cifara nam treba da bismo mogli zapisati 16 različitih
zapisa?
A. 2 B. 4 C. 8
11. Neka u Excelovoj tablici imamo sljedeću situaciju
A B C D E F G H 15 12 -12 -9 14 -31 12 -11
Ako u ćeliju H15 ukucamo naredbu = ABS (A15:F15) onda će u toj ćeliji, nakon
izvršenja naredbe, biti ispisana vrijednost _____________.
12. Na liniji ispred opisa koraka upisati brojeve od 1 do 4 kojima se određuje redoslijed
koraka u programiranju:
a) ____ Testiranje programa
141
b) ____ Osmišljavanje algoritma
c) ____ Pisanje programa u nekom programskom jeziku
d) ____ Opis zadatka
13. Odrediti X ako je ABC(16) + 1010(2) + X(10) = 5375(8)
14. Šta će se desiti ako se u programu Power Point, za vrijeme izvođenja prezentacije,
pritisne tipka B? _______________________________________________________.
15. Kolike će biti vrijednosti varijabli A i B nakon izvođenja sljedećeg algoritma:
A:= 3;
B:= 7;
ako je (A < B) onda
A:= 2 * A + 1;
ako je (A < B) onda
B:= B – A;
inače
A:= A – B;
ako je (A + B < 6) onda
A:= A + A;
inače
B:= B + B;
Odgovor: A = ________, B = ________.
10. TEORETSKI ZADACI S 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:
142
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. DA NE
8. Rezolucija monitora je ukupan broj piksela. DA NE
9. Datoteka (engl. File) je skup istovrsnih podataka zapisanih na jednom mjestu i nazvanih
zajedničkim imenom. DA NE
10. Naziv bit dolazi od engl. Binary digit što u prevodu znači binarna cifra. DA NE
11. Dio centralne jedinice gdje se vrši obrada podataka se naziva procesor, 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 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 Pitanje: bodovi mogući ostvareni
1.
Koji od sljedećih uređaja vam treba za komunikaciju sa drugim računarima putem telefonske mreže?
a) CD-ROM b) Modem c) Ploter d) Zvučnici
2
Odgovor: _______
143
2.
Šta je od navedenog operativni sistem?
a) Lotus 1-2-3 b) PowerPoint 2010 c) Linux Ubuntu d) Corel X5
2
Odgovor: _____________
3. Koji od navedenih uređaja je prikladan za pravljenje sigurnosne kopije (backup) sa mrežnog servera podataka?
a) Modem b) Magnetna traka c) Ploter d) CD/RW
2
Odgovor: _____________
4.
Korisnički ugovor o licenci (End User Licence Agreement):
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
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.
2
Odgovor: _____________
5.
Šta je od navedenog ispravno ime za sliku ispod?
a) Naslovna traka b) Klizna traka c) Statusna traka d) Traka menija
2
Odgovor: _____________
144
6.
.docx je ekstenzija (nastavak) za:
a) Ekstenzija za Word 1997 dokumenta b) Ekstenzija za Excel 2007 dokumenta c) Ekstenzija za Word 2007 dokumenta d) Niti jedno od pobrojanog
2
Odgovor: _____________
7.
Šta znači skraćenica HTTP?
a) Hyperlink Transfer protocol b) Hyperlink Transmission Procedure c) Hypertext Transfer Protocol d) Hypertext Transmission Procedure
2
Odgovor: _____________
8.
Simbol na ravnalu Office aplikacija obojan crnom bojom služi za:
a) uvlačenje cijelog odlomka b) uvlačenje prvog retka c) uvlačenje svih redaka osim prvog u odlomku d) ništa od navedenog
2
Odgovor: _____________
9.
Rezultat izvršenja formule u ćeliji B1 je:
2
Odgovor: _____________
10.
Poredaj po veličini sljedeće kapacitete memorije počevši od najmanjeg:
a) 1100MB b) 0.1GB c) 103kB d) 1GB e) 1500kB
2
Odgovor: _____________
145
11.
Tačan naziv trake na slici je:
a) startna traka b) alatna traka c) programska traka d) zadaćna traka
2
Odgovor: _____________
12.
Koja će vrijednosti pisati u ćeliji C1 nakon izvršenja funkcije koja se u njoj nalazi:
=IF(SUM(A1:A4)>SUM(B1:B4);AVERAGE(A1:A4);SUM(B1;B4))
2
Odgovor: _____________
13. Prikazati realni broj 190.3125(10) binarno i oktalno! 2
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 g=g+h h=g – h g=g – h g=g MOD h h=g DIV h
2
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: _____________
146
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š
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
147
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
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:_________________
148
10.4. Zadaci 2014
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
29.04.2014.
1. Da li je svaki podatak informacija? DA NE
2. Prvi računar s memorisanim programom zvao se ____________________________.
3. Nakon isključivanja računara sadržaj radne memorije se briše. DA NE
4. 1MB se sastoji od ________________________________ BYTA.
5. Udaljenost između monitora i očiju treba da bude manja od 30cm. DA NE
6. Nakon isključivanja računara ili nakon njegovog resetiranja, počinje da se izvršava
program koji se nalazi u ROM memoriji a naziva se ___________________________.
7. Vodoravna orjentacija papira je:
a) Vertical b) Horizontal c) Landscape
8. Kombinacija kojih tipki izrezuje i kopira selektirani dio dokumenta?______________
9. Koji od odgovora radi u Excelu isto što i = SUM (A1 : B2)
a) = A1 + B2 b) = A1 + A2 + B1 + B2 c) = SUM (A1) + SUM (B2)
10. Odrediti odgovarajuće parove
1. Pascal (1643. god.) A. Mašina za bušenje kartice 2. Leibniz (1964. god.) B. Aritmetička mašina 3. Babbage (1834. god.) C. Računar s pohranjenim programom 4. Hollerith (1890. god.) D. Mašina za računanje Von Neumann (1946. god.) E. Analitička mašina 1 2 3 4 5
11. Zapisati broj u 14879703 u heksadecimalnom obliku.
12. Zadane su sljedeće vrijednosti i algoritam
K(1) K(2) K(3) K(4) K(5) K(6) K(7) B 1 0 0 1 0 1 1 5
A = 0
za J = 1, 2, 3, 4, 5, 6, 7 radi
A = 2A
Ako je K(J) = 1 tada je A = A + B
Nakon što se izvrše dane naredbe, A ima vrijednost _______________________.
149
10.5. Zadaci 2015
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
16.04.2015.
U zadacima 1 – 5 zaokruži jedan tačan odgovor (DA ili NE)!
1. Phishing je privlačenje korisnika na web stranice kako bi ostavili svoje lične podatke, koji
se poslije zloupotrebljavaju. DA NE
2. Internetski domen naše države je bh. DA NE
3. Procesor čiji je radni takt 4GHz može izvršiti 4 milijarde osnovnih operacija u jednoj
sekundi. DA NE
4. Gif format podržava animirane sadržaje. DA NE
5. Oznaka CD ili DVD medij po kojem je moguće više puta pisati i
brisati je RW. DA NE
U zadacima 6 – 10 zaokruži jedan tačan odgovor (A, B ili C)!
6. Oblik virtualne zajednice u okviru koje korisnici diskutuju o zajedničkim temama je
A. Skype B. Forum C. Blog
7. Kako se naziva prva stranica koja se učita kada uključimo program za pretraživanje
interneta?
A. Home page B. Google C. Microsoft explorer
8. Uređaj koji ne služi za komunikaciju je
A. Swich B. Router C. Scanner
9. Program za zaštitu od neželjenog sadržaja je
A. Antiverski B. Kasperski C. Outlook
10. Standarni raspored slova na tastaturi je
A. abcde B. xywzq C. qwert
11. Neka u Excelovoj tablici imamo sljedeću situaciju
A B C D E F G H I 1 2 1 3 2 0 1 0 3
Ako u ćeliju I1 ukucamo naredbu = COUNTIF(A1:G1;">2") onda će u toj ćeliji, nakon
izvršenja naredbe biti ispisana vrijednost ______________.
12. U Microsoft Wordu imamo sljedeću situaciju:
Danas je bio lijep i sunčan ljetni dan. ¶ Putovali smo na more. ¶
150
Kada smo došli na more, mama i tata su raspakovali stvari a ja sam otišla na plažu. ¶
Šta je autor teksta napravio na mjestima gdje se pojavljuje znak ¶ ?
________________________________________________________________________
13. U oktalnom brojnom sistemu izračunati 1703+2015+4334.
14. Pretvoriti broj 16042015 iz dekadnog u heksadekadni brojni sistem.
15. Zadane su sljedeće vrijednosti i algoritam
K(1) K(2) K(3) K(4) K(5) K(6) K(7) B 1 0 0 1 0 1 1 2
A=0
Za J=1, 2, 3, 4, 5, 6, 7 radi
A=2A
Ako je K(J)=1 tada je A=A+B
Nakon što se izvrše dane naredbe, A ima vrijednost ________________.
10.6. Zadaci 2016
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
14.04.2016.
U zadacima 1 – 5 zaokruži jedan tačan odgovor (DA ili NE)!
1. Sadržaj radne memorije se briše nakon isključivanja računara. DA NE
2. Dropper je program koji služi za naseljavanje virusa u računar. DA NE
3. U sljedećoj putanji su 3 foldera – C:\Cazin\Osnovna\Prvi. DA NE
4. Prvi korisnik USB sticka je bio Charles Babbage. DA NE
5. Skraćenica mjerne jedinice za rezoluciju skenera je dpi. DA NE
U zadacima 6 – 10 zaokruži jedan tačan odgovor (A, B ili C)!
6. Funkcija sistema u kojoj se podaci i informacije smještaju na organiziran način kako bi se
mogli dalje obrađivati i koristiti se naziva
A. formatiranje B. dekodiranje C. memoriranje
7. Paskalova analitička mašina je razvijena u
A. XV stoljeću B. XVII stoljeću C. XIX stoljeću
151
8. Koliko stranica ima tekstualna datoteka od 72KB, ako znamo da na svaku stranicu stane
4096 znakova, a tekst je kodiran proširenim ASCII kodom
A. 18 B. 20 C. 22
9. Za koju vrijednost promjenljive X vrijedi sljedeća jednakost
YSX\100 + Y]^S100SX\10 + Y]^S10 = 20
A. 789 B. 659 C. 2016
10. Koliko najmanje binarnih cifara nam treba da bismo mogli zapisati 32 različita zapisa?
A. 5 B. 8 C. 16
11. Neka u Excelovoj tablici imamo sljedeću situaciju
A B C D E F G H
15 12 – 12 – 9 14 – 12 31 – 11
Ako u ćeliju H15 ukucamo naredbu = AVERAGE(A15:F15) onda će u toj ćeliji, nakon izvršenja naredbe, biti ispisana vrijednost _________ .
12. Na linije ispred opisa koraka upisati brojeve od 1 do 4 kojima se određuje redoslijed koraka u programiranju
a) _____ Testiranje programa b) _____ Osmišljavanje algoritma c) _____ Pisanje programa u nekom programskom jeziku d) _____ Opis zadatka
13. Odrediti X ako je AB1(16) + 66(10) + 1010(2) = X(8).
14. Šta će se desiti ako se u programu Power Point, za vrijeme izvođenja prezentacije, pritisne
tipka B? _______________________________________________________
15. Kolike će biti vrijednosti varijabli A i B nakon izvođenja sljedećeg algoritma:
A:=2; B:=4; ako je (A <B) onda A:=2*A+1; ako je (A < B) onda B:=B – A; inače A:=A – B; ako je (A + B < 5) onda A : = A + A;
152
inače B:=B + B;
Odgovor: A = ______, B = ______.
10.7. Zadaci 2017
KANTONALNO TAKMIČENJE IZ INFORMATIKE ZA UČENIKE OSNOVNIH ŠKOLA
04.04.2017.
U zadacima 1 – 5 zaokruži jedan tačan odgovor (DA ili NE)!
1. Svaki podatak je informacija. DA NE
2. Udaljenost između očiju i monitora treba biti manja od 20cm. DA NE
3. Vodoravna orijentacija papira je „horizontal“. DA NE
4. Sva obrada podataka se obavlja u memoriji. DA NE
5. Laptop je skraćenica od leserski printer. DA NE
U zadacima 6 – 10 zaokruži jedan tačan odgovor (A, B ili C)!
6. Funkcija sistema u kojoj se podaci i informacije smještaju na organiziran način kako bi se
mogli dalje obrađivati i koristiti se naziva
A. memorisanje B. kodiranje C. download
7. Naredba CLS u DOS-
A. briše ekran B. zatvara prozor C. gasi računar
8. Neizostavni dio u svakoj adresi elektronske pošte je
A. @ B. www C. com
9. Za crtanje kružnice i kvadrata u Windows aplikaciji Paint, na tastaturi je potrebno držati
stisnutu tipku
A. Shift B. Ctrl C. Enter
10. Najmanja adresabilna tačka na ekranu se naziva
A. Pixel B. Bit C. Byte
11. Neka u Excelovoj tablici imamo sljedeću situaciju
A B C D E F G H
15 1 – 1 april 20.17 Bosna 0 123,45
153
Ako u ćeliju H16 ukucamo naredbu = COUT(A15:H15) onda će u toj ćeliji, nakon izvršenja naredbe, biti ispisana vrijednost _________ .
12. Na linije ispred prezimena upisati od 1 do 3 kojima se određuje redosljed od najstarijeg do najmlađeg
_____ Von Neumann _____ Pascal _____ Babbage
13. Broj DAD0(16) u brojnom sistemu s bazom 7 ima zapis ___________________.
14. Nakon izvršenja koda k:=2017; writeln((k mod 100)+((k div 9) mod 9)); bit će ispisan
rezultat _________.
15. Kolike će biti vrijednosti varijabli A i B nakon izvođenja sljedećeg algoritma:
A:=3; B:=5; if((2*A>B) or (A<B))
then A:=2*A; if(A>B) then A:=A – B
else B:=A*B; for I:=1 to 10 do
if(A<B) then A:=A*A;
if((A>100) and (B<7)) then A:=A+B;
else B:=A+B;
Odgovor: A = ______, B = ______.