115
2013 Uvod u programski jezik EDIN PAŠIĆ BIHA Ć

Skripta za dodatnu C++

Embed Size (px)

DESCRIPTION

Skripta za ucenje programskog jezika C++

Citation preview

  • 2013

    Uvoduprogramskijezik

    EDINPAI

    B IHA

  • ii

    SADRAJ

    UVOD ....................................................................................................................................... iv

    1.RAZVOJNO OKRUENJE ................................................................................................... 11.1. Izgled programa ........................................................................................................... 31.2. Kreiranje datoteke ........................................................................................................ 41.3. Struktura programa ....................................................................................................... 7 1.4. Pokretanje programa .................................................................................................... 81.5. Greke .......................................................................................................................... 9

    2. NAREDBE ZA IZLAZ I ULAZ .......................................................................................... 122.1. Poetni program ......................................................................................................... 122.2. Naredba cout .............................................................................................................. 132.3. Varijacije naredbe cout .............................................................................................. 132.4. Osnovni tipovi podataka ............................................................................................ 17 2.5. Deklaracija varijabli ................................................................................................... 192.6. Operatori i izrazi ........................................................................................................ 21

    2.6.1. Operator pridruivanja ........................................................................................ 212.6.2. Inicijalizacija varijabli ........................................................................................ 212.6.3. Aritmetiki operatori .......................................................................................... 22

    2.7. Naredba za ulaz .......................................................................................................... 25 2.8. Zadaci za samostalan rad ........................................................................................... 29

    3. MATEMATIKE FUNKCIJE ............................................................................................ 293.1. Decimalni brojevi ....................................................................................................... 31

    3.1.1. Fixed ................................................................................................................... 313.1.2. Setprecision ........................................................................................................ 31

    3.2. Ostali manipulatori ..................................................................................................... 32 4. NAREDBE ........................................................................................................................... 33

    4.1. Sekvenca ili blok ........................................................................................................ 334.2. Relacijski operatori .................................................................................................... 34 4.3. Selekcije ..................................................................................................................... 34

    4.3.1. Naredba if ........................................................................................................... 34 4.3.2. Naredba if-else .................................................................................................... 36 4.2.3. Zadaci za samostalan rad .................................................................................... 40

    4.4. Logiki operatori ........................................................................................................ 414.4.1. Zadaci za samostalan rad .................................................................................... 45

    4.5. Ciklusi ili petlje .......................................................................................................... 464.5.1. For petlja ............................................................................................................. 46 4.5.2. Zadaci za samostalan rad .................................................................................... 52 4.5.3. While petlja ........................................................................................................ 54 4.5.4. Do while petlja ................................................................................................... 57 4.5.5. Naredba break ..................................................................................................... 58 4.5.6. Zadaci za samostalan rad .................................................................................... 58

    5. NIZOVI (POLJA) ................................................................................................................ 595.1. Jednodimenzionalni nizovi ......................................................................................... 59

  • iii

    5.2. Zadaci za samostalan rad ........................................................................................... 646. STRING ............................................................................................................................... 64

    6.1. Deklaracija stringa ..................................................................................................... 656.2. itanje i ispisivanje znakova ...................................................................................... 656.3. Ispitivanje znakova ..................................................................................................... 666.4. Rad sa stringom (nizom znakova) .............................................................................. 706.5. Zadaci za samostalan rad ........................................................................................... 75

    7. ZADACI SA OPINSKIH TAKMIENJA ........................................................................ 767.1. Zadaci 2010 ................................................................................................................ 767.2. Zadaci 2011 ................................................................................................................ 797.3. Zadaci 2012 ................................................................................................................ 827.4. Zadaci 2013 ................................................................................................................ 85

    8. ZADACI SA KANTONALNIH TAKMIENJA ................................................................ 888.1. Zadaci 2011 ................................................................................................................ 888.2. Zadaci 2012 ................................................................................................................ 918.3. Zadaci 2013 ................................................................................................................ 94

    9. TEORETSKI ZADACI SA OPINSKIH TAKMIENJA ................................................. 979.1. Zadaci 2010 ................................................................................................................ 979.2. Zadaci 2011 ................................................................................................................ 989.3. Zadaci 2012 ................................................................................................................ 999.4. Zadaci 2013 .............................................................................................................. 102

    10. TEORETSKI ZADACI SA KANTONALNIH TAKMIENJA ..................................... 10510.1. Zadaci 2011 ............................................................................................................ 10510.2. Zadaci 2012 ............................................................................................................ 10610.3. Zadaci 2013 ............................................................................................................ 109

  • iv

    UVOD

    Ova skripta je namijenjena uenicima koji ele nauiti programirati u C++, a nemaju neko prethodno znanje ni o jednom programskom jeziku. Naravno, bilo kakvo predznanje o

    programskim jezicima bi bilo od velikog znaaja za bolje razumijevanje, ali nije neophodno. Napisana je da slui kao interni udbenik u O "Kamenica" za pripremu uenika za takmienja iz programiranja u Unsko-sanskom kantonu. Skripta se sastoji iz nekoliko dijelova. U prvom dijelu je objanjena instalacija programskog

    paketa Code Blocks. Takoer, 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 sljedee poglavlje dok se dobro ne savladaju. U treem dijelu su opisane matematike funkcije samo nama potrebne i naini ispisivanja decimalnih brojeva. U etvrtom dijelu se bavimo naredbama od proste naredbe do ciklusa. Peti dio obrauje nizove i to samo jednodimenzionalni niz. Nizovi su nam potrebni vie u estom poglavlju gdje string obraujemo preko niza. Ostala poglavlja sadre zadatke i pitanja s opinskih i kantonalnih takmienja u USK odranih posljednjih godina. Svako poglavlje sadri odreen broj rijeenih primjera koje treba dobro prouiti. U rjeenju svakog primjera se nalazi tekst koji opisuje kako se dolazi do rjeenja, te kako program radi.

    Na kraju svakog poglavlja se nalazi odreen broj zadataka namijenjenih za samostalan rad. Preporuuje se da se svi zadaci rijee prije nego li se pree na naredno poglavlje, jer svaki od njih donosi neko novo znanje, neki novi trik. Programiranje je u poetku teko, pa nemojte odmah odustajati. Imajte na umu da se programiranje ui na grekama. Oni koji ele koristiti ovu skriptu u svom radu trebaju se javiti na e-mail. Kao i svaka, i ova

    skripta sadri greke, pa sve sugestije i primjedbe poaljite na e-mail:

    [email protected]

  • 1

    1. RAZVOJNO OKRUENJE

    Programsko okruenje koje emo koristiti za pisanje naih programa naziva se Code Blocks. Ovo sam okruenje odabrao jer je besplatno, ugodnog izgleda, lako se instalira i malih je

    dimenzija. Posjeduje sve osobine koje su potrebne za uenje programiranja, a i vie od toga. Kako instalirati Code Blocks? Moramo imati instalacijski CD ili ako imamo internet, onda

    treba otii na stranicu: http://www.codeblocks.org/downloads/26#windows

    Dobiemo sljedei link (Slika 1) i odaberemo codeblocks-12.11mingw-setup.exe tj. kliknemo na BerliOS (moe i na Sourceforge.net), gdje pokazuje crvena strelica, te saekamo par sekundi i preuzimanje e poeti automatski.

    Slika1

    Kad smo preuzeli datoteku, onda moemo krenuti s instalacijom programa. Inae instalacija je jednostavna, samo Next, Next, Next, itd. Ali evo ipak malo detaljnijeg upustva. Kao i kod

    svake instalacije, kliknemo dva puta malo bre da bi pokrenuli instalaciju. Raunar e nas pitati elimo li zaista pokrenuti ovaj program na ta emo mi rei (kliknuti Run). Ako imate Windows 7 operativni sistem, onda je preporueno da instalaciju zaponete kao administrator (admin), tako to kliknete desnim dugmetom mia 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 sljedeem prozoru ako nije, oznaimo sve i odaberemo Next, slika 2.

  • 2

    A zatim odaberemo Install. Saekamo par minuta, pa kad se zavri instalacija pojavit e se prozor u kojem vas raunar pita elite li pokrenuti Code Blocks, odaberemo Yes (Da). Nakon toga, e se pojaviti prozor:

    Slika3Listaotkrivenihkompajlera

    Ovo pretstavlja pronaene kompajlere na vaem raunaru. Odaberete prvi tj. GNU GCC Compiler i kliknete na OK. I to je to. Instalirali ste Code Blocks. U sluaju da koristite operativni sistem Windows 7 moe se dogoditi da vam kompajler ne bude pronaen. Tada ga morate vi pronai. Kako? Pa odmah nakon instalacije raunar e vas pitati elite li pokrenuti Code Blocks, odgovorite potvrdno. Nakon toga on e potraiti kompajlere na vaem raunaru. Dobit ete sliku prethodno. No, ako ne pronae GNU GCC Compiler, tada e pisati Invalid. U tom sluaju, pokrenete program Code Blocks (slika 4) odabrate

    Slika2

  • 3

    Settings Compiler Zatim, kliknuti redom na 1, 2, i 3 kao na slici 4. A zatim na OK. Ako ni ovo ne pomogne onda

    otii u folder gdje je instaliran Code Blocks i vidjeti gdje se nalazi folder kompajlera pod imenom MinGW. Zatim taj put napisati runo npr. kao to na ovoj slici pie C:\CodeBlocks\MinGW (ne ovaj nego va).

    Slika4Compilersettings(Podeavanjekompajlera)

    1.1. Izgled programa

    Pokrenemo Code Blocks. Nakon pokretanja programa, pojavit e se na poetku mali prozor koji sadri kratke upute. Ako ne elimo da nam se pojavljuje pri sljedeem pokretanju programa otkaimo kvaicu i kliknemo na OK. Izgled programa Code Blocks je:

  • 4

    Slika5IzgledprogramaCodeBlocks

    1.2. Kreiranje datoteke

    Sada emo nauiti kako kreirati datoteku u koju emo pisati nae kodove. Ima vie naina kako to uraditi. Mi emo navesti jedan koji moda nije najkrai, ali za poetnike je najbolji. Uradimo sljedee, kliknemo na: 1. File 2. New 3. File..

    Slika6Kreiranjesourcedatoteke

  • 5

    Dobivmo sljedei prozor u kojem kliknemo na drugu sliicu ispod koje pie C/C++ source, a zatim na Go.

    Slika7Izbordatoteke

    U sljedeem koraku samo kliknemo na Next. Potom odaberemo C++ i kliknemo na Next. Pazite da u ovom koraku ne odaberete jezik C, jer onda neete moi raditi s nekim naredbama.

    Slika8Izborjezika

  • 6

    Jo malo i gotovi smo. U ovom prozoru trebamo odabrati mjesto na raunaru gdje e se nalaziti naa datoteka odnosno na program. To inimo tako to kliknemo na sliicu gdje pie File name with full path odnosno na tri take (...).

    Slika9Izborlokacijenadisku

    Pojavit e se jo jedan prozor, u kojem odaberemo: 1. gdje e biti program i 2. upiemo njegovo ime, te kliknemo na Spremi (Save), slika 10.

    Slika10Izborfoldera(mape)gdjeebitiprogram

  • 7

    Folder (mapu) gdje biti vai programi napravite prije. U ovom sluaju to je folder ZadaciC++. U imenu foldera, gdje e biti vai programi ne smije biti kvaica nad slovima. Takoer, put do tog folder ne smije sadravati nad slovima kvaice, jer se moe vrlo lako desiti da vam program nee raditi tj. nee ga moi kompajler nai. Stoga je najbolje kreirati folder gdje e biti programi odmah im otvorimo C particiju ili neku drugu. Na kraju kliknemo na Finish. Nova datoteka izvornog koda naziva Prvi program.cpp je

    stvorena.

    Slika11Izgledkreiranedatoteke

    1.3. Struktura programa

    Za ljude koji tek ue programirati, najbolji nain uenja je da napiu program. Pa emo i mi krenuti tim putem. U prethodnom dijelu smo nauili kako napraviti source file (datoteku u koju emo pisati nae naredbe - kodove). Napiimo sljedei kod na mjestu gdje pie "Tu piemo naredbe!!!", slika 11.

    Naredbe za prvi program:

  • 8

    Objasnimo sada znaenje svake linije koda.

    #include

    Linija poinje s znakom Hach # (taraba). To je pretprocesorska radnja koja raunaru kae da u na program ukljui iostream datoteku.

    using namespace std;

    U drugom redu koda je napisana naredba using namespace std;. Ovdje su using i namespace kljune rijei pomou kojih se aktivira odreeno podruje imena, u naem sluaju std, koji je naziv imenika u kojem su obuhvaene sve standardne funkcije, te funkcije iz iostream biblioteke.

    int main()

    Trei red sadri int main(). Svaki program u C++ mora da ima bar jednu main (glavnu) funkciju. Deklaracija int ispred main znai da funkcija vraa cjelobrojnu vrijednost, pa se na samom kraju programa mora staviti naredba return 0;. Umjesto tipa int mogli smo staviti void, pa tada na kraju nebi morali pisati return 0;.

    cout

  • 9

    F9 Nakon toga raunar e kompajlirati va kod i pokrenuti program, pod uslovom da ste sve ispravno napisali. Ako je bilo tako dobit emo prozor crne boje s bijelim slovima, slika 12.

    Slika12Izgledizvrenjaprograma

    Ako smo napravili neku sintaksiku (pravopisnu) greku tj. zaboravili smo jedno slovo ili taku-zarez (;), onda nam se nee pojaviti ovakav crni prozor nego emo dobiti upute kako da popravimo greke.

    1.5. Greke

    Greke su este, naroito kod poetnika. Zaboravljeno slovo, taka-zarez, krivo napisana neka naredba, zaboravljena zagrada itd. su samo neke od najeih greaka. Ne brinite, one nisu veliki problem, jer nam Code Blocks kae gdje je i ta ne valja. A gdje se nalaze te vane

    informacije? Na dnu prozora. Ako npr. u prethodnom kodu izostavimo ; koje se nalazi iza

    navodnika, te pokrenimo program tipkom F9, dobiemo upozorenje o grekama, slika 13.

    Analizirajmo na ta nas kompajler upozorava.

    Prva linija: D:\Prvi program.. kae da je to u funkciji int main() (jer moe biti vie funkcija,

    mi za sada imamo jednu).

    Druga linija: itamo samo ispod Message (poruka) ta pie, a pie sljedee: error: expected ' ; ' before 'return'

    a znai: greka: oekivano (vjerovatno) je problem u ' ; ' taka-zarezu, GDJE?, prije naredbe return

    Crveni kvadrati takoer ukazuje gdje se pogreka nalazi (imati na umu da NIJE u istoj liniji gdje je kvadrati nego prije kvadratia tj. u liniji broj 6.)

  • 10

    Slika13Analizanapravljenihgreki

    Takoer, ispod naziva Line stoji broj koji oznaava gdje je mogui problem. U naem sluaju to je broj 7.

    Ako se ovaj izvjetaj ne vidi, onda ga ukljuimo (uinimo vidljivim) pritiskom na tipku

    F2 Kad popravimo greke pritisnemo tipku F9 da bi ponovo kompajlirali i pokrenuli program.

    Ako se opet pojave greke popravljamo dok nam na dnu ne bude pisalo 0 errors tj. dok ne

    dobijemo crni prozor. U sluaju da ne vidimo brojeve linija, onda ih ukljuimo tako to kliknemo na

    Settings Editor

    Dobivamo sljedei prozor, u kojem, gdje pie Show line numbers oznaimo kvaicom i kliknemo na Ok, slika 14.

  • 11

    Slika14Brojevilinija(linenubers)

    Kod treba biti lijepo napisan da bi bio pregledan, zbog kasnijih popravki. Da se mi ne bi

    previe oko toga zamarali, kada napiemo kod (program), onda jednostavno kliknemo desnim

    dugmetom mia i odaberemo Format use Astyle.

    Moe se desiti da sa ovom inaicom programa imate problem kada elite napisati vitiaste zagrade { }.

    Problem je u plugin-u i treba ga iskljuiti na sljedei nain: Plugins Manage Plugins...

    Dobivamo jedan prozor u kojem traimo gdje pie DoxyBlocksB (slika 15), oznaimo i odaberemo Disable i zatvorimo prozor, pa nam vie nee raditi probleme. Takoer, ako ne elimo da nam provjerava pravopis teksta u navodnicima ili komentarima (budui da provjerava engleski jezik, kod nas e sve podvui kao da je netano (pogreno) napisano, pa ga je poeljno iskljuiti), kao i u prethodnom sluaju odaberemo

    Plugins Manage Plugins...

    Traimo gdje pie SpellChecker, i kliknemo na Disable, te zatvorimo prozor.

  • 12

    Slika15Upravljanjepluginovima

    2. NAREDBE ZA IZLAZ I ULAZ

    2.1. Poetni program

    Kada dobijemo neki problem da rijeimo tj. da napiemo odgovarajui program onda slijedimo nekoliko koraka koji su potrebi u svakom programu.

    Radimo sljedee: 1. Kreiramo datoteku u koju emo pisati kod (to radimo na prethodno opisan nain) 2. Napiemo sljedei kod (ovaj kod ima svaki program i zato ga nauimo NAPAMET):

    #include using namespace std; int main() { return 0; }

  • 13

    3. Kompajliramo i pokrenemo program tipkom F9. Ako dobijemo crni prozor, onda je sve OK, ako ne popravljamo greke. Poslije toga

    pristupamo rjeavanju zadanog problema. Svaki zadatak treba na ovakav nain rjeavati da bi se izbjegle nepotrebne greke, a koje je nekada teko otkriti.

    2.2. Naredba cout

    Naredbu cout smo ve upoznali u naem prvom programu, a sada emo se s njom detaljnije upoznati. Za izlaz (ispis) na ekran monitora koristimo identifikator cout

  • 14

    ZAKLJUAK: Nita se na izlazu (ekranu) ne mijenja pisali mi naredbe u jednom ili vie redova.

    #include using namespace std; int main() { cout

  • 15

    #include using namespace std; int main() { cout

  • 16

    ZAKLJUAK: Ako hou da ispiem razmak, to uradim tako to u znacima navoda napravim razmaka koliko mi treba.

    Postavlja se pitanje, kako da druga reenica bude u novom redu? Kako to uraditi? Kada elimo dobiti JEDAN PRAZAN RED ili PREI U NOVI RED onda koristimo

    naredbu endl.

    #include using namespace std; int main() { cout

  • 17

    ZAKLJUAK: Uoimo da naredbu endl ne moemo koristiti ako prije nismo stavili naredbu cout. Zadatak 1. Napisati program koji e na ekranu (zaslonu) monitora ispisati tekst tano 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 moemo podijeliti na nepromjenjive (konstante) i promjenjive (varijable). Konstante

    su podaci koji tokom izvravanja programa ne mogu da promjene svoju vrijednost. Varijable

    (promjenjive) su podaci koji tokom izvravanja mogu da promjene svoju vrijednost.

    Identifikator predstavlja ime koje dodjeljujemo varijablama, funkcijama itd. Identifikator

    (ime) moe biti sastavljeno od slova engleskog alfabeta, prvi znak mora biti slovo ili znak

    podvueno _ , brojeva i identifikator ne smije biti jednak nekoj od kljunih rijei. Pri programiranju, pohranjujemo varijable u memoriji raunara, ali raunar mora znati kakve podatke elimo pohraniti, jer ne zauzimaju svi podaci jednaku koliinu memorije tj. moramo rei raunaru ta spremamo broj, slova, znakove, itd. Tako ako kaem 13 to je podatak. Kakav? Brojani. Ako pak kaem sunce. I ovo je podatak. Kakav? Znakovni. Zbog toga to podaci mogu biti razliiti po tipu (znakovni, brojani) moramo raunaru rei 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 sadri vrijednosti void 0 bez vrijednosti

    Prve dvije kolone tabele treba znati NAPAMET, ta znai i kako se pie. Tako pomou tipa char moemo spremati znakove (slova, brojeve, upitnik, uzvinik, i ostalo), int nam govori da se radi o cijelim brojevima, float o realnim brojevima, double je takoer realan broj

  • 18

    samo u njega moe "stati" znatno vei broj. Nekada radimo samo npr. sa pozitivnim brojevima, pa su nam negativni nepotrebni, da nebi gubili memoriju i da bi mogli spremiti to

    vei pozitivan broj onada koristimo modifikator. Tako sa modifikatorom unsigned tip int zauzima opseg od 0 65534.

    Osnovni tipovi podataka se mogu modificirati (promijeniti) koristei jedan ili vie modifikatora:

    signed unsigned

    short long

    Sljedea tabela pokazuje kako se koriste modifikatori, koliko memorije imamo, kolika je maksimalna i minimalna vrijednost koju moemo staviti u odreenu varijablu.

    Tip Koliina 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)

    Meutim, ove vrijednositi ovise i od kompajlera koji koristimo, te takoer i od raunara na kojem radimo.

  • 19

    2.5. Deklaracija varijabli

    Kada smo nauili koje tipove podataka imamo, vrijeme je da se upoznamo detaljnije s varijablama. Ve smo rekli da su varijable podaci koji tokom izvravanja 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 nauili 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 upuuje na ono na ta se odnosi. Npr. ako raunate obim kvadrata, onda je za ime varijable, u koju emo spremiti vrijednost, poeljno uzeti ime: Obim, ili obim, ili samo slovo O. Moe i neko drugo ime npr.

    Aligator, ali kad to vidimo u programu koji rauna obim neemo moi zakljuiti po tom imenu da se radi o obimu.

    SVE VARIJABLE PRIJE UPOTREBE U PROGRAMU MORAMO DEKLARIRATI,

    INAE E NAM KOMPAJLER JAVITI GREKU.

    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;

  • 20

    Vrlo je vano da razumijete ta su varijable i kako se deklariraju. Ako vam nije jasno ta je to

    onda proitajte 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; znai da smo kreirali varijablu, ije ime je a, te u nju moemo staviti samo cjelobrojnu vrijednost. Na ovaj nain mi kaemo raunaru da nam obezbjedi prostor u memoriji koji e se zvati a i da emo u njega "skladititi" tj. pohraniti samo cjelobrojne vrijednosti (negativne i pozitivne cijele brojeve, te nulu). Ako u ovu

    varijablu a pokuamo pridruiti (spremiti, pohraniti) vrijednost odnosno broj 5.23 (decimalni broj), onda e raunar spremiti samo cijeli dio tj. broj 5 a ostalo 0.23 e odbaciti.

    Programski jezik C++ razlikuje velika i mala slova, tako je doputeno sluiti se istim

    imenom varijable, samo pisano malim, odnosno velikim slovima za dvije razliite varijable.

    Mjesto deklaracije varijable u programu odreuje podruje djelovanja odreene varijable. Prema podruju 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 poetku neke funkcije ili na poetku nekog bloka naredbi. Ove varijable vrijede samo unutar funkcije ili bloka naredbi, jer izlaskom iz

    funkcije ili bloka naredbi ove varijable vie ne postoje.

    Mi emo za sada najee koristiti globalne varijable. Nemojte da vas ovo zbunjuje. Trenutno vam nije bitno ako ne znate ta to znai.

  • 21

    Kljune rijei 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 rijei ili simboli koji odreuju da se s varijablama u programu neto uini. Mogu biti unarni, binarni, ternarni.

    2.6.1. Operator pridruivanja

    Operatorom pridruivanja ili operatorom za dodjelu vrijednosti se varijabli s njegove lijeve

    strane pridruuje (sprema, pohranjuje) vrijednost izraza koja se nalazi na desnoj strani. Tip

    vrijednosti izraza treba odgovarati tipu varijable.

    Operator pridruivanja je znak jednako: =

    Operator pridruivanja se moe koristiti zajedno i s jo jednim operatorom.

    Primjer 2.

    a=5; (znai da e varijabli a biti pridruena (spremita, skladitita) vrijednost 5) a = a + 5; (znai da e varijabli a biti pridruena vrijednost izraza a + 5) Ovo se moe i drukije zapisati: a += 5;

    Dakle, znak = ne znai da je lijeva strana jednaka desnoj, nego on kae raunaru da ono to je na desnoj strani znaka jednako pridrui (spremi, skladiti) u varijablu na lijevoj strani znaka

    jednako.

    2.6.2. Inicijalizacija varijabli

    Pridruivanje vrijednosti varijabli prilikom definisanja naziva se inicijalizacija varijable.

    Deklaracija i inicijalizacija varijable se moe obaviti u istom redu koda.

  • 22

    Primjer 3. int a = 3;

    Ovdje smo deklarirali varijablu a tj. odredili smo kakav tip podatka e sadravati, te smo je inicijalizirali odnosno pridruili joj vrijednost 3. Dakle, kada napiemo int a; ili double a, b; mi smo izvrili deklaraciju varijabli, a kad napiemo int a = 3; ili double a = 5.03, b = 3.25; mi smo izvrili deklaraciju varijabli i inicijalizaciju (pridruivanje vrijednosti) varijabli.

    2.6.3. Aritmetiki operatori

    Simboli aritmetikih operatora uglavnom odgovaraju standardnim matematikim oznakama aritmetikih operacija.

    C++ operator Operacija + sabiranje oduzimanje * mnoenje / dijeljenje

    % ostatak pri cjelobrojnom dijeljenju

    Prva tri operatora +, -, i * imaju iste osobine kao u matematici, pa ih ne treba posebno objanjavati. Operator dijeljenja / ima isto znaenje kao u matematici samo to morate voditi rauna koje brojeve tj. varijable dijelite. Tako npr. ako raunamo 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. raunar e odbaciti 0.5. Ako pak raunate 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 rauna sa kojim vrijednostima radimo i kakav rezultat oekujemo cijeli ili realni broj tj. decimalni.

    Zadnji operator % (itamo modulo) daje kao rezultat ostatak pri CJELOBROJNOM dijeljenju.

    Primjer 4. Izraunajmo sljedee izraze sa znanjem iz matematike koristei 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.

  • 23

    Koliko bi bilo 5%2? Operator modulo % daje ostatak pri cjelobrojnom dijeljenju. Moemo ga

    koristiti samo ako su cijeli brojevi u pitanju. Kako nai taj ostatak? Vrlo jednostavno, jer 5/2 moemo zapisati i ovako:

    5/2 je jednako 2 jer je 2*2=4 (najblie 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 najblie 3 tj. 3*2=6 i do 7 nedostaje 1. Postavite sebi pitanje: Koji broj pomnoen sa brojem 2 daje broj 7 ili to blie broju 7? Ono to nedostaje do broja 7 je ostatak.

    8%4=0, jer je 8/4 tano 2, tj. 2*4=8. 11%3=2, jer je 11/3 najblie 3 tj. 3*3=9 i do 11 fali 2. 15%4=3, jer je 15/4 najblie 3 tj. 3*4=12 i do 15 fali 3.

    Ako se u izrazu nalazi vie operatora, redoslijed izvravanja ovisi o prioritetu operatora.

    Nieg prioriteta su sabiranje i oduzimanje, a vieg mnoenje, dijeljenje, cjelobrojno dijeljenje

    s ostatkom. Redoslijed prioriteta se moe promijeniti upotrebom zagrada ( ), jer one

    imaju najvii prioritet tj. izvrava 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;

  • 24

    Izraunajmo sljedee izraze. a) rezultat = a b * c b) rezultat = (a b) * c c) rezultat = a * b + b * c d) rezultat = ((a * c) c) * b a

    Rjeenje.

    a) rezultat = - 2 b) rezultat = - 2 c) rezultat = 12 d) rezultat = 2

    Programski jezik C++ ima jo dva unarna operatora: uveaj za jedan ++ (inkrement) i umanji za jedan (dekrement).

    Inkrement i dekrement operatori se primjenjuju samo na varijable i ne mogu se primijeniti na

    izraze, niti na konstante. Ako se nalaze ispred varijable, onda se vrijednost te varijable prvo

    povea ili umanji za jedan i tako dobivena nova vrijednost se koristi pri izraunavanju izraza. Ako se operator nalazi iza varijable, tada se prvo izrauna vrijednost izraza, a tek nakon toga se vrijednost varijable povea ili umanji za jedan.

    Primjer 6. int a = 3; int b = 2; int R;

    U programu piu sljedee naredbe: a++; R = a b;

    Koliki bi bio rezultat?

    Rezultat je R = 2, jer e raunar prvo izraunati koliko je a++, a to znai poveaj 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 izraunao izraz s upotrebom a = 3 pa tek bi onda poveao a za 1 tj. R = 3 2 = 1.

  • 25

    Ako bi napisali ovako: R = ++a b; Prvo bi poveao a za 1, pa bi onda raunao s novom vrijednou od a tj. R = 4 2 = 2. Na isti nain se upotrebljava i dekrement -- jedino to on ne poveava za 1 nego smanjuje za 1.

    2.7. Naredba za ulaz

    Za unoenje podataka s tastature odnosno s ekrana monitora koristimo cin >>. Ovu naredbu koristimo kada unosimo neke podatke s tastature (glavnog ulaza) u raunar. Kako to ide, pokazaemo na nekoliko primjera. Upotreba je veoma jednostavna.

    Primjer 7. Napisaemo program koji unosi jedan cijeli broj s tastature u raunar i ispisat emo taj isti broj na ekran monitora.

    #include using namespace std; int main() { int a; cin>>a; coutb; cout

  • 26

    Brojeve moemo unijeti i u jednom redu s tim da izmeu njih napravimo jedan prazan razmak npr. 2 5. Takoer, moemo ispis napraviti i s jednom naredbom cout.

    #include using namespace std; int main() { int a, b; cin>>a>>b; cout, a na kraju obavezno doe taka-zarez (;). Sada kada smo nauili unositi podatke moemo prei na rjeavanje konkretnih problema.

    Zadatak 2. Napisati program koji e unijeti dva cijela broja s glavnog ulaza (tastature) i ispisati njihov zbir.

    Rjeenje.

    Kada rjeavamo zadatak, prvo ga dobro proitamo i uoimo ta su nam ulazni podaci, ta izlazni, koliko emo varijabli trebati, kojeg e tipa biti itd. U naem sluaju imamo dva broja tj. trebat emo dvije varijable kojima emo pridruiti (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 treu varijablu. Poto se radi o zbiru, neka njeno ime bude veliko Z. Unosimo dva CIJELA broja pa e varijable a i b biti tipa int, a poto je zbir dva cijela broja opet cijeli broj to e i varijabla Z biti tipa int. U zadatku se ne kae kako e te unijeti brojeve, u jednom ili vie redova. To sami birate po elji, kako vam je lake. Takoer, se ne kae treba li se ispisati prije unosa kakva poruka. To opet birate sami, da li ete ispisati nekakvu poruku ili ne. Na izlazu (ekranu) se trai samo ispis zbira, nikakva poruka. Vi sami birate da li ete ispisati neku poruku ili ne. Mi emo ovdje navesti sve varijante bez poruka i s njima. U svakom sluaju program je taan jer radi ono to se od njega trai, sabira dva broja. Ostale poruke, nain ispisa su samo minka da ljepe izgleda.

    Prvi sluaj bez ikakvih poruka, unosimo npr. 2 i 3:

  • 27

    #include using namespace std; int main() { int a, b, Z; cin>>a>>b; Z= a + b; cout

  • 28

    #include using namespace std; int main() { int a, b; cin>>a>>b; coutb; Z=a+b; R=a-b; P=a*b; K= a/b; O=a%b; cout

  • 29

    B=b; K= A/B; cout

  • 30

    3. MATEMATIKE FUNKCIJE

    U C++ postoji mnogo ugraenih funkcija. ta to znai? Uzmimo npr. apsolutnu vrijednost nekog broja. Poto se to esto koristi, pa da ne bi za svaki problem (zadatak) pisali kod (program) koji rauna aposolutnu vrijednost, onda su programeri napisali taj kod i ugradili ga u jezik a nae 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 ugraenih matematikih funkcija, mi emo ovdje navesti samo one koje e nama trebati i koje su vama poznate iz matematike.

    Da bi koristili matematie funkcije morate prije using namespace std; ukljuiti matematiku biblioteku naredbom

    #include

    Vrijednost svih sljedeih funkcija je tipa double. Tip argumenta x i y je double, a argumenta n je int. Kada upotrebite neku funkciju ona e vam vratiti izraunatu vrijednost koja e biti tipa double.

    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. Napisaemo program koji demonstrira upotrebu ovih funkcija. Rjeenje.

    #include #include using namespace std; int main() { int a=2, b=4, c=-5; cout

  • 31

    3.1. Decimalni brojevi

    Nauit emo kako oblikovati tj. ispisivati decimalne brojeve. C++ prua mogunost 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 naunom zapisu (npr. umjesto 1.034292e+004 elimo da bude 10342.92)

    Primjer 10. Napisaemo program koji e zadane brojeve ispisati na ekran bez upotrebe modulatora fixed i s upotrebom modulatora fixed.

    Rjeenje.

    #include using namespace std; int main() { double a=3.14, b=0.051; double c=10.122445541; cout

  • 32

    #include

    Ona se moe koristiti za tano odreen ispis decimala u decimalnom broju (zaokruivanje), tako to se prije ove funkcije napie naredba fixed.

    Primjer 11. Prethodni primjer, gdje su prvo ispisani decimalni brojevi s naredbom

    setprecision, a ispod odmah u kombinaciji s naredbom fixed. Rjeenje.

    #include #include using namespace std; int main() { double a=3.14, b=0.051; double c=10.122445541; cout

  • 33

    4. NAREDBE

    Naredba je osnovna jedinica obrade u programima. Mogu se podijeliti na proste, sloene i

    upravljake. Upravljake naredbe ne vre 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

  • 34

    Dakle, ako imamo dvije ili vie naredbi za koje elimo da se izvre zajedno jedna iza druge

    onda ih stavljamo u vitiaste zagrade tj. u blok. Prije nego li nauimo ta su sekcije, upoznajmo jo jednu vrstu operatora. To su relacijski operatori.

    4.2. Relacijski operatori

    Relacijskim operatorima se utvruje povezanost dviju varijabli, funkcija ili izraza. Raunari u svom radu upotrebljavaju jednostavnu logiku sa dvije vrijednosti: ukoliko je uslov (uvjet)

    istinit (true), vrijednost je 1; ukoliko je laan (false), vrijednost je 0. Relacijski operatori su

    prikazani u sljedeoj tablici:

    C++ operator Znaenje Primjer> vee od 5>4 >= vee od ili jednako 5>=x < manje od 4

  • 35

    Primjer 13.

    IZRAZ USLOV OBJANJENJE

    5 = = 5 DA Jer moemo utvrditi da li je izraz taan ili netaan. a>b DA Jer moemo utvrditi da li je izraz taan ili netaan za odreene vrijednosti a i b. a+b NE Jer ne moemo utvrditi da li je izraz taan ili netaan za odreene vrijednosti a i b.

    (a+b)*c>a; if(a>0) cout

  • 36

    Ispie se tekst: "Broj je pozitivan" te se poslije ispie jedan prazan red tj. pree se u novi red naredbom endl; Nakon toga raunar ide dalje s izvravanjem koda na liniju ispod

    if(a==0) cout

  • 37

    Naini 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 najei, najpregledniji naini pisanja naredbe ifelse, mada ih se vi ne morate pridravati tj. piete u koliko redova hoete, s kojim razmakom hoete, bitno je samo da naredba sadri svoj osnovni oblik, koji moete lijepo srediti samo s dva klika, tako to

    kliknete desnim dugmetom mia i odaberete Format use Astyle, slika 17.

  • 38

    Slika17Oblikovanjekoda

    Primjer 15. Napisati program koji unosi dva cijela broja, te ako je njihov zbir vei od nule, ispisuje njihov proizvod, inae njihovu razliku. Rjeenje.

    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 vei od nule tj. a+b>0. Ako je to tano (za unesene brojeve), onda e se ispisati njihov proizvod tj. a*b. To je naa naredba1 u if-else naredbi. Dio inae njihovu razliku, znai, ako je uslov netaan, onda ispii njihovu razliku tj. a-b, a ovo je naa naredba2 u if-else naredbi.

    #include using namespace std; int main() { int a, b; cin>>a>>b; if(a+b>0) cout

  • 39

    uslov a>b). ta ako je uslov taan? To znai da je broj a vei od broja b. ta onda da uradimo? A ta ako je netaan? To znai da je onda broj b vei 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 pridruiti (spremiti, u nju skladititi) broj koji od njih dvojce (od a ili b) bude vei.

    if (a>b) max=a; else max=b; Ostaje jo da uporedimo max i c, pa ko od njih bude vei, taj je onda najvei broj.

    #include 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

  • 40

    #include using namespace std; int main() { int a, b, c; cin>>a>>b>>c; if(a>b) if(a>c) cout

  • 41

    Zadatak 28. Napisati program koji unosi dva prirodna broja a i b, i ispisuje poruku, ako je

    broj a djeljiv brojem b: "Broj a je djeljiv brojem b", a ako nije poruku "Broj a nije djeljiv

    brojem b". Umjesto a i b u poruci koristiti konkretne vrijednosti.

    4.4. Logiki operatori

    Do sada smo u uslovu kod if naredbe koristili relacijske operatore (, ==, itd) i to samo jedan operator u izrazu. Postavlja se pitanje moemo li kako koristiti vie relacijskih

    operatora? Jer kad bi mogli koristiti vie njih u jednom uslovu, tada bi mogli graditi sloenije

    uslove. Odgovor je potvrdan. To nam omoguuju logiki operatori, koji slue za povezivanje dva ili vie jednostavnih uslova - izraza (sa samo jednim relacijskim operatorom).

    Logiki operatori u C++ su:

    Logiki operator C++ operatornegacija NE !

    logiki I && logiki ILI

    Logiki operator negacija "ne" je unarni operator, oznaava se sa ! i zapisuje se ispred elementa i mijenja njegovu logiku vrijednost iz tano u netano ili iz netano u tano. U C++ se tano oznaava s brojem 1, a netano s brojem 0.

    Logiki operator "I" u oznaci && je taan (ima vrijednost 1) ako i samo ako su oba operanda tana (imaju vrijednost 1), inae je netaan (ima vrijednost 0 u svim ostalim sluajevima). Oznaimo jedan operand (izraz) sa A, a drugi sa B, npr. (5+c)

  • 42

    Logiki operator "ILI" u oznaci || je taan (ima vrijednost 1) ako je bar jedan operand (izraz) taan tj. netaan je (ima vrijednost 0) samo ako su oba operanda netana.

    A B A || B0 0 0 0 1 1 1 0 1 1 1 1

    Primjer 17. Izraunati (utvrditi) da li su sljedei izrazi (uslovi) tani ili netani. 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

    Rjeenje.

    1) a) Sada umjesto varijabi i uvrstimo konkretne vrijednosti, te ispitamo da li je prvi izraz taan ili netaan, isto tako za drugi, pa onda primjenimo operator &&, a umjesto tano kao to smo rekli piemo 1, a za netano 0:

    (5+1)>0 && (5-1)>0

  • 43

    6>0 && 4>0 1 && 1

    1 Dakle, ovaj uslov je taan. b) 1

    c) 0

    2) a) Opet umjesto varijabli uvrstimo vrijednosti. a>0 || b>0 1>0 || 3>0 1 || 1

    1 Dakle, tano. b) 1

    c) 1

    3) a) Sada na isti nain samo to gledmo prva dva, pa tako dobiven rezultat s sljedeim. a>=1 && b>0 && c=1 && 2>0 && 4

  • 44

    U zadatku se trai da unesemo dva cijela broja, koja emo oznaiti s a i b tj. int a, b; . Uslov je da se ispie njihov proizvod, ako je jedan od brojeva negativan. To znai, da e se ispisati proizvod ovih brojeva, ako je

    negativan a, b pozitivan

    a pozitivan, b negativan

    negativan a, negativan b

    odnosno zapisano simbolima a0 a>0, b

  • 45

    #include using namespace std; int main(){ int a; cout

  • 46

    4.5. Ciklusi ili petlje

    Ciklusi ili petlje su upravljakie strukture koje omoguuju ponovljeno izvravanje neke naredbe.

    Prema zadavanju uslova dokle treba da se petlja ponavlja, mogu da postoje:

    petlje koje traju dok je neki uslov ispunjen petlje koje traju dok neki uslov nije ispunjen brojake petlje

    4.5.1. For petlja

    Jedna od najvanijih petlji je for petlja. Njena upotreba u programima je neizostavna, zbog

    toga je vrlo vano razumjeti kako ona funkcionira. Kada emo koristiti for petlju?

    AKO JE BROJ PONAVLJANJA POZNAT, TADA KORISTIMO FOR PETLJU

    Opi 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 logiki izraz koji predstavlja uslov za nastavljenje petlje. Dok je taan petlja se izvodi, im postane netaan petlja se prekida. Izraz2 predstavlja promjenu vrijednosti izraza1 na kraju svakog prolaska kroz petlju. Naini pisanja for petlje:

    1) for(izraz1; uslov; izraz2) naredba;

    2) for(izraz1; uslov; izraz2) naredba;

    for(izraz1; uslov; izraz2) { naredba1; naredba2; Dvije ili vie naredbi, koje pripadaju for petlji se moraju staviti u vitiaste zagrade!!! ... naredba n;

    }

  • 47

    3) for(izraz1; uslov; izraz2) { naredba1 naredba2 ... naredba n

    }

    Primjer 20. Napisati program koji ispisuje poruku "C++" 10 puta.

    Rjeenje. Prema znanju koje imamo (bez znanja for petlje) mi bi ovaj zadatak rijeili tako to

    bi poruku "C++" napisali 10 puta: cout

  • 48

    Konano rjeenje zadatka.

    #include using namespace std; int main(){ int i; for(i=1; i

  • 49

    poslije 2 je 4, pa 6, 8, itd. Da bi dobili 4 moramo na 2 tj. poetnu 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 znai da onu vrijednost koju ima i poveamo za 2, pa novu vrijednost pridruimo varijabli i. Stara vrijednost se obrie, a nova upie.

    #include using namespace std; int main(){ int i; for(i=2; i

  • 50

    uitelj acima dade u zadatak neka izraunaju zbir prvih stotinu prirodnih brojeva. Oekivao je kako e ga djeca, zadubljena u rjeavanje, neko due vrijeme ostaviti na miru, no nemalo se iznenadio kada je ve nakon nekoliko trenutaka mali Gauss javio taan rezultat. Zadatak emo rijeiti upotrebom for petlje, jer trebamo sabrati brojeve 1, 2, 3, ... , 100. Dakle, imamo ponavljanje. Poetna vrijednost (izraz1) e biti i=1. Uslov i

  • 51

    Primjer 25. Napisati program koji e izraunati (prebrojiti) koliko ima prirodnih brojeva izmeu 1 i 1000, a koji su djeljivi sa 19. Rjeenje. Ovo je slian zadatku koji smo prije uradili a trailo se da ispiemo sve brojeve djeljive sa 7 izmeu 1 i 100. Brojeve neemo ispisivati ve emo izbrojati koliko ih ima. Kako emo to uraditi? Tako to emo deklarirati i incijalizirati varijablu s imenom brojac (moe naravno i neko drugo ime) tj. int brojac=0; . Odmah varijablu brojac stavljamo na vrijednost 0, jer kad naemo prvog koji je djeljiv s 19, odnosno kad uslov u naredbi if bude taan, varijablu poveamo za 1. Pa kad naemo drugog opet varijablu poveamo za 1. Tu radnju moemo jednostavno zapisati sa brojac++; ili brojac=brojac+1;. Na kraju ostaje jo samo da ispiemo koliko ih ima.

    #include using namespace std; int main(){ int i, brojac=0; for(i=1; i

  • 52

    #include using namespace std; int main(){ int i, n, zbir=0; coutn; for(i=1; i

  • 53

    Primjer 28. Napisati program za ispis prirodnih brojeva od 1 do n.

    Rjeenje.

    #include using namespace std; int main() { int i, n; cin>>n; for(i=1; i

  • 54

    Zadatak 47. Napisati program koji e ispisati sumu (zbir) prirodnih brojeva u intervalu od 1 do n koji su djeljivi sa 3 i sa 7.

    Zadatak 48. Napisati program koji e ispisati zbir prirodnih brojeva u intervalu od 1 do n ija je cifra jedinica 8.

    Zadatak 49. Napisati program za izraunavanje proizvoda od 1 do 5. Zadatak 50. Napisati program za ispis aritmetike sredine parnih prirodnih brojeva do n. Zadatak 51. Napisati program koji e izraunati zbir dvocifrenih brojeva kod kojih je zbir cifara manji od 7.

    Zadatak 52. Napisati program koji e ispisati sve dvocifrene brojeve sa drugom cifrom veom od 6. Zadatak 53. Napisati program koji e ispisati dvocifrene brojeve kod kojih pri djeljenju sa 3 je ostatak 2.

    4.5.3. While petlja

    Petlja while se koristi za ponavljanje dijela koda programa kod kojeg broj ponavljanja nije

    unaprijed poznat. Dakle, kada ne znamo da li e se pri svakom pokretanju programa ili petlje while ona izvriti jednom, dva puta ili deset puta ili pak nijednom. While petlju

    moemo koristiti i kada je broj ponavljanja poznat.

    Opi oblik while naredbe je: while ( uslov ) naredba;

    Kada raunar doe do while petlje on prvo se provjerava uslov. Ako je uslov (koji mora biti logiki izraz) taan, izvrava se naredba. Potom se opet provjerava uslov, pa ako je taan, izvrava se naredba. Ciklus tj. petlja se zavrava kada vrijednost uslova postane logika neistina tj. netaan. Dakle, naredba while se izvrava sve dok je uslov taan. Treba uoiti da se moe desiti da naredba ne bude nijednom izvrena, ako pri prvoj provjeri uslov, bude netaan.

    Kao i kod for petlje, ako imamo dvije ili vie naredbi koje pripadaju while naredbi, onda se

    one piu u vitiastim zagradama tj. u bloku. Rijedak je sluaj kada emo koristiti naine pisanja 1 i 2, veinom 3 ili 4.

  • 55

    Naini 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;

    }

    Primjer 29. Napisati program koji e ispisati brojeve od 1 do 10. Rjeenje. Uzeli smo ovaj lagan zadatak da demonstriramo kako to radi while petlja. Prvo to

    trebamo je odrediti je uslov. On treba biti taan sve dok se ne ispiu svi brojevi. Poto je zadnji 10, onda e biti i

  • 56

    cjelobrojnom dijeljenju (%). Pa e biti 629%M=9, gdje je M, koji broj? Kako ga odrediti? Poto je 9 ostatak, to e oito 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. Moemo

    li kako od broja 629 dobiti broj 62? Imajte na umu da mi radimo s cijelim brojevima i da

    emo koristiti tip int. Podijelimo broj 629 sa 10. To e dati 62,9. Kako ve rekoh, mi emo koristiti tip int, za broj koji bude unosio korisnik, pa e raunar odbaciti dio poslije zareza, pa e ostati samo 62. Sada primjenimo modulo tj. 62%10=2. Kako dobiti treu cifru? Pa na isti nain kao i drugu. Podijelimo 62 sa 10. Dobiemo 6,2. Raunar e odbaciti dio poslije zareza, jer radimo s cijelim brojevima i ostae broj 6. Konano, 6%10=6 i tako smo dobili sve tri cifre. Ako podijelimo jo broj 6 sa 10 dobit emo 6/10=0,6 tj. 0 jer e raunar odbaciti dio poslije zareza. Dakle, podijelimo li sa 10 jo i zadnju cifru (onu koja je ostala zadnja pri

    prethodno opisanom nainu ispisivanja cifri broja), uvijek emo dobiti broj 0. Stoga e se petlja ponavljati sve dok je uslov razliit od nule. ta se je u prethodnom objanjenju ponavljalo?

    traili smo modulo 10 dijelili smo sa 10

    Dakle, oznaimo s n prirodan broj kojeg unosi korisnik tj. int n;. Naredbe koje e biti u while petlji su:

    cout

  • 57

    Testirati program i za jednocifren i dvocifren broj, jer se moe 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 zavrava.

    Rjeenje.

    #include using namespace std; int main(){ int i, zbir = 0; cout> i; while(i!=0){ zbir=zbir+i; couti; } cout

  • 58

    4.5.5. Naredba break Iskakanje iz upravljake strukture se postie naredbom:

    break;

    Time se postie zavretak ciklusa (petlje): for, while, do while, skakanjem na prvu naredbu

    neposredno iza petlje. Nekad ete doi u situaciju da elite izai iz petlje prije nego se zavri tada obino koristite naredbu break.

    4.5.6. Zadaci za samostalan rad

    Zadatke rjeavati upotrebom while petlje.

    Zadatak 54. Napisati program za ispis kvadrata prirodnih brojeva od 1 do 5..

    Zadatak 55. Napisati program za ispis prirodnih brojeve od 5 do 20 unazad.

    Zadatak 56. Napisati program za ispis kvadratnog korijena prirodnih brojeva do 10.

    Zadatak 57. Napisati program za ispis prirodnih brojeva od 1 do n.

    Zadatak 58. Napisati program za ispis parnih prirodnih brojeva od 1 do n.

    Zadatak 59. Napisati program za ispis proizvoda brojeva od 1 do n koji su djeljivi sa 7.

    Zadatak 60. Napisati program za brojanje brojeva djeljivih sa 3, za prirodne brojeve od 1 do

    n.

    5. NIZOVI (POLJA)

    Pretpostavimo da trebamo rijeiti zadatak u kojem se od nas trai 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 potroili. Mogli bi pisati a1, a2, a3, itd. No, ni ovo nije prikladno

    rjeenje, jer ne zaboravimo da treba napisati 100-tinu varijabli prilikom deklaracije, pa onda i

    kad ih budemo unosili. Postavlja se pitanje, ima li lakeg i jednostavnijeg nain? Ima, upotrebom nizova ili polja. ta je to niz?

    Niz ili polje je konani niz podataka istog tipa koji predstavljaju cjelinu.

    Primjer 32. Sljedei 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

  • 59

    Svi su istog tipa tj. int odnosno cijeli brojevi. Takoer, niz moe 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 pomou rednog broja unutar niza tj. poloaj (mjesto) u nizu je odreeno pomou rednog broja. Ti redni brojevi nazivaju se indeksi elementa niza.

    Prvi element niza u C++ ima obavezno indeks 0, drugi 1, trei 2, itd. Tako npr. u nizu

    a, b, c, d, e, f

    slovo a se nalazi na mjestu 0 odnosno ima indeks 0, slovo b indeks 1, c indeks 2, d indeks 3, e

    indeks 4 i f indeks 5.

    Nizovi mogu biti:

    jednodimenzionalni viedimenzionalni.

    Mi emo u naoj 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 kaemo niz, u daljem

    tekstu mislimo na jednodimenzionalni niz, da ne bi stalno pisali rije jednodimenzionalni. U C++ niz definiramo na sljedei nain:

    tip_elementa ime_niza [duina niza]

    Prvo navodimo tip elemenata niza. Piemo 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 piemo ime niza. Kao i kod varijabli, ime vi dajte i sami birate kako e biti.

    Obavezno idu srednje zagrade [], koje se dobiju pritiskom tipki Alt Gr + F i Alt Gr + G.

  • 60

    Unutar srednjih zagrada se navodi broj, koji oznaava duinu niza tj. govori koliko e niz imati elemenata.

    Primjer 33. int dan[5]; Na ovaj nain 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 nain smo definisali niz ije je ime A i koji ima deset elemenata tipa double. char slova[30]; Na ovaj nain smo definisali niz ije je ime slova, a ima 30 elemenata tipa char.

    Elementima (lanovima) deklariranog niza mogu se pridruiti vrijednosti. Pridruivanje vrijednosti elementu niza:

    ime_niza [ indeks elementa] = vrijednost Primjer 34. niz [3] = 1; Na ovaj nain smo elementu niza iji je indeks 3 (pozicija ili mjesto u nizu 3) pridruili vrijednost 1.

    Moemo odmah prilikom deklaracije izvriti inicijalizaciju niza. Vrijednosti se navode unutar

    para vitiastih zagrada, odvojene zarezom. Primjer 35. int a[5]= {9, 5, 4, -1, 1} Sada smo svakom elementu niza pridruili odreenu vrijednost.

  • 61

    Kako dobiti npr. broj 4 iz niza? Dobiemo ga tako to napiemo 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 najee unosimo for petljom ili while petljom.

    Oprez!

    U radu s nizovima treba biti oprezan, jer jezik C++ ne provjerava granice niza prilikom

    pristupa elementima (lanovima) niza. Ako se navede prevelik ili negativan indeks, prevoditelj nee javiti pogreku i pri izvravanju programa pristupit e se memorijskoj adresi koja nije u podruju rezerviranom za niz. To e prouzroiti neispravan rad programa. Ako se izdvaja (dohvaa) element (lan) s nedozvoljenim indeksom, rezultat je sluajni broj. Ako se vrijednost pridruuje lanu s nedozvoljenim indeksom, vrijednost e se pohraniti u memoriju na mjesto predvieno za druge sadraje to e vjerojatno prouzroiti pogrean rad programa.

    Primjer 36. Brojeve 1, 5, -1, 4, 5 spremiti u niz broj, te ih ispisati na ekran svaki u novom

    redu.

    Rjeenje.

    #include using namespace std; int main() { int a[5]={1, 5, -1, 4, 5}; cout

  • 62

    #include using namespace std; int main() { int i, a[5]={1, 5, -1, 4, 5}; for(i=0;i

  • 63

    #include using namespace std; int main() { int i,j,m; int a[5]; for(i=0; i>a[i]; for(i=0; i

  • 64

    imala vrijednost i=0 i ona se je izvrila samo jednom, a druga se je izvrila 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 izvri 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

  • 65

    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_sadraj_stringa;

    Primjer 40. char A[80]; char tekst[]="Jezik C++"

    NAPOMENA: Niz znakova je tipa char, ime mu dajemo po elji, a u srednjim zagradama

    navodimo koliko emo znakova unijeti s tim da moramo voditi rauna da na zadnjem mjestu uvijek doe nul znak \0 kao oznaka kraja. Raunar stavlja nul znak \0, ne vi.

    Primjer 41. Napiimo program koji e unositi jednu rije i ispisivati je, te ispisati prvo slovo je rijei. Rjeenje.

    #include using namespace std; int main() { char rijec[20]; cin>>rijec; cout

  • 66

    getchar()

    Ova funkcija ita jedan znak, ukljuujui i bijele znakove, sa glavnog ulaza(tastature). Vrijednost funkcije je kod proitanog znaka ili simbolika konstanta EOF (end of line) ukoliko je proitan signal za kraj datoteke kao i u sluaju greke 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 uitava jedan red teksta (do znaka za prelazak u novi red \n) sa glavnog ulaza (tastature) i smjeta ga u s (tipa char[], odnosno char*). Umjesto znaka \n u niz s stavlja prazan znak \0.

    puts(s)

    Ova funkcija ispisuje sadraj niza s (tipa char[], odnosno char*)do zavrnog znaka \0 kao red teksta na glavnom izlazu, dodajui znak za prelazak u novi red \n. Ako tekst sadri vie znakova \n, rezultat e biti vie ispisanih redova. Vrijednost funkcije je tipa int t, nenegativan broj.

    Primjer 42. Napiimo program koji e uitati jedan red teksta (jednu reenicu ili rije) i ispisati ga na ekran monitora. Kao i u prethodnom primjeru ispisat emo prvo slovo. Rjeenje.

    #include #include using namespace std; int main() { char rijec[20]; gets(rijec); putchar(rijec[0]); cout

  • 67

    isalnum(c) Da li je c slovo ili broj (cifra) ?

    isalpha(c) Da li je c slovo?

    islower(c) Da li je c malo slovo?

    isupper(c) Da li je c veliko slovo?

    isdigit(c) Da li je c cifra?

    isspace(c) Da li je c bijeli znak?

    Pretvaranje velikih slova u mala i obratno

    tolower(c) Ako je c veliko slovo, vijednost funkcije je kod odgovarajueg malog slova.

    toupper(c) Ako je c malo slovo, vijednost funkcije je kod odgovarajueg velikog slova.

    Obavezno nauiti one koje su oznaene sivom podlogom. Sada emo navesti primjer za svaku funkciju kako se upotrebljava.

    Primjer 43. Napisaemo program koji broji koliko je brojeva u reenici.. Rjeenje.

    #include #include using namespace std; int main() { char rijec[]="Dan 15, mjesec 6, godina 2014"; int i=0; while(isalnum(rijec[i])) i++; cout

  • 68

    Primjer 44. Napisaemo program koji ispitiva da li je neki znak slovo ili nije. Rjeenje.

    #include #include using namespace std; int main() { char rijec[]="C++"; int i=0; while(rijec[i]) { if(isalpha(rijec[i])) cout

  • 69

    Primjer 46. Napisaemo program koji ispitiva koliko u nizu znakova ima cifara. Rjeenje.

    #include #include using namespace std; int main() { char rijec[]="2014 godina"; int i=0, c=0; while(rijec[i]) { if(isdigit(rijec[i])) c++; i++; } cout

  • 70

    Primjer 48. Napisaemo program koji pretvara mala u velika i velika u mala slova. Rjeenje.

    #include #include #include using namespace std; int main() { char a[]="Grad Bihac"; char b[]="SARAJEVO"; int i=0; while(a[i]!=NULL) { a[i]=toupper(a[i]); i++; } i=0; while(b[i]!=NULL) { b[i]=tolower(b[i]); i++; } puts(a); puts(b); return 0; }

    NAPOMENA: Funkcije toupper i tolower uzimaju samo po jedan znak, zbog toga moramo

    koristiti neku od petlji, te to slovo kojeg one vrate mora biti nekom pridrueno (spremeljeno).

    6.4. Rad sa stringom (nizom znakova)

    U prethodnom dijelu smo upoznali funkcije koje uzimaju samo jedan znak (karakter), a sada

    emo upoznati funkcije - naredbe koje uzimaju string tj. niz znakova. U jeziku C/C++ ne postoji nijedan operator za obradu stringa. Zato, za sve uobiajene operacije postoji odgovarajua biblioteka funkcija. Da bi koristili sljedee funkcije morate ukljuiti biblioteku

    #include

    Kod svih sljedeih funkcija argumenti t, u, i s su tipa string, argument n tipa int, a argument c tipa int (treba da sadri kod nekog znaka). Nijedna od ovih funkcija ne mijenja sadraj argumenta s i u, a sve mijenjaju sadraj argumenta t. Ovdje je navedeno dosta funkcija, obavezno nauiti one koje su oznaene sivom podlogom.

  • 71

    strcpy(t,s) Ova funkcija kopira string s u string t, kopirajui i sve znakove ukljuujui i \0.

    strncpy(t,s,n) Ova funkcija kopira najvie n znakova iz stringa s u string t. Ako string s nema znakova, rezultat se dopunjuje znakovima \0 do duine n.

    strcat(t,s) Ova funkcija dopisuje string s na kraj stringa t.

    strchar(u,c) Trai prvu pojavu znaka u stringu

    strrev(s) Okree string (ovi ivo)

    strlen(s) Vrijednost funkcije je broj znakova (tipa int) u znakovnom nizu s. Zavrni znak \0 se ne ubraja. Broji koliko rije ili tekst ima slova tj. znakova.

    strupr(s) Sva mala slova engleske abacede, pretvara u velika, a ostale znakve ne mijenja

    strlwr(s) Sva velika slova engleske abacede, pretvara u mala, a ostale znakve ne mijenja

    Primjer 49. Napisati program koji unosi niz znakova (string) i ispisuje ga u obrnutom

    redosljedu.

    Rjeenje.

    #include #include #include using namespace std; int main() { char a[256]; gets(a); puts(strrev(a)); return 0; }

  • 72

    Primjer 50. Napisati program koji unosi niz znakova (string) i ispisuje kolika je duina niza tj.

    koliko je unijeto znakova i razmaka zajedno.

    Rjeenje.

    #include #include #include using namespace std; int main() { char a[256]; int b; gets(a); b=strlen(a); cout

  • 73

    znak u nizu nul znak \0 (tj. NULL). Poto 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 moe desiti da nema samoglasnika A. Kad se petlja zavri,

    ona e izbrojati sva pojavljivanja a ili A, a zatim izvan petlje provjeravamo da li je varijabla brsamog promijenila svoju vrijednost. Ako nije, tj. ako je ostala nula, onda nema

    samoglasnika A, a ako je neka druga vrijednost tj. broj, onda ih ima.

    #include #include 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

  • 74

    #include #include #include using namespace std; int main() { char slova[256]; int i, n, brsamog=0; gets(slova); n=strlen(slova); for(i=0;i

  • 75

    #include #include #include 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

  • 76

    7. ZADACI SA OPINSKIH TAKMIENJA

    7.1. Zadaci 2010

    OPINSKO TAKMIENJE IZ INFORMATIKE ZA UENIKE OSNOVNIH KOLA 29.04.2010.

    1. zadatak DIJELI

    Za prirodan broj kaemo da je djeljiv s prirodnim brojem ako postoji prirodan broj takav da je .

    Treba napisati program koji e za dva prirodna broja uitana s tastature ispitati da li je prvi djeljiv s drugim. Ukoliko jeste, treba na ekranu ispisati njihov kolinik, a ukoliko nije treba ispisati poruku da nije.

    Program snimiti pod imenom DIJELI.

    Ulazni podaci

    S tastature u prvom redu uitavamo prvi prirodan broj, a u drugom drugi prirodan broj.

    Izlazni podaci

    Na ekranu se u sluaju da je prvi broj djeljiv s drugim ispisuje njihov kolinik, a u sluaju 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

  • 77

    2. zadatak SLOVA

    Treba napisati program koji e uitati rije s tastature i ispisati tu rije bez samoglasnika..

    Program snimiti pod imenom SLOVA.

    Ulazni podaci

    S tastature u jednom redu uitavamo rije napisanu velikim slovima.

    Izlazni podaci

    Na ekranu se velikim slovima ispisuje uitana rije ali bez samoglasnika. Ukoliko je uitana 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

  • 78

    3. zadatak TROUGAO

    Treba napisati program koji e za tri prirodna broja uitana s tastature ispitati da li oni predstavljaju stranice jednakokrakog trougla.

    Program snimiti pod imenom TROUGAO.

    Ulazni podaci

    S tastature u tri reda uitavamo tri prirodna broja.

    Izlazni podaci

    Na ekranu se ispisuje poruka da li je uitani trougao jednakokraki ili nije, ili uope 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

  • 79

    7.2. Zadaci 2011

    OPINSKO TAKMIENJE IZ INFORMATIKE ZA UENIKE OSNOVNIH KOLA April 2011.

    1. zadatak RECENICA

    Treba napisati program koji e za reenicu uitanu uz pomo tastature na ekranu ispisati da li je izjavna, upitna ili uzvina.

    Program snimiti pod imenom RECENICA.

    Ulazni podaci

    Sa tastature u jednom redu uitavamo reenicu sa odgovarajuim znakom interpunkcije na kraju (. Ili ? ili !).

    Izlazni podaci

    Na ekranu se ispisuje jedna od tri mogue 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.

  • 80

    2. zadatak BROJEVI

    Treba napisati program koji e uitati dva broja s tastature, pa na ekranu prikazati vei. 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 uitavamo prvi broj, a u drugom redu drugi broj. Izlazni podaci

    Na ekranu se ispisuje vei broj. U sluaju 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.

  • 81

    3. zadatak KVADRAT

    Treba napisati program koji e s tastature uitati stranicu kvadrata (u centrimetrima), izraunati njegovo obim i povrinu, te rezultate prikazati na ekranu.

    Program snimiti pod imenom KVADRAT.

    Ulazni podaci

    Sa tastature u jednom redu uitavamo broj koji predstavlja stranicu kvadrata. Izlazni podaci

    Na ekranu se ispisuje obim i povrina kvadrata.

    Primjeri

    Tastatura (ulaz) 5

    Tastatura (ulaz) 2

    Tastatura (ulaz) 7

    Ekran (izlaz) Obim je 20. Povrina je 25.

    Ekran (izlaz) Obim je 8. Povrina je 4.

    Ekran (izlaz) Obim je 28. Povrina je 49.

  • 82

    7.3. Zadaci 2012

    OPINSKO TAKMIENJE IZ INFORMATIKE ZA UENIKE OSNOVNIH KOLA 27.03. 2012.

    1. zadatak KOCKA

    Vri se poploavanje puta odreene duine (D) i irine (S) sa dvije vrste betonskih kocki. Duine ivica kocki su: jedne vrste kocki K1, a druge vrste kocki K2. Napisati program

    koji e ispisati broj kocki potrebnih za poploavanje puta, uz potovanje odreenih pravila. Naime, kod poploavanja puta kockama ne smije biti praznina niti vika kocki, a kocke se uklapaju na nain da se koriste one kojih ide manje.

    Ukoliko se niti jednom vrstom kocki ne moe poploati put, program treba da ispie poruku "NE MOE". Vrijednosti D, S, K1 i K2 su pozitivne vrijednosti vee 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 duina 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 poploavanje ili poruka "NE MOE" u sluaju da kocki ima vika 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 MOE

  • 83

    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. Napiite program koji na osnovu uneene godine rauna da li je godina prestupna. Ako jeste program e napisati "GODINA xxxx JE PRESTUPNA" a ako nije ispisae "GODINA xxxx NIJE PRESTUPNA". xxxx oznaava godinu koja je uneena na ulazu.

    Program snimiti pod imenom PRESTUPNA_GODINA.

    Ulazni podaci

    Sa tastature se unosi odreena godina npr. 2012 i program provjerava da li je godina prestupna.

    Izlazni podaci

    Na ekranu se u sluaju da je godina prestupna ispisuje tekst "GODINA xxxx JE PRESTUPNA" a ako nije ispisae 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

  • 84

    3. zadatak KVADRATNI KORIJEN

    Napisati program koji na osnovu uneenog broja X rauna 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 uitavamo 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

  • 85

    7.4. Zadaci 2013

    OPINSKO TAKMIENJE IZ INFORMATIKE ZA UENIKE OSNOVNIH KOLA 19.03.2013.

    1. zadatak BINARNI

    Tradicionalni brojni sistem, koji se izuava 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 pomou 10 cifara: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ako imamo broj 25047 u dekadnom brojnom sistemu, to znai da je

    25047 = 2104 + 5103 + 0102 + 410 + 7

    Slino dekadnom brojnom sistemu, postoje i drugi brojni sistemi, od kojih je najpoznatiji binarni brojni sistem. To je brojni sistem kojem je baza broj 2 a ukojem se brojevi

    zapisuju pomou cifara 0 i 1. Treba napisati program koji s tastature uitava dva prirodna broja B i N, za koje vrijedi

    2 9, 100000, te na ekran ispsuje broj N zapisan u brojnom sistemu s bazom B. Program snimiti pod imenom BINARNI.

    Ulazni podaci

    Sa tastature se unose prirodni brojevi B i N

    Izlazni podaci

    Na ekranu se ispisuje broj N zapisan u brojnom sistemu s bazom B.

    Primjeri

    Tastatura (ulaz) 2 21

    Tastatura (ulaz) 5 59

    Tastatura (ulaz) 8 571

    Ekran (izlaz) 10101

    Ekran (izlaz) 214

    Ekran (izlaz) 1073

  • 86

    2. zadatak TROUGAO

    Tri prirodna broja predstavljaju duine stranica trougla ako je zbir bilo koja dva vei od treeg.

    Treba napisati program koji e s tastature uitati 3 prirodna broja A, B i C i na ekranu (na nain kako je prikazano u primjerima) ispisati poruke o tome da li su uitani brojevi predstavljaju stranice jednakokragog, jednakostraninog ili pravouglog trougla. Ako tri uitana broja ne predstavljaju duine stranica trougla treba ispisati odgovarajuu 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 sluaju da uitani brojevi ne predstavljaju duine stranica trougla. Ispisuje poruka "NIJE TORUGAO", dok se u sluaju da uitani brojevi predstavljaju stranice trougla ispisuje jedna od sljedee etiri poruke: "JEDNAKOKARKI TROUGAO" (ako je rije o jednakokrakom trouglu), "JEDNAKOSTRANICNI" (ako je rije o jednakostraninom trouglu), "PRAVOUGLI" (ako je rije o pravouglom trouglu) i "TROUGAO" ako nije meu nabrojanim sluajevima. Poruke se ispisuju na nain 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

  • 87

    3. zadatak SAMOGLASNIK

    S tastature se uitava jedna rije (niz velikih i malih slova). Na ekranu treba ispisati broj samoglasnika u uitanoj rijei i rije u kojoj su u uitanoj rijei 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 uitanoj rijei, a u drugom redu uitana rije promijenjena na opisan nain.

    Primjeri

    Tastatura (ulaz) BoSAnsKa

    Tastatura (ulaz) edFGUeakXWAa

    Tastatura (ulaz) QtZxRVy

    Ekran (izlaz) 3 BXSxnskX

    Ekran (izlaz) 6 XdFGxXXKXWxX

    Ekran (izlaz) 0 QtZxRVy

  • 88

    8. ZADACI SA KANTONALNIH TAKMIENJA

    8.1. Zadaci 2011

    KANTONALNO TAKMIENJE IZ INFORMATIKE ZA UENIKE OSNOVNIH KOLA 10.04. 2011.

    1. zadatak SUMACIF

    Emir je nauio programirati. Prvi "ozbiljniji" program koji je napisao izraunava sumu cifara prirodnog dvocifrenog broja koji se unosi putem tastature. Meutim, ukoliko broj koji se unosi nije dvocifren nastaju problemo.

    Pomozi Emiru i napii program koji e izraunati i prikazati sumu cifara ako se unese dvocifren broj. Inae e se na ekranu prikazati poruka da broj nije dvocifren.

    Program snimiti pod imenom SUMACIF.

    Ulazni podaci

    Sa tastature uitavamo 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!

  • 89

    2. zadatak SLOVAR

    Emirova sestra teko izgovara slovo r. On joj je, stoga, odluio napisati reenice u kojima se ovo slovo to vie pojavljuje. Pomozi Emiru da napie program koji e mu izbrojati koliko puta se slovo r (nalo ili veliko) pojavilo u reenici koju unese putem tastature. One reenice sa kojima bude zadovoljan Emir e prepisati na papir i zamoliti malu sestru da ih naglas proita vie puta kako bi izvjebala izgovor

    Program snimiti pod imenom SLOVAR.

    Ulazni podaci

    Sa tastature uitati reenicu. Izlazni podaci

    Na ekranu se ispisuje poruka o broju pojavljivanja slova r (malo ili veliko) u uitanoj reenici.

    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

  • 90

    3. zadatak SLIKE

    Emir bi trebao slike sa svih ekskurzija sa svoga raunara spriti na CD-ove kako bi ih podijelio prijateljima iz razreda. Emir ima N slika i one su veliine K megabajta. Svaki CD ima tano 700MB prostora.

    Pomozi Emiru izraunati 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 uitavamo dva prirodna broja, i to: - prirodan broj N (1 1000), broj slika koje Emir eli snimiti na CD-ove, - prirodan broj K (1 10), veliina 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

    Objanjenje Damiru treba prebaciti 400 slika veliine 5MB. Za to mu trebaju 3 CD-a, jer na 3 CD-a stane 700*3=2100MB.

    Objanjenje Almi treba prebaciti 100 slika veliine 4MB. Za to u treba 1 CD, jer na 1 CD stane 700*1=700MB.

    Objanjenje Ivanu treba prebaciti 101 sliku veliine 7MB. Za to mu trebaju 2 CD-a, jer na 2 CD-a stane 700*2=1400MB.

  • 91

    8.2. Zadaci 2011

    KANTONALNO TAKMIENJE IZ INFORMATIKE ZA UENIKE OSNOVNIH KOLA 10.05.2012.

    1. zadatak TECAJ

    Enesova obitelj vri pripreme za odlazak na more. Enes je dobio odreenu svotu novaca od majke u KM-a (konvertibilbe marke). Enes planira sakupiti jo novca u KM nakon

    zavretka kolske godine (dobijanja knjiica), a nada se de e dobiti neto od tetke iz Njemake gdje se koriste Euri (Eur). Na omoru (Hrvatska) se troe iskljuivo Kune (Kn).

    Pomozimo Enesu da napie program koji pretvara valutu iz KM-a i Eur-a u Kune kako

    bi se Enes lake snaao na moru.

    Program snimiti pod imenom TECAJ.

    Ulazni podaci

    Sa tastature se unosi vrijednost teaja Kune (Kn) za Eur, teaja Kune (Kn) za KM. Zatim se unosi iznos uteenih i dobivenih KM i Eura posebno a koje e Enes razmjenjivati za Kune. Za 1 KM Enes moe dobiti 3,75 Kn, a za 1 Eur se moe dobiti 7,5 Kn.

    Izlazni podaci

    Na ekranu se ispisuje sljedea poruka: "Za iznos od ___KM i ___Eur Enes moe 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 moe dobiti 1125.00 Kn

    Ekran (izlaz) Za iznos od 75 KM i 50 Eur, Enes moe dobiti 656.25 Kn

    Ekran (izlaz) Za iznos od 150 KM i 35 Eur, Enes moe dobiti 825.00 Kn

  • 92

    2. zadatak DJELJIVOST

    Potrebno je napisati programski kod za rjeenje sljedeeg problema: Sa tastature se unosi broj, za koji program provjerava da li je djeljiv sa tri. Ukoliko jeste

    djeljiv sa 3 program ispisuje poruku: "Ostatak djeljenja broja ___ sa 3 je 0", a ukoliko nije

    program rauna prvi manji broj od uneenog 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 odreeni broj a program vri provjeru uvjeta. Izlazni podaci

    Ukoliko je uneeni broj djeljiv sa 3 program ispisuje poruku:

    "Ostatak djeljenja broja ___ sa 3 je 0", a ukoliko nije program trai 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.

  • 93

    3. zadatak SAMOGLASNICI

    Napisati program koji broji (prebrojava) samoglasnike u unesenoj reenici i ispisuje njihov zbir na ekran.

    Program snimiti pod imenom SAMOGLASNICI.

    Ulazni podaci

    Sa tastature uitavamo reenicu odreene duine (broja rijei). Izlazni podaci

    Na ekranu se ispisuje poruka: "Samoglasnici se u reenici 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) BROJ 5 KVADRATNI Samoglasnici se u reenici pojavljuju 14 puta!

    Ekran (izlaz) BROJ 9 KVADRATNI Samoglasnici se u reenici pojavljuju 26 puta!

    Ekran (izlaz) BROJ 25 KVADRATNI Samoglasnici se u reenici pojavljuju 19 puta!

  • 94

    8.3. Zadaci 2013

    KANTONALNO TAKMIENJE IZ INFORMATIKE ZA UENIKE OSNOVNIH KOLA 30.04.2013.

    1. zadatak COKOLADA

    Hana je vjebala matematiku i naila 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 uitavamo 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 moe podijeliti.

    Primjeri

    Tastatura (ulaz) 3 4

    Tastatura (ulaz) 5 5

    Ekran (izlaz) 4

    Ekran (izlaz) 1

    Objanjenje za prvi primjer

    Na slici su dane dvije mogue podjele okolade od 3 reda i 4 stupca, s tim to je na drugoj slici prikazana podjela s najmanjim brojem kvadrata.

  • 95

    2. zadatak KAPICA

    Tri Amina, Lejla i Emira su u autobusu, da bi sebi putovanje uinile interesantnijim, igrale igre pogaanja boje kape na njihovim glavama. Svaka od njih na glavi ima kapu crne ili bijele boje, ali ne zna koje je boje. Meutim, svaka od njih vidi kakve je boje kapa na glavi drugih dviju. Svaka od njih treba da kae koliko crnih kapa vidi, te da na osnovu dobijenih

    informacija pogodi koje je boje kapa na njenoj glavi.

    Treba napisati program koji s tastature uitava kol