You are on page 1of 55

PANEVROPSKI UNIVERZITET APEIRON

FAKULTET POSLOVNE INFORMATIKE

Vanredne studije
Smjer „Poslovna informatika”

Predmet
Viši programski jezici i RAD alati-programiranje u C++

„Rješeni zadaci iz programskog jezika


C++”
(seminarski rad)

Predmetni nastavnik
Prof. dr Zoran Ž. Avramović, dipl.inž.elek.

Student
Danijel Bogdanić
Index br.
157-13/vpi

Banja Luka, avgust 2020.


Sadržaj
1. Uvod.....................................................................................................................................4
2. Struktura programa u C++........................................................................................................5
3. Varijable, konstante i tipovi podataka..................................................................................7
3.1. Varijable.............................................................................................................................7
.1.1. Deklarisanje varijabli 3.................................................................................................7
3.2 Konstante............................................................................................................................7
3.2.1. Doslovne konstante.....................................................................................................7
3.2.2. Definisane konstante (#define)....................................................................................7
3.2.3. Deklarirane konstante (const)......................................................................................8
3.3. Tipovi podataka..................................................................................................................8
4. Operatori...............................................................................................................................9
4.1. Operator dodjeljivanja (=).............................................................................................9
4.2. Aritmetički operatori (+,-,*,˝%,/)..................................................................................9
4.3. Spojeni operatori (+=,-=,*=,/=,%=,>>=,<<=,&=)........................................................9
4.4. Operatori inkrementiranja i dekrementiranja (++, --)...................................................9
4.5. Relacije i operatori poređenja (==,!=,>,<,>=,<=).........................................................9
4.6. Logicki operatori ( !,&&, || ).......................................................................................10
4.7. Uslovni operator (?).....................................................................................................10
5. Zadaci.................................................................................................................................11
Primjer 1. Keramičke pločice..................................................................................................11
Primjer 2. Ispitivanje vrste karaktera......................................................................................12
Primjer 3. Korištenje namespace-a..........................................................................................13
Primjer 4. Suma prvih n neparnih brojeva rekurzivnom funkcijom........................................14
Primjer 5. Heronov obrazac.....................................................................................................15
Primjer 6. Površina kruga......................................................................................................16
Primjer 7. Konverzija u dekadni brojni sistem........................................................................17
Primjer 8. Tablica množenja...................................................................................................19
Primjer 9. Prost broj................................................................................................................20
Primjer 10. Faktorijel broja.....................................................................................................22
Primjer 11. Rekurzija dekadnog broja u binarni.....................................................................23
Primjer 12. Linearna i kvadratna jednačina.............................................................................24
Primjer 13. Savršeni brojevi...................................................................................................25
Primjer 14. 10 slučajnih prirodnih brojeva manjih od 100......................................................26

2
Primjer 15. Sortiranje niza.......................................................................................................27
Primjer 16. Aritmetička sredina niza, minimalni i maksimalni element.................................29
Primjer 17. Fibonačijev niz.....................................................................................................30
Primjer 18. Brojevi iz intervala u obrnutom redoslijedu.........................................................31
Primjer 19. Susjedni članovi najmanjeg i najvećeg člana niza...............................................32
Primjer 20. Sortiranje niza......................................................................................................34
Primjer 21. Najmanji zajednički sadržilac.............................................................................35
Primjer 22. Najveći zajednički djelilac...................................................................................37
Primjer 23. Paskalov trougao.................................................................................................39
Primjer 24. Proizvod matrice sa zadanim skalarom................................................................40
Primjer 25. Sabiranje dva vektora...........................................................................................41
Primjer 26. Uređen vektor.......................................................................................................43
Primjer 27. Generator slučajnih brojeva..................................................................................46
Primjer 28. Transponovana matrica........................................................................................48
Primjer 29. Hanojski stubovi...................................................................................................50
Primjer 30. Naziv unesenog mjeseca i broj dana u tom mjesecu............................................51
6. Literatura.............................................................................................................................54

3
1. Uvod

Objektivno orjentisano programiranje je pojam programiranja kojii se pojavio u trećoj


generaciji programskih jezika, a potpuni razvoj se dešava u četvrtoj generaciji. Princip u
objektivno orjentisanom programiranju je danas prihvaćen od strane informatičara. Postoji
mnogo više programskih jezika koji podržavaju princip objektivno orjentisanog programiranja.
C++ je jedan od najpoznatijih programskih jezika kojeg danas programeri koriste. Programski
jezik C++ osmislio je i razvio Bjarne Stoustrup zajedno sa svojim saradnicima u Bell labaratoriji
1980. god. kao proširenje programskom jeziku C, te mu je originalno ime bilo „ C with classes”.
Jezik je dobio službeni naziv krajem 1983. god. kada je i objavljen prvi priručnik. U oktobru
1985. god. pojavilo se prvo komercijalno izdanje jezika, kao i prvo izdanje knjige sa nazivom
„ C++ Programming language”. Zbog velike potražnjeza objektivno orjentisanim jezicima te
izrazitim sposobnostima, standard za programski jezik C++ prihvaćen je 1998. godine u
standardu ISO/TEC 14882.
C++ programski jezik je programski jezik raličitih narječja, kao što i jezik ima različita
narječja. U C++ narječja ne postoje zato što neko živi u nekom području, već zato što postoji niz
različitih kompajlera1. Svaki od ovih kompajlera je malo drugačiji. Svaki bi trebao ANSI/ISO
standard C++ funkcije, ali ujedno svaki kompajler će imati neke nestandardne funkcije( te
funkcije su slične različitom slengu u različitim djelovima države). Ponekad korištenje
nestandardnih funkcija će stvoriti problem kada pokušate prevesti source kod sa različitim
kompajlerom. U ovom seminarskom radu koristimo standardni C++ kod tako da ne bi trebalo
imati problema sa modernim kompajlerima.

1
Compiler, fonetski: kompajler je računarski program ili niz programa koji transformiše kod jednog programskog
jezika (izvorni kod) u drugi programski jezik (mašinski kod)..

4
2. Struktura programa u C++

Napisaćemo naš prvi program:

// moj prvi program u C++

#include<iostream>
Using namespace std:

Int main( )
{
cout<<< “ Moje ime je Danijel Bogdanic !“;
}

Ovo je jedan od najjednostavnijih programa koji se može napisat u c++, ali i neke od
najosnovnijih stvari koje ima svaki c++ program. Gledaćemo linije koda i objasniti svaku.

//moj prvi program u C++

Ovo je komentar. Sve linije koda koje počinju sa dvije kose linije (//),ili sa kosom linijom
i zvijezdicom(/*) a završava sa zvjezdicom i kosom linijom (*/) su smatrani kao komentari i
nemaju nikakav uticaj na ponašanje programa. Programer ih može koristiti kao kratka
objašnjenja ili proučavanja unutar sourca koda. U ovom slučaju, linija je kratki opis šta je naš
program.

#include<iostream>

Linija koja počinje sa znakom tarabe (#) je predprocesorska naredba. Takve linije nisu
običan kod sa nekim izrazom, već indikator za predprocesor kompajlera. U ovoj
naredbi,#include <iostream> poziva iz predprocesora iostream standardnu biblioteku Najbolji
način da naučimo raditi u nekom programskom jeziku jeste da se počne sa pisanjem programa.
Ova specifična biblioteka uključuje deklaracije standardnih ulazno-izlaznih biblioteka u C++, a
uključena je zbogsvoje funkcionalnosti koja će biti kasnije korištena u programu. Pored ove,
postoje i ostale C++ biblioteke:
- #include <cstdlib> -skup naredbi koji nam omogućuje komunikaciju sa programom
- #include<string>-biblioteka koja sadrži funkcije za rad sa stringovima
- #include<cmath>-biblioteka sa matemetičkim funkcijama

using namespace std;

Svi elementi standardne C++ biblioteke su deklarisani unutar onoga što se zove
namespace, namespace sa imenomstd. Kako bismo pristupili njenoj funkcionalnosti moramo
deklarisati ovaj izraz koji ćemo koristiti. Ova linija koda se jako često upotrebljava u C++
5
programima koji koriste standardne bibloteke, pa će se pored toga dosta koristitii u ostalim
kodovima ovog seminarskog rada.

int main ()

Ova linija predstavlja početak definicije glavne funkcije. Glavna funkcija je mjesto gdje
svi C++ programi počinju svoje izvršavanje, nezavisnood mjesta source koda. Nema veze da li
postoje ostale funkcije sa drugim imenima ispred ili iza naredbe sadržane u okviru ove funkcije,
uvijek će biti prve izvršavane u svakom C++ programu. Iz toga razloga je važno da svi C++
programi imaju main funkciju.

Iza main funkcije slijede par zagrada (). To je iz razloga što je to dekleracija funkcije : u
C++ ono što razlikuje dekleraciju funkcije od ostalih izraza su ovi parametri. Ponekad, ovi
parametri mogu imati listu parametra u okviru njih.

Nakon toga imamo simbol { koji označava početak bloka naredbi.

cout<< „ Moje ime je Danijel Bogdanic !“;}

Ova linija koda je C++ izjava. Izjava je jednostavan ili složeni izraz koji može stvoriti
nekakav efekat. Ova izjava izvodi vizualni efekat u našem prvom programu.

Cout je deklarisan u iostream standardnoj datoteci unutar std namespace i zato moramo
dodati tu naredbu i deklarisati je kao da ćemo je koristiti kao specifičnu nonamespace naredbu u
našem kodu.

return 0;

Return izjava završava main funkciju. Nakon naredbe return može slijediti return kod (u
našem slučaju je to 0. U return kodu 0 za main funkciju obično se interpertrira da je program
radio kako smo očekivali bez grešaka u toku izvođenja. Ovo je najučestaliji način kako završiti
C++ program.
Nakon toga slijedi simbol } koji označava kraj bloka naredbi.

Ostale osnovne naredbe koje omogućavaju pisanje koda su:


- endl, naredba koja označava prelazak u novi red,
- cin>>, naredba omogućava prijem varijable sa tastature,
- system("Pause"), naredba omogućava da program stane i čeka dok se ne pritisne neki
taster,
- return EXIT_SUCCESS, označava kraj programa

6
3. Varijable, konstante i tipovi podataka
3.1. Varijable

U slučaju kada želimo sami napisati funkciju, moramo paziti da nam se ime varijable ne
poklapa sa nekom od ključnih riječiu C++, jer bi u tom slučaju kompailer pomješao sa
standardnimključnim riječima, a te ključne riječi su:
asm, auto, bool, break, case, catch, char, class, 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, ew, operator, private, protectrd, public, register,
reinterpret_cast,return,short, signed, sizeof, staic, static_cast, struct, switch, template, this,
throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile,
wchar_t, while.

Treba pored toga paziti da je C++ „case sensitive“ programerski jezik, te da RESULT
varijabla nije isto što i result varijabla ili Result varijabla. To su 3 različite varijable.

.1.1. Deklarisanje varijabli3

Kako bismo koristili varijablu u C++, moramo ju prvo deklarisati koji će tip podataka
biti.
Sintaksa za deklarisanje nove varijable je pisanje specefikatoraili željenog tipa podataka
(nor.Int, bool, float...) nakon čega slijedi ispravno ime identifikatora. Npr.:

Int a
Floatmojbroj;

Ovo su dvije ispravne deklaracije varijable. Prva deklarira varijablu tipa int sa
indetifikatorom a, druga deklarira varijablu tipa flaot sa indetifikatorom mojbroj. Kada se
varijablea i mojbroj deklariraju mogu se koristiti kasnijeu programu

3.2 Konstante

Konstante su izrazi sa namještenom vrijednošću.

3.2.1. Doslovne konstante

Doslovne konstante izražavaju određenu vrijednost u okviru source koda programa. Npr.,
kada mapišemo: a=5,5 u ovom dijelu koda predstavljadoslovnu konstantu. Doslovne konstante
mogu biti podjeljene u brojne integer, stringove i Booleanove vrijednosti.

3.2.2. Definisane konstante (#define)

7
Možemo sami definisati imena za konstante koje često koristimo bez posezanja neke
biblioteke. Jednostavno koristeći #define predprocesorsku naredbu. Sintaksa je:
#define ime vrijednosti
Npr.
#define PI 3.14159265
Jednom kada su konstante definisane, možemo ih koristiti u ostatku koda

3.2.3. Deklarirane konstante (const)

Sa prefikosom const možemo delarisati konstantu sa specifičnim tipom na isti način kao
što radimo sa varijablom. Npr.:
const int bodovi =290;
Ovako napisane konstante se jednako izvode kao i varijable samo što se njihova
vrijednost ne može mjenjati nakon definisanja.

3.3. Tipovi podataka

Kad programiramo, spremamo varijable u memoriju kompjutera, ali kompjuter mora


znati što mi želimo spremiti u memoriju, kada neće zauzeti jednaki dio memorije spremanja
jednostavnog broja ili nekog velikoga, a i neće biti jednako interpretiran. Memorija je u
računarima organizovana u bitovima. Bajt je najmanja količina menorije koju možemo koristiti u
C++. Bajt može spremati relativno mali broj podataka: jedno slovo ili mali integer (uopšteno,
integer u vrijednosti od 0-255). Dodatno, računar može raditi sa složenim tipovima podataka
nastalih grupisanja više bitova, npr. velikih brojeva ili ne integer brojeva.
Tipovi podataka u C++ su: cher, shor int, int, long int, bool, float, double, long double,
wchae_t.

8
4. Operatori

Sada kada znamo varijable i konstante, možemo početi raditi s njima. Za tu namjenu, C++
koristi operatore. Za razliku od drugih jezika čiji su operatori često ključne riječi, operatori u C+
+ su većinom znakovi koji nisu dio alfabeta nego su dostupni na svim tipkovnicama. Ovo čini
C++ kod kraćim i više internacionalnim, jer traži manje Engleskih riječi, ali zato traži malo više
truda u početku.

4.1. Operator dodjeljivanja (=)

Operator dodjeljivanja dodjeljuje vrijednost nekoj varijabli. Npr: a=5:


U ovom slučaju varijabli a je dodana vrijednost 5.

4.2. Aritmetički operatori (+,-,*,˝%,/)

Petaritmetičkih operacija je podržano u C++, A one su:


+ sabiranje
- oduzimanje
* množenje
/ djeljenje
% moduo

4.3. Spojeni operatori (+=,-=,*=,/=,%=,>>=,<<=,&=)

Kada želimo promijeniti vrijednost varijable izvodeći operaciju vrijednosti trenutno


spremljene u memoriji možemo korisiti spojene operatore. Npr:
Vrijednost *= povećanje ; nam je jednako sa vrijednost = vrijednost + povećanje ;
A-=5; nam je jednako sa a – 5 :

4.4. Operatori inkrementiranja i dekrementiranja (++, --)

Inkrementiranje nekih izraza, operator povećanja (++) i dekrementiranje, operator


smanjenja (--), povećavaju ili smanjuju za 1 vrijednost spremljenu u varijabli. Jednaki su izrazu
+=1. i =1. npr:
C++; c+=1 ; c=c+1; su isti u svojoj funkciji, sva tri izraza povećavaju za 1 vrijednost varijable
c.

4.5. Relacije i operatori poređenja (==,!=,>,<,>=,<=)

Kada upoređujemodva izraza možemo koristiti operatore relacije i poređenja. Rezultat

9
relacione operacije je Boolean vrijednost, koja može biti samo istina ili laž, zavisno o
Booleanovom rezultatu. Možemo i uporediti dva izraza da vidimo da li su jednaki ili je jedan
veći od drugoga. Ovdje su operatori relacije i poređenja koji se mogu koristiti u C++;
== jednako
!= nije jednako
> veće od
< manje od
>= veće ili jednako
<=manje ili jednako

4.6. Logicki operatori ( !,&&, || )

Operator ! (negacija) u C++ izvodi Booleovu operaciju NOT , i jedina stvar koja radi je
da napravi inverznu vrijednost od unešene.
Logički operatori && (logičko I) se koriste kada procjenjujemo 2 izraza da bi dobili
jedanrelacioni rezultat. Operator && predstavlja Booleanov logički operator AND. Ovaj
operator ima za rezultat istinu samo kada su oba rezultata istinita.
Operator || (logiko ILI) predstavlja Booleanov logički operator OR. Ovaj operator ima za
rezultat istinu ako je bar jedan od dva istinita, a za laž samo kada su oba lažna.

4.7. Uslovni operator (?)

Uslovni operator daje vrijednost izrazu vračajući vrijednost u izrazu ako je izrazistinit ili
daje drugu vrijednost ako je izraz lažan. Sintaksa ovog operatora je:
Uslov ? rezultat 1 : rezultat 2
Npr:
7==5 ? 4:3 // vraća vrijednost 3, jer 7 nije jednako 5
7==5+2 ? 4:3 // vraća vrijednost 4, jer je 7 jednako 5+2

10
5. Zadaci

Primjer 1. Keramičke pločice

Napisati program koji izračunava koliko je keramičkih pločica potrebno za popločavanje


bazena čije se dimenzije u metrima unose sa tastature.Dimenzije pločica u centimetrima se
takođe unose sa tastature. Pretpostaviti da su dimenzije zadane tako da je popločavanje uvjek
izvodivo sa cjelim brojem pločica.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int m, n, p, q, r;
cin >> m;
cin >> n;
cin >> p;
cout << "dimenzije bazena: " << m << " " << n << " " << p << endl;
cin >> q;
cin >> r;
cout << "dimenzije plocica: " << q << " " << r << endl;
cout << "br.plocica: " << (10000 * (2 * (m*n + n*p) + m*p)) / (q*r);
_getch();
return 0;
}

Dobijeni rezultat:

11
Primjer 2. Ispitivanje vrste karaktera

Program ilustruje grananje (switch), ispituje se vrsta karaktera.

#include <iostream>
using namespace std;

int main()
{
// Cita se karakter sa standardnog ulaza
char c = getchar();
switch (c)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
printf("Srpski samoglasnik\n");
break;
case 'y':
printf("Engleski samoglasnik\n");
break;
case ',':
case '.':
case ';':
case ':':
printf("Interpunkcijski znak\n");
break;
default:

12
printf("Nesto drugo\n");
break;
}
system("PAUSE");
return 0;
}

Dobijeni rezultat:

Primjer 3. Korištenje namespace-a

#include <iostream>
using namespace std;

//definisanje novog namespace-a


namespace danijel
{
int vrijednost = 5;

//funkcija unutar novog namespace-a


double kvadriraj(double broj, double exp)
{
double rez = 1;
for (int i = 1; i <= exp; ++i)
{
rez = rez * broj;
}

13
return rez;
}
}
namespace igor
{
int vrijednost = 4;
}

int main()
{
double broj, exp;
cout << "unesite broj " << endl;
cin >> broj;
cout << "unesite exponent" << endl;
cin >> exp;
cout << "danijel vrijednost " << danijel::vrijednost << endl;
cout << "igor vrijednost " << igor::vrijednost << endl;

cout << "kvadriraj koristeci " << std::pow(broj, exp) << endl;
//pozivanje funkcije iz
definisanog namespace-a
cout << "kvadriraj " << danijel::kvadriraj(broj, exp) << endl;
system("Pause");
return 0;
}

Dobijeni rezultat:

14
Primjer 4. Suma prvih n neparnih brojeva rekurzivnom funkcijom

Izračunati sumu prvih n neparnih prirodnih brojeva rekurzivnom f-jom.

#include <cstdlib>
#include <iostream>
using namespace std;
long long suman(short n1)
{
if (n1 == 1) return 1;
else return n1 + suman(n1 - 2);
}

int main()
{
short n;
cout << "Unesi prirodan broj ";
cin >> n;
cout << "Suma prvih " << n << " neparnih prirodnih brojeva " << suman(2 * n -
1) << endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

15
Primjer 5. Heronov obrazac

Izračunati površinu trougla po Heronovom obrascu.

#include <iostream>
#include<cmath>
using namespace std;
int main()
{
float a, b, c, p, s; // unos stranica
cout << "Unesite stranicu a! a= ";
cin >> a; cout << endl;
cout << "Unesite stranicu b! b= ";
cin >> b;
cout << endl;
cout << "Unesite stranicu c! c=";
cin >> c; cout << endl; // provjeravamo da li se od unešenih stranica može formirati trougao
if ((a + b)>c>(a - b) && (a + c)>b>(a - c) && (b + c) >a>(b - c))
{ //ako je izraz tačan izvršavaju se nadedbe u okviru ovih zagrada
s = (a + b + c) / 2;
p = sqrt(s*(s - a)*(s - b)*(s - c));
cout << "Povrsina trougla je " << p << endl;
}
else //ako izraz nije tačan, izvršavaju se naredbe iz ovog bloka
{
cout << "Trougao ne moze biti sacinjen od tih stranica" << endl;
} system("PAUSE");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

16
Primjer6. Površina kruga

Načiniti program koji računa obim i površinu kruga. Koristiti konstantu Pi.

// Program za izracunavanje O i P kruga


#include<iostream>
using namespace std;
int main()
{
float r, P, O; //deklarisanje promjenljivih
const float Pi = 3.14; //deklarisanje konstante Pi
cout<<"Program za racunanje obim i povrsine kruga"<<endl;
cout<<"Unesi poluprecnik kruga"<<endl;
cin>>r; //ucitavanje unesene vrijednosti
O=2*r*Pi;
P=r*r*Pi;
cout<<"obim je: "<<O<<endl;
cout<<"Povrsina je: "<<P<<endl;
system("Pause");
return 0;
}

Dobijeni rezultat:

17
Primjer 7. Konverzija u dekadni brojni sistem

Napisati program koji vrši konverziju iz datog brojnog sistema u dekadni.

#include <iostream>
using namespace std;

/* Pomocna funkcija koja izracunava vrednost koju predstavlja karakter u


datoj osnovi
Funkcija vraća -1 ukoliko cifra nije validna.
Npr.
cifra 'B' u osnovi 16 ima vrednost 11
cifra '8' nije validna u osnovi 6 */

int digit_value(char c, int base) {


// Provjeravamo obicne cifre
if (isdigit(c) && c < '0' + base)
return c - '0';

// Provjeravamo slovne cifre za mala slova


if ('a' <= c && c < 'a' + base - 10)
return c - 'a' + 10;

// Provjeravamo slovne cifre za velika slova


if ('A' <= c && c < 'A' + base - 10)
return c - 'A' + 10;
return -1;
}

18
/* Funkcija izracunava vrednost cjelog broja koji je zapisan u datom
nizu karaktera u datoj osnovi. Za izracunavanje se koristi Hornerova šema.*/
int btoi(char s[], int base) {
int sum = 0;

// Obradjuju se karakteri sve dok su cifre


int i, vr;
for (i = 0; (vr = digit_value(s[i], base)) != -1; i++)
sum = base*sum + vr;
return sum;
}
int main() {
char bin[] = "11110000";
char hex[] = "FF";

printf("Dekadna vrednost binarnog broja %s je %d\n", bin, btoi(bin, 2));


printf("Dekadna vrednost heksadekadnog broja %s je %d\n", hex, btoi(hex, 16));
system("PAUSE");
return 0;
}

Dobijeni rezultat:

Primjer 8. Tablica množenja

Napisati program koji izrađuje tablicu množenja bilo kojeg unesenog broja u bilo kojem
intervalu.

19
#include <iostream>
using namespace std;
int main()
{
int k, n, p, broj;
ponovo: cout << "Unesite donju granicu za mnozenje ";
cin >> k;
cout << "Unesite gornju granicu do koje se ispisuje mnozenje ";
cin >> n;
cout << endl;
cout << "Unesite broj sa kojim zelite da mnozite ";
cin >> broj;
if (k>n) //prethodno objašnjeno
{
cout << "donja granica je veca od gornje, pokusajte ponovo";
cout << endl;
goto ponovo;
}
else
{
for (int i = k; i <= n; i++) //pristup intervalu:
{
p = i*broj; //proizvod broja sa tekućim brojem iz intervala
cout << i << " * " << broj << "=" << p; //ispis proizvoda
cout << endl;
p = 1; /*dodjeljivanje proizvodu vrijednost 1 jer sad petlja
opet kreće iz početka samo sa sledećim brojem intervala*/
}
}
system("PAUSE");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

20
Primjer 9. Prost broj

Provjeriti i ispisati da li je broj prost za sve brojeve manje od granice koju zadamo. Broj
je prost ako je djeljiv samo sa 1 i sa samim sobom.

#include <iostream>
#include <math.h> //za računanje korijena broja
using namespace std;
//za svaki broj, provjeravamo sve brojeve manje od
njega,sve do korijena iz broja
bool Provjeri_prost(int broj)
{ //postavimo prekidac koji kaze da je broj prost na true
bool prost=true;
for (int i = 2; i <= sqrt(broj); ++i)
{
//ako je je broj djeljiv sa još nekim drugim brojem,prekidač
je isključen
if (broj % i == 0)
{
prost = false; //izlazimo iz funkcije
return prost;
}
} //vraćamo vrijednost funkcije
return prost;
}
int main()
{

21
int granica;
do
{
cout << "Do kojeg broja zelite ispisate proste brojeve " << endl;
cin >>granica;
}
while (granica <1); //provjeravamo za sve brojeve do granice
for (int i = 1; i < granica;++i )
{
//ako funkcija vrati true, ispisujemo broj.
if (Provjeri_prost(i))
{
cout << i << endl;
}
}
system("PAUSE");
return 0;
}

Dobijeni rezultat:

Primjer 10.Faktorijel broja

Izračunati faktorijel broja n rekurzivnom funkcijom.

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

long double faktorijel(short n1)


{

22
if (n1 == 1) return 1;
else return n1*faktorijel(n1 - 1);
}

int main()
{
short n;
cout << "Unesi broj ciji faktorijel racunamo ";
cin >> n;
cout << n << "! = " << faktorijel(n) << endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

Primjer 11. Rekurzija dekadnog broja u binarni

Pretvoriti dekadni broj a u binarni rekurzivnom funkcijom

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

void dek_u_bin(long long d)


{
int ostatak;

23
if (d <= 1) { cout << d; return; }
ostatak = d % 2;
dek_u_bin(d / 2);
cout << ostatak;
}

int main()
{
long long dekad;
cout << "Unesi dekadni broj ";
cin >> dekad;
dek_u_bin(dekad);
cout << endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

Primjer 12. Linearna i kvadratna jednačina

Napisati program koji treba da ponudi korisniku sljedeće tri opcije:


a) Rješavanje linearne jednačine
b) Rješavanje kvadratne jednačine
c) Kraj programa

#include <iostream>
#include <cmath>
using namespace std;
void trougao(int, char z = '*');

24
int main()
{
int meni();
void linearna();
void kvadratna();
int n;
do{
n = meni();
if (n == 1)linearna();
else if (n == 2)kvadratna();
} while (n != 3);
return 0;
}
int meni(){
int a;
cout << "\nIzaberite:\n"
<< "1)rjesavanje linearne j-ne( unesite 1)\n"
<< "2)rjesavanje kvadratne j-ne( unesite 2)\n"
<< "3)kraj programa( unesite 3)\n";
cin >> a;
while (a<1 || a>3){
cout << "EROR!IZABERITE PONOVO:\n";
cin.clear();
cin.ignore(1000, '\n');
cin >> a;
}
return a;
}
void linearna(){
double a, b;
cout << "Unesite koeficiente lin. j-ne:\n";
cin >> a >> b;
cout << "Rjesenje je:\nx=" << (-b) / a << endl;
}
void kvadratna(){
double a, b, c, d;
cout << "Unesite koeficiente kv. j-ne:\n";
cin >> a >> b >> c;
d = b*b - 4 * a*c;
cout << "Rjesenja su:\n";
if (d >= 0)cout << "x1=" << (-b + sqrt(d)) / (2 * a) << ",\nx2=" << (-b - sqrt(d)) / (2 * a)
<< endl;
else{
d = sqrt(abs(d));
cout << "x1=(" << (-b) / (2 * a) << "," << d / (2 * a) << "),\nx2=(" << (-b) / (2 *
a) << "," << -d / (2 * a) << ")\n";

25
}
}

Dobijeni rezultat:

Primjer 13. Savršeni brojevi

Napisati program koji traži da se sa tastature unese cijeli brojevi a i b, a koji zatim
ispisuje sve savršene brojeve u opsegu od a do b.
Na primjer, 28 je savršen broj: njegovi djelioci su 1, 2, 4, 7 i 14, a 1 + 2 + 4 + 7 + 14 = 28
Kao provjeru ispravnosti programa možete koristiti činjenicu da su jedini savršeni brojevi u
opsegu od 1 do 100 brojevi 6 i 28.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int a, b, s(1);
cout << "Unesi opseg brojeva :\n";
cin >> a >> b;
bool t(true);
a = a + 1;
for (a; a <= b - 1; a++){
for (int i = 2; i <= a - 1; i++)
if ((a%i) == 0)s += i;
if (s == a){ cout << a << " "; t = false; }
s = 1;
}
if (t)cout << "\nNema savrsenih brojeva u zadatom opsegu.";

26
_getch();
return 0;
}

Dobijeni rezultat:

Primjer 14. 10 slučajnih prirodnih brojeva manjih od 100

Napraviti niz od 10 slučajnih prirodnih brojeva manjih od 100. Nađi aritmetičku sredinu
niza i odrediti koji je član niza najbliži aritmetičkoj sredini.

#include <ctime>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a[10], suma = 0, najb;
float arsr, nraz = 1000;
srand(time(NULL));
rand();
for (int i = 0; i<10; i++)
{
a[i] = rand() % 99 + 1;
cout << a[i] << " ";
suma = suma + a[i];
}
arsr = suma / 10.;
27
for (int i = 0; i<10; i++)
if (abs(a[i] - arsr) < nraz) { najb = i; nraz = abs(a[i] - arsr); }
cout << "Aritmeticka sredina je " << arsr << endl;
cout << "Najblizi joj je a[" << najb << "]= " << a[najb] << endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

Primjer 15. Sortiranje niza

Napisati program za sortiranje niza u opadajućem redoslijedu.

#include <iostream>
using namespace std;
int main()
{
int niz[50];
int n, i;
cout << " Koliko clanova ima niz? ";
cin >> n;
for (int i = 0; i<n; i++) //petlja za unos ?lanova
{
cout << "Unesite " << i + 1 << ". clan niza ";
cin >> niz[i];
}
for (int i = 0; i<n - 1; i++)
28
{
for (int j = i + 1; j<n; j++)
if (niz[i]<niz[j])
{
swap(niz[i], niz[j]);
}//zamjena mjesta clanovima niza
}
cout << endl;
for (int i = 0; i<n; i++) //ispis sortiranog niza
{
cout << niz[i];
cout << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

Primjer 16. Aritmetička sredina niza, minimalni i maksimalni element

Učitati niz sa tastature i izračunati aritmetičku sredinu elemenata, i minimalni i


maksimalni element.

#include <iostream>
using namespace std;

int main()
{

29
int a[10], i, suma = 0, min, maks;
for (i = 0; i<10; i++)
scanf_s("%d", &a[i]);
min = maks = a[0];
for (i = 0; i<10; i++)
{
suma += a[i];
min = (a[i] < min) ? a[i] : min;
maks = (a[i] > maks) ? a[i] : maks;
}
printf("Artimeticka sredina je %.2f\n", (float)suma / 10);
printf("Minimalni element %d\n", min);
printf("Maksimalni element %d\n", maks);

system("Pause");
return 0;

Dobijeni rezultat:

Primjer 17. Fibonačijev niz

Program računa vrijednost Fibonačijevog niza ako se učita index niza.Vrijednoast


fibonačijevog niza za učitani index je Fn=Fn-1+Fn-2.

#include <iostream>
using namespace std;
//definisanje funkcije
int fja(int n) //funkcija koja izracunava vrijednost
{

30
if (n <= 1)
{return 1; //vrijednost koju koji funkcija vraca ako je n manji od 0
}
else
{
return ((n - 1) + (n - 2));} //vrijednost koju funkcija vraća za član niza
}
int main() //glavni program
{
int n, f;
cout << "Ucitajte index za koji zelite vrijednost Fibonacijevog niza ";
cin >> n;
cout << "Vrijednost fibonacijevog niza za index " << n << " je " << fja(n);
cout << endl;
system("Pause");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

Primjer 18. Brojevi iz intervala u obrnutom redoslijedu

Načiniti program koji će brojeve iz intervala ispisati u obrnutom redoslijedu.

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

31
int i, k, n;
ponovo:
cout << "Donja granica interval je = ";
cin >> k;
cout << "Gornja granica intervala je = ";
cin >> n;
if (n <= k) //provjera da li je donja granica manja od gornje
{
cout << "Granice nisu validne, pokusajte ponovo" << endl << endl;
goto ponovo;
}
else
{
i = n; //nekom i dodjeljuje se vrijednost gornje granice
do //naredba do znači da se petlja unutar vitičastih zagrada ponavlja dok ne bude
zadovoljen uslov izraz u while naredbi
{
cout << i; //ispisuje i, odnosno u prvom prolazu gornju granicu
(zadnjibroj)
--i; //i se smanjuje za 1 jer je interval ure?en niz po rastućem redoslijedu
cout << endl;
}
while (i >= k); //petlja se vrti dok se oduzimanjem godnjeg broja za 1 ne dođe do
toga da je jednak donjoj granici
}
system("Pause");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

32
Primjer 19. Susjedni članovi najmanjeg i najvećeg člana niza

Učitati niz X od n članova i naći susjedne članove najmanjeg(najvećeg) člana niza.

#include <iostream>
using namespace std;

int main()
{
int iBrojClanova;
cout << "Unesite broj clanova niza";
cin >> iBrojClanova;
int iNiz[100];
//Unos clanova niza
for (int i = 0; i<iBrojClanova; i++)
{
cout << i << " clan niza";
cin >> iNiz[i];
}
//Ispis unesenog niza
cout << "Uneseni niz: " << endl;
for (int i = 0; i<iBrojClanova; i++)
{
cout << iNiz[i] << " ";
}
int nmax = 0, imax = 0;
for (int i = 0; i<iBrojClanova; i++)
{
if (iNiz[i]>nmax)
33
{
nmax = iNiz[i];
imax = i;
}
}
if (imax == 0)
{
cout << "Najveci clan niza je: " << iNiz[0] << endl;
cout << "Ovako izgledaju susjedni clanovi " << "nema " << iNiz[0] << " " <<
iNiz[1] << endl;
}
else if (imax == iBrojClanova - 1)
{
cout << "Najveci clan niza je: " << nmax << endl;
cout << "Ovako izgledaju susjedni clanovi " << iNiz[imax - 1] << " " << nmax <<
" nema" << endl;
}
else
{
cout << "Najveci clan niza je: " << nmax << endl;
cout << "Ovako izgledaju susjedni clanovi " << iNiz[imax - 1] << " " << nmax <<
" " << iNiz[imax + 1] << endl;
}
system("Pause");
return 0;
}

Dobijeni rezultat:

34
Primjer 20. Sortiranje niza

Načiniti program koji učitani niz elemenata sortira u nerastućem redoslijedu. Sort je rješen
metodom “buble” sort-a.

#include <iostream>
using namespace std;
int N, i,j,pom;
int X[100];
int main()
{
cout<<"Unesi granicnu vrijednost niza <100: ";
cin>>N;
if (N<0)
{
cout << "broj clanova niza mora biti >0!";
system("Pause");
return EXIT_SUCCESS;
}for (i = 0; i<N; i++) //unos clanova niza
{
cout<<"X["<<i<<"]=";
cin>>X[i];
}
for (i=0;i<N;i++) //postupak sortiranja
{
for(j=0;j<N-i;j++)
{
if(X[j] >= X[j + 1])
{
//zamjena mjesta, veci clan se "gura" na kraj
pom = X[j];
X[j] = X[j + 1];
X[j + 1] = pom;}
}
}
cout<<"Sortirani niz je:"<<endl;
for (i=0;i<N;i++)
{
cout<<"X["<<i<<"]="<<X[i]<<endl;
}
system("Pause");
return 0;
}

Dobijeni rezultat:

35
Primjer 21.Najmanji zajednički sadržilac

Načiniti program koji izračunava najmanji zajednički sadžilac dva prirodna broja. Problem se
rješava sa dvije do while petlje koje su ugniježđene jedna u drugu.

#include <iostream>
using namespace std;
//Deklarisem potrebne promjenjive
int PrviBroj, DrugiBroj, Sadrzilac, Brojac;
int OstatakPrvi, OstatakDrugi;
int main()
{
cout << "Unesi vrijednost prvog broja ";
cin >> PrviBroj;
cout << "Unesi vrijednost drugog broja ";
cin >> DrugiBroj;
if ((PrviBroj <= 0) || (DrugiBroj <= 0))
{
cout << "Program funkcionise za cijele brojeve vece od 0";
system("Pause");
return EXIT_SUCCESS;
}
Sadrzilac = 1;
//Postavljam pocetnu vrijednost Brojaca i sadrzioca
Brojac=1;
/*Brojac je kontrolna promjenjiva a sadrzilac akumulativna//dvije do petlje,
prva ima zadatak da odbrojava brojac od 2 do najveceg prostogfaktora
najmanjeg zajednickog sadrzioca*/

36
do
{
Brojac = Brojac + 1; //ako ne stavim brojac na 2 upadam u beskonacnu
petlju
OstatakPrvi=PrviBroj%Brojac;
OstatakDrugi=DrugiBroj%Brojac; //racunam ostatak dijeljenja sa
aktivnim brojacem
do
{
//imam 3 opcije 1.oba broja djljiva
if((OstatakPrvi==0) && (OstatakDrugi==0))
{
PrviBroj=PrviBroj/Brojac;
DrugiBroj=DrugiBroj/Brojac;
Sadrzilac=Sadrzilac*Brojac;
OstatakPrvi=PrviBroj%Brojac;
OstatakDrugi=DrugiBroj%Brojac;
} //2.prvi broj djeljiv
if (OstatakPrvi == 0)
{
PrviBroj = PrviBroj / Brojac;
Sadrzilac = Sadrzilac*Brojac;
OstatakPrvi = PrviBroj%Brojac;
} //3.drugi broj
djeljiv
if (OstatakDrugi==0)
{
DrugiBroj=DrugiBroj/Brojac;
Sadrzilac=Sadrzilac*Brojac;
OstatakDrugi=DrugiBroj%Brojac;
}
}
while ((OstatakPrvi==0) || (OstatakDrugi==0));
//unutrasnja while zavrsava kad su oba
ostatka razlicita od nule
}
while ((PrviBroj!=1) || (DrugiBroj!=1));
//spoljna while zavrsava kad su oba broja
svedena na 1-podijeljena do kraja
//ispisujem akumulirani Sadrzilac
cout << "Najmanji zajednicki sadrzilac za brojeve je: " << Sadrzilac;

system("Pause");
return EXIT_SUCCESS;
}

37
Dobijeni rezultat:

Primjer 22.Najveći zajednički djelilac

Načiniti program koji izračunava najveći zajednički djelilac dva prirodna broja. Problem je
riješen Euklidovim algoritmom.

#include <iostream>
using namespace std;
int main()
{
//deklaracija promjenjivih i unos
int Broj1, Broj2,
Ostatak; cout << "Unesi brojeve ciji najveci zajednicki djelilac zelis (2 broja): "
<< endl;
cout << "Prvi broj: ";
cin >> Broj1;
cout << "Drugi broj: ";
cin >> Broj2;
if ((Broj1 == 0) || (Broj2 == 0)) //brojevi moraju biti razliciti od 0
{
cout << "Brojevi moraju biti razliciti od 0";
system("Pause");
return EXIT_SUCCESS;
//nasilni izlazak iz programa
}
else
{

38
//dijelim cjelobrojno (ostatak) veci sa manjim, dok ostatak nije nula, poslednji
ostatak je rjesenje
do
{
if (Broj1>Broj2)
{
Ostatak = Broj1%Broj2;
Broj1 = Broj2;
Broj2 = Ostatak;
}
else{
Ostatak = Broj2;
Broj2 = Broj1;
Broj1 = Ostatak;
}
} while (Broj2 != 0);
}
//ispisujem rjesenje
cout << "Najveci zajedniski djelilac je: " << Broj1 << endl;
system("Pause");
return EXIT_SUCCESS;
}

Dobijeni rezultat:

39
Primjer 23. Paskalov trougao

Za prirodan broj n unesen sa tastature ispisuje na ekranu elemente Pascalovog trougla visine n.

#include <iostream>
using namespace std;
int Paskal(int x,int y)
{
int a,b;
if((x==1) || (x==y))
return 1;
a=Paskal(x-1, y-1); //red iznad, kolona prije
b=Paskal(x, y-1);//red iznad, tekuca kolona
return a+b;
}
int main()
{
int n,i,j;
cout<<"Unesi vrijednost: "<<endl;
cin>>n;
for (j=1;j<=n;j++){cout<<endl;
for(i=1;i<=j;i++)
cout << " " << Paskal(i, j);
}
system("Pause");
return 0;
}

Dobijeni rezultat:

40
Primjer 24. Proizvod matrice sa zadanim skalarom

Načiniti program koji izračunava proizvod unesene matrice sa zadanim skalarom.

#include <iostream>
using namespace std;
int A[10][10], i, j, M, N, Broj;
int main()
{
cout << "Unesi broj redova matrice: ";
cin >> M; cout << "Unesi broj kolona matrice: ";
cin >> N; //Unos matrice
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
cout << "A[" << i << "," << j << "]=";
cin >> A[i][j];
}
}
cout << endl;
//Ispisi matricu-lijepo
for (i = 0; i < M; i++)
{
cout << endl;
for (j = 0; j < N; j++)
{
cout << " " << A[i][j];
}
}
cout << endl;
cout << "Unesi broj sa kojim zelis pomnoziti matricu: ";
cin >> Broj; cout << "Proizvod unesene matrice i datog broja je: " << endl;
for (i = 0; i < M; i++) //izracunavanje i ispis proizvoda
{
cout << endl;
for (j = 0; j < N; j++)
{
cout << " " << A[i][j] * Broj;
}
}
cout << endl;
system("Pause");
return 0;
}
41
Dobijeni rezultat:

Primjer 25. Sabiranje dva vektora

Napisati program za sabiranje dva vektora.

#include <iostream>
#include <vector>
using namespace std;
void Ispisi_vektor(vector<int> vektor, char oznaka)
{
cout <<"Vektor " << oznaka << ": ";
for (int i = 0;
i < vektor.size(); ++i)
{
cout << vektor[i] << " ";
}
cout << endl;
} //oznaka je potrebna da bismo informisali korisnika

42
vector<int> Unesi_vektor(int broj, char oznaka_vektora)
{
cout << "Unesite elemente vektora "<< oznaka_vektora << endl;
vector<int> vektor(broj);
for (int i = 0; i < broj; ++i)
{
cin >> vektor[i];
}
return vektor;
}
vector<int> Saberi_vektore(vector<int> a, vector<int> b)
{
vector<int> rezultat_vektor;
for (int i = 0; i < a.size(); ++i)
{
rezultat_vektor.push_back(a[i] + b[i]);
}
return rezultat_vektor;
}
int main()
{
int broj; cout << "Unesite broj elemenata vektora a i b" << endl;
cin >> broj;
vector<int>a, b, r;
a = Unesi_vektor(broj, 'a');
b = Unesi_vektor(broj, 'b');
r = Saberi_vektore(a, b);

43
Ispisi_vektor(r, 'r');
system("PAUSE");
return 0;
}

Dobijeni rezultat:

Primjer 26. Uređen vektor

Data su dva uređena vektora. Umetanjem članova kraćeg vektora među članove dužeg
formirati novi uređen vektor.
Zadatak je urađen za bilo koja dva vektora koje unesete putem tastature i bilo koje
dužine.

#include<iostream>
#include<vector>
using namespace std;
vector<int> unos(int broj, char ZnakVektora)
{
vector<int> vrati(broj);
cout << endl << "Unesite elemente vektora " << ZnakVektora << ":" << endl;
for(int i=0; i<broj; i++)
cin >> vrati[i];

44
return vrati;
}
void ispis(vector<int> a)
{
cout << "Novi vektor je: ";
for(int i=0; i<a.size(); i++)
{
if (i == a.size()-1)
cout << a[i];
else
cout << a[i] << ", ";
}
cout << endl;
}
vector<int> umetni(vector<int> a, vector<int> b)
{
int brojac=0;
vector<int> c;
if (a[a.size()-1]>=b[b.size()-1]){
for(int i = 0; i < a.size(); i++)
{
if (brojac<b.size())
{
for (int j=brojac;j<b.size();j++)
{
if (a[i]<b[j])
{
c.push_back(a[i]);
break;
}
else
{
c.push_back(b[j]);
brojac++;
}
if (brojac==b.size())
c.push_back(a[i]);
}
}
else
c.push_back(a[i]);
}
return c;
}
else

45
{
for(int i = 0; i < b.size(); i++)
{
if (brojac<a.size())
{
for (int j=brojac;j<a.size();j++)
{
if (b[i]<a[j])
{
c.push_back(b[i]);
break;
}
else
{
c.push_back(a[j]);
brojac++;
}
if (brojac==a.size())
c.push_back(b[i]);
}
}
else
c.push_back(b[i]);
}
return c;
}
}
int main()
{
int brojA, brojB;
cout << "Koliko ce elemenata imati vektor A: ";
cin >> brojA;
cout << "Koliko ce elemenata imati vektor B: ";
cin >> brojB;
vector <int> a = unos(brojA, 'A');
vector <int> b = unos(brojB, 'B');
vector <int> c = umetni(a, b);
ispis(c);
cout << endl;
system("Pause");
return 0;
}

Dobijeni rezultat:

46
Primjer 27. Generator slučajnih brojeva

Prikazati histogramom generator slucajnih brojeva.

#include <iostream>
#include<cstdlib> // potrebno za rand
#include<ctime> // potrebno za time
#include<iomanip> //potrebno za setw

using namespace std;

int Slucajan_broj(int granica)


{

//dobicemo broj od 0-9, dodamo 1


dadobijemo broj od 1-10
return rand() % granica + 1;

int main()
{
//za seed koristimo trenutno vrijeme
potrebno da bi svaki put bio drugi broj
srand(time(NULL));

//koristimo niz od 11 clanova, u niz[1]


smjestamo koliko puta je bio 1. U niz[2] koliko puta je bio 2...
int niz[11] = { 0 }, ukupno_brojeva = 100, granica = 10, slucajan_rezultat = 0;

47
//ispisujemo od ukupnog broja brojeva(100)
do 1
do
{
// ako je broj dva, ----//vrijednost elementa
moj_niz[2]
//se poveca za 1
//moglo se koristiti i moj_niz[1] za broj dva.

slucajan_rezultat = Slucajan_broj(granica);
niz[slucajan_rezultat] = niz[slucajan_rezultat] + 1;
} while (--ukupno_brojeva);

//Ispis histograma. Setw koristimo za sirinu


ispisa.
//Ispisujemo vrijednosti 10-1
do
{
cout << "Broj " << setw(2) << granica
<< " se ponavlja (" << setw(2) << niz[granica] << ") puta ";

//petlja for se vrti koliki je broj u niz[1].


//U sljedecem krugu niz[2]...
for (int i = 1; i <= niz[granica]; ++i)
{
cout << "*";
}

cout << endl;


} while (--granica);
system("PAUSE");
return 0;

Dobijeni rezultat:

48
Primjer 28. Transponovana matrica

Načiniti program koji izračunava i ispisuje transponovanu matricu učitane matrice.

#include <iostream>
using namespace std;
//Deklaracija promjenjivih
int A[10][10], B[10][10], i, j, N,M;
void unesi(int M,int N)
{
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
cout << "A[" << i << "," << j << "]=";
cin >> A[i][j];
}
}
}
void ispisi(int p_A[10][10], int M, int N)
{
for (i = 0; i<M; i++)
{
cout << endl;
for (j = 0; j<N; j++)
{
cout << " " << p_A[i][j];
}
}
}

49
//transponovanje
void transponuj(int M, int N)
{
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
B[j][i]=A[i][j];}}}
//glavni programint
int main()
{
cout<<"Unesi broj redova matrice A: ";
cin>>M;
cout<<"Unesi broj kolona matrice A: ";
cin>>N;
unesi(M,N);
cout<<"Originalna matrica A izgleda ovako: ";
ispisi(A,M,N)
;cout<<endl;
transponuj(M,N);
cout<<"Transponovana matrica A izgleda ovako: ";
cout<<endl;
ispisi(B,N,M);
cout<<endl;
cout<<endl;
system("Pause");
return 0;
}

Dobijeni rezultat:

50
Primjer 29. Hanojski stubovi

Na jednom od tri vertikalna stuba složena je piramida od N diskova različitih


poluprečnika ( što je disk na većem položaju poluprečnik mu je manji). Zadatak je da se svi
diskovi premjeste na jedan od dva slobodna stuba tako da oni budu u istom poretku kao i na
prvom stubu. Pri tome treba voditii računa o sledećim pravilima:
a) dozvoljeno je premještati samo jedan po jedan disk,
b) prilikom premještanja nije dozvoljeno da disk sa većim bude iznad diska sa manjim
prečnikom.
Načiniti program koji određuje redoslijed premještanja diskova.
Program prikazuje korake potrebne za premještanje diskova sa stuba na stub. Stubovi su
obilježeni brojevima 1, 2 i 3.

#include <iostream>
using namespace std;
int main()
{
int broj_diskova,br;
void prebaci(int,int,int,int);
cout<<"Unesi broj diskova: ";
cin>>broj_diskova;
prebaci(broj_diskova,1,2,3);
system("pause");
return 0;
}
void prebaci(int n,int sa,int na, int pom) /*deklarisanje promjenljivih,n-broj diskova, "sa"-sa
stuba na stub, "na"-na stub, "pom"-pomocni stub*/
{
if(n>0)
{
prebaci(n-1,sa,pom,na); //prebaci disk sa stuba "sa" na stub "na"
cout<<sa<<" -> "<<na<<endl;
prebaci(n-1,pom,na,sa);
}
}

Dobijeni rezultat:

51
Primjer 30. Naziv unesenog mjeseca i broj dana u tom mjesecu

Načiniti program koji za unesenu godinu intervala 1901- 2099 i brojčanu oznaku mjeseca
1-12 ispisuje naziv mjeseca i broj dana u tom mjesecu. Provjeriti da li je godina prestupna.
Problem se rješacva sa dvije switch naredbe. Prestupne godine su sve djeljive sa 4, ako nisu
djeljive sa 100, kojima se dodaju one koje su djeljive sa 400. Program provjerava da li je godina
djeljiva sa 4, da ne bi komplikovali sa razgranatom strukturom.

#include <iostream>
using namespace std;
int main ()
{
int godina, mjesec,privremena; //deklaracija promjenljivih
cout << "Unesi godinu iz intervala 1901-2099: ";
cin >>godina;
cout << "Unesi mjesec predstavljen brojcanom vrijednoscu 1-12: ";
cin >>mjesec;
if ((godina>=1901) && (godina<=2099)) //kontrola unosa godine
{
switch (mjesec) //swich za broj dana u mjesecu
{
case 1:
case 3:
case 5:
case 7:
case 8:
switch (mjesec)
{
case 4:cout << "April";
break;
52
case 6:cout << "Juni";
break;
case 9:cout << "Septembar";
break;
case 11:cout << "Novembar";
break;
}
cout << " ima 30 dana!";
system("Pause");
break;
case 2:
cout << "Februar";
if (godina % 4 == 0) //provjeravam da li je prestupna
{
cout<<" prestupna je godina i ima 29 dana!";
system("Pause");
}
else
{
cout <<" ima 28 dana!";
system("Pause");
}
break;
default: cout<<" Oznaka mjeseca mora biti iz intervala 1-12";
system("Pause");
break;
}
}
else
{
cout<<"Unesui godinu iz navedenog intervala!";
system("Pause");
}
return 0;
}

Dobijeni rezultat:

53
54
6. Literatura

1. Dragan Milićev, Objektivno orjentisano programiranje u realnom vreemenu na jeziku C+


+ , Beograd 1966
2. Prof Dr Ranko Popović i Zona Kostić, C++ programski jezik sa riješenim zadacima,
univerzitet Singidunum, Beograd 2010
3. Laslo Kraus, Programski jeyik C++ sa rješenim zadacima, Akademska misao, Beograd
2004
4. Prof. dr Zoran Ž. Avramović, dipl.inž.elek. zadaci sa predavanja
5. Internet tutorijali
6.
http://cppapeiron.forums.net.bz/
http://www.znanje.org/knjige/computer/cpp/n/230cpp/230.htm
http://www.znanje.org/knjige/computer/cpp/n/240cpp/240_rzd2_c.php
http://poincare.matf.bg.ac.rs/~filip//list-c-src.pl?dir=p1m/c-src

55

You might also like