Professional Documents
Culture Documents
Vanredne studije
Smjer „Poslovna informatika”
Predmet
Viši programski jezici i RAD alati-programiranje u C++
Predmetni nastavnik
Prof. dr Zoran Ž. Avramović, dipl.inž.elek.
Student
Danijel Bogdanić
Index br.
157-13/vpi
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
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++
#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.
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
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.
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.
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.
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
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.
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
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.
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.
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
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.
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
#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
#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:
#include <iostream>
using namespace std;
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
#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
#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.
Dobijeni rezultat:
17
Primjer 7. Konverzija u dekadni brojni sistem
#include <iostream>
using namespace std;
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;
Dobijeni rezultat:
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:
#include <cstdlib>
#include <iostream>
using namespace std;
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:
#include <cstdlib>
#include <iostream>
using namespace std;
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:
#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:
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:
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:
#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:
#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:
#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:
#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
#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:
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
#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:
#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:
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
#include <iostream>
#include<cstdlib> // potrebno za rand
#include<ctime> // potrebno za time
#include<iomanip> //potrebno za setw
int main()
{
//za seed koristimo trenutno vrijeme
potrebno da bi svaki put bio drugi broj
srand(time(NULL));
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);
Dobijeni rezultat:
48
Primjer 28. Transponovana matrica
#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
#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
55