nastavainformatika.files.wordpress.com · web viewzadaci za samostalni rad: 1. napiši program koji...

69
Uvod u C++ programiranje C++ je objektno orjentirani programski jezik kojim su pisani mnogi današnji programi koje srećete u svakodnevnom radu na računaru. Jezik je nastao osamdesetih godina 20.tog stoleća kao naprednija verzija C- a. Postoji više verzija prevodioca (kompajlera) za C++, a najpoznatiji su: Dev C++; Microsoft Visual C++ i Borland C++ Builder. Prvi projekt Kada ste instalirali Dev-C++ pokrenite ga i idite na File -> New -> Project. Odaberite ''Empty Project'' pa ga imenujte kao ''Prvi_program'' (tako bez razmaka). Označite dolje desno C++ Project i uključite kvačicu na ''Make Default Language''. Kliknite na OK, zatim na Save . Kada ste to napravili, idite na File -> New -> Source File i kliknite na Yes. S time ste dobili file gdje ćete pisati vaš C++ kod. Pa napravimo jednostavan ''Hello World'' program za probu. Upišite ovaj kod: #include <iostream> using namespace std; int main () { cout << "Hello World!"; 1

Upload: others

Post on 28-Dec-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Uvod u C++ programiranje 

C++ je objektno orjentirani programski jezik kojim su pisani mnogi današnji programi koje srećete u svakodnevnom radu na računaru. Jezik je nastao osamdesetih godina 20.tog stoleća kao naprednija verzija C-a. Postoji više verzija prevodioca (kompajlera) za C++, a najpoznatiji su: Dev C++; Microsoft Visual C++ i Borland C++ Builder. 

Prvi projekt

Kada ste instalirali Dev-C++ pokrenite ga i idite na File -> New -> Project. Odaberite ''Empty Project'' pa ga imenujte kao ''Prvi_program'' (tako bez razmaka). Označite dolje desno C++ Project i uključite kvačicu na ''Make Default Language''. Kliknite na OK, zatim na Save .

Kada ste to napravili, idite na File -> New -> Source File i kliknite na Yes. S time ste dobili file gdje ćete pisati vaš C++ kod.

Pa napravimo jednostavan ''Hello World'' program za probu.Upišite ovaj kod:

#include <iostream>using namespace std;int main (){cout << "Hello World!";return 0;} 

Primetite da svaka naredba u C++ mora završavati sa sa znakom ; 

Sada taj kod treba iskompajlirati. To ćete učiniti tako da pritisnete tipku F9 na tipkovnici. Program će se kompajlirati i pokrenuti.

1

Page 2: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Program će se pojaviti i odmah nestati tako da nećete uspjeti vidjeti ništa. To možete riješiti tako da između cout << ''Hello World'!'; i return 0; upišete 

char a;cin >> a;

ili da program pokrenete iz Command Prompta. 

Ovako pomoću cahr a; i cin >> a; deklariramo varijablu a i program očekuje da unesemo vrednost te varijable pa se ne gasi. 

Pa da objasnimo sada delove celog koda ovog jednostavnog programa.

#include <iostream>

Program zahtjeva od prevodioca da u program uključi biblioteku iostream koja je standardna ulazno/izlazna biblioteka koja nam omogućuje ispis na ekranu. 

NAPOMENA: #include nije naredba u C++ nego se radi o pretprocesorskoj naredbi 

using namespace std;

Svi elementi standardne C++ biblioteke su deklarirani u ovome što piše namespace sa imenom std.

int main ()

Svaki program mora imati ni manje ni više nego jednu main funkciju. Sav kod unutar main zagrada se izvršava. Int pretstavlja Integer (celi broj) što govori da će program pri završetku izvođenja programa vratiti celi broj.

cout << "Hello World";

Ovo ispisuje Hello World! na ekran. Cout pretstavlja standardni ispisni tok. Mogli ste taj kod napisati i ovako cout << ''Hello World“ <<endl; A možete i jednostavno nastaviti rečenicu u novi red tako da napišete 

cout << "Hello World!" <<endl <<"Ja sam programer";

Endl pretstavlja End Line (kraj linije) odnosno ispis u novi red. Tako bi svaka rečenica koju napišete bila u redu ispod. 

return 0;

Tom naredbom glavni program javlja operacijskom sistemu da je program uspešno završen. Komentari 

Kod je potrebno ponekad komentarisati kako se nebi izgubili u kodu, ili jednostavno kao potsetnik nečega.

2

Page 3: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Ovako možete komentirisati kod bez da taj tekst utiče na izvršavanje programa.

/* Ovo je moj prvi program, sa ovim načinom komentiranja mogu svoje komentare pisati u više redova, tako da tu možebiti svega... */

#include <iostream>using namespace std;int main (){cout << "Hello World!"; // komentiram samo jednu liniju

char a;cin >> a;return 0;} 

Osnovna struktura programa

Svaki program napisan u C-u ili C++ ima svoj izgled (strukturu).U nastavku ćemo pokazati koji su elementi jedno programa napisanog u C++ programskom jeziku:

#include <cstdlib>#include <iostream>using namespace std;int main(){  deklaracija varijabli;  naredbe programa;

system ("PAUSE");return 0;} 

Linije programa koje počinju s znakom # programske naredbe su pretprocesorske naredbe C programa prevodiocu (kompajleru) koje se izvršavaju pre kompajliranja. Prevodilac ili kompajler je zaseban program koji je "zadužen" za prevođenje naredbi programskog jezika u strojni jezik.Naredba #include <iostream> poziva datoteku iostream.h koja sadrži skup naredbi zaduženih za komunikaciju s programom, a <cstdlib> cstdlib.h koja sadrži opis funkcija ulaza-izlaza za C++.Unutar vitičastih zagrada nalaze se deklaracije varijabli te slede naredbe programa koje čine naredbe za ulaz, računanje i ispis rezultata.

Naredbom using namespace std; obavještavamo prevodioca da ćemo koristiti standardne nazive naredbi. Ta se naredba može zameniti i naredbom #include <stdio> na početku programa. Prva linija programa, main, definiše funkciju ili grupu zavisnih programskih naredbi. Funkcije su sastavni delovi programa u C++u te se ta glavna ili osnovna zove main. Većina programa sadrži još nekoliko dodatnih funkcija koje imaju svoje ime. Svaka naredba u programu završava sa točkom-zarezom ( ; ), osim uslovne naredbe (if-else). Naredbom system ("PAUSE"); zaustavljamo program dok ne pritisnemo neku tipku. To nam je važno prilikom izvođenja programa. Naredba return 0;  najčešće stoji na kraju programa, a ustvari govori da

3

Page 4: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

funkcija main() ne vraća vrednost. Uz program poželjno je pisati i komentar tako da onaj ko čita program može shvatiti o čemu se radi. Komentari se pišu unutar sledećih znakova  /*  */ ili se bilo gde u redu upišu znakovi za dve kose crte  // Naredbe programa nalaze se unutar vitičastih.

Primer1: Program računa i ispisuje zbroj za a=5 i b=3.

#include <cstdlib>#include <iostream>using namespace std;int main(){int a,b,c; /*deklaracija varijabli*/a=5;b=3;c=a+b; //racunanjecout << c; //ispis zbrojasystem ("PAUSE");return 0;}

Primer 2: Program ispisuje pozdravnu poruku u više redaka na zaslonu.

#include <cstdlib>#include <iostream>using namespace std;int main(){cout << "Pozdrav";cout << " ";cout << " 2. razredu ";cout << endl;system ("PAUSE");return 0;}

UPIS I ISPIS PODATAKANaredba cin

Naredbom cin unosimo podatke s tastature i pridružujemo ih varijablama u programu. Varijable kojima želimo pridružiti vrednosti zapisujemo iza naredbe cin. Na primer, naredbom

cin>>a;

uz pomoć tastature, pridružujemo varijabli a broj ili slovo, a naredbom

cin >>a>>b

pridružujemo vrednosti varijablama a i b.

Važna napomena: Varijable prethodno trebamo deklarisati.

4

Page 5: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Naredba cout

Naredbom cout ispisujemo tekst, vrednosti matematičkih izraza i vrednosti varijabli u programu. Tekst koji želimo ispisati navodimo unutar navodnika, a varijable čije vrednosti želimo ispisati pišemo iza naredbe. Na primer, naredbom

cout<<"Pozdrav"; 

ispisuje se pozdravna poruka Pozdrav na zaslonu računala, a naredbom

cout <<2+2;

ispisuje se broj 4 jer je to vrednost matematičkog izraza 2+2.Vrednosti varijabli ispisujemo tako da ih navodimo iza naredbe cout. Na primer

cout<< a;

ispisuje na računala vrijednost varijable a.

Primer1: Program ispisuje pozdravnu poruku u jednom retku na zaslonu računala

#include <cstdlib>#include <iostream>using namespace std;int main(){cout << "Pozdrav";

system ("PAUSE");return 0;}

Primer 2: Programom se unosi broj i ispisuje njegov kvadrat.

#include <cstdlib>#include <iostream>using namespace std;int main(){int a;cout<< "Unesi broj: ";                          /*ispis poruke*/cin >>a; /*unos broja*/cout << " Kvadrat broja a je "<<a*a;     /*ispis kvadrata*/cout << endl;                                    /*ispis praznog retka*/

system ("PAUSE");return 0;}

5

Page 6: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Formatirani upis i ispis

Upoznali smo naredbe za upis i ispis cin i cout. One ne zahtijevaju nikakvu posebnu naznaku po kojem će se formatu vršiti unos i ispis podataka i koriste se u slučajevima kada nam format zapisa nije važan. Međutim postoje situacije kada moramo navoditi format zapisa.

Funkcija ulaza - scanf

Funkcija koja je zadužena za spremanje podataka u određene varijable zove se scanf. Ona se može koristiti za različite tipove podataka koji se na različite načine spremaju u memoriju. Zbog toga je potrebno funkciji scanf opisati koji tip podataka želimo čitati. Opći oblik funkcije scanf je:  

scanf ("opis_formata",[adresa, adresa..]);     

U programu to pišemo ovako:  scanf ("%d", &a);

opis_formata sačinjava niz znakova koji sadrže jedan ili više opisanih formata. Opis formata se sastoji od oznake postotka (%) iza kojeg slijedi slovo, koje opisuje tip podatka koji se upotrebljava. Jedan ili više opisa formata je smješteno između dvostrukih navodnika, a najčešće korišteni opisi formata nalaze se u priloženoj tablici.

Funkcija scanf printfchar %c %cint %d %dfloat (decimalni) %f %ffloat (eksponencijalni) %e %estring (niz znakova) %s %sunsigned %u %ulong int %ld %lddouble %lf %lflong double %Lf %Lf

Sledeći neophodni deo funkcije scanf je adresa na koju će podaci biti spremljeni. Potrebno je napomenuti da je potrebno navesti adresu varijable pomoću znaka &. Svaka varijabla u C++u ima specifičnu adresu u memoriji.Potrebno je voditi računa da se ova funkcija koristi za definirani oblik i tip podatka koji je potrebno uneti. Međutim, ako ulazni podatak ne odgovara ulaznom formatu, ponašanje funkcije je nepredvidivo što rezultira pogrešnim izvođenjem programa.Stoga je važno da vodite računa o pravilnom zapisivanju opisa formata kojeg koristite.

Funkcija izlaza - printf

Suprotnost funkciji scanf, koja daje vrednost varijabli, je funkcija printf, koja pokazuje vrednost varijabli na ekranu. Poziv funkcije printf izgleda:

6

Page 7: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

printf ("opis_formata",varijabla,varijabla,...);  

U programu to pišemo: printf("Rezultat je %d", a);

opis_formata može opcionalno sadržati tekst koji će se ispisati. Ukoliko prikazujete vrednost jedne ili više varijabli, potrebno je na odgovarajuće mesto upisati opis formata pretvore za svaku varijablu. Opisi formata za funkciju scanf su isti kao za funkciju printf. Postoji nekoliko znakova koji kontrolišu kako se tekst prikazuje na ekranu, a funkcija printf omogućava da se bilo koji od tih znakova ispiše na ekranu.

Sekvenca Ime Značenje\a Alert Aktiviranje zvuka\b Backspace Vraćanje unatrag jedan znak\f Formated Start nove strane ili ekrana\n Newline Pomicanje u novu liniju\r Carriage ret Povratak na početak linije\t Horizontal tab Pomicanje na narednu tab poziciju\v Vertical tab Pomicanje prema dole\\ Backslash Prikazivanje kose crte\' Single quote Prikazivanje jednostrukog navodnika\'' Double quote Prikazivanje dvostrukih navodnika\? Question mark Prikazivanje znaka pitanja\OOO   Prikazivanje znakova sa oktalno zadanim ASCII kodom\xHHH   Prikazivanje znakova sa heksadecimalno zadanim ASCII kodom

Sada možemo pristupi izradi jednostavnog programa.

Primer 1: Unesi dva realna broja i ispiši njihov proizvod i zbir.

#include <cstdlib>#include <iostream>using namespace std;int main(){ float a,b,c,d;printf ("\nUnesi prvi broj");scanf("%f",&a);printf("\nUnesi drugi broj");scanf("%f",&b);c=a+b;d=a*b;printf ("\n Proizvod je %f , a zbir %f ",d,c);system ("PAUSE"); return 0;} 

7

Page 8: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Primer 2: Napiši program kojim će te uneti radijus kruga i izračunati opseg i površinu kruga.

#include <cstdlib>#include <iostream>using namespace std;  int main()  {    const float pi=3.14159;    float r,o,p;     printf(" \n Unesi radijus kruga = ");    scanf ("%f",&r);     p=r*r*pi;     o=2*r*pi;     printf(" \n Poršina kruga je %f = ",p);     printf(" \n Opseg kruga je %f = ",o);system ("PAUSE"); return 0;  }       

Opširnije o naredbama scanf i printf

U naredbi scanf i printf se može pisati više formata zapisa zajedno što znači da unosimo i ispisujemo više vrednosti varijabli istovremeno. Formati zapisa, u naredbi scanf se mogu odvojiti razmakom ili zarezom što uslovljava i način upisa (na primer s razmakom unosimo 2 3 , a zarezom 2,3)

Primer 1: Unesi dva cela  broja i ispiši njihov zbir.(Napomena: za unos i ispis koristi funkciju scanf i printf tako da se brojevi unose s razmakom, npr: 2 3)

#include <cstdlib>#include <iostream>using namespace std;int main(){int a,b,c;printf("\nUnesi dva broja= ");scanf("%d   %d",&a,&b);c=a+b;printf ("\n Zbir brojeva %d   %d je %d ",a,b,c);

system ("PAUSE");return 0;}

Primer 2: Unesi dva cela  broja i ispisi njihov zbir.(Napomena: za unos i ispis koristi funkciju scanf i printf tako da se brojevi unose s zarezom npr: 2,3)

#include <cstdlib>#include <iostream>

8

Page 9: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

using namespace std;int main(){int a,b,c;printf("\nUnesi dva broja= ");scanf("%d,%d",&a,&b);c=a+b;printf ("\n Zbir brojeva %d  %d  je  %d ",a,b,c);

system ("PAUSE");return 0;} 

Objašnjenje: Broj mesta rezervisan za ispis detaljnije se reguliše brojem ispred formata. Na primjer za ispis celih brojeva možemo napisati:printf ("\n Zbir brojeva %3d  %2d  je  %4d ",a,b,c); gdje stoji da će za prvi broj u ispisu biti rezervisana 3 mesta, za drugi 2, za rezultat 4 mesta.Za ispis decimalnih brojeva možemo napisati:printf ("\n Zbir brojeva %.4f  %.2f je %.3f ",a,b,c);gdje %f znači da se radi o decimalnim brojevima,  .4 označava da će za ispis decimalnog dela prvog broja biti rezervisana 4  mesta, za decimalni deo drugog 2, a za decimalni deo trećeg broja 3 mesta.

9

Page 10: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Varijable 

Što su varijable?

Varijable postoje u svakom programskom jeziku. Varijable u programu su promjenjive veličine. Mogu biti:- brojčane (celi ili decimalni broj)- znakovne Najbolje je da se svaka varijabla koja se koristi u programu deklariše na početku programa, ali u C++ se može deklarisati bilo gdje u programu. Deklaracija se sastoji od tipa podatka i jednog ili više imena varijabli. Osim deklaracije ponekad je varijable potrebno i inicijalizirati tj. postaviti na početnu vrednost, najčešće je to 0, ali može biti i 1 (na primjer kod množenja brojeva). Ako se varijabla ne postavi na početnu vrednost ona će biti nepredvidiva tj. početna vrednost može biti bilo koji broj pa će program krivo raditi (računati).

Imena varijabli

Sva imena varijabli trebaju započinjati slovom engleskog alfabeta ili znakom _. Za ostatak imena koriste se slova ili brojevi. Znakovi interpunkcije, odnosno kontrolni znakovi se ne smiju koristiti. Za prepoznavanje imena varijabli bitna su prva 32 znaka. Broj znakova iznad 32 se zanemaruje. Postoje razlike između malih i velikih slova tj. program ih prepoznaje kao različite znakove u imenima varijabli.

Primeri deklaracija varijabli:

int broj;            /*celobrojna varijabla*/char znak;        /*znakovna varijabla*/float temp;       /*decimalna varijabla*/

Varijabla broj deklarirana je kao celi broj.  Varijabla znak deklarisana je kao znak tj. ona može biti bilo koje slovo ili broj, ali brojevi koji su deklarisani kao znak ne mogu se oduzimati, zbrajati, množiti i deliti niti nad njima mogu vršiti bilo koje matematičke operacije.Varijabla temp deklarisana je kao decimalni broj.

Evo primera kako rečenicu iz prošlog primera upisati u varijablu i zatim pomoću varijable ispisati istu na ekran.

#include<iostream>using namespace std;main(){string recenica;recenica = "Hello World!";cout << recenica;char a;cin >> a;return 0;}

10

Page 11: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Dakle sa 

string recenica

deklarišemo da će varijabla ''recenica'' biti string odnosno skup nekakvih znakova. String je tip podatka. Zapamtite samo da se svaka varijabla mora deklarisati pre pridruživanja vredosti.

recenica = ''Hello World'';

Sa ovime varijabli ''recenica'' pridružujemo vrijednost ''Hello World!''

cout << recenica;

Sa ovim ispisujemo varijablu. Primetite da nema navodnika. Ako želite nešto pored toga napisati što nije sadržano u varijabli možete to napisati ovako.

cout << recenica << " What's up?";

Dakle prvo ide varijabla ''recenica'' bez navodnika, zatim opet stavljamo strelice za ispis i u navodnike pišemo nastavak rečenice. Primjetite razmak između navodnika i slova W u drugoj rečenici. To smo napravili tako da reči ne budu spojene jer će se ispisati u isti red. Prisetite se da ako želite u novi red ispisati nešto možete to napraviti sa ''<<endl''. Također u novi red možete ići ako napišete negde u navodnicima \n, npr.

cout << recenica << "\n What's up?";

Idemo sada napraviti mali program koji će izračunavati dva broja.

#include<iostream>using namespace std;

main(){int a, b, rezultat;a = 7;b = 12;rezultat = a + b;cout << "Zbir ta dva broja je " << rezultat;

char x;cin >> x;return 0;}

Kao što string označava niz znakova, tako int označava integer odnosno ceo broj. Znači sve što će biti pridodano varijablama a, b i rezultat će biti ceo broj (nikakvi decimalni brojevi, slova, drugi znakovi nego

11

Page 12: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

samo ceo broj).

Primjetite da smo ovdje protiv nestajanja prozora koristili drugu varijablu da ne bi došlo do konflikta.

Deklarisati varijable možete ovako kao u primeru a možete i svaku posebno na ovaj način:

int a;int b;int rezultat;

Nakon deklarisanja varijabli sledi naravno pridodavanje vrednosti tim varijablama. Pridodajemo varijabli a broj 7, varijabli b broj 12 a varijabla rezultat je onaj zbroj koji daju varijable a i b. U ovom slučaju 7 + 12 = 19. Znači varijabli "rezultat" se pridružuje vrednost 19.

Varijable možete također deklarisati i pridružiti im vrednost odjednom. Dakle ovako:

int a = 7;int b = 12;int rezultat = a + b;

Probajte sada napisati ovakav program 

#include<iostream>using namespace std;

main(){int a, b, rezultat;cout << "Unesite prvi broj: ";cin >> a;cout << "Unesite drugi broj: ";cin >> b;rezultat = a + b;cout << "Zbir ta dva broja je " << rezultat;

char x cin >> x;return 0;}

Dakle, ovo je skoro isto kao i prethodni primer samo što ovde imamo 

cin >> a;

Program očekuje da ćete napisati neki broj i kada vi napišete taj broj on će ga spremiti u varijablu "a". Isto tako i za varijablu "b". 

12

Page 13: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Signed i Unsigned Ovo koristimo za varijable sa predznakom i bez predznaka.Ako stavite

unsigned int a;

onda varijabli "a" nećete moći pridružiti broj sa predznakom (npr. -12) a ako umesto unsigned napišete signed ili ostavite bez toga onda ćete moći upisati predznak.

Doseg varijabli 

Varijable mogu biti globalne ili lokalne. Globalne varijable su one varijable koje su deklarisane u glavnom telu source koda, izvan svih funkcija dok su lokalne varijable one varijable koje su deklarisane u funkciji ili bloku.

Primjer lokalnih varijabla #include<iostream>using namespace std;

main(){int a, b, rezultat;a = 2;b = 5;rezultat = a + b;cout << rezultat;

char x;cin >> x;return 0;}

Primjer globalnih varijabli #include<iostream>using namespace std;

int a, b, rezultat;

main(){ a = 2;b = 5;rezultat = a + b;cout << rezultat;

char x;cin >> x;return 0;}

13

Page 14: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Globalnim varijablama se može pristupiti bilo gde u kodu, čak i u funkcijama dok je lokalnim varijablama moguće pristupiti samo unutar vitičastih zagrada { i }

NAPOMENA: sve varijable moraju početi sa slovom ili donjom crticom _ . Ne smeju početi brojevima niti ičim drugim. Osim toga, sve varijable u svom nazivu smeju imati samo slova, brojeve (od drugog mjesta na dalje), i crtice (_), a ne smeju sadržati razmake, navodnike i slične simbole.

Takođe bitno je to da vam se varijable ne smeju zvati sledećim imenima:

asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while, and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq 

Jer su to ključne riječi i operatori jezika C++.

Još jedna napomena: C++ je case sensitive jezik, odnosno osetljiv na velika i mala slova. Tako da recenica i RecEnica nije ista varijabla.

14

Page 15: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Tipovi podataka 

Računaru je važno s kakvim podacima barata. Zavisno o vrsti razlikujemo: Celobrojne tipovi podataka (int) Realne tipovi podataka (obične (float) i dvostruke preciznosti(double)) Znakovne tipovi podataka (char i string) Korisničke definisane tipove (strukture)

Svaki tip podatak zauzima određenu veličinu (memoriju) u računaru i ima određeni doseg ili opseg. U sledećoj tablici je prikaz vrsta podataka, veličine u bitovima koju taj podatak zauzima u memoriji računara i opseg u kojem se može nalaziti u programskom jeziku C.

Tip podatka Veličina u bitovima Opsegchar 8 -128 do 127signed char 8 -128 do127unsigned char 8 0 do 255short int 16 -32768 do 32767unsigned int 16 0 do 65535int 16 -32768 do 32767long 32 -2147483648 do 2147483647unsigned long 32 0 do 4294967295float 32 3,4x10-38 do 3,4x1038

double 64 1,7x10-308 do 1,7x10308

long double 80 3,4x10-4932 do 1,1 x104932

Osnovni tip celog broja je int. On može imati negativnu ili pozitivnu vrednost unutar prikazanih granica. Tip podatka long koristi se kada nam je za varijablu potrebno veće područje. Tipovi podataka mogu biti predznačni signed i to znači da je u jednom bitu smeštena informacija o tome da li je broj pozitivan ili negativan. Neke varijable ne mogu nikada poprimiti negativnu vrednost pa ih deklariramo kao nepredznačne ili unsigned.

Realni brojevi imaju decimalni deo. Zovemo ih još i floating-point (plivajući zarez) brojevima. Ime su dobili po načinu predstavljanja takvih brojeva u memoriji računara. Taj tip podatka naziva se float. Tipovi podataka doble i long double su poput tipa float, jedino omogućavaju da se smesti veći broj znakova sa većom preciznošću..

Za znakovni tip podataka koristimo se sa char (što je isto kao i signed char). Ukoliko želimo koristiti kompletan set znakova treba upotrebiti unsigned char. Kada baratamo s rečima i rečenicama možemo koristiti i tip - string (niz znakova).

Često se javlja potreba da kod izvođenja programa želimo zadržati sadržaj ekrana da pročitamo rezultate izvođenje programa. Za to će nam poslužiti naredba getch() koja učita jedan znak i nastavlja program, bez pritiska na tipku Enter. Često se koristi kao poslednja naredba u programu,a nalazi se u datoteci funkcija conio.h

15

Page 16: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Konstante (nepromenjive) 

Varijable su promenjive dok su konstante izrazi sa fiksnim, nepromenjivim vrednostima. Ključna reč u deklarisanju i inicijalizaciju konstante je const iza koje sledi tip konstante i njena vrednost.

Primeri konstanti:

     const float pi=3.14159;   const int a=8;

Pravila koja važe za određivanje imena varijabli važe i za imena konstanti.

Morate inicirati konstantu kada je napravite, i ne možete joj prirdružiti novu vrednost kasnije. Posle kada je konstanta inicirana njena vrednost je nepromenjiva.

Literal Constants (konkretne konstante) 

C++ ima dva tipa konstanti: konkretne i slimbolične (literal i symbolic)

Literal konstanta je vrednost upisana direktno u program kada god je to potrebno. Npr.

int godine = 24;

godine je varijabla tipa integer, a 24 je literal konstanta. Ne možete pridružiti vrednost na 24, i ta vrednost ne može biti promenjena.

Symbolic constants (simbolične konstante) Simbolična konstanta je konstanta koja je pretstavljena po imenu, baš kao i varijabla. Ali nakon što je konstanta inicirana, njezina vrednost ne može biti promenjena. Ako imate jednu integer varijablu imenovanu "studenti" i drugu imenovanu "ucionica", možete proceniti koliko studenata imate, i broj učionica, te ako znate da je 15 studenata po razredu.

sudenti = ucionice * 15;

U ovom primeru, broj 15 je Literal konstanta. Kod bi bio puno jednostavniji za čitanje i jednostavniji za održavati ako biste tu vrednost zamenili simboličnom konstantom. 

studenti = ucionice * ucenika_po_ucionici;

Ako kasnije odlučite promeniti broj studenata po ucionici, mozete to uciniti tako da definišete konstantu ucenika_po_ucionici bez potrebe za izmenama u svakom delu koda gde ste koristili tu vrednost. 

Definisanje konstanti sa #define 

Da biste definisali konstantu na staromodni, loši način

#define ucenika_po_razredu 15;

16

Page 17: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Primetite da ucenika_po_ucionici nema konkretni tip (int, char itd.). Svaki put kad preprocesor vidi reč ucenika_po_razredu upisaće broj 15 u tekst.

Zbog toga što se preprocesor pokreće pre kompajlera, kompjuter nikad ne vidi vašu konstantu, vidi broj 15.

Definisanje konstanti sa const Iako #define radi, postoji bolji, ukusniji način definisanja konstanti u C++

const unsigned int ucenika_por_ucionici = 15;

U ovom primeru se isto deklariše simbolična konstanta imenovana ucenika_po_ucionici, ali ovaj put ucenika_po_ucionici je napisano kao unsigned int (bez predznaka, celi broj)

Aritmetički operatori 

Operator je simbol koji predstavlja specifičnu akciju. Već smo kod primjera zbrajanja koristili operator "+". Osim operatora + imamo još nekoliko aritmetičkih operatora.

Evo tablice za pregled operatora.Operacija OperatorZbir +Oduzimanje -Množenje *Deljenje /Ostatak celobrojnog deljenja Na primer 7%2=1 jer je 7 podeljeno s 2 jednako 3, a ostatak je jedan.

%

% operator se naziva još i modulus operator .

Aritmetički operatori jednako dobro rade sa negativnim brojevima kao i sa pozitivnim, sa izuzetkom modulus operatora, rade sa celim brojevima jednako dobro kao i sa brojevima sa pomičnim zarezom. 

Neki programski jezici imaju eksponent operator, što nije slučaj kod C++. Umesto toga C++ ima ugrađenu funkciju pow koja je definirana u standardnoj biblioteci cmath

pow funkcija ima dva arumenta. Prvi argument je baza (glavni broj), a drugi broj je eksponent.

Pogledajmo primer:

#include <iostream>#include <cmath> // ukljucili smo biblioteku cmathusing namespace std;

17

Page 18: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

int main(){double baza, eksponent, rezultat;cout << "Unesite broj ";cin >> baza;cout << "Unesite eksponent ";cin >> eksponent; rezultat = pow(baza, eksponent);cout << "Rezultat = " << rezultat;

char x;cin >> x;return 0;}

Prvo novo što morate primetiti je to da smo uključili biblioteku cmath. Zatim smo deklarisali broj, eksponent i rezultat kao double tip. (Zbog ogromnih brojeva ako npr. upišete 10 na 10-u). Zatim smo im sa cin >> pridružili vrijednosti, te su te vrednosti zapravo parametri u funkciji pow .

Matematičke funkcije

Osnovne koje na početku treba znati:

Opis funkcije ZapisivanjeDrugi koren pozitivnog broja sqrt(x)

Stepenovanje (xy) pow(x,y)

Funkcije se nalaze u biblioteci funkcija math.h pa je na početku programa potrebno napisati naredbu #include <math.h>

 Operatori inkrement i dekrement

Operator inkrement označava UVEĆAVANJE varijable za 1, a dekrement UMANJENJE za 1.

Tako na primjer x=x+1 možemo zapisati kao x++ ili ++x.

Ako je x=1 onda će nakon izvršavanja svake od sljedećih naredbi

x++

++x

x poprimiti vrednost 2. 

18

Page 19: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Međutim u matematičkom izrazu vrlo je važno na kojem mestu pišemo inkrement jer on utiče na konačan rezultat. Pogledajmo primer

Neka je x=5

Napišemo li u programu: y=++x  to znači da će se prvo x uvećati za jedan a zatim pridružiti varijabli y. Rezultat je: x=6 i y=6

Ako napišemo y=x++, tada se prvo x pridruži varijabli y pa se x-u doda jedan. Rezultat je: y=5, x=6.

Isto važi i za operaciju dekrement.

Odnosni operatori 

U programskom jeziku C++ kao i u mnogim drugim programskim jezicima postoje odnosni operatori. Takvi operatori se npr. koriste ako želite napraviti program koji će iz baze podataka odrediti osobe sa više od 30 godina i slično.

Evo tih odnosnih operatora:Operator Značenje Primer> veći od 5>4>= veći od ili jednak 5>=x< manji od 4<5<= manji od ili jednak x<=5== jednak 5==5!= nije jednak 5!=4

Odnosne naredbe 

Kao i aritmetički operatori, odnosni operatori su binarni tj. uspoređuju dva operanda. Naredba sa dva operanda i odnosnim operatorom zove se odnosna naredba (eng. relational expression.)Rezultat odnosne naredbe je Boolean vrednost odnosno istinu ili laž (true ili false).

U ovoj tablici se koriste konkretne ( literal ) vrednosti koje ne mogu biti promenjene. 4 je konkretna vrednost (konstanta), i ona se ne može menjati .

19

Page 20: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Isprobajmo sada ovaj kod koji umesto konstanti koristi varijable

#include <iostream>using namespace std;int main(){int a = 4, b = 5;cout << (a > b) << endl;cout << (a >= b) << endl;cout << (a == b) << endl;cout << (a <= b) << endl;cout << (a < b) << endl;

char x;cin >> x;return 0;}Ovaj program će ispisati:00011S time da 0 predstalja laž (false) a 1 istinu (true). 

Logički operatori

Moguće je u testu  kombinovati više od jednog uslova. To postižemo upotrebom jednog od tri logička operatora prikazana u slijedećoj tablici:

Operator Značenje&& I (AND), svi uslovi moraju biti istiniti da bi rezultat uslova bio istinit|| ILI (OR), najmanje jedan od uslova mora biti istinit da bi rezultat uslova bio istinit! NE (NOT), negacija uslova

Primer 1:

  (a==c)&&(a>d)

rezultat je istinit samo ukoliko je a jednak c i a veći od d. Programski jezik C radi tako da ukoliko je prvi uslov (sa leve strane) lažan, drugi uslov se neće testirati, jer je I izraz lažan, ukoliko je jedan od uslova lažan.

Primer 2:

(a==c)||(a>d)

rezultat je istinit ukoliko je bilo koji od uslova istinit. Ukoliko je prvi uslov istinit, nije potrebno dalje testiranje, rezultat je svakako istinit.

20

Page 21: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Naredba IF 

Naredbu IF koristimo onda kada želimo izvršiti neki kod samo ako je vrednost nekog odnosnog izraza istinita. 

Evo primera:

#include<iostream>using namespace std;

main(){string password;cout << "Unesite password: ";cin >> password;

if(password=="G2105Z") {cout << "Password tacan!"; }

char x;cin >> x;return 0;}

Definisali smo string password, sa cin naredbom upisali ono što korisnik upiše u varijablu password, zatim slijedi provera sa IF naredbom.

Sintaksa IF naredbe je zapravo:if(uslov) { kod koji se izvšrava }

Naravno nije IF naredba ograničena samo na proveravanje tačnosti. Možete koristiti sve odnosne operatore koje smo objasnili u prošlom tutorijalu. Npr:

#include <iostream>using namespace std;int main(){int godine;cout << "Koliko imate godina? ";cin >> godine;if (godine < 18 ) {cout << "Maloletni ste!"; }

char x;cin >> x;return 0;}U svrhu učenja isprobajte sve odnosne operatore. Npr. probajte napisati mali program koji će proveriti da li je broj deljiv sa 2 (bez ostatka).

21

Page 22: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

If i if..else naredbe

Jednostavna if naredba ima oblik:

 if (uslovni izraz){ naredba ili blok naredbi; }

Uslov može biti jednostavan relacijski izraz ili kombinacija izraza spojenih s logičkim operatorima. Izraz mora biti unutar okruglih zagrada. Naredba if radi tako da se ispita uslov i u skladu sa istinitom ili lažnom vrednošću uslovnog izraza izvršavaju naredbe. Ukoliko je izraz istinit, naredba ili blok naredbi, koje slede, se izvršavaju. Ukoliko želimo koristiti blok naredbi, one moraju biti zatvorene unutar vitičastih zagrada.

Primer 1: Unesi broj. Ako je unešeni broj pozitivan ispiši njegov prethodnik, a ako je negativan ispiši njegov sledbenik.

#include <cstdlib>#include <iostream>using namespace std;int main(){int a;printf ("Unesi broj:");scanf ("%d",&a);if (a>0)printf("\nPrethodnik je %d",a-1);if (a<0)printf("\nSledbenik je %d",a+1);

system ("PAUSE");return 0;}

Primer 2: Napiši program kojim će se uneti tri realna broja i ispisati najmanji.

#include <cstdlib>#include <iostream>using namespace std;int main(){float a,b,c,min;printf("Unesi brojeve");scanf("%f %f %f", &a,&b,&c);min=a;if (b<min)min=b;if (c<min)min=c;

22

Page 23: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

printf ("\n Najmanji je %f",min);

system ("PAUSE");return 0;}

Višestruki izbor pomoću if ....else

Ovaj oblik izbora ima sledeći oblik:

 if (uslovni izraz){ naredba ili blok naredbi;}else{alternativna naredba ili blok naredbi;}

Izjave if...else je moguće ugrađivati jednu u drugu. U sledećem primeru zelena petlja je ugrađena u plavu.

if (uslovni izraz 1){ naredba ili blok naredbi;}else{   if (uslovni izraz 2){   naredba ili blok naredbi;   }   else{   alternativna naredba ili blok naredbi;   }}            ili

if (uslovni izraz 1){    if (uslovni izraz 2){   naredba ili blok naredbi;   }   else{   alternativna naredba ili blok naredbi;   }}else{naredba ili blok naredbi;}

Primer 1: Uneti dva broja. Ako je prvi veći od drugog ispisati njihov zbir, a ako nije (prvi veći od drugog) ispisati njihov proizvod.

23

Page 24: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

#include <cstdlib>#include <iostream>using namespace std;int main(){int a,b;cout<<"Unesite brojeve: "; cin >>a>>b;if (a>b) cout<<"\nZbir je"<<a+b;elsecout <<"\nProizvod je "<<a*b;

system ("PAUSE");return 0;}

Primer 2:

#include <iostream>using namespace std;int main(){int godine;cout << "Koliko imate godina? ";cin >> godine;if (godine <= 17 ) {cout << "Maloletni ste!"; }

else if (godine>=18 and godine<=39) {cout << "Punoletni ste"; }

else if (godine>39 and godine<70) {cout << "Najljepse godine"; }

else {cout << "Stari ste"; }

char x;cin >> x;return 0;}

Naredba switch

Ova naredba služi za proveravanje više uslova odjednom i izvršavanja onoliko radnji koliko je uslova zadovoljeno odnosno tačno.Ova naredba je korisna ukoliko trebamo proveriti više "stvari" a da ne petljamo sa if i else if petljom.

24

Page 25: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Format ove naredbe je:

switch (varijabla){ 

case mogucnost1:naredba;break;

case mogucnost2:naredba;break;...}

Pa da svaki red koda objasnimo pojedinacno:

switch (varijabla){

Ovaj deo prijavljuje varijablu (promjenljivu) čiju ćemo tačnost ispitivati.

case mogucnost1:

Ovaj deo proverava da li je varijabla iz prvog reda jednaka nizu znakova (u ovom slucaju) mogucnost1. Obavezno : (dvotočka) na kraju.

naredba;

Ovde upisujemo naredbu ili više njih koje će se izvršavati ukoliko je zadovoljen uslov. 

break;

Ovde se zatvara niz naredbi i daje se mogućnost novom uslovu.

case mogucnost2:naredba;break;

Ovo je samo primer kako treba postaviti drugi uslov, tako ćemo dodavati i ostale.Ukoliko želimo da postavimo neki defaultni uslov tj. naredbe koje će se izvršiti ukolikoni jedan uslov nije zadovoljen onda ćemo dodati sledeće:

default:naredbe;

Ovdje na kraju ne ide break; zato što se podrazumeva da će default kod biti na kraju tj. zadnji uslov i da nećebiti više uslova.

25

Page 26: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Ovo sve malo zvuči zamršeno al na konkretnom primeru će to jednostavnije izgledati.

#include<iostream.h>int main(){int broj=0;switch (broj){

//provjerava da li je broj=1case 1: //ako postoji ispisuje 'Broj je 1!!!'cout<<"Broj je 1!!!"<<endl; break;

case 2: cout<<"Broj je 2!!!"<<endl; break;

//Ukoliko broj nije jednak ni 1 niti 2 onda ispisujedefault: cout<<"Broj je 0 (nula) !!!"<<endl; }return 0;}

Evo sad za one koji misle da je lakse sa if petljama ispetljati vise uslova:

switch (x) {case 1:cout << "x je 1";break;case 2:cout << "x je 2";break;default:cout << "x je nepoznato";}

if (x == 1) {cout << "x je 1";}else if (x == 2) {cout << "x je 2";}else {cout << "x je nepoznato";}

26

Page 27: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Vidimo jednu if i jednu else if petlju - zamislite da moramo ispitati 50 vrednosti tek onda bi bilo petljanja.Zato toplo preporučujem naredbu switch kod ispitivanja više razlicitih vrednosti. Dok kod jednostavnih tu je naravno if i if else.

Ponavljanje izvršavanja naredbi pomoću petlji

Naredbe if, if-else i swich  izvršavaju uslov i naredbe samo jednom. Čest je slučaj u praksi da naredbe moramo izvršiti više od jednog puta, kao na primjer u slučaju učitavanja ili ispisa veće količine podataka.  Za slučaj kada istu naredbu ponavljamo više puta koristimo petlje. Petlje označavaju naredbu ili niz naredbi koje će se izvršavati više puta za redom, dok se ne ispuni neki, unaprijed zadan uslov. U C-u i C++u koriste se tri petlje: for, while i do-while.

Naredba while

Ova petlja nam služi za definisanje ciklusa sa nepoznatim brojem ponavljanja.Format naredbe je:

Sintaxa:while (uslov) {naredbe;}

npr:broj=1;while (broj<5){broj=broj+1; // proizvoljna naredba}

U ovom primeru broj je manji od 5 i ova petlja ce se izvršiti, tako da će se povećati za 1.Sledeći put će broj biti jednak 2 pa će se petlja opet izvršiti. Da bi se, onda kada broj dobije vrednost 5, petlja preskočila tj. ne bi se izvršila i izvršio bi se ostatak koda, jer se nije ispunio uslov koji glasi da broj mora da bude manji od 5.

#include<iostream.h>int main (){int broj=1;while (broj<5){broj=broj+1; //ovo se moze napisati i broj+=1;}cout<<"Ovo je broj: "<<broj<<endl;return 0;}

Rezultat ovog programa je:Ovo je broj: 5

27

Page 28: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Primer : Za niz od 5 različitih brojeva ispiši zbir.

#include <cstdlib>#include <iostream>using namespace std;int main(){ int i, broj,s=0;cout <<"Program za sabiranje 5 unesenih brojeva ";i=1;                                                     /*postavljanje varijable i na vrijednost 1 */while (i<=5)                                          /* petlja se vrti dok je varijabla i<=5 */{cout <<"\n Unesi "<<i<<". broj = ";cin >> broj;                                          /* unos broja */s=s+broj;                                             /* pribrajanje unesenog broja varijabli s(suma)*/i=i+1;                                   /*povećavanje kontrolne varijable za 1 te vraćanje na ispitivanje uvjeta u while*/}cout<<"\n Zbir unesenih brojeva je "<<s<<"\n";system ("PAUSE"); return 0;}

Petlja do-while

Za razliku od while petlje ova petlja se izvede bar jednom jer se uslov ispituje na kraju. Naredbe unutar petlje se izvršavaju dok je uslov istinit (dok ne postane lažan). Kada uslov postane lažan završava se petlja i program se nastavlja izvođenjem prve naredbe iza zagrade petlje.

Naredba se zapisuje na sljedeći način:

do{ blok naredbi;} while (uslov);

Obratite pažnju da se tačka-zarez koja označava kraj naredbe zapisuje iza while uslova. 

Primer:Za niz prirodnih brojeva od 1-N ispiši sumu neparnih.

#include <cstdlib>#include <iostream>using namespace std;int main(){ int p, N, zbroj=0;cout<<" \nUnesi broj N= ";cin>>N;p=1;

28

Page 29: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

do {zbroj = zbroj + p; p=p+2;} while (p<=N);cout<< "\nZbir neparnih brojeva od 1 do " << N<< " iznosi "<< zbir<<"\n";system ("PAUSE"); return 0;}

Naredba For

Kod while petlje smo imali da inicijlizaciju, uslov i promenu vrednosti imamo na više razlicitih mesta, dok je kod for petlje to sve sadržano u jednom redu koda tj. između malih zagrada. 

Format naredbe:for (inicijalizacija; uslov; promena vrednosti) naredba;.ili korišćenjem blokova: for (inicijalizacija; uslov; promjena vrednosti) {naredbe;}

uslov mora biti logicki izraz, dok inicijalizacija i promena vrednosti mogu biti bilo kakvi izrazi. Petlja ce se izvršavati dok je uslov tačan.

Npr:

//Brojac unatrag#include <iostream.h>int main (){for (int i=10; i>0; i--) {cout << i << ", ";}cout << "PALI!";return 0;}

Rezultat ovog programa:10, 9, 8, 7, 6, 5, 4, 3, 2, 1, PALI!

Ukoliko dodamo na kraju ovog dela koda “<<endl;”cout << i << ", "<<endl;Što ce značiti da posle svakog ispisa kursor šalje u novi red. 

Nakon ovog rezultat će biti:

10,9,8,

29

Page 30: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

7,6,5,4,3,2,1,PALI!

Evo na ovoj slici se jasno ilustrira format for petlje:

Primer 1:  Ispiši prvih 20 prirodnih brojeva,  svaki  u svom redu. Na kraju ispiši i vrednost varijable i nakon izvođenja petlje.

#include <cstdlib>#include <iostream>using namespace std;int main(){ int i;for (i=1; i<=20; i++){cout <<i << "\n";}cout<<"Nakon petlje i je "<< i<<"\n";system ("PAUSE"); return 0;}

Primer 2: Ispiši parne brojeve od 20 do 450.

#include <cstdlib>#include <iostream>using namespace std;int main(){ int i;for (i=20;i<=450; i+=2)  /*početna vrednost kontrolne varijable je 20 i u svakom koraku povećava za 2*/{cout <<i << "\n";}system ("PAUSE"); return 0;}

30

Page 31: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Primer 3: Ispiši sve prirodne brojeve između 1 i N, koji su deljivi sa 3.

#include <cstdlib>#include <iostream>using namespace std;int main(){ int N;cout<<"Unesi broj N = ";cin >>N; cout<<"Brojevi djeljivi s 3 do "<<N<<" su \n";for (int i=1;i<=N; i++){if( i%3==0){cout<<i<<"\n";}} system ("PAUSE"); return 0;}

31

Page 32: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Funkcije

Funkcije su celovite skupine naredbi koje izvršavanjem ispunjavaju određene zahteve. Omogućavaju raščlanjivanje problema na jednostavnije - manje celine, čime doprinose boljoj preglednost izvornog koda i jednostavnijem rešenjem.  Funkcija se definiše na sledeći način:

tip_funkcije ime_funkcije(najava liste_argumenata)  { najava lokalnih varijabli; naredbe; return izlazna_vrednost; } gdje je: - tip_funkcije određuje tip vrednosti koju pozvana funkcija vraća u nadređenu funkciju, a može biti bilo koji od osnovnih tipova podataka (int, char, float, double, void), - ime_funkcije je identifikator preko kojeg se funkcija poziva, dok je- lista_argumenata lista formalnih parametara sa pripadajućim tipovima preko kojih se niz podataka iz nadređene funkcije prenose u pozvanu funkciju.

Funkcija u glavni program vraća jednu ili ni jednu vrednost ovisno o tipu funkcije. Za prenos vrednosti u nadređeni program koristi se naredba return;. Funkcija se poziva na sledeći način: ime_funkcije (stvarna lista_argumenata); Funkcije se mogu pozivati u izrazima, petljama, ili kao argumenti u pozivima drugih funkcija. Svaka korišćena funkcija se mora najaviti pre poziva.  Primjer1: Napiši program kojim će se pomnožiti cela dva broja i ispisati rezultat. Za množenje celih brojeva napiši funkciju. #include <iostream>#include <math.h>using namespace std;

int pomnozi(int x,int y) /*funkcija za množenje*/{int rez; /*lokalna varijabla*/rez=x*y;return rez;}

int main() /*glavni program*/{int p,a,b;cout <<" Unesi brojeve za množenje (npr. 2 3)=";cin >>a>>b; p=pomnozi (a,b); /*poziv funkcije*/cout << "\n Umnozak je:"<< p<< "\n"; system ("PAUSE");return 0;

32

Page 33: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

}

Primjer 2: Napiši funkciju za traženje najmanjeg od 3 učitana broja. Zatim napiši glavni program koji će pozvati napisanu funkciju i ispisati njeno rešenje.

#include <iostream>#include <math.h>using namespace std;int najmanji (int x, int y, int z)   /*funkcija za određivanje najmanjeg*/{ int min; min=x;if (y<min) min=y;if(z<min)min=z;return min;}

int main(){int p,a,b,c;cout << " Unesi brojeve (npr. 5 6 8)==>"; /*upis brojeva*/cin >>a>>b>>c; p=najmanji (a,b,c);                             /*poziv funkcije*/cout << " Najmanji je : "<<p<<"\n" ;system ("PAUSE");return 0;}

Zadaci za samostalni rad:

1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje unošenje dužina stranica pravougaonika pa pomoću funkcija za računanje površine i opsega računa i ispisuje površinu i opseg.

Polja ili nizovi

Nizovi su skupine podataka koji predstavljaju jednu celinu. Niz ima svoje ime, tip i veličinu tj. zauzima određeni prostor u memoriji računara. Niz se sastoji od članova niza koji imaju svoju vrednost i mesto. Nizove u procesu programiranja koristimo kada želimo raditi s više podataka koji su organizovani u redove i kolone, istog su tima i imena. Međusobno se razlikuju po svom mestu i svojoj vrednosti. Stoga ih je lakše premeštati, sortirati i s njima vršiti različite računske operacije.

 Nizovi mogu sadržati: - brojeve (cele ili decimalne)- znakove (slova i posebne znakove)

33

Page 34: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

U definisanom nizu, svi podaci moraju biti istog tipa. Nije moguće u istom nizu mešati brojeve i znakove. Svaki član u nizu ima svoje mesto. To mesto zovemo INDEKS. Osim mesta, član niza ima i svoju vrednost.Na primer: Ako kažemo da želimo definisati niz imena A koji će imati 7 članova i čiji će članovi biti celi brojevi, onda ćemo u programu to napisati ovako: int A[7].Grafički prikazano to izgleda ovako :

A[0] A[1] A[2] A[3] A[4] A[5] A[6]2 3 5 4 5 34 56

Vidimo da svaki član niza ima svoje mesto (indeks) i vrednost. Indeksi idu od 0-6 i zapisani su unutar uglastih zagrada.Tako na primer vrednost prvog člana niza A[0] iznosi 2, drugog ,A[1], iznosi 3 itd. Uočimo da članovi niza idu od 0 - N-1 gdje je N broj koji govori koliko ima članova niza.Postoje jednodimenzionalni, dvodimenzionalni i višedimenzionalni nizovi.

Jednodimenzionalni nizovi

Jednodimenzionalni nizovi imaju samo jedan niz podataka. Na primjer niz A prikazan u tablici ima 7 članova. Svi članovi su celi brojevi i nalaze se poređani jedan iza drugoga (u nizu).

A[0] A[1] A[2] A[3] A[4] A[5] A[6]34 5 3 21 5 3 76

Kako bi program mogao raditi s nizom, na početku programa potrebno je rezervisati memoriju u računaru. To se radi naredbom za deklaraciju koja se zapisuje:

tip_niza naziv_niza [dimenzije] ;

Na primer sledeće deklaracije označavaju:

int a[10] – da je deklarisan niz celih brojeva koji se zove a i ima ukupno 10 članova, a indeksi idu od 0 do 9 float X[8] – da je deklarisan niz decimalnih brojeva koji se zove X i ima ukupno 8 članova , a indeksi idu od 0 do 7 char b[30] - da je deklarisan niz od 30 znakova

Važno je uvek rezervisati više prostora nego što će se u programu koristiti jer će inače program neće raditi ispravno. Na primer ako deklarišemo niz od 10 članova, a unesemo 20 program neće moći prihvatiti preostalih 10 članova niza te neće moći ispravno raditi. Niz se može zadati unutar programa ili unosom s tastature (naredbom cin ili scanf). Ako se vrednosti članova niza zadaju unutar programa navode se unutar vitičastih zagrada npr:  naredbom A[6]={2,34,1,67,99,7}; je zadan niz A kojeg čini 6 celih brojeva.Kada se vrednosti članova niza unose preko tastature (naredbom cin) koristi se petlja for. Petljom for unose se jedna po jedan član niza, povećavanjem kontrolne varijable za jedan. U nastavku je deo programskog koda koji pokazuje unos članova niza pomoću petlje for.

34

Page 35: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

for (i=0;i<N;i++) {cin>>X[i]; }

Za ispis članova niza također se koristi petlja for:

for (i=0;i<N;i++) {cout>>X[i];}

Primer 1: Unesi N članova niza X pomoću for petlje te ih zatim ispiši takođe petljom for.

#include <cstdlib>#include <iostream>using namespace std;int main(){int i,N; int X[10];                           /*deklaracija niza od 10 celih brojeva*/cout<<"Zadaj 0<N<10 = ";  /*broj N mora biti manji od 10 jer je deklarisan niz od maksimalno 10 članova*/cin >>N; for (i=0;i<N;i++)               /*upis članova niza*/ { cin>>X[i];                        /*upis i-tog člana niza*/} 

for (i=0;i<N;i++)               /*ispis članova niza for petljom*/ {  cout << X[i];                  /*ispis i- tog člana niza*/cout <<endl;                  /*ispis praznog reda (end line)*/} system ("PAUSE");return 0;}

Primer 2: Unesi N članova niza te ispiši najmanji element u nizu.

#include <cstdlib>#include <iostream>using namespace std;int main(){int polje[100];int N,i, j, min;cout<<"Unesi N:";cin>>N;for(i = 0; i < N; i++){cout<< "\nUnesite polje[" << i << "] = ";

35

Page 36: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

cin>> polje[i];}min=polje[0];// traženje najmanjegfor(i = 0; i < N; i++)if(polje [i] < min){min = polje[i];}cout<< "\n Najmanji je:"<<min;system ("PAUSE");return 0;

Dvodimenzionalni nizovi

Karakteristika dvodimenzionalnih nizova je da imaju više redova i kolona.Tablicom u nastavku predstavljen je celobrojni niz naziva A.

  1. kolona 2. kolona 3. kolona 4. kolona1. red 2 4 5 62. red 0 3 9 7

Čitajući tablicu, članovi niza su sledeći:

A[0,0] = 2A[0,1] = 4A[0,2] = 5A[0,3] = 6

A[1,0] = 0A[1,1] = 3A[1,2] = 9A[1,3] = 7

Prvi broj unutar uglastih zagrada je red, a drugi kolona. Ako članove niza zadajemo u programu onda, prikazani niz, zapisujemo ovako:

int A[2][4]={{2,4,5,6},{0,3,9,7}};

gde prvi broj označava broj redova, a drugi broj kolona. Kao i kod jednodimenzionalnih nizova prvi red i kolona imaju redni broj (index) 0.

Dvodimenzionalni niz, se u praksi koristi za rešavanje problema sortiranja niza (od najvećeg do najmanjeg ili od najmanjeg do najvećeg). U nastavku je primer sortiranja niza korišćenjem jednodimenzionalnog niza. 

Primer: Unesi niz od N celih brojeva te ispiši sortiran niz od najmanjeg do najvećeg.

36

Page 37: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

#include <cstdlib>#include <iostream>using namespace std;int main(){int A[100];int N,i, j, temp;cout<<"Unesi N:";cin>>N;for(i = 0; i < N; i++){cout<< "\nUnesite polje[" << i << "] = ";cin>> A[i];}// sortiranje niza (od najmanjeg do najvećeg)for(i = 0; i < N-1; i++)for(j = i+1; j < N; j++)if(A [i] > A[j]){temp = A[i];A[i] = A[j];A[j] = temp;}for(i = 0; i<N; i++)cout<< A[i] << "\n";system ("PAUSE");return 0;}

OBJAŠNJENJE: 

47 78 17 53 61A[0] A[1] A[2] A[3] A[4]

Za i=0, j će poprimiti vrednosti 1,2,3 i 4, što znači da će se element niza A[0] uspoređivati s ostalim elementima. Svaki put kad neki drugi element bude manji od elementa A[0], doći će do zamene vrednosti.

i j    0 1 A[0]>A[1]

47>78Nejednakost nije tačna pa ne treba ništa raditi

0 2 A[0]>A[2]47>17

Nejednakost je tačna pa se zamene vrednosti - sada je A[0]=17, A[2]=47

0 3 A[0]>A[3]17>53

Nejednakost nije tačna pa ne treba ništa raditi

0 4 A[0]>A[4]17>61

Nejednakost nije tačna pa ne treba

37

Page 38: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

ništa raditi

 Nakon prvog prolaza na prvom mestu u nizu nalazi se najmanji element. Niz sada izgleda:

17 78 47 53 61A[0] A[1] A[2] A[3] A[4]

 Sad od preostalih elementa (od mesta 1 do 4) tražimo najmanji:

i j    1 2 A[1]>A[2]

78>47Nejednakost je tačna pa se zamene vrednosti - sada je A[1]=47, A[2]=78

1 3 A[1]>A[3]47>53

Nejednakost nije tačna pa ne treba ništa raditi

1 4 A[1]>A[4]47>61

Nejednakost nije tačna pa ne treba ništa raditi

Nakon drugog prolaza niz izgleda:

17 47 78 53 61A[0] A[1] A[2] A[3] A[4] i j    2 3 A[2]>A[3]

78>53Nejednakost je tačna pa se zamene vrednosti - sada je A[2]=53, A[3]=78

2 4 A[2]>A[4]53>61

Nejednakost nije tačna pa ne treba ništa raditi

Sada niz izgleda ovako:

17 47 53 78 61A[0] A[1] A[2] A[3] A[4] i j    3 4 A[3]>A[4]

78>61Nejednakost je tačna pa se zamene vrednosti - sada je A[3]=61, A[4]=78

 Petlje su završene, a samim tim i postupak sortiranja, niz koji će biti ispisan izgleda:

17 47 53 61 7838

Page 39: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

A[0] A[1] A[2] A[3] A[4]

 Sortiranje je završeno!

DVODIMENZIONALNI NIZOVI - MATRICE

Najefikasniji način predstvljanja podataka je u obliku tabela ili matrica.Ovi zadaci u programu se predstavljaju kao dvodimenzionalni niz.Matricu tj. tabelu možemo predstaviti na slijedeći način:

SLIKA:

Sa indeksom j broje se elementi u redu, a sa i u koloni.

i=1, n - i ide od 1 do nj=1, m - j ide od 1 do m

Elementi kod kojih su indeksi jednaki nazivamo glavnu dijagonalu,nasuprot glavne dijagonale nalazi se sporedna dijagonala.

n=3m=3i=1j=2

a11 - a12 - a13

a21 - a22 - a23

a31 - a32 - a33

Dvodimenzionalni niz ili matrice deklarišemo u vidu niza

npr: int niz[20], i, j;

kod ispisa koristimo niz[i][j];

39

Page 40: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Nizovi znakova

Za rad s nizom znakova možemo koristiti tip string ili char. Tip string se koristi u slučaju ako radimo s rečima ili rečenicama, dok tip char radi samo s jednim znakom. Definišemo li polje ili niz znakova tipa char, takođe ćemo moći raditi s rečima ili rečenicama.Pri radu s tipom string na početku programa potrebno je izvršiti deklaraciju varijabli naredbom;

string ime_varijable;

Budući da varijabla string prilikom unosa unese znakove jedne reči, postoji posebna naredba za unos cele rečenice:

getline(cin, ime_varijable);

Primer 1: Unesi i ispiši svoje ime.

#include <cstdlib>#include <iostream>#include <string>using namespace std;int main(){ string ime;                             /*deklaracija stringa (niza znakova)*/cout <<"Unesi svoje ime =";cin >> ime;cout <<"Tvoje ime je "<<ime;cout<<"\n";                           /*prelazak u novi red*/system ("PAUSE"); return 0;}

Primer 2: Unesi rečenicu " Danas učim programiranje u C++." pa je nakon unosa ispiši.

#include <cstdlib>#include <iostream>#include <string>using namespace std;int main(){ string recenica;                     /*deklaracija stringa (niza znakova) za varijablu recenica*/cout <<"Unesi recenicu = ";getline(cin,recenica);              /*unos rečenice pomoću naredbe getline*/cout <<recenica;cout<<"\n";

40

Page 41: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

system ("PAUSE"); return 0;}

Niz znakova možemo i definisati kao jednodimenzionalni nizi čiji su elementi znakovi (char).Znakovni niz se deklariše kao i svaki jednodimenzionalni niz, navođenjem tipa char, imena niza i njegove dužine. Kod određivanja dužine niza znakova treba voditi računa o tome da niz znakova završava nul znakom (\0) koji zauzima jedno mesto niza.Niz se inicijalizira tako da se njegov sadržaj navodi unutar dvostrukih navodnika ( " " ).Za učitavanje i ispis znakovnih nizova mogu se koristiti standardni načini učitavanja i ispisivanja elemenata jednodimenzionalnog niza (cout , cin , printf(), scanf() u kombinaciji s petljom for). Osim ovog načina mogu se koristiti i funkcije:       - gets() - koja omogućuje unošenje niza znakova sa standardnog ulaza.        - puts() - koja omogućava ispis niza znakova na standardni izlaz.(Obe funkcije nalaze u biblioteci stdio.h) Primer 1: Napiši program kojim se unosi niz znakova i ispisuje dužina učitanog niza.

#include <cstdlib>#include <iostream>#include <string>using namespace std;int main(){ char a[80];int i=0;printf("upisite niz znakova: ");gets(a);while (a[i+1]!='\0')i++;printf("upisali ste niz: ");puts(a);printf("Duzina mu je %d znakova",i+1);system ("PAUSE"); return 0;}

Strukture

Struktura je kombinacija skupa istih ili različitih tipova podataka koje formira sam korisnik, prema vlastitim potrebama.U C++u se struktura zapisuje:

struct ime_strukture{najava članova strukture; };

41

Page 42: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

gde je struct ključna reč koja označava početak najave strukture, ime_strukture koju najavljujemo, a unutar vitičastih zagrada navodimo sve čalnove (varijable) koje želimo kreirati strukturom.Varijable strukture mogu se navesti :     a) odmah iza strukture

 struct ime_strukture{ najava članova strukture;       }  lista strukturnih varijabli;

- ili u posebnoj naredbi čiji je oblik struct ime_strukture lista_strukturnih_varijabli;

Članovima strukturne varijable pristupa se preko imena strukturne varijable i strukturne tačke (.) operatora. 

U nastavku je primer programa u kojem se unose podaci za: ime, prezime, matični broj, prosek i datum rođenja za sve učenike jednog razreda (najviše 40). Nakon unosa svih podataka traži se učenik s najboljim prosekom te se na kraju programa ispisuju svi podaci za učenika koji ima najbolji prosek.

Objašnjenje: U programu su definisane dve strukture: datum i ucenik. Struktura datum služi za unos datuma rođenja učenika i sastoji se od dana, meseca i godine rođenja. Druga struktura se zove ucenik i sadrži 2 niza znakova (za ime i prezime), matični broj i prosek ocena. Niz (polje) razred se sastoji od struktura tipa učenik. Na primer poziv za ispis varijable razred[0].rodjendan.godina će dati za ispis godine rođenja za 1. učenika, a  razred[1].prosek će dati ispis proseka za 2. učenika.

#include <cstdlib>#include <iostream>#include <string>using namespace std;struct datum{int dan;int mesec;int godina;};struct ucenik{char ime[15];char prezime[15];int maticni;float prosek;struct datum rodjendan;}razred[40];         /*polje razred čiji su članovi strukture tipa ucenik*/int main(){int n,i,k;float max;cout<<"\nKoliko ima ucenika? ";

42

Page 43: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

cin>>n;if (n>40)cout<<"Broj ucenika ne moze biti >40";else{for(i=0;i<n;i++)          /*unos podataka za pojedinog učenika u polje razred*/{cout<<"\nIme: ";cin>>razred[i].ime;cout<<"\nPrezime: ";cin>>razred[i].prezime;cout<<"\nMaticni u imeniku: ";cin>>razred[i].maticni;cout<<"\nProsek: ";cin>>razred[i].prosek;cout<<"\nRodjen dan: ";cin>>razred[i].rodjendan.dan;cout<<"\nRodjen mesec: ";cin>>razred[i].rodjendan.mesec;cout<<"\nRodjen godina: "; cin>>razred[i].rodjendan.godina;}max=razred[0].prosek;    /*određivanje najboljeg proseka*/k=0;for(i=0;i<n;i++)if (max<razred[i].prosek){max=razred[i].prosek;k=i;}/*ispis najboljeg*/cout<<"\nNajbolji je "<<razred[k].ime<<" " <<razred[k].prezime;cout<<"\nMaticni broj "<<razred[k].maticni;cout<<"\nRodjen "<<razred[k].rodjendan.dan<<razred[k].rodjendan.mesec<< razred[k].rodjendan.godina;cout<<"\nS prosekom "<<razred[k].prosek;} system ("PAUSE"); return 0;} 

U nastavku je isti primer, ali uz korišćenje naredbi za formatirani ulaz i izlaz (printf i scanf).

#include <cstdlib>#include <iostream>#include <string>using namespace std;

struct datum

43

Page 44: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

{int dan;int mesec;int godina;};

struct ucenik{char ime[15];char prezime[15];int maticni;float prosek;struct datum rodjendan;}razred[40];     /*polje razred koje se sastoji od struktura ucenik*/

int main(){int n,i,k;float max;printf("\nKoliko ima ucenika? ");scanf("%d",&n);if (n>40)printf("Broj ucenika ne moze biti >40");else{for(i=0;i<n;i++)       /*unos podataka za svakog učenika u polje razred*/{printf("\nIme: ");scanf("%s",razred[i].ime);printf("\nPrezime: ");scanf("%s",razred[i].prezime);printf("\nMaticni u imeniku:");scanf("%d",&razred[i].maticni);printf("\nProsek: ");scanf("%f",&razred[i].prosek);printf("\nRodjen dan: ");scanf("%d",&razred[i].rodjendan.dan);printf("\nRodjen mesec: ");scanf("%d",&razred[i].rodjendan.mesec);printf("\nRodjen godina: ");scanf("%d",&razred[i].rodjendan.godina);}max=razred[0].prosjek;     /*određivanje najboljeg prosjeka*/k=0;for(i=0;i<n;i++)if (max<razred[i].prosek){max=razred[i].prosek;k=i;

44

Page 45: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

}/*ispis najboljeg*/printf("\nNajbolji je %s %s",razred[k].ime,razred[k].prezime);printf("\nMaticni broj %d",razred[k].maticni);printf("\nRodjen %d.%d.%d",razred[k].rodjendan.dan,razred[k].rodjendan.mesec,razred[k].rodjendan.godina);printf("\nS prosekom %.2f",razred[k].prosek);} system ("PAUSE"); return 0;}

Datoteke

Datoteke omogućuju pohranjivanje velike količine podataka koji se mogu koristiti nezavisno o programu.Datoteke mogu biti tekstualne ili binarne. U nastavku će biti opisane tekstualne datoteke.

2 su osnovna načina upisa/ispisa podataka u datoteku:- formatirani - neformatirani Neformatirani način upisa i ispisa podataka iz datoteke koristi naredbe: ofstream: za upisivanje podataka u datoteku ifstream: za čitanje podataka iz datoteke fstream: za čitanje i pisanje podataka u datoteku

a obavlja se kombinacijama ključnih reči open i close.

Primer1: Otvaranje datoteke primer.txt i upis teksta "Ovo je primer pisanja teksta u datoteku". Datoteka će se nalaziti u radnoj mapi tvrdog diska te se može pročitati izlaskom iz C++ a i pokretanjem programa Blok za pisanje (NotePad).

#include <iostream>#include <fstream>using namespace std;

int main () {ofstream test;                                   /*deklaracija datoteke test - opcija:upisivanje podataka*/test.open ("primer.txt");                 /*otvaranje datoteke primer.txt u radnoj mapi na tvrdom disku*/test << "Ovo je primer pisanja teksta u datoteku \n";                 /*upis teksta u datoteku*/test.close();                                                                        /*zatvaranje datoteke*/system ("PAUSE");return 0;}

Primer 2: Ispis (čitanje) sadržaja prethodnim zadatkom kreirane datoteke primer.txt.

#include <iostream>#include <fstream>

45

Page 46: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

#include <string>using namespace std;

int main () {string redak;                                              /*deklaracija tekstualne varijable red*/ifstream test ("primer.txt");                       /*deklaracija datoteke test - opcija:čitanje podataka iz datoteke*/if (test.is_open())                                       /*ispitivanje da li je datoteka ispravno otvorena*/{while (! test.eof() )                                     /*čitaj dok nije kraj datoteke (End Of File)*/{getline (test,red);                                    /*uzmi iz datoteke test jedan red teksta i stavi ga u varijablu red*/cout << redak << endl;                                /*ispis teksta reda na monitor računara*/}test.close();}

else cout << "Ne mogu otvoriti datoteku";        /*ispis ako uslov test.is_open() nije ispunjen*/

system ("PAUSE");return 0;}

Želimo li koristiti formatirani upis/spis podataka u datoteku koristiti ćemo naredbe fscanf() i fprintf().

Pre otvaranja datoteke programu ćemo naredbom  FILE *identifikator; najaviti da ćemo raditi s datotekom. Identifikator je naziv datoteke koji ćemo koristiti u programu, a zvezdica govori da se radi o pokazivaču.Datoteku ćemo otvoriti funkcijom fopen(), a nakon uporabe zatvoriti funkcijom fclose();.Te se funkcije zapisuju: 

    fopen("ime_datoteke","način_otvaranja");     fclose(identifikator);

Ime datoteke zadaje se po istom pravilu kao i naziv varijable, a način otvaranja datoteke (tekstualne) određuje njene mogućnosti. Tako na primer može postojati datoteka koja se može samo čitati ili u koju se mogu samo zapisivati podaci. Načini otvaranja se beleže slovom  (r, w, r+) i detaljnije su opisani u tablici. 

Način otvaranja Objašnjenje

"r" Otvara tekstualnu datoteku za čitanje. Ako datoteka ne postoji javlja grešku."w" Otvara tekstualnu datoteku za pisanje u nju."a" Otvara tekstualnu datoteku za dodavanje novih podataka na njen kraj."r+" Otvara tekstualnu datoteku za čitanje i pisanje. Ako ne postoji javlja grešku.

"w+" Otvara tekstualnu datoteku za čitanje i pisanje. Ako datoteka ne postoji kreira je. Ako datoteka postoji, svi podaci iz nje biće izbrisani pre upisivanja novih.

"a+" Otvara tekstualnu datoteku za dodavanje novih podataka na njen kraj. Ako datoteka ne postoji biće kreirana

46

Page 47: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Za pisanje u datoteku koristi se nekoliko funkcija. Najčešće korišćene funkcije su fprintf() i funkcija  fwrite() koja je pogodna za upisivanje blokova podataka.Za čitanje podataka iz datoteke najčešće se koriste funkcije fscanf() i fread() - koja se često koristi u kombinaciji sa strukturama.U programima za rad s datotekama često ćemo naići na deo programskog koda kojim se ispituje da li je datoteka ispravno otvorena. Ako je datoteka deklarisana sa FILE *f; onda taj deo koda izgleda ovako:

if(f==NULL)

{printf("Greska pri otvaranju");exit(1);} Ako je uslov (f==NULL) ispunjen na računaru će se ispisat poruka "Greška pri otvaranju".

 Primer 1: Napišite program koji u radnoj mapi kreira datoteku test1.txt i u nju smešta prvih 100 celih brojeva. (Napomena: nakon izvođenja programa izađite i u radnoj mapi proverite da li imate datoteku test1.txt. Njen sadržaj možete pročitati s programom Blok za pisanje (NotePad))

#include <cstdlib>#include <iostream>using namespace std;int main(){ 

FILE *f;int i;

f=fopen("test1.txt","w");                /*otvaranje datoteke za čitanje i pisanje*/if(f==NULL)                                   /*ispitivanje valjanosti otvaranja datoteke*/{printf("Greska pri otvaranju");exit(1);}

for(i=1;i<=100;i++)                        /*upis podataka u datoteku; for petljom; brojeva od 1-100*/fprintf(f,"%d\n",i);fclose(f);                                     /*zatvaranje datoteke*/

system ("PAUSE"); return 0;}

Primer 2: Napišite program koji će pročitati sadržaj iz datoteke iz prošlog zadatka i ispisati njen sadržaj na monitoru računara.

47

Page 48: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

#include <cstdlib>#include <iostream>using namespace std;int main(){ 

FILE *f;int a;

f=fopen("test1.txt","r");            /*ponovno otvaranje datoteke*/if(f==NULL){printf("Greska pri otvaranju");exit(1);}

while (!feof(f))                        /*citanje iz datoteke - dok nije kraj !feof*/{fscanf(f,"%d\n",&a);printf("\n%d",a);                     /*ispis na monitor računara*/}

fclose(f);                                /*zatvaranje datoteke*/

system ("PAUSE"); return 0;}

Objekti i klase

U novije vreme u konceptu programiranja koriste se objekti i klase. Objekt u realnom svijetu, može biti: automobil ili bicikl, a u programskoj igri lopta ili neki lik. Svaki objekt je definisan stanjem i ponašanjem; na primer, stanje lika u igri može biti: lik trči, skače ili stoji, a ponašanje lika možemo definisati brzinom trčanja i visinom skoka. U programu je objekt opisan varijablama koje mu određuju stanje i metodama koje mu određuju ponašanje. Klasa predstavlja nacrt objekta. Stoga se uvek prvo kreiraju klase na temelju kojih se proizvode objekti. Na primer, kada kreiramo klasu za lik, u igri možemo kreirati više likova koji mogu imati drugačije stanje (npr:neki lik može leteti) i ponašanje (ima brzinu letenja).

Osnovni pojmovi objektnog programiranjai su:- klase- objekti- svojstva- metode i- događaji

(Napomena: sledeći video-zapis je na engleskom jeziku)

http://msdn.microsoft.com/en-us/beginner/cc963989.aspx

48

Page 49: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

U C++u definisanje klasa slično je definisanju struktura u programskom jeziku C, s tim da je ključna reč class, a ne struct. U klasama je također potrebno zadati varijable koje će biti dostupne celom programu. Takve varijable zovemo javne i u C++ se zapisuju s public.

Primer 1: U ovom primeru kreirana je klasa koja se zove Primer i koja sadrži funkciju Ispis().Funkcija Ispis() ispsuje tekst "Ispis teksta na monitor racunara koriscenjem klase Ispis" na monitoru računara.

#include <iostream>using namespace std;

class Primer              /*deklaracija klase koja se zove Primer i koja u sebi sadrži funkciju Ispis()*/{public:  void Ispis()           {  cout << "Ispis teksta na monitor racunara koriscenjem klase Ispis\n" << endl;  }};int main(){Primer test;                    /*deklaracija objekta imena test prema "nacrtu"u klasi Primer*/test.Ispis();                         /*poziv funkcije Ispis() nad objektom test*/

system ("PAUSE");return 0;}

49

Page 50: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

PODSETNIKif - else

if (izraz)

naredba1;

else

naredba2;

Naredba grananja Ako je izraz == true onda se izvršava naredba1 a ako nije onda se izvršava naredba2 else grana je opciona

Primer:

if (mesec == 12) {

godina++;

mesec = 1;

} else

mesec ++;

switch

switch (izraz) {

case v1: niz_naredbi_1;

case v2: niz_naredbi_2;

...

case vN: niz_naredbi_N;

default: niz_naredbi;

}

default - izvršava se kada vrednost izraza nije nijedna od zadatih, nije obavezan Najčešće se svaki niz naredbi završava sa naredbom break;

50

Page 51: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Primer:

switch(getchar()) {

case 'X':

case 'x':

scanf("%d", &x);

break;

case 'Y':

case 'y':

scanf("%d", &y);

break;

default:

printf("Greska");

}

Ciklusi

Kontrolisano ponavljanje naredbe u zavisnosti od nekog uslova. Eksplicitno zavrsavanje ciklusa (naredba break) Ciklusi u jeziku C++ while, do while i for

Ako je uslov ispunjen ulazimo u petlju kada se naredba izvrši opet proveramo uslov da odlucimo da li ćemo opet ući u petlju ili ćemo produziti dalje sa izvršavanjem.

Svaka while petlja ima 0 ili vise iteracija.

while

while (uslov)

naredba;

51

Page 52: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Primeri:

while(n > 0)

printf("%d", n--);

Beskonacna petlja

while (true)

...

do while

do

naredba;

while (uslov);

Prvo se izvrši telo petlje pa se zatim proverava uslov.

Ciklus se ponavalja bar jedan put.

Primer:

do {

x++;

y += 2;

} while(y < x);

for

for(izraz_inicijalizacija; uslov; izraz_korak)

naredba;

1. izraz_inicijalizacija se izvršava jednom pri ulasku u petlju.2. Zatim se proverava uslov i ako je ispunjen ulazi se u petlju ako nije petlja se završava.3. Izršava se telo petlje posle cega se izvršava izraz_korak i ponavlja sve od korak 2.

52

Page 53: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

Kako odrediti maksimum n brojeva ?

int n, max;

scanf("%d", &n);

for (int i = 0; i < n; i++) {

int tren;

scanf("%d", &tren);

if (i == 0)

max = tren;

else if (max < tren)

max = tren;

}

printf("%d", max);

break & continue

break - naredba za izlazak iz ciklusa skače se na prvu naredbu posle ciklusa preskače ostale naredbe u switch-u

continue - naredba za skok na kraj ciklusa preskače ostale naredbe u telu petlje

Primer:

// Prva petlja

while (true) {

i = 4;

break;

i = 3;

53

Page 54: nastavainformatika.files.wordpress.com · Web viewZadaci za samostalni rad: 1. Napiši program koji će zbrajati dva broja pomoću funkcije za sabiranje. 2. Napiši program koji omogućuje

continue;

}

// Druga petlja

while (true) {

i = 3;

continue;

i = 4;

break;

}

Koja petlja ce se izvršavati beskonacno dugo i zašto ?

Resenje: druga

Zadatak za uvežbavanje: Odrediti i ispisati sumu brojeva koji se unose sa tastature sve dok se ne unese 0.

54