PANEVROPSKI UNIVERZITET APEIRON FAKULTET POSLOVNE INFORMATIKE Redovne studije Smjer „Poslovna informatika” Predmet Viši programski jezici i RAD alati – programiranje u C++ „Riješeni primjeri iz C++” (seminarski rad) Predmetni nastavnik Prof. dr Zoran Ž. Avramović, dipl.inž.elek.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
1. Načiniti program na C++-u za nalaženje prvih n prostih brojeva.
Poseban dodatak: n=20
#include <iostream>
using namespace std;
bool prost(int broj);
int main() {
int i=0, n; // brojac i moramo postaviti na 0 (moze zapravo i na 2 jer 0 i 1 znamo da nisu prosti, ali MORAMO mu dati neku pocetnu vrijednost)
cout << "Prvih koliko prostih brojeva? ";
cin >> n;
for(i=0; n; i++) { // vrti petlju počevši od i=0 i uvečavaj i za 1 sve dok je n razlicit od 0 (jer ga umanjujemo pa ce doc na nulu)
if (prost(i)) { // provjeri uz pomoc funkcije je li i prost
cout << i << " ";// ako je, ispisi ga
n--; // i umanji n za 1
}
}
system("PAUSE");
}
bool prost(int broj) {
if (broj<2) return false; // ako je broj manji od 2, preskacemo ga jer je 2 prvi prosti broj;
bool prost=true; // za pocetak pretpostavimo da je broj prost i pokusajmo dokazati drugacije
int brojac;
for (brojac=2; brojac<broj; brojac++) {
if (broj%brojac==0) {
prost=false; // ako je djeljiv s nekim brojem u intervalu [2, broj> onda to znaci da nije prost
}
}
return prost;
}
bool je tip podataka koji može biti true ili false, što nam je odlično za ovakav tip provjere jer ili je, ili nije prost. Dakle uz main funkciju ćemo imati još jednu. Trebat će nam neki brojač n koji govori koliko prostih brojeva ispisujemo i još 1 brojač, nazovimo ga i koji ćemo uvećavat za 1 i provjeravat jeli prost sve dok ne nađemo n prostih brojeva.
Panevropski univerzitet APEIRON Page 9
Riješeni primjeri C++
2. Načiniti program za C++-u za nalaženje svih prostih brojeva manjih od zadatog prirodnog broja n.
Poseban podatak n=100
#include <stdio.h>
#include <stdlib.h>
int prost(unsigned int broj)
{
int i;
for(i=2; i<broj; i++)
if(broj % i == 0)
return 0;
return 1;
}
int main()
{
int i;
for(i=1; i<=100; i++)
if(prost(i) == 1)
printf("%d\t", i);
system("PAUSE");
return 0;
}
3. Načiniti program u C++-u za pronalaženje svih prostih brojeva između dva zadata prirodna broja m i n.
Posebni dodaci m=10 n=100
#include <iostream>
#include <climits>
#include <vector>
using namespace std;
int main()
{
int n = SHRT_MAX, i, k;
int *arr = new int[n];
vector<int> p_nums;
int lower_bound, upper_bound;
cout << "m: "; cin >> lower_bound;
cout << "n: "; cin >> upper_bound;
Panevropski univerzitet APEIRON Page 10
Riješeni primjeri C++
for( i = 0; i < n; ++i )
arr[ i ] = i + 2;
for( i = 0; i < n; ++i )
{
if( arr[ i ] != 0 )
{
for( k = i + 1; k < n; ++k )
{
if( arr[ k ] != 0 )
{
if( arr[ k ] % arr[ i ] == 0 )
arr[k] = 0;
}
}
}
}
for( i = lower_bound; i <= upper_bound; ++i )
if( arr[ i ] != 0 && arr[ i ] <= upper_bound && arr[ i ] >= lower_bound)
p_nums.push_back( arr[ i ] );
for( i = 0; i < p_nums.size() ; ++i )
cout << p_nums[ i ] << endl;
cout << endl;
}
4. Načiniti program u C++-u za ručno množenje dva višecifrena prirodna broja.
#include <iostream>
#include <string>
using namespace std;
class math {
private:
static int multiply_int( int x, int y, int z )
{
if ( y > 1 )
{
x += z;
y--;
return multiply_int( x, y, z );
Panevropski univerzitet APEIRON Page 11
Riješeni primjeri C++
}
else return ( x );
}
public:
static int multiply_int( int x, int y )
{
int z = x;
if ( x != 0 && x != 1 && x != (-1) )
{
if ( y == 1 ) return x;
if ( y > 1 )
{
y--;
x += z;
return ( multiply_int( x, y, z ) );
}
else if ( y < (-1) )
{
y = ( 0 - y );
int a = multiply_int( x, y );
a = ( 0 - a );
return ( a );
}
else if ( y == -1 )
{
x = 0 - x;
return ( x );
}
else return 0;
}
else if ( x == 1 ) return y;
else if ( x == (-1) )
{
y = 0 - y;
return ( y );
}
else return 0;
}
};
Panevropski univerzitet APEIRON Page 12
Riješeni primjeri C++
int main()
{
int num1, num2;
cout << "n: "; cin >> num1;
cout << "m: "; cin >> num2;
cout << "n * m = " << math::multiply_int(num1, num2);
cout << endl;
system("PAUSE");
return 0;
}
5. Načiniti program za točno dijeljenje dva višecifrena broja na zadan broj decimala.
( Sugestija oponašati ručno dijeljenje brojeva )
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double n, m;
cout << "n: "; cin >> n;
cout << "m: "; cin >> m;
cout << setprecision (9) << n / m << endl;
cout << endl;
return 0;
}
6. Načiniti program na C++-u za izračunavanje binomnih koeficijenata.
#include <iostream>
using namespace std;
int binom( int n, int k )
{
int polje[ n ][ n ];
for( int i = 0; i <= n ; ++i )
{
for( int j = 0; j <= i ; ++j )
{
Panevropski univerzitet APEIRON Page 13
Riješeni primjeri C++
if( j == 0 || j == i ) polje[ i ][ j ] = 1;
else polje[ i ][ j ] = polje[ i - 1 ][ j - 1 ] + polje[ i - 1 ][ j ];
}
}
return polje[ n ][ k ];
}
int main()
{
int n, k;
// uvjet: n > k > 0
cout << "n: "; cin >> n;
cout << "k: "; cin >> k;
cout << "binom(" << n << "," << k << ") = " << binom(n, k) << endl;
return 0;
}
7. Načiniti program na C++-u za nalaženje NZD dva prirodna broja.
#include <iostream>
using namespace std;
int nzd( int a, int b )
{
int tmp;
while ( a > 0 )
{
if ( a < b )
{
tmp = a;
a = b;
b = tmp;
}
a -= b;
}
return b;
}
int main()
{
int n, m;
Panevropski univerzitet APEIRON Page 14
Riješeni primjeri C++
cout << "n: "; cin >> n;
cout << "m: "; cin >> m;
cout << "NZD(" << n << "," << m << ") = " << nzd(n, m) << endl;
return 0;
}
8. Načiniti program na C++-u za konvertiranje dekadnog broja u binarni (cijeli,racionalni).
#include <iostream>
using namespace std;
void binary( int number ) {
int remainder;
if( number <= 1 )
{
cout << number;
return;
}
remainder = number % 2;
binary(number >> 1);
cout << remainder;
}
int main()
{
int n; cout << "n: "; cin >> n; binary( n ); cout << endl; return 0;
}
9. Načiniti program na C++-u za konvertiranje binarnog broja u dekadni ( cijeli,racionalni).
12. Načiniti program na C++-u za ispitivanje Paskalovog trougla.
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
vector< vector< int > > pascal( int n )
{
vector< vector< int > > V( n, vector< int >( ) );
V[0].push_back(1);
V[0].push_back(0);
for ( int i( 1 ); i < n; ++i )
{
Panevropski univerzitet APEIRON Page 17
Riješeni primjeri C++
V[ i ].push_back( 1 );
for ( int j( 1 ); j < i + 1; ++j )
{
V[ i ].push_back( V[ i - 1][ j ] + V[ i - 1 ][ j - 1 ] );
}
V[ i ].push_back( 0 );
}
for( int i( 0 ); i < n; ++i )
{
V[ i ].resize( V[ i ].size( ) - 1 );
}
for ( int i( 0 ); i < V.size( ); ++i )
{
for ( int j( 0 ); j < V[ i ].size( ); ++j )
{
cout << setw( 5 ) << V[ i ][ j ];
}
cout << endl;
}
return V;
}
int main( )
{
int n; cout << "n: "; while ( !(cin>>n) ) { cin.clear(); cin.ignore(1000,'\n'); cout << "err! pokusaj ponovo. trazi se cijeli broj."; cin >> n; }
vector< vector< int > > arr; arr = pascal( n );
return 0;
}
Panevropski univerzitet APEIRON Page 18
Riješeni primjeri C++
3. Numerički zadaci
1. Načiniti program na C++-u za nalaženje nule funkcije zadate funkcije jedne nezavisno promjenjive metodom sečice, u zadatom intervalu a,b u kome se nalazi jedinstvena nula i to sa traženom točnošću sa kojom se nula nalazi.
Posebni podaci: donja granica intervala a=1, gornja granica intervala b=5 i tražena točnost epsilon ε=0,001 za funkciju y=f(x)=
#include <iostream>
#include <cmath>
using namespace std;
int main( )
{
double m, r, i, xi, xi1;
const double EPSILON = .001;
xi = 1.0;
xi1 = 0.0;
cout << "r: "; cin >> r;
cout << "i: "; cin >> i;
m = i - 1;
while( abs( xi1 - xi ) >= EPSILON )
{
xi1 = xi;
xi = xi + ( (-1) * pow( xi, i ) + r ) / ( i * (pow( xi, m ) ));
}
cout << " answer: " << xi << endl;
system("pause");
return 0;
}
2. Načiniti program na C++-u za nalaženje nule funkcije zadate funkcije jedne nezavisno promjenjive metodom polovljenja intervala, u zadatom intervalu a,b u kome se nalazi jedinstvena nula i to sa traženom točnošću sa kojom se nula nalazi.
Posebni podaci: donja granica intervala a=1, gornja granica intervala b=5, i tražena točnost epsilon ε=0,001 za funkciju y=f(x)=
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
double f( double x = 0 )
{
Panevropski univerzitet APEIRON Page 19
Riješeni primjeri C++
return ( x * x * x ) + ( 6 * x * x ) + ( 12 * x ) + 8;
1. Načiniti program na C++-u za nalaženje zbira dva zadata polinoma P(x) i Q (x), stepena m i n,retrospektivno.
Posebni podaci:m=4, n=3,
P(x)=
Q(x)=
2. Načiniti program na C++-u za nalaženje razlike dva zadata polinoma P(x) i Q(x), stepena m i n, retrospektivno.
Posebni podaci:m=4, n=3,
P(x)=
Q(x)=
3. Načiniti program na C++-u za nalaženje proizvoda dva zadata polinoma P(x) i Q(x),stepena m i n, retrospektivno.
Posebni podaci:m=4, n=3,
P(x)=
Q(x)=
4. Načiniti program na C++-u za nalaženje količnika dva zadata polinoma P(x) i Q(x),stepena m i n, retrospektivno.
Posebni podaci:m=4, n=3,
P(x)=
Q(x)=
5. Načiniti program na C++-u za nalaženje izvoda funkcije y=f(x) zadate u formi polinoma stepena n.
Posebni podaci:n=5, y=f(x)=
6. Načiniti program na C++-u za nalaženje k-tog izvoda polinoma stepena n.
Posebni podaci: n=3,k=1,P(x)=
7. Načiniti program na C++-u za nalaženje integrala polinoma stepena n.
Posebni podaci: n=2,P(x)=
8. Načiniti program na C++-u za nalaženje vrijednosti polinoma stepena n u datoj točki x.
( Sugestija: isprogramirati Heronov obrazac ).
Posebni podaci: n=4,x=1, P(x)=
Rješenje sam napravio ovako. U poly.h datoteci ti se nalazi definicija klase polinom. Definicija klase znaci da smo tamo definirali tipove podataka za metode (funkcije unutar klase) i atribute (varijable unutar klase). I sad imaš u poly.cpp, implementaciju svake metode koju smo definirali u poly.h, znaci ako u polinom klasi imamo definiranu metodu poly::integrate(), onda
Panevropski univerzitet APEIRON Page 27
Riješeni primjeri C++
ćemo u datoteci poly.cpp opisat sto ta metoda radi,znači napisat ćemo funkciju poly::integrate() { ... opis sto ta funkcija radi ... }. tu možeš primijetiti ovo 'poly::' to ti označava da metoda integrate() pripada klasi poly. Znaci ovo gledaš kao funkciju koja pripada(agregirana je) nekome(tj.) nečemu, u ovom slučaju klasi poly. E i dok tako fino agregiraš sve funkcije u jednu klasu, znaci imaš jedan veliki nacrt kuće, onda odeš u main funkciju i kažeš tamo u main funkciji ajd im ti izgradu 'kuću' prema tom nacrtu koji sam definirao i to u mainu ti izgleda ovako:
poly varijab( n );
E sad tu znači 'poly' označava tip podataka, 'varijab' ti označava varijablu (handle sa kojim radiš) i ovaj n u zagradama označava stupanj polinoma (jer smo tako definirali u nacrtu klase poly).Sad kad si definirao svoj polinom 'varijab', nad njim možeš zgodno radit neke operacije koje smo definirali unutar klase, npr:
varijab.integrate( );
U ovom slučaju ce varijab polinom biti integriran, drugim riječima objekt varijab ce pozvat onu funkciju poly::integrate( ) i izvršit algoritam integriranja. Također u klasi imaš overloadane operatore(+, -, *, /)..sto to znaci? Pa pošto smo definirali svoju klasu, za nju želimo i definirat neke operacije koje nam služe za rad sa polinomom npr, ako definiraš dva polinoma, npr:
poly p1;
poly p2;
overloadani operatori(zapravo poseban tip funkcije unutar klase) znače da možemo jednostavno napravit zbrajanje, oduzimanje, množenje, itd., primjer: