Descripción: Skripta u kojoj se nalazi tekst za sociologiju,historiju,arhitekturu,demokratiju i dr.
interna medicina
skripta za programiranje
Diskretne strukture 2 Matematicki fakultet Skripta za Usmeni prof Zoran Stevanovic
Skripta za Poresko Pravo sve sto treba
ttrtr
Skripta iz programiranja C#Full description
Skripta iz programiranja C#Full description
Uvod u programski jezik
EDIN PAŠIĆ
2013
BIHAĆ
SADRŽAJ UVOD ....................................................................................................................................... iv
1. RAZVOJNO OKRUŽENJE ................................................................................................... 1 1.1. Izgled programa ........................................................................................................... 3 1.2. Kreiranje datoteke ........................................................................................................ 4 1.3. Struktura programa....................................................................................................... 7 1.4. Pokretanje programa .................................................................................................... 8 1.5. Greške .......................................................................................................................... 9 2. NAREDBE ZA IZLAZ I ULAZ .......................................................................................... 12 2.1. Početni program ......................................................................................................... 12 2.2. Naredba cout .............................................................................................................. 13 2.3. Varijacije naredbe cout .............................................................................................. 13 2.4. Osnovni tipovi podataka ............................................................................................ 17 2.5. Deklaracija varijabli ................................................................................................... 19 2.6. Operatori i izrazi ........................................................................................................ 21 2.6.1. Operator pridruživanja........................................................................................ 21 2.6.2. Inicijalizacija varijabli ........................................................................................ 21 2.6.3. Aritmetički operatori .......................................................................................... 22 2.7. Naredba za ulaz .......................................................................................................... 25 2.8. Zadaci za samostalan rad ........................................................................................... 29 3. MATEMATIČKE FUNKCIJE ............................................................................................ 29 3.1. Decimalni brojevi ....................................................................................................... 31 3.1.1. Fixed ................................................................................................................... 31 3.1.2. Setprecision ........................................................................................................ 31 3.2. Ostali manipulatori ..................................................................................................... 32 4. NAREDBE ........................................................................................................................... 33 4.1. Sekvenca ili blok ........................................................................................................ 33 4.2. Relacijski operatori .................................................................................................... 34 4.3. Selekcije ..................................................................................................................... 34 4.3.1. Naredba if ........................................................................................................... 34 4.3.2. Naredba if-else.................................................................................................... 36 4.2.3. Zadaci za samostalan rad .................................................................................... 40 4.4. Logički operatori ........................................................................................................ 41 4.4.1. Zadaci za samostalan rad .................................................................................... 45 4.5. Ciklusi ili petlje .......................................................................................................... 46 4.5.1. For petlja ............................................................................................................. 46 4.5.2. Zadaci za samostalan rad .................................................................................... 52 4.5.3. While petlja ........................................................................................................ 54 4.5.4. Do while petlja ................................................................................................... 57 4.5.5. Naredba break ..................................................................................................... 58 4.5.6. Zadaci za samostalan rad .................................................................................... 58 5. NIZOVI (POLJA) ................................................................................................................ 59 5.1. Jednodimenzionalni nizovi......................................................................................... 59 ii
5.2. Zadaci za samostalan rad ........................................................................................... 64 6. STRING ............................................................................................................................... 64 6.1. Deklaracija stringa ..................................................................................................... 65 6.2. Čitanje i ispisivanje znakova ...................................................................................... 65 6.3. Ispitivanje znakova..................................................................................................... 66 6.4. Rad sa stringom (nizom znakova) .............................................................................. 70 6.5. Zadaci za samostalan rad ........................................................................................... 75 7. ZADACI SA OPĆINSKIH TAKMIČENJA ........................................................................ 76 7.1. Zadaci 2010 ................................................................................................................ 76 7.2. Zadaci 2011 ................................................................................................................ 79 7.3. Zadaci 2012 ................................................................................................................ 82 7.4. Zadaci 2013 ................................................................................................................ 85 8. ZADACI SA KANTONALNIH TAKMIČENJA ................................................................ 88 8.1. Zadaci 2011 ................................................................................................................ 88 8.2. Zadaci 2012 ................................................................................................................ 91 8.3. Zadaci 2013 ................................................................................................................ 94 9. TEORETSKI ZADACI SA OPĆINSKIH TAKMIČENJA ................................................. 97 9.1. Zadaci 2010 ................................................................................................................ 97 9.2. Zadaci 2011 ................................................................................................................ 98 9.3. Zadaci 2012 ................................................................................................................ 99 9.4. Zadaci 2013 .............................................................................................................. 102 10. TEORETSKI ZADACI SA KANTONALNIH TAKMIČENJA ..................................... 105 10.1. Zadaci 2011 ............................................................................................................ 105 10.2. Zadaci 2012 ............................................................................................................ 106 10.3. Zadaci 2013 ............................................................................................................ 109
iii
UVOD Ova skripta je namijenjena učenicima koji žele naučiti programirati u C++, a nemaju neko prethodno znanje ni o jednom programskom jeziku. Naravno, bilo kakvo predznanje o programskim jezicima bi bilo od velikog značaja za bolje razumijevanje, ali nije neophodno. Napisana je da služi kao interni udžbenik u OŠ "Kamenica" za pripremu učenika za takmičenja iz programiranja u Unsko-sanskom kantonu. Skripta se sastoji iz nekoliko dijelova. U prvom dijelu je objašnjena instalacija programskog paketa Code Blocks. Također, u nekoliko narednih strana je opisan program i sve opcije koje su nam potrebne za nesmetan rad. U drugom dijelu su opisane naredbe za ulaz i izlaz. Njih treba dobro svladati i ne prelaziti u sljedeće poglavlje dok se dobro ne savladaju. U trećem dijelu su opisane matematičke funkcije samo nama potrebne i načini ispisivanja decimalnih brojeva. U četvrtom dijelu se bavimo naredbama od proste naredbe do ciklusa. Peti dio obrađuje nizove i to samo jednodimenzionalni niz. Nizovi su nam potrebni više u šestom poglavlju gdje string obrađujemo preko niza. Ostala poglavlja sadrže zadatke i pitanja s općinskih i kantonalnih takmičenja u USK održanih posljednjih godina. Svako poglavlje sadrži određen broj riješenih primjera koje treba dobro proučiti. U rješenju svakog primjera se nalazi tekst koji opisuje kako se dolazi do rješenja, te kako program radi. Na kraju svakog poglavlja se nalazi određen broj zadataka namijenjenih za samostalan rad. Preporučuje se da se svi zadaci riješe prije nego li se pređe na naredno poglavlje, jer svaki od njih donosi neko novo znanje, neki novi trik. Programiranje je u početku teško, pa nemojte odmah odustajati. Imajte na umu da se programiranje uči na greškama. Oni koji žele koristiti ovu skriptu u svom radu trebaju se javiti na e-mail. Kao i svaka, i ova skripta sadrži greške, pa sve sugestije i primjedbe pošaljite na e-mail: [email protected]
iv
1. RAZVOJNO OKRUŽENJE Programsko okruženje koje ćemo koristiti za pisanje naših programa naziva se Code Blocks. Ovo sam okruženje odabrao jer je besplatno, ugodnog izgleda, lako se instalira i malih je dimenzija. Posjeduje sve osobine koje su potrebne za učenje programiranja, a i više od toga. Kako instalirati Code Blocks? Moramo imati instalacijski CD ili ako imamo internet, onda treba otići na stranicu: http://www.codeblocks.org/downloads/26#windows Dobićemo sljedeći link (Slika 1) i odaberemo codeblocks-12.11mingw-setup.exe tj. kliknemo na BerliOS (može i na Sourceforge.net), gdje pokazuje crvena strelica, te sačekamo par sekundi i preuzimanje će početi automatski.
Slika 1
Kad smo preuzeli datoteku, onda možemo krenuti s instalacijom programa. Inače instalacija je jednostavna, samo Next, Next, Next, itd. Ali evo ipak malo detaljnijeg upustva. Kao i kod svake instalacije, kliknemo dva puta malo brže da bi pokrenuli instalaciju. Računar će nas pitati želimo li zaista pokrenuti ovaj program na šta ćemo mi reći (kliknuti Run). Ako imate Windows 7 operativni sistem, onda je preporučeno da instalaciju započnete kao administrator (admin), tako što kliknete desnim dugmetom miša na instalacijsku datoteku Code Blocks-a i odaberete Run as admin. Potom ćete dobiti čarobnjak koji će vas voditi kroz instalaciju tj. odaberete Next. Zatim dobijete prozor o licenci, tu odaberemo I Agree. U sljedećem prozoru ako nije, označimo sve i odaberemo Next, slika 2.
1
Slika 2
A zatim odaberemo Install. Sačekamo par minuta, pa kad se završi instalacija pojavit će se prozor u kojem vas računar pita želite li pokrenuti Code Blocks, odaberemo Yes (Da). Nakon toga, će se pojaviti prozor:
Slika 3 Lista otkrivenih kompajlera
Ovo pretstavlja pronađene kompajlere na vašem računaru. Odaberete prvi tj. GNU GCC Compiler i kliknete na OK. I to je to. Instalirali ste Code Blocks. U slučaju da koristite operativni sistem Windows 7 može se dogoditi da vam kompajler ne bude pronađen. Tada ga morate vi pronaći. Kako? Pa odmah nakon instalacije računar će vas pitati želite li pokrenuti Code Blocks, odgovorite potvrdno. Nakon toga on će potražiti kompajlere na vašem računaru. Dobit ćete sliku prethodno. No, ako ne pronađe GNU GCC Compiler, tada će pisati Invalid. U tom slučaju, pokrenete program Code Blocks (slika 4) odabrate 2
Settings
Compiler
Zatim, kliknuti redom na 1, 2, i 3 kao na slici 4. A zatim na OK. Ako ni ovo ne pomogne onda otići u folder gdje je instaliran Code Blocks i vidjeti gdje se nalazi folder kompajlera pod imenom MinGW. Zatim taj put napisati ručno npr. kao što na ovoj slici piše C:\CodeBlocks\MinGW (ne ovaj nego vaš).
Slika 4 Compiler settings (Podešavanje kompajlera)
1.1. Izgled programa Pokrenemo Code Blocks. Nakon pokretanja programa, pojavit će se na početku mali prozor koji sadrži kratke upute. Ako ne želimo da nam se pojavljuje pri sljedećem pokretanju programa otkačimo kvačicu i kliknemo na OK. Izgled programa Code Blocks je:
3
Slika 5 Izgled programa Code Blocks
1.2. Kreiranje datoteke Sada ćemo naučiti kako kreirati datoteku u koju ćemo pisati naše kodove. Ima više načina kako to uraditi. Mi ćemo navesti jedan koji možda nije najkraći, ali za početnike je najbolji. Uradimo sljedeće, kliknemo na: 1. File
2. New
3. File..
Slika 6 Kreiranje source datoteke
4
Dobivmo sljedeći prozor u kojem kliknemo na drugu sličicu ispod koje piše C/C++ source, a zatim na Go.
Slika 7 Izbor datoteke
U sljedećem koraku samo kliknemo na Next. Potom odaberemo C++ i kliknemo na Next. Pazite da u ovom koraku ne odaberete jezik C, jer onda nećete moći raditi s nekim naredbama.
Slika 8 Izbor jezika
5
Još malo i gotovi smo. U ovom prozoru trebamo odabrati mjesto na računaru gdje će se nalaziti naša datoteka odnosno naš program. To činimo tako što kliknemo na sličicu gdje piše File name with full path odnosno na tri tačke (...).
Slika 9 Izbor lokacije na disku
Pojavit će se još jedan prozor, u kojem odaberemo: 1. gdje će biti program i 2. upišemo njegovo ime, te kliknemo na Spremi (Save), slika 10.
Slika 10 Izbor foldera (mape) gdje će biti program
6
Folder (mapu) gdje biti vaši programi napravite prije. U ovom slučaju to je folder ZadaciC++. U imenu foldera, gdje će biti vaši programi ne smije biti kvačica nad slovima. Također, put do tog folder ne smije sadržavati nad slovima kvačice, jer se može vrlo lako desiti da vam program neće raditi tj. neće ga moći kompajler naći. Stoga je najbolje kreirati folder gdje će biti programi odmah čim otvorimo C particiju ili neku drugu. Na kraju kliknemo na Finish. Nova datoteka izvornog koda naziva Prvi program.cpp je stvorena.
Slika 11 Izgled kreirane datoteke
1.3. Struktura programa Za ljude koji tek uče programirati, najbolji način učenja je da napišu program. Pa ćemo i mi krenuti tim putem. U prethodnom dijelu smo naučili kako napraviti source file (datoteku u koju ćemo pisati naše naredbe - kodove). Napišimo sljedeći kod na mjestu gdje piše "Tu pišemo naredbe!!!", slika 11. Naredbe za prvi program:
7
Objasnimo sada značenje svake linije koda. #include Linija počinje s znakom Hach # (taraba). To je pretprocesorska radnja koja računaru kaže da u naš program uključi iostream datoteku. using namespace std; U drugom redu koda je napisana naredba using namespace std;. Ovdje su using i namespace ključne riječi pomoću kojih se aktivira određeno područje imena, u našem slučaju std, koji je naziv imenika u kojem su obuhvaćene sve standardne funkcije, te funkcije iz iostream biblioteke. int main() Treći red sadrži int main(). Svaki program u C++ mora da ima bar jednu main (glavnu) funkciju. Deklaracija int ispred main znači da funkcija vraća cjelobrojnu vrijednost, pa se na samom kraju programa mora staviti naredba return 0;. Umjesto tipa int mogli smo staviti void, pa tada na kraju nebi morali pisati return 0;. cout<<"Moj prvi program"; Ovo ispisuje poruku na ekran monitora tačno kako piše u navodnicima. Inače, cout<< je naredba za ispis podataka na ekran monitora. 1.4. Pokretanje programa Sada ćemo naučiti kako pokrenuti program. Dakle, kreirali smo datoteku i napisali (prepisali) TAČNO prethodni kod. Kako pokrenuti program? Ima više načina. Najjednostavniji i najlakši je da na tastaturi pritisnemo tipku 8
F9 Nakon toga računar će kompajlirati vaš kod i pokrenuti program, pod uslovom da ste sve ispravno napisali. Ako je bilo tako dobit ćemo prozor crne boje s bijelim slovima, slika 12.
Slika 12 Izgled izvršenja programa
Ako smo napravili neku sintaksičku (pravopisnu) grešku tj. zaboravili smo jedno slovo ili tačku-zarez (;), onda nam se neće pojaviti ovakav crni prozor nego ćemo dobiti upute kako da popravimo greške. 1.5. Greške Greške su česte, naročito kod početnika. Zaboravljeno slovo, tačka-zarez, krivo napisana neka naredba, zaboravljena zagrada itd. su samo neke od najčešćih grešaka. Ne brinite, one nisu veliki problem, jer nam Code Blocks kaže gdje je i šta ne valja. A gdje se nalaze te važne informacije? Na dnu prozora. Ako npr. u prethodnom kodu izostavimo ; koje se nalazi iza navodnika, te pokrenimo program tipkom F9, dobićemo upozorenje o greškama, slika 13. Analizirajmo na šta nas kompajler upozorava. Prva linija: D:\Prvi program.. kaže da je to u funkciji int main() (jer može biti više funkcija, mi za sada imamo jednu). Druga linija: Čitamo samo ispod Message (poruka) šta piše, a piše sljedeće: error: expected ' ; ' before 'return' a znači: greška: očekivano (vjerovatno) je problem u ' ; ' tačka-zarezu, GDJE?, prije naredbe return Crveni kvadratić također ukazuje gdje se pogreška nalazi (imati na umu da NIJE u istoj liniji gdje je kvadratić nego prije kvadratića tj. u liniji broj 6.)
9
Slika 13 Analiza napravljenih greški
Također, ispod naziva Line stoji broj koji označava gdje je mogući problem. U našem slučaju to je broj 7. Ako se ovaj izvještaj ne vidi, onda ga uključimo (učinimo vidljivim) pritiskom na tipku
F2 Kad popravimo greške pritisnemo tipku F9 da bi ponovo kompajlirali i pokrenuli program. Ako se opet pojave greške popravljamo dok nam na dnu ne bude pisalo 0 errors tj. dok ne dobijemo crni prozor. U slučaju da ne vidimo brojeve linija, onda ih uključimo tako što kliknemo na Settings → Editor Dobivamo sljedeći prozor, u kojem, gdje piše Show line numbers označimo kvačicom i kliknemo na Ok, slika 14.
10
Slika 14 Brojevi linija (line nubers)
Kod treba biti lijepo napisan da bi bio pregledan, zbog kasnijih popravki. Da se mi ne bi previše oko toga zamarali, kada napišemo kod (program), onda jednostavno kliknemo desnim dugmetom miša i odaberemo Format use Astyle. Može se desiti da sa ovom inačicom programa imate problem kada želite napisati vitičaste zagrade { }. Problem je u plugin-u i treba ga isključiti na sljedeći način: Plugins → Manage Plugins... Dobivamo jedan prozor u kojem tražimo gdje piše DoxyBlocksB (slika 15), označimo i odaberemo Disable i zatvorimo prozor, pa nam više neće raditi probleme. Također, ako ne želimo da nam provjerava pravopis teksta u navodnicima ili komentarima (budući da provjerava engleski jezik, kod nas će sve podvući kao da je netačno (pogrešno) napisano, pa ga je poželjno isključiti), kao i u prethodnom slučaju odaberemo Plugins → Manage Plugins... Tražimo gdje piše SpellChecker, i kliknemo na Disable, te zatvorimo prozor.
11
Slika 15 Upravljanje plugin‐ovima
2. NAREDBE ZA IZLAZ I ULAZ 2.1. Početni program Kada dobijemo neki problem da riješimo tj. da napišemo odgovarajući program onda slijedimo nekoliko koraka koji su potrebi u svakom programu. Radimo sljedeće: 1. Kreiramo datoteku u koju ćemo pisati kod (to radimo na prethodno opisan način) 2. Napišemo sljedeći kod (ovaj kod ima svaki program i zato ga naučimo NAPAMET):
#include using namespace std; int main() { return 0; }
12
3. Kompajliramo i pokrenemo program tipkom F9. Ako dobijemo crni prozor, onda je sve OK, ako ne popravljamo greške. Poslije toga pristupamo rješavanju zadanog problema. Svaki zadatak treba na ovakav način rješavati da bi se izbjegle nepotrebne greške, a koje je nekada teško otkriti. 2.2. Naredba cout Naredbu cout smo već upoznali u našem prvom programu, a sada ćemo se s njom detaljnije upoznati. Za izlaz (ispis) na ekran monitora koristimo identifikator cout <<. Funkcija cout usmjerava podatke s izlaznog toka na ekran monitora. Ispis podataka se ostvaruje operatorom ispisa (<<). ZAPAMTITI: Tekst koji ispisujemo naredbom cout stavljamo u znake navoda
Slika 16 Naredba cout
2.3. Varijacije naredbe cout Jedna od najboljih metoda koje nam pomažu da bolje razumijemo funkcioniranje programa i pojedinih naredbi jest da u program unesemo manje izmjene, a zatim opažamo kakve posljedice će takve izmjene izazvati. Napisat ćemo nekoliko različitih varijanti jednog te istog programa, te navesti njihova izvršavanja da bi mogli izvući određene zaključke. Naš prvi program:
Rezultat pokretanja programa:
#include using namespace std; int main() { cout<<"Moj prvi program"; return 0; }
13
ZAKLJUČAK: Ništa se na izlazu (ekranu) ne mijenja pisali mi naredbe u jednom ili više redova.
#include using namespace std; int main() { cout<< "Moj prvi program"; return 0; }
ZAKLJUČAK: Ništa se ne mijenja. #include using namespace std; int main() { cout << "Moj prvi program"; return 0; }
Ili #include using namespace std; int main() { cout << "Moj prvi program"; return 0; }
ZAKLJUČAK: Ništa se ne mijenja. Pisali mi naredbe u jednom redu ili u više redova, pa čak i razmak između naredbi, ništa se ne mijenja, ne utiče na rezultat programa.
14
#include using namespace std; int main() { cout<<"Moj prvi program."<<"Ucim C++."; return 0; }
ZAKLJUČAK: Ove dvije rečenice su ispisane spojene. Ako želimo da poslije tačke imamo razmak onda u prvoj rečenici poslije tačke napravimo jedan razmak ili u drugoj rečenici prije riječi učim napravimo jedan razmak. Ako ispisujemo više rečenica ili pak više varijabli pomoću jedne naredbe cout, tada samo jednom napišemo cout, a za ispis koristimo identifikator <<. Sada ćemo koristiti dvije cout naredbe. #include 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 using namespace std; int main() { cout<<"Moj prvi program. cout<<"Ucim C++.";
";
return 0; }
15
ZAKLJUČAK: Ako hoću da ispišem razmak, to uradim tako što u znacima navoda napravim razmaka koliko mi treba. Postavlja se pitanje, kako da druga rečenica bude u novom redu? Kako to uraditi? Kada želimo dobiti JEDAN PRAZAN RED ili PREĆI U NOVI RED onda koristimo naredbu endl.
#include using namespace std; int main() { cout<<"Moj prvi program."<
Šta ako stavimo dvije endl naredbe? #include using namespace std; int main() { cout<<"Moj prvi program."<
ZAKLJUČAK: Dobili smo novi red i jedan prazan red. Ispis četiri reda. #include using namespace std; int main() { cout<<"Moj prvi program."; cout<
16
ZAKLJUČAK: Uočimo da naredbu endl ne možemo koristiti ako prije nismo stavili naredbu cout. Zadatak 1. Napisati program koji će na ekranu (zaslonu) monitora ispisati tekst tačno ovako kako izgleda. Danas je lijep dan. Ucim C++. Idem u osnovnu skolu. Imam 10 godina. Sutra mi je rodjendan. 2.4. Osnovni tipovi podataka Podatke možemo podijeliti na nepromjenjive (konstante) i promjenjive (varijable). Konstante su podaci koji tokom izvršavanja programa ne mogu da promjene svoju vrijednost. Varijable (promjenjive) su podaci koji tokom izvršavanja mogu da promjene svoju vrijednost. Identifikator predstavlja ime koje dodjeljujemo varijablama, funkcijama itd. Identifikator (ime) može biti sastavljeno od slova engleskog alfabeta, prvi znak mora biti slovo ili znak podvučeno „ _ “, brojeva i identifikator ne smije biti jednak nekoj od ključnih riječi. Pri programiranju, pohranjujemo varijable u memoriji računara, ali računar mora znati kakve podatke želimo pohraniti, jer ne zauzimaju svi podaci jednaku količinu memorije tj. moramo reći računaru šta spremamo broj, slova, znakove, itd. Tako ako kažem 13 to je podatak. Kakav? Brojčani. Ako pak kažem sunce. I ovo je podatak. Kakav? Znakovni. Zbog toga što podaci mogu biti različiti po tipu (znakovni, brojčani) moramo računaru reći kakav tip podatka unosimo i s kakvim će podacima on raditi. Programski jezik C++ ima nekoliko osnovnih tipova podataka: Tip podatka znakovni cjelobrojni realni realni dvostruke preciznosti ne sadrži vrijednosti
Oznaka tipa Broj bitova Opseg char 8 0 – 255 int 16 -32768 – 32767 float 32 3.4E-38 – 3.4E+38 double 64 1.7E-308 – 1.E+38 void 0 bez vrijednosti
Prve dvije kolone tabele treba znati NAPAMET, šta znači i kako se piše. Tako pomoću tipa char možemo spremati znakove (slova, brojeve, upitnik, uzvičnik, i ostalo), int nam govori
da se radi o cijelim brojevima, float o realnim brojevima, double je također realan broj 17
samo u njega može "stati" znatno veći broj. Nekada radimo samo npr. sa pozitivnim brojevima, pa su nam negativni nepotrebni, da nebi gubili memoriju i da bi mogli spremiti što veći pozitivan broj onada koristimo modifikator. Tako sa modifikatorom unsigned tip int zauzima opseg od 0 – 65534. Osnovni tipovi podataka se mogu modificirati (promijeniti) koristeći jedan ili više modifikatora:
signed
short
unsigned
long
Sljedeća tabela pokazuje kako se koriste modifikatori, koliko memorije imamo, kolika je maksimalna i minimalna vrijednost koju možemo staviti u određenu varijablu.
Tip
Količina
Raspon
char
1byte
-127 to 127 or 0 to 255
unsigned char
1byte
0 to 255
signed char
1byte
-127 to 127
int
4bytes
-2147483648 to 2147483647
unsigned int
4bytes
0 to 4294967295
signed int
4bytes
-2147483648 to 2147483647
short int
2bytes
-32768 to 32767
unsigned short int
2bytes
0 to 65,535
signed short int
2bytes
-32768 to 32767
long int
4bytes
-2,147,483,647 to 2,147,483,647
signed long int
4bytes
kao long int
unsigned long int
4bytes
0 to 4,294,967,295
float
4bytes
+/- 3.4e +/- 38 ( 7 cifara)
double
8bytes
+/- 1.7e +/- 308 ( 15 cifara)
long double
8bytes
+/- 1.7e +/- 308 ( 15 cifara)
Međutim, ove vrijednositi ovise i od kompajlera koji koristimo, te također i od računara na kojem radimo. 18
2.5. Deklaracija varijabli Kada smo naučili koje tipove podataka imamo, vrijeme je da se upoznamo detaljnije s varijablama. Već smo rekli da su varijable podaci koji tokom izvršavanja programa mijenjaju svoju vrijednost.
Sve varijable (promjenjive) koje se koriste u programu potrebno je deklarirati, odnosno dati im ime (ili identifikator) i odrediti tip. Tip smo naučili prethodno šta je npr. int, char, double, itd, a ime predstavlja naziv te varijable i dajete ga vi, onako kao želite. Najbolje je da to ime upućuje na ono na šta se odnosi. Npr. ako računate obim kvadrata, onda je za ime varijable, u koju ćemo spremiti vrijednost, poželjno uzeti ime: Obim, ili obim, ili samo slovo O. Može i neko drugo ime npr. Aligator, ali kad to vidimo u programu koji računa obim nećemo moći zaključiti po tom imenu da se radi o obimu. SVE VARIJABLE PRIJE UPOTREBE U PROGRAMU MORAMO DEKLARIRATI, INAČE ĆE NAM KOMPAJLER JAVITI GREŠKU. Deklaracija varijabli se obavlja naredbom oblika: tip podatka ime varijable Primjer 1. int a; int a, b, c; float zbir; double x, y, razlika; long double x, y; char ime;
19
Vrlo je važno da razumijete šta su varijable i kako se deklariraju. Ako vam nije jasno šta je to onda pročitajte još jednom, pa još jednom i tako dok ne bude jasno, jer one su dio gotovo svake linije u programu, s njima radimo, s njima se igramo. Tako u prethodnom primjeru int a; znači da smo kreirali varijablu, čije ime je a, te u nju možemo staviti samo cjelobrojnu vrijednost. Na ovaj način mi kažemo računaru da nam obezbjedi prostor u memoriji koji će se zvati a i da ćemo u njega "skladištiti" tj. pohraniti samo cjelobrojne vrijednosti (negativne i pozitivne cijele brojeve, te nulu). Ako u ovu varijablu a pokušamo pridružiti (spremiti, pohraniti) vrijednost odnosno broj 5.23 (decimalni broj), onda će računar spremiti samo cijeli dio tj. broj 5 a ostalo 0.23 će odbaciti. Programski jezik C++ razlikuje velika i mala slova, tako je dopušteno služiti se istim imenom varijable, samo pisano malim, odnosno velikim slovima za dvije različite varijable. Mjesto deklaracije varijable u programu određuje područje djelovanja određene varijable. Prema području djelovanja varijable mobu biti globalne i lokalne: -
globalne varijable, su dostupne kako za čitanje, tako i za promjenu u bilo kojem dijelu programa, deklariraju se izvan svih funkcija, naredbi, petlji itd.
-
lokalne varijable se deklariraju na početku neke funkcije ili na početku nekog bloka naredbi. Ove varijable vrijede samo unutar funkcije ili bloka naredbi, jer izlaskom iz funkcije ili bloka naredbi ove varijable više ne postoje.
Mi ćemo za sada najčešće koristiti globalne varijable. Nemojte da vas ovo zbunjuje. Trenutno vam nije bitno ako ne znate šta to znači.
20
Ključne riječi koje ne smijete koristiti za imena varijabli i konstanti su: auto
double
int
enum
volatile
else
long
switch
case
union
break
typedef
char
extern
return
continue
register
float
short
unsigned
continue
struct
const
void
default
goto
sizeof
enum
signed
if
static
while
struct
for
do
2.6. Operatori i izrazi Kombinacijom varijabli, konstanti i operatora nastaju izrazi. Izrazi su riječi ili simboli koji određuju da se s varijablama u programu nešto učini. Mogu biti unarni, binarni, ternarni. 2.6.1. Operator pridruživanja Operatorom pridruživanja ili operatorom za dodjelu vrijednosti se varijabli s njegove lijeve strane pridružuje (sprema, pohranjuje) vrijednost izraza koja se nalazi na desnoj strani. Tip vrijednosti izraza treba odgovarati tipu varijable. Operator pridruživanja je znak jednako: = Operator pridruživanja se može koristiti zajedno i s još jednim operatorom. Primjer 2. a=5; (znači da će varijabli a biti pridružena (spremita, skladištita) vrijednost 5) a = a + 5; (znači da će varijabli a biti pridružena vrijednost izraza a + 5)
Ovo se može i drukčije zapisati: a += 5;
Dakle, znak = ne znači da je lijeva strana jednaka desnoj, nego on kaže računaru da ono što je na desnoj strani znaka jednako pridruži (spremi, skladišti) u varijablu na lijevoj strani znaka jednako. 2.6.2. Inicijalizacija varijabli Pridruživanje vrijednosti varijabli prilikom definisanja naziva se inicijalizacija varijable. Deklaracija i inicijalizacija varijable se može obaviti u istom redu koda.
21
Primjer 3. int a = 3;
Ovdje smo deklarirali varijablu a tj. odredili smo kakav tip podatka će sadržavati, te smo je inicijalizirali odnosno pridružili joj vrijednost 3. Dakle, kada napišemo int a; ili double a, b; mi smo izvršili deklaraciju varijabli, a kad napišemo int a = 3; ili double a = 5.03, b = 3.25; mi smo izvršili deklaraciju varijabli i inicijalizaciju (pridruživanje vrijednosti) varijabli. 2.6.3. Aritmetički operatori Simboli aritmetičkih operatora uglavnom odgovaraju standardnim matematičkim oznakama aritmetičkih operacija. C++ operator Operacija + sabiranje – oduzimanje * množenje / dijeljenje % ostatak pri cjelobrojnom dijeljenju Prva tri operatora +, -, i * imaju iste osobine kao u matematici, pa ih ne treba posebno objašnjavati. Operator dijeljenja / ima isto značenje kao u matematici samo što morate voditi računa koje brojeve tj. varijable dijelite. Tako npr. ako računamo koliko je 5/2 gdje su 5 i 2 cijeli brojevi rezultat će biti 2, a ne 2.5 kao što bi pokazao kalkulator. Jer su 5 i 2 cijeli brojevi pa i rezultat će biti cijeli broj tj. računar će odbaciti 0.5. Ako pak računate 5.0/2 ili 5/2.0 ili 5.0/2.0 gdje je jedan realan ili oba tada će rezultat biti 2.5. Ovdje treba samo
voditi s računa sa kojim vrijednostima radimo i kakav rezultat očekujemo cijeli ili realni broj tj. decimalni. Zadnji operator % (čitamo modulo) daje kao rezultat ostatak pri CJELOBROJNOM dijeljenju. Primjer 4. Izračunajmo sljedeće izraze sa znanjem iz matematike koristeći operatore (oznake) C++. 4/2 je jednako 2 15/3 je jednako 3
A koliko bi bilo onda 5/2? To je 5/2=2.5. 22
Koliko bi bilo 5%2? Operator modulo % daje ostatak pri cjelobrojnom dijeljenju. Možemo ga koristiti samo ako su cijeli brojevi u pitanju. Kako naći taj ostatak? Vrlo jednostavno, jer 5/2 možemo zapisati i ovako: 5/2 je jednako 2 jer je 2*2=4 (najbliže broju 5) plus 1 tj. 5/2=2*2+1
Ovo 1 je ostatak pri cjelobrojnom dijeljenju. Dakle, 5%2=1, jer je 2*2=4 plus 1 jednako 5. Pogledajmo još nekoliko primjera da nam bude jasan ovaj operator jer se on često koristi u programiranju. 7%2=1, jer je 7/2 najbliže 3 tj. 3*2=6 i do 7 nedostaje 1. Postavite sebi pitanje: Koji broj
pomnožen sa brojem 2 daje broj 7 ili što bliže broju 7? Ono što nedostaje do broja 7 je ostatak. 8%4=0, jer je 8/4 tačno 2, tj. 2*4=8. 11%3=2, jer je 11/3 najbliže 3 tj. 3*3=9 i do 11 fali 2. 15%4=3, jer je 15/4 najbliže 3 tj. 3*4=12 i do 15 fali 3.
Ako se u izrazu nalazi više operatora, redoslijed izvršavanja ovisi o prioritetu operatora. Nižeg prioriteta su sabiranje i oduzimanje, a višeg množenje, dijeljenje, cjelobrojno dijeljenje s ostatkom. Redoslijed prioriteta se može promijeniti upotrebom zagrada ( ), jer one imaju najviši prioritet tj. izvršava se prvo ono što je u njima, pri tome treba paziti da je broj otvorenih i zatvorenih zagrada jednak. Primjer 5. int a=2; int b=4; int c=1; int rezultat;
23
Izračunajmo sljedeće izraze. a) rezultat = a – b * c b) rezultat = (a – b) * c c) rezultat = a * b + b * c d) rezultat = ((a * c) – c) * b – a Rješenje. a) rezultat = - 2 b) rezultat = - 2 c) rezultat = 12 d) rezultat = 2 Programski jezik C++ ima još dva unarna operatora: uvećaj za jedan ++ (inkrement) i umanji za jedan – – (dekrement). Inkrement i dekrement operatori se primjenjuju samo na varijable i ne mogu se primijeniti na izraze, niti na konstante. Ako se nalaze ispred varijable, onda se vrijednost te varijable prvo poveća ili umanji za jedan i tako dobivena nova vrijednost se koristi pri izračunavanju izraza. Ako se operator nalazi iza varijable, tada se prvo izračuna vrijednost izraza, a tek nakon toga se vrijednost varijable poveća ili umanji za jedan. Primjer 6. int a = 3; int b = 2; int R;
U programu pišu sljedeće naredbe: a++; R = a – b;
Koliki bi bio rezultat? Rezultat je R = 2, jer će računar prvo izračunati koliko je a++, a to znači povećaj a za 1 odnosno a = a + 1; pa je a sada 4 jer je 3+1 = 4, stoga je R = 4 – 2 = 2. Ako bi pak pisalo ovako: R = a++ - b;
Onda bi izračunao izraz s upotrebom a = 3 pa tek bi onda povećao a za 1 tj. R = 3 – 2 = 1.
24
Ako bi napisali ovako: R = ++a – b;
Prvo bi povećao a za 1, pa bi onda računao s novom vrijednošću od a tj. R = 4 – 2 = 2. Na isti način se upotrebljava i dekrement -- jedino što on ne povećava za 1 nego smanjuje za 1. 2.7. Naredba za ulaz Za unošenje podataka s tastature odnosno s ekrana monitora koristimo cin >>. Ovu naredbu koristimo kada unosimo neke podatke s tastature (glavnog ulaza) u računar. Kako to ide, pokazaćemo na nekoliko primjera. Upotreba je veoma jednostavna. Primjer 7. Napisaćemo program koji unosi jedan cijeli broj s tastature u računar i ispisat ćemo taj isti broj na ekran monitora. #include using namespace std; int main() { int a; cin>>a; cout<
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.