Programski jazik C++ PISI Funkcii
1
Obrazoven centar „PISI“
+ 46 230-560, + 32 380-418 [email protected], www.pisi.com.mk, www.makedonski.mk
Objektno Orientirano programirawe
Zbirka re{eni zada~i
C++
- ZA SITE NASOKI VO SREDNOTO OBRAZOVANIE - Za 1 god. fakultet
С О Д Р Ж И Н А Рбр Тема Страна
1 Funkcii 2 2 Klasi 82
Programski jazik C++ PISI Funkcii
2
1. Funkcii 1. Da se napi{e programa vo programskiot jazik C++ so koja }e se presmeta sumata 1k+2k+3k+...nk kade {to n i k se vnesuvaat preku tastatura. Sekoj od stepenite da se presmetuva so funkcija. Re{enie:
Vlezni promenlivi Izlezni promenlivi
n kraj na intervalot
sum vkupnata suma k stepen
i broja~ za intervalot
stepen(int x,int k) funkcija za presmetuvawe na x^k (x na stepen k)
#include <iostream> using namespace std; long stepen(int x,int k) { int i; long suma=1; for(i=0; i<k; i++) suma*=x; return suma; } int main() { int n,k,i; long sum=0; cout<<"Vnesete ja poslednata osnova: "; cin>>n; cout<<"Vnesete go stepenot : "; cin>>k; cout<<endl;
Programski jazik C++ PISI Funkcii
3
for(i=1;i<=n;i++) sum+=stepen(i,k); cout<<"Vkupnata suma iznesuva : "<<sum<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete ja poslednata osnova : 7 Vnesete go stepenot: 3 Programata pe~ati: Vkupnata suma iznesuva 784
Programski jazik C++ PISI Funkcii
4
2. Da se napi{e programa vo programskiot jazik C++ so koja }e se najdat i izbrojat site broevi vo daden interval koi se delivi so svoite cifri, osven nula. Da se napi{e funkcija za opredeluvawe na delivosta na broj so svoite cifri. Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot
sum broja~ za broevite so baranoto svojstvo
rez pomo{na promenliva
i broja~ za intervalot
dellivo(int k) funkcija za opredeluvawe dali brojot k e deliv so svoite cifri
#include <iostream> using namespace std; int dellivo(int k) { int pom=k, deliv=1, c; while(pom>0) { c=pom%10; if(c!=0) { if(k%c!=0) { deliv=0; break; } } pom/=10; } return deliv; } int main() {
Programski jazik C++ PISI Funkcii
5
int pocetok, kraj, i, rez, sum=0; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj; cout<<endl<<"Vo intervalot od "<<pocetok<<" do "<<kraj<<" delivi so svoite cifri se slednite broevi :"<<endl; for(i=pocetok; i<=kraj; i++) { rez=dellivo(i); if(rez==1) { cout<<i<<" "; sum++; } } if(sum==0) cout<<endl<<"Nema takvi broevi vo toj interval"<<endl; else cout<<endl<<"Vkupno takvi broevi ima "<<sum<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 15 Vnesete go krajot na intervalot : 25 Programata pe~ati: Vo intervalot od 15 do 25 delivi so svoite cifri se slednite broevi : 15 20 22 24 Vkupno takvi broevi ima 4
Programski jazik C++ PISI Funkcii
6
3. Da se napi{e programa vo programskiot jazik C++ so koja }e se najdat i izbrojat site broevi palindromi vo daden interval. Da se napi{e funkcija za opredeluvawe na sprotivniot broj na dadeniot. Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj
po~etok i kraj na intervalot
sum broja~ za broevite palindromi
s sprotiven broj na dadeniot
i broja~ za intervalot
sprotiven (int k)
funkcija za opredeluvawe na sprotivniot broj na dadeniot.
#include <iostream> using namespace std; long sprotiven(int k) { long pom=k, p=0; int c; while(pom>0) { c=pom%10; p=p*10+c; pom/=10; } return p; } int main() { long pocetok, kraj, i, s; int sum=0; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj;
Programski jazik C++ PISI Funkcii
7
cout<<endl<<"Vo intervalot od "<<pocetok<<" do "<<kraj<<" palindromi se slednite broevi :"<<endl; for(i=pocetok; i<=kraj; i++) { s=sprotiven(i); if(s==i) { cout<<i<<" "; sum++; } } if(sum==0) cout<<endl<<"Nema palindromi vo dadeniot interval"<<endl; else cout<<endl<<"Vkupno palindromi vo toj interval ima "<<sum<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 100 Vnesete go krajot na intervalot : 200 Programata pe~ati: Vo intervalot od 100 do 200 palindromi se slednite broevi : 101 111 121 131 141 151 161 171 181 191 Vkupno palindromi vo toj interval ima 10
Programski jazik C++ PISI Funkcii
8
4. Da se napi{e programa vo programskiot jazik C++ so koja }e se najdat i izbrojat site prosti broevi vo daden interval . Da se napi{e funkcija za opredeluvawe dali dadeniot broj e prost. Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot
sum broja~ za prostite broevi
pom pomo{na promenliva
i broja~ za intervalot
prost(int k) funkcija za opredeluvawe dali dadeniot broj e prost
#include <iostream> using namespace std; bool prost(int k) { int pom=k, i; bool dali=true; for(i=2; i<=pom/2; i++) { if((pom%i)==0) { dali=false; break; } } return dali; } int main() { int pocetok, kraj, i, sum=0; bool pom; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok;
Programski jazik C++ PISI Funkcii
9
cout<<"Vnesete go krajot na intervalot : "; cin>>kraj; cout<<endl<<"Vo intervalot od "<<pocetok<<" do "<<kraj<<" prosti se slednite broevi :"<<endl; for(i=pocetok; i<=kraj; i++) { pom=prost(i); if(pom) { cout<<i<<" "; sum++; } } if(sum==0) cout<<endl<<"Nema prosti broevi vo dadeniot interval"<<endl; else cout<<endl<<"Vkupno prosti broevi vo toj interval ima "<<sum<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 10 Vnesete go krajot na intervalot : 30 Programata pe~ati: Vo intervalot od 10 do 30 prosti se slednite broevi : 11 13 17 19 23 29 Vkupno prosti broevi vo toj interval ima 6
Programski jazik C++ PISI Funkcii
10
5. Da se napi{e programa vo programskiot jazik C++ so koja }e se najdat i izbrojat site parovi broevi od daden interval ~ij{to zbir e sprotiven broj od nivnata razlika. Da se napi{e funkcija za opredeluvawe na sprotivniot broj na dadeniot. Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot
sum broja~ za baranite parovi broevi
s sprotivniot broj na daden broj
i, j broja~i za intervalot
sprotiven (int k)
funkcija za opredeluvawe na sprotivniot broj na dadeniot.
#include <iostream> using namespace std; int sprotiven(int k) { int pom=k, p=0, c; while(pom>0) { c=pom%10; p=p*10+c; pom/=10; } return p; } int main() { int pocetok, kraj, i, j, s, sum=0; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj; cout<<endl<<"Vo intervalot od "<<pocetok<<" do "<<kraj<<" broevi sto go zadovoluvaat uslovot se :"<<endl;
Programski jazik C++ PISI Funkcii
11
for(i=pocetok; i<=kraj; i++) { for(j=i; j<=kraj; j++) { s=sprotiven(i*j); if(s==(i+j)) { cout<<i<<" i "<<j<<" : "<<i<<"+"<<j<<"="<<i+j<<" i "<<i<<"*"<<j<<"="<<i*j<<endl; sum++; } } } if(sum==0) cout<<"Nema takvi parovi vo dadeniot interval"<<endl; else cout<<"Vkupno takvi parovi vo toj interval ima "<<sum<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 1000 Vnesete go krajot na intervalot : 5000 Programata pe~ati: Vo intervalot od 1000 do 5000 broevi {to go zadovoluvaat uslovot se : 1320 i 4125 : 1320+4125=5445 i 1320*1425=5445000 1400 i 3725 : 1400+3725=5125 i 1400*3725=5215000 2235 i 2400 : 2235+2400=4635 i 2235*2400=5364000 Vkupno takvi parovi vo toj interval ima 3
Programski jazik C++ PISI Funkcii
12
6. Da se napi{e programa vo programskiot jazik C++ so koja }e se najdat site broevi vo daden interval {to se ednakvi na zbirot od kubovite na svoite cifri, proizvodot od kubovite na svoite cifri, ili pak, zbirot od zbirot od kubovite na svoite cifri i proizvodot od kubovite na svoite cifri. Da se napi{at funkcii za opredeluvawe na zbirot od kubovite na cifrite i proizvodot od kubovite na cifrite na daden broj. Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot
sum broja~ za baranite broevi
s pomo{na promenliva
i broja~ za intervalot
zbir(int k) funkcija za nao|awe na zbirot od kubovite na cifrite na daden broj
pecatiZbir(int k) funkcija za pe~atewe na zbirot od kubovite na cifrite na daden broj
proizvod(int k) funkcija za nao|awe na proizvodot od kubovite na cifrite na daden broj
pecatiProizvod(int k) funkcija za pe~atewe na proizvodot od kubovite na cifrite na daden broj
#include <iostream> using namespace std; int zbir(int k) { int pom=k, z=0, cifra; while(pom>0) { cifra=pom%10; z+=cifra*cifra*cifra; pom/=10; }
Programski jazik C++ PISI Funkcii
13
return z; } void pecatiZbir(int k) { int pom=k, cifra; while(pom>0) { cifra=pom%10; cout<<cifra<<"*"<<cifra<<"*"<<cifra<<"+"; pom/=10; } cout<<"0"; } int proizvod(int k) { int pom=k, p=1, cifra; while(pom>0) { cifra=pom%10; p*=cifra*cifra*cifra; pom/=10; } return p; } void pecatiProizvod(int k) { int pom=k, cifra; while(pom>0) { cifra=pom%10; cout<<"("<<cifra<<"*"<<cifra<<"*"<<cifra<<")"<<"*"; pom/=10; } cout<<"1"; } int main() { int pocetok, kraj, i, s, sum=0; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj;
Programski jazik C++ PISI Funkcii
14
cout<<"\nBroevi ednakvi na zbirot od kubovite na cifrite : "; for(i=pocetok; i<=kraj; i++) { s=zbir(i); if(s==i) { cout<<endl<<i<<" = "; pecatiZbir(i); sum++; } } if(sum==0) cout<<"\nNema takvi broevi vo dadeniot interval \n"<<endl; else cout<<"\nVkupno takvi broevi vo toj interval ima "<<sum<<endl; sum=0; cout<<"\nBroevi ednakvi na proizvodot od kubovite na cifrite : "; for(i=pocetok; i<=kraj; i++) { s=proizvod(i); if(s==i) { cout<<endl<<i<<" = "; pecatiProizvod(i); sum++; } } if(sum==0) cout<<"\nNema takvi broevi vo dadeniot interval"<<endl; else cout<<"\nVkupno takvi broevi vo toj interval ima "<<sum<<endl; sum=0; cout<<"\nBroevi ednakvi na zbirot od prethodnite dve sumi : "; for(i=pocetok; i<=kraj; i++) { s=zbir(i)+proizvod(i); if(s==i) { cout<<endl<<i<<" = "; pecatiZbir(i); cout<<" + "; pecatiProizvod(i);
Programski jazik C++ PISI Funkcii
15
sum++; } } if(sum==0) cout<<"\nNema takvi broevi vo dadeniot interval"<<endl; else cout<<"\nVkupno takvi broevi vo toj interval ima "<<sum<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 100 Vnesete go krajot na intervalot : 400 Programata pe~ati: Broevi ednakvi na zbirot od kubovite na cifrite : 153 = 3*3*3+5*5*5+1*1*1+0 370 = 0*0*0+7*7*7+3*3*3+0 371 = 1*1*1+7*7*7+3*3*3+0 Vkupno takvi broevi vo toj interval ima 3 Broevi ednakvi na proizvodot od kubovite na cifrite : Nema takvi broevi vo dadeniot interval Broevi ednakvi na zbirot od prethodnite dve sumi : 370 = 0*0*0+7*7*7+3*3*3+0 Vkupno takvi broevi vo toj interval ima 1
Programski jazik C++ PISI Funkcii
16
7. Da se napi{e programa vo programskiot jazik C++ so koja }e se pronajdat site Armstrongovi broevi vo zadaden interval. Armstrongovi broevi se broevi za koi va`i:
nnnn
n
kcbakabc .
Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot
sum broja~ za baranite broevi
brCif, cifra, pom pomo{ni promenlivi
i, j broja~i za intervalite
zbir zbir od stepenite na cifrite
stepen(int n,int k) funkcija za nao|awe na n^k (n na stepen k)
brojCifri(int n) funkcija za nao|awe na brojot na cifri na daden broj
#include<iostream> using namespace std; long stepen(int n,int k) { long pom=1; int i; for(i=1; i<=k; i++) pom*=n; return pom; } int brojCifri(int n) { int br=0,pom=n; while(pom>0) {
Programski jazik C++ PISI Funkcii
17
br++; pom/=10; } return br; } int main() { int pocetok, kraj, i, j, brCif, cifra, pom, sum=0; long zbir; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj; cout<<endl<<"Vo intervalot od "<<pocetok<<" do "<<kraj<<" Armstrongovi se slednite broevi :"<<endl; for(i=pocetok; i<=kraj; i++) { brCif=brojCifri(i); pom=i; zbir=0; for(j=1; j<=brCif; j++) { cifra=pom%10; zbir+=stepen(cifra, brCif); pom/=10; } if(zbir==i) { cout<<i<<" "; sum++; } } if(sum==0) cout<<endl<<"Nema Armstrongovi broevi vo dadeniot interval"<<endl; else cout<<endl<<"Vkupno Armstrongovi broevi vo toj interval ima "<<sum<<endl; return 0; }
Programski jazik C++ PISI Funkcii
18
_______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 1000 Vnesete go krajot na intervalot : 10000 Programata pe~ati: Vo intervalot od 1000 do 10000 Armstrongovi se slednite broevi : 1634 8208 9474 Vkupno Armstrongovi broevi vo toj interval ima 3
Programski jazik C++ PISI Funkcii
19
8. Da se napi{e programa vo programskiot jazik C++, koja vo daden interval go nao|a onoj broj ~ij{to zbir na deliteli e maksimalen. Da se napi{e funkcija za nao|awe na zbirot na delitelite na daden broj.
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot max
brojot so najgolem zbir na deliteli
s zbir od deliteli na daden broj
maxzbir zbirot od delitelite i broja~ za
intervalot
sumaDeliteli(int k) funkcija za nao|awe na zbirot na delitelite na daden broj
#include <iostream> using namespace std; int sumaDeliteli(int k) { int pom=k, i, sum=0; for(i=1; i<=pom; i++) { if((pom%i)==0) sum+=i; } return sum; } int main() { int pocetok, kraj, i, s, max, maxzbir; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj; max=pocetok; maxzbir=sumaDeliteli(pocetok); for(i=pocetok+1; i<=kraj; i++) { s=sumaDeliteli(i);
Programski jazik C++ PISI Funkcii
20
if(s>maxzbir) { maxzbir=s; max=i; } } cout<<"\nVo intervalot od "<<pocetok<<" do "<<kraj<<" najgolem zbir na deliteli ima "<<max<<endl; cout<<"Zbirot na negovite deliteli e "<<maxzbir<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 100 Vnesete go krajot na intervalot : 500 Programata pe~ati: Vo intervalot od 100 do 500 najgolem zbir na deliteli ima 480 Zbirot na negovite deliteli e 1512
Programski jazik C++ PISI Funkcii
21
9. Da se napi{e programa vo programskiot jazik C++ so koja }e se ispe~atat site sovr{eni broevi od daden interval. Sovr{eni broevi se broevite koi se ednakvi na zbirot od nivnite deliteli, vklu~uvaj}i go i brojot 1. Da se napi{e funkcija za nao|awe na zbirot na delitelite na daden broj. Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot
sum broja~ za sovr{enite broevi
s zbir od deliteli na daden broj
i broja~ za intervalot
sumaDeliteli(int k) funkcija za nao|awe na zbirot na delitelite na daden broj
pecati(int k) funkcija za pe~atewe na delitelite na daden broj
#include <iostream> using namespace std; int sumaDeliteli(int k) { int pom=k, i, sum=0; for(i=1; i<=pom/2; i++) { if((pom%i)==0) sum+=i; } return sum; } void pecati(int k) { int pom=k, i; cout<<k<<" = 1"; for(i=2; i<=pom/2; i++) { if((pom%i)==0) cout<<"+"<<i;
Programski jazik C++ PISI Funkcii
22
} cout<<endl; } int main() { int pocetok, kraj, i, s, sum=0; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj; cout<<endl<<"Vo intervalot od "<<pocetok<<" do "<<kraj<<" sovrseni broevi se :"<<endl; for(i=pocetok; i<=kraj; i++) { s=sumaDeliteli(i); if(s==i) { pecati(i); sum++; } } if(sum==0) cout<<"Nema sovrseni broevi vo dadeniot interval \n"<<endl; else cout<<"Vkupno sovrseni broevi vo toj interval ima "<<sum<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 1 Vnesete go krajot na intervalot : 500 Programata pe~ati: Vo intervalot od 1 do 500 sovr{eni broevi se : 6 = 1+2+3 28 = 1+2+4+7+14 496 = 1+2+4+8+16+31+62+124+248 Vkupno sove{eni broevi vo toj interval ima 3
Programski jazik C++ PISI Funkcii
23
10. Da se napi{e programa vo programskiot jazik C++ za
re{avawe na kvadratnata ravenka 02 cxbxa . Da se napi{e funkcija za nao|awe na re{enijata. Re{enie:
Vlezni promenlivi Izlezni promenlivi
a,b,c koeficienti na ravenkata
x1, x2
re{enija na ravenkata; ili dvata realni re{enija ili realniot i imaginarniot del
dali indikator na vidot na re{enijata
ravenka(float a, float b, float c, float *x1, float *x2, int *dali)
funkcija za nao|awe na re{enijata na kvadratnata ravenka
#include<iostream> #include<math.h> using namespace std; void ravenka(float a, float b, float c, float *x1, float *x2, int *dali) { float d=b*b-4*a*c; if (d>=0) { *x1=(-b-sqrt(d))/(2*a); *x2=(-b+sqrt(d))/(2*a); *dali=1; } else { *x1=-b/(2*a); *x2=sqrt((-1)*d)/(2*a); *dali=0; } } int main() { float a,b,c; float x1, x2; int dali;
Programski jazik C++ PISI Funkcii
24
do { cout<<"Vneste go koeficientot 'a' pred x^2 (a!=0) : "; cin>>a; } while(a==0); cout<<"Vneste go koeficientot 'b' pred x : "; cin>>b; cout<<"Vneste go slobodniot clen 'c' : "; cin>>c; ravenka(a,b,c,&x1,&x2,&dali); if(dali==1) cout<<"\nRavenkata ima realni resenija : x1="<<x1<<" i x2="<<x2<<endl; else { cout<<"\nRavenkata ima imaginarni resenija :"<<endl; cout<<"x1="<<x1<<"+i*"<<x2<<" i x2="<<x1<<"-i*"<< x2<<endl; } return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go koeficientot ’a’ pred x^2 (a!=0) : 1 Vnesete go koeficientot ’b’ pred x: -5 Vnesete go slobodniot ~len ’c’ : 6 Programata pe~ati: Ravenkata ima realni re{enija : x1=2 i x2=3
Programski jazik C++ PISI Funkcii
25
11. Da se napi{e programa vo programskiot jazik C++ so koja }e se presmeta najmaliot broj na banknoti od po 500, 50 i 10 denari so koi mo`e da se dobie dadena suma na pari. Re{enie:
Vlezni promenlivi Izlezni promenlivi
suma
sumata koja treba da se dobie so banknotite
petsto, pedeset, deset,
ostatok
brojot na banknoti od po 500, 50 i 10 denari i ostatokot vo moneti
banknoti(int s, int *petsto, int *pedeset,
int *deset)
funkcija za nao|awe na brojot na banknoti od po 500, 50 i 10 denari za dobivawe na baranata suma
#include<iostream> using namespace std; int banknoti(int s, int *petsto, int *pedeset, int *deset) { int suma=s; *petsto=*pedeset=*deset=0; while(suma>=500) { (*petsto)++; suma-=500; } while(suma>=50) { (*pedeset)++; suma-=50; } while(suma>=10) { (*deset)++; suma-=10; } return suma; } int main() { int suma, petsto, pedeset, deset, ostatok;
Programski jazik C++ PISI Funkcii
26
do { cout<<"Vneste ja sumata za koja ke se opredeluva (suma>0) : "; cin>>suma; } while (suma<=0); ostatok=banknoti(suma, &petsto, &pedeset, &deset); cout<<"\nSumata "<<suma<<" moze da se dobie so :\n"; cout<<petsto<<" banknoti od po 500 denari plus \n"; cout<<pedeset<<" banknoti od po 50 denari plus \n"; cout<<deset<<" banknoti od po 10 denari \n"; if(ostatok>0) cout<<"i moneti so vkupna vrednost od "<<ostatok<<" denari.\n"; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete ja sumata za koja }e se opredeluva (suma>=0) : 3435 Programata pe~ati: Sumata 3435 mo`e da se dobie so : 6 banknoti od po 500 denari plus 8 banknoti od po 50 denari plus 3 banknoti od po 10 denari i moneti so vkupna vrednost od 5 denari.
Programski jazik C++ PISI Funkcii
27
12. Da se napi{e programa vo programskiot jazik C++ za kratewe na dropka so dadeni broitel i imenitel. Da se iskoristi funkcija za NZD na dva broja.
Vlezni promenlivi Izlezni promenlivi
broitel, imenitel
broitelot i imenitelot
maxDelitel NZD na broitelot i imenitelot
nzd(int m,int n) funkcija za nao|awe NZD na dva broja
#include<iostream> #include<math.h> using namespace std; int nzd(int m,int n) { if (n==0) return m; else return(nzd(n,m%n)); } int main() { int broitel,imenitel,maxDelitel; cout<<"Vnesete go broitelot na dropkata : "; cin>>broitel; cout<<"Vnesete go imenitelot na dropkata : "; cin>>imenitel; maxDelitel=nzd(abs(broitel),abs(imenitel)); cout<<"Ja vnesovte dropkata "<<broitel<<"/"<<imenitel<<endl; broitel/=maxDelitel; imenitel/=maxDelitel; cout<<"Skratenata dropka e "<<broitel<<"/"<<imenitel<<endl; return 0; }
Programski jazik C++ PISI Funkcii
28
_______________________________________________________ Test primer: VLEZ: Vnesete go broitelot na dropkata : 42 Vnesete go imenitelot na dropkata : 72 Programata pe~ati: Ja vnesovte dropkata 42/72 Skratenata dropka e 7/12
Programski jazik C++ PISI Funkcii
29
13. Da se napi{e programa vo programskiot jazik C++ so koja }e se izbroi kolku elementi od dadena niza imaat paren, a kolku neparen broj na cifri. Re{enie:
Vlezni promenlivi Izlezni promenlivi
niza[20] niza od celi broevi
parni, neparni
broj na elementi so paren i neparen broj na cifri
n broj na elementi od nizata
i pomo{na proemenliva
brojCifri (int n)
funkcija za opredeluvawe na brojot na cifri na daden broj
#include<iostream> using namespace std; int brojCifri(int n) { int br=0,pom=n; while(pom>0) { br++; pom/=10; } return br; } int main() { int niza[20], i, n, parni=0, neparni=0; cout<<"Kolku elementi ke ima nizata : "; cin>>n; cout<<"Vnesete gi elementite od nizata :\n"; for(i=0; i<n; i++) { cout<<"n["<<i<<"] = "; cin>>niza[i]; } for(i=0;i<n;i++)
Programski jazik C++ PISI Funkcii
30
{ if(brojCifri(niza[i])%2==0) parni++; else neparni++; } cout<<"Vnesenata niza e :\n"; for(i=0; i<n; i++) { cout<<"n["<<i<<"] = "<<niza[i]<<" "; } cout<<"\nOd vnesenite elementi, "<<parni<<" elementi se so paren broj na cifri"; cout<<"\na "<<neparni<<" elementi se so neparen broj na cifri.\n"; return 0; } _______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata : 5 Vnesete gi elementite od nizata : n[0]=2386 n[1]=417 n[2]=3571 n[3]=29 n[4]=3 Programata pe~ati: Vnesenata niza e : n[0] = 2386 n[1] = 417 n[2] = 3571 n[3] = 29 n[4] = 3 Od vnesenite elementi, 3 elementi se so paren broj na cifri, a 2 elementi se so neparen broj na cifri.
Programski jazik C++ PISI Funkcii
31
14. Da se napi{e programa vo programskiot jazik C++ so koja na parnite pozicii vo edna niza }e se zapi{at obratnite broevi na elementite, a na neparnite pozicii }e se zapi{at kvadratite na elementite. Re{enie:
Vlezni promenlivi Izlezni promenlivi
niza[20] niza od celi broevi
n broj na elementi vo nizata
i broja~ za nizata
sprotiven(int k) funkcija koja go presmetuva obratniot broj na daden brojot k
#include<iostream> using namespace std; int sprotiven(int k) { int pom=k, p=0; int c; while(pom>0) { c=pom%10; p=p*10+c; pom/=10; } return p; } int main() { int niza[20], i, n; cout<<"Kolku elementi ke ima nizata : "; cin>>n; cout<<"Vnesete gi elementite od nizata :\n"; for(i=0; i<n; i++) { cout<<"n["<<i<<"] = "; cin>>niza[i];
Programski jazik C++ PISI Funkcii
32
} cout<<"\nVnesenata niza e :\n"; for(i=0; i<n; i++) cout<<"n["<<i<<"] = "<<niza[i]<<" "; for(i=0; i<n; i++) { if(i%2==0) niza[i]=sprotiven(niza[i]); else niza[i]=niza[i]*niza[i]; } cout<<"\nNovodobienata niza e:\n"; for(i=0;i<n;i++) cout<<"n["<<i<<"] = "<<niza[i]<<" "; return 0; } _______________________________________________________ Test primer: VLEZ: Kolku elementi }e ima nizata : 6 Vnesete gi elementite od nizata : n[0]=24 n[1]=7 n[2]=351 n[3]=14 n[4]=9151 n[5]=25 Programata pe~ati: Vnesenata niza e : n[0] = 24 n[1] = 7 n[2] = 351 n[3] = 14 n[4] = 9151 n[5]=25 Novodobienata niza e : n[0] = 42 n[1] = 49 n[2] = 153 n[3] = 196 n[4] = 1519 n[5]=625
Programski jazik C++ PISI Funkcii
33
15. Da se napi{e programa vo programskiot jazik C++ so koja }e se presmeta NZS na elementite od dadena niza. Da se iskoristi funkcija za nao|awe na NZS na dva broja. Re{enie:
Vlezni promenlivi Izlezni promenlivi
niza[20] niza od celi broevi
n broj na elementi vo nizata
i broja~ za nizata
NZS (int m,int n) funkcija koja nao|a NZS na dva broja
#include<iostream> using namespace std; int NZS(int m,int n) { int pom,j; pom=1; j=2; do { while(m%j==0 || n%j==0) { if(m%j==0) m/=j; if(n%j==0) n/=j; pom*=j; } j++; } while(m!=1 || n!=1); return pom; } int main()
Programski jazik C++ PISI Funkcii
34
{ int niza[20], i, n, nzs; cout<<"Kolku elementi ke ima nizata? "; cin>>n; cout<<"Vnesete gi elementite od nizata :\n"; for(i=0; i<n; i++) { cout<<"n["<<i<<"] = "; cin>>niza[i]; } nzs=NZS(niza[0],niza[1]); for(i=2;i<n;i++) nzs=NZS(nzs,niza[i]); cout<<"\nVnesenata niza e :\n"; for(i=0; i<n; i++) cout<<"n["<<i<<"] = "<<niza[i]<<" "; cout<<"\nNZS za elementite od nizata e "<<nzs<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Kolku elementi }e ima nizata? 4 Vnesete gi elementite od nizata : n[0]=5 n[1]=8 n[2]=12 n[3]=9 Programata pe~ati: Vnesenata niza e : n[0] = 5 n[1] = 8 n[2] = 12 n[3] = 9 NZS za elementite od nizata e 360
Programski jazik C++ PISI Funkcii
35
16. Da se napi{e programa vo programskiot jazik C++ so koja }e se presmeta NZD na elementite od dadena niza. Da se iskoristi funkcija za nao|awe na NZD na dva broja. Re{enie:
Vlezni promenlivi Izlezni promenlivi
niza[20] niza od celi broevi
n broj na elementi vo nizata
i broja~ za nizata
NZD (int m,int n) funkcija koja nao|a NZD na dva broja
#include<iostream> using namespace std; int NZD(int m,int n) { if (n==0) return m; else return(NZD(n,m%n)); } int main() { int niza[20], i, n, nzd; cout<<"Kolku elementi ke ima nizata : "; cin>>n; cout<<"Vnesete gi elementite od nizata :\n"; for(i=0; i<n; i++) { cout<<"n["<<i<<"] = "; cin>>niza[i]; } nzd=NZD(niza[0],niza[1]); for(i=2; i<n; i++) {
Programski jazik C++ PISI Funkcii
36
nzd=NZD(nzd,niza[i]); if(nzd==1) break; } cout<<"\nVnesenata niza e :\n"; for(i=0; i<n; i++) cout<<"n["<<i<<"] = "<<niza[i]<<" "; cout<<"\nNZD za elementite od nizata e "<<nzd<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Kolku elementi }e ima nizata : 4 Vnesete gi elementite od nizata : n[0]=15 n[1]=24 n[2]=36 n[3]=45 Programata pe~ati: Vnesenata niza e : n[0] = 15 n[1] = 24 n[2] = 36 n[3] = 45 NZD za elementite od nizata e 3
Programski jazik C++ PISI Funkcii
37
17. Da se napi{e programa vo programskiot jazik C++ so koja }e se stepenuva dadena niza na k-ti stepen. Da se iskoristi funkcija za stepenuvawe na eden broj. Re{enie:
Vlezni promenlivi Izlezni promenlivi
niza[20] niza od celi broevi
n broj na elementi vo nizata
st stepen na koj }e se stepenuva nizata
i broja~ za nizata
stepen (int n,int k) funkcija za nao|awe na n^k (n na stepen k)
#include<iostream> using namespace std; int stepen(int n,int k) { int pom=1, i; for(i=1; i<=k; i++) pom*=n; return pom; } int main() { int niza[20], i, n, st; cout<<"Kolku elementi ke ima nizata? "; cin>>n; cout<<"Vnesete gi elementite od nizata :\n"; for(i=0; i<n; i++) { cout<<"n["<<i<<"] = "; cin>>niza[i]; } do
Programski jazik C++ PISI Funkcii
38
{ cout<<"\nNa koj stepen da se stepenuvaat elementite : "; cin>>st; }while(st<0); cout<<"\nVnesenata niza e :\n"; for(i=0; i<n; i++) cout<<"n["<<i<<"] = "<<niza[i]<<" "; for(i=0; i<n; i++) niza[i]=stepen(niza[i], st); cout<<"\nStepenuvanata niza e :\n"; for(i=0; i<n; i++) cout<<"n["<<i<<"] = "<<niza[i]<<" "; return 0; } _______________________________________________________ Test primer: VLEZ: Kolku elementi }e ima nizata? 4 Vnesete gi elementite od nizata : n[0]=11 n[1]=-7 n[2]=5 n[3]=-10 Na koj stepen da se stepenuvaat elementite: -6 Na koj stepen da se stepenuvaat elementite: 3 Programata pe~ati: Vnesenata niza e : n[0] = 11 n[1] = -7 n[2] = 5 n[3] = -10 Novodobienata niza e : n[0] = 1331 n[1] = -343 n[2] = 125 n[3] = -1000
Programski jazik C++ PISI Funkcii
39
18. Da se napi{e programa vo programskiot jazik C++ so koja }e se presmeta sumata x1+x2+...+xn. Da se iskoristi funkcija za stepenuvawe na eden broj. Re{enie:
Vlezni promenlivi Izlezni promenlivi
x osnovata
suma sumata koja se presmetuva
st najgolemiot stepen
i, pom pomo{ni promenlivi
stepen (int n,int k) funkcija za nao|awe na n^k (n na stepen k)
#include<iostream> using namespace std; int stepen(int n,int k) { int pom=1, i; for(i=1; i<=k; i++) pom*=n; return pom; } int main() { int x, i, st, pom; long suma=0; cout<<"Vnesete ja osnovata na stepenite : "; cin>>x; do { cout<<"Vnesete go najgolemiot stepen : "; cin>>st; }while(st<0); cout<<"Baranata suma e : \n"; for(i=1; i<=st; i++) { pom=stepen(x,i);
Programski jazik C++ PISI Funkcii
40
cout<<pom; if(i==st) cout<<" = "; else cout<<" + "; suma+=pom; } cout<<suma<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete ja osnovata na stepenite : 5 Vnesete go najgolemiot stepen : 4 Programata pe~ati: Baranata suma e : 5 + 25 + 125 + 625 = 780
Programski jazik C++ PISI Funkcii
41
19. Da se napi{e programa vo programskiot jazik C++ so koja }e se presmeta vrednosta na funkcijata cos(x) spored formulata
....!6!4!2
1cos642
xxxx so koristewe na prvite n ~lenovi.
Re{enie:
Vlezni promenlivi Izlezni promenlivi
alfa agolot vo radijani
cosinus baraniot cosinus
pom agolot vo stepeni
n broj na ~lenovi vo presmetkata
pi vrednosta na konstantata pi
i, clen pomo{ni promenlivi
stepen(float n,int k) funkcija za nao|awe na n^k (n na stepen k)
faktoriel(int x) funkcija za nao|awe na faktoriel na daden broj
#include<iostream> using namespace std; float stepen(float n,int k) { float pom=1.0; int i; for(i=1; i<=k; i++) pom*=n; return pom; } long faktoriel(int x) { long izlez=1; int i;
Programski jazik C++ PISI Funkcii
42
for (i=1; i<=x; i++) izlez*=i; return izlez; } int main() { float cosinus=1, alfa, pi=3.1416, pom, clen; int i, n; do { cout<<"Vnesete ja vrednosta na agolot vo stepeni : "; cin>>alfa; }while (alfa>180); pom=alfa; if (alfa>=90) alfa=180-alfa; alfa=(alfa*pi)/180; cout<<"Vnesete do koj clen da se presmetuva : "; cin>>n; for (i=2; i<=n; i+=2) { clen=stepen(alfa,i)/faktoriel(i); if((i%4)!=0) clen*=-1; cosinus+=clen; } cout<<"\nRezultatot e : cos("<<pom<<") = "; if(pom>=90) cout<<(-1)*cosinus<<endl; else cout<<cosinus<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete ja vrednosta na agolot vo stepeni : 45 Vnesete do koj ~len da se presmetuva : 10 Programata pe~ati: Rezultatot e : cos(45) = 0.707106
Programski jazik C++ PISI Funkcii
43
20. Da se napi{e programa vo programskiot jazik C++ so koja }e se pronajdat site broevi vo daden interval ~ii cifri se podredeni vo raste~ki redosled, po~nuvaj}i od cifrata so najgolema kon cifrata so najmala vrednost. Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot
sum broja~ za broevite ~ii{to cifri se vo raste~ki redosled
dali pomo{na promenliva
i broja~ za intervalot
redosled(int x) funkcija za proveruvawe na redosledot na cifrite na brojot x
#include<iostream> using namespace std; bool redosled(int x) { int min,cifra; bool da=true; min=x%10; x/=10; while((x!=0)&&(da==true)) { cifra=x%10; if(cifra >= min) da=false; else { min=cifra; x/=10; } } return da; } int main()
Programski jazik C++ PISI Funkcii
44
{ int pocetok, kraj, i, sum=0; bool dali; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj; cout<<"\nBroevi kaj koi cifrite se vo rastecki redosled se :\n"; for(i=pocetok; i<=kraj; i++) { dali=redosled(i); if(dali==true) { cout<<i<<" "; sum++; } } if(sum==0) cout<<endl<<"Nema takvi broevi vo toj interval"<<endl; else cout<<endl<<"Vkupno takvi brevi ima "<<sum<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 150 Vnesete go krajot na intervalot : 170 Programata pe~ati: Broevi kaj koi cifrite se vo raste~ki redosled se : 156 157 158 159 167 168 169 Vkupno takvi broevi ima 7
Programski jazik C++ PISI Funkcii
45
21. Da se napi{e programa vo programskiot jazik C++ so koja }e se pronajdat site broevi vo daden interval kaj koi zbirot i proizvodot od cifrite e prost broj. Re{enie:
Vlezni promenlivi Izlezni promenlivi
pocetok, kraj po~etok i kraj na intervalot sum broja~ za baranite
broevi i broja~ za
intervalot
prost(int x) funkcija za proveruvawe dali brojot x e prost broj
zbirCifri(int x) funkcija za nao|awe na zbirot na cifrite na daden broj
proizvodCifri (int x)
funkcija za nao|awe na proizvodot na cifrite na daden broj
#include<iostream> using namespace std; bool prost(int x); int zbirCifri(int x); int proizvodCifri(int x); int main() { int pocetok, kraj, i, sum=0; cout<<"Vnesete go pocetokot na intervalot : "; cin>>pocetok; cout<<"Vnesete go krajot na intervalot : "; cin>>kraj; cout<<"\nBroevi so prost zbir i proizvod na cifri se :\n"; for(i=pocetok; i<=kraj; i++) { if(prost(zbirCifri(i)) && prost(proizvodCifri(i))) { cout<<i<<" ";
Programski jazik C++ PISI Funkcii
46
sum++; } } if(sum==0) cout<<endl<<"Nema takvi broevi vo toj interval"<<endl; else cout<<endl<<"Vkupno takvi brevi ima "<<sum<<endl; return 0; } bool prost(int x) { if(x==0 || x==1) return false; int i; bool dali=true; for(i=2;i<=x/2;i++) { if (x%i==0) { dali=false; break; } } return dali; } int zbirCifri(int x) { int zbir=0; while (x>0) { zbir+=x%10; x/=10; } return zbir; } int proizvodCifri(int x) { int proizvod=1; while(x>0) { proizvod*=x%10; x/=10;
Programski jazik C++ PISI Funkcii
47
} return proizvod; } _______________________________________________________ Test primer: VLEZ: Vnesete go po~etokot na intervalot : 100 Vnesete go krajot na intervalot : 200 Programata pe~ati: Broevi so prost zbir i proizvod na cifri se : 113 115 131 151 Vkupno takvi broevi ima 4
Programski jazik C++ PISI Funkcii
48
22. Da se napi{e programa vo programskiot jazik C++ so koja }e se izbri{at site elementi od dadena niza koi se javuvaat pove}e od edna{. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi
n broj na elementi na nizata
i pomo{na promenliva
promena (int *a, int n)
funkcija za otstranuvawe na elementite koi se povtoruvaat vo nizata
#include<iostream> using namespace std; int promena(int *a, int n); int main() { int a[20],i,n; cout<<"Kolku elementi da ima nizata? "; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"\nVnesenata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; n=promena(a,n); cout<<"\nNovata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\n"; return 0;
Programski jazik C++ PISI Funkcii
49
} int promena(int *a, int n) { int i=0, j, p;
while(i<n) {
for(j=i+1; j<n; j++) { if(a[i]==a[j]) { for(p=j; p<n; p++) { a[p]=a[p+1]; } n--; } } if(a[i]!=a[i+1]) i++;
} return n; } _______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata ? 7 Vnesete ja nizata : a[0]=1 a[1]=2 a[2]=3 a[3]=4 a[5]=3 a[6]=4 a[7]=5 Programata pe~ati: Vnesenata niza e : 1 2 3 4 3 4 5 Novata niza e: 1 2 3 4 5
Programski jazik C++ PISI Funkcii
50
23. Da se napi{e programa vo programskiot jazik C++ so koja }e se izbrojat pojavuvawata na maksimalniot i minimalniot element od dadena niza. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi min, max
minimalniot i maksimalniot element od nizata
n broj na elementi na nizata brojMin,
brojMax
broj na pojavuvawa na minimalniot i maksimalniot element od nizata
i pomo{na promenliva
brMin(int *a, int n, int
*minimalen)
funkcija za nao|awe i broewe na minimalniot element od nizata
brMax(int *a, int n, int
*maximalen)
funkcija za nao|awe i broewe na maksimalniot element od nizata
#include<iostream> using namespace std; int brMin(int *a, int n, int *minimalen); int brMax(int *a, int n, int *maximalen); int main() { int a[20],i,n, min, max, brojMin, brojMax; cout<<"Kolku elementi da ima nizata?"; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } brojMin=brMin(a,n,&min); brojMax=brMax(a,n,&max);
Programski jazik C++ PISI Funkcii
51
cout<<"\nNajgolemiot broj vo nizata e "<<max<<" i se javuva "<<brojMax<<" pati\n"; cout<<"Najmaliot broj vo nizata e "<<min<<" i se javuva "<<brojMin<<" pati\n"; return 0; } int brMin(int *a, int n, int *minimalen) { int min=a[0], i, broj=0; for(i=1; i<n; i++) if(a[i]<min) min=a[i]; *minimalen=min; for(i=0; i<n; i++) if(a[i]==min) broj++; return broj; } int brMax(int *a, int n, int *maximalen) { int max=a[0], i, broj=0; for(i=1; i<n; i++) if(a[i]>max) max=a[i]; *maximalen=max; for(i=0; i<n; i++) if(a[i]==max) broj++; return broj; }
Programski jazik C++ PISI Funkcii
52
_______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata ? 7 Vnesete ja nizata : a[0]=15 a[1]=4 a[2]=-9 a[3]=55 a[4]=-9 a[5]=52 a[6]=55 Programata pe~ati: Vnesenata niza e : 15 4 -9 55 -9 52 55 Najgolemiot broj vo nizata e 55 i se javuva 2 pati Najmaliot broj vo nizata e -9 i se javuva 2 pati
Programski jazik C++ PISI Funkcii
53
24. Da se napi{e programa vo programskiot jazik C++ so koja }e se pronajde na koi pozicii i kolku pati se pojavil daden element vo dadena niza. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi
int b[20]
niza za ~uvawe na poziciite na koi se javuva baraniot element n
broj na elementi na nizata
i pomo{na promenliva
n2 pojavuvawa na baraniot element
x baraniot element
najdi(int *a, int n, int x, int *b)
funkcija za nao|awe na poziciite na koi se javuva daden element od niza
#include<iostream> using namespace std; int najdi(int *a, int n, int x, int *b); int main() { int a[20], b[20], i, n, n2, x; cout<<"Kolku elementi da ima nizata? "; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"Koj element da se bara vo nizata? "; cin>>x; n2=najdi(a,n,x,b); cout<<"\nVnesenata niza e: \n";
Programski jazik C++ PISI Funkcii
54
for(i=0; i<n; i++) cout<<a[i]<<" "; if(n2==0) cout<<"\nBrojot "<<x<<" ne se javuva vo nizata\n"; else { cout<<"\nBrojot "<<x<<" se javuva vo nizata "<<n2<<" pati na slednite pozicii :\n"; if(n2==1) cout<<"Se javuva samo na "<<b[0]<<" popicija\n"; else { for(i=0; i<n2-1; i++) cout<<b[i]<<", "; cout<<"i "<<b[i]<<" pozicija\n"; } } return 0; } int najdi(int *a, int n, int x, int *b) { int i, j=0; for(i=0; i<n; i++) if(a[i]==x) { b[j]=i; j++; } return j; }
Programski jazik C++ PISI Funkcii
55
_______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata ? 7 Vnesete ja nizata : a[0]=12 a[1]=-12 a[2]=9 a[3]=12 a[4]=28 a[5]=-43 a[6]=12 Koj element da se bara vo nizata ? 12 Programata pe~ati: Vnesenata niza e : 12 -12 9 12 28 -43 12 Brojot 12 se javuva vo nizata 3 pati na slednite pozicii : 0, 3, i 6 pozicija
Programski jazik C++ PISI Funkcii
56
25. Da se napi{e programa vo programskiot jazik C++ so koja }e se najde unijata na dve nizi. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20], b[20]
nizi od celi broevi
int c[20] unijata na dvete nizi
na, nb broj na elementi na nizite
i, j pomo{ni promenlivi
nc broj na elementi na unijata
duplikati (int *a, int n)
funkcija za otstranuvawe na elementite koi se povtoruvaat vo nizata
#include<iostream> using namespace std; int duplikati(int *a, int n); int main() { int a[20], b[20], c[40], na, nb, nc, i, j; cout<<"Kolku elementi da ima prvata niza ? "; cin>>na; cout<<"Vnesete ja nizata : \n"; for(i=0; i<na; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"Kolku elementi da ima vtorata niza ? "; cin>>nb; cout<<"Vnesete ja nizata : \n"; for(i=0; i<nb; i++) { cout<<"b["<<i<<"]="; cin>>b[i]; }
Programski jazik C++ PISI Funkcii
57
for(i=0; i<na; i++) c[i]=a[i]; for(j=0; j<nb; j++) { c[i]=b[j]; i++; } nc=duplikati(c,i); cout<<"\nVnesenite nizi se: \n"; cout<<"Prvata niza e : \n"; for(i=0; i<na; i++) cout<<a[i]<<" "; cout<<"\nVtorata niza e: \n"; for(i=0; i<nb; i++) cout<<b[i]<<" "; cout<<"\nUnijata na dvete nizi e :\n"; for(i=0; i<nc; i++) cout<<c[i]<<" "; cout<<"\n"; return 0; } int duplikati(int *a, int n) { int i=0, j, p;
while(i<n) {
for(j=i+1; j<n; j++) if(a[i]==a[j]) { for(p=j; p<n; p++) { a[p]=a[p+1]; } n--; } if(a[i]!=a[i+1]) i++;
} return n; }
Programski jazik C++ PISI Funkcii
58
_______________________________________________________ Test primer: VLEZ: Kolku elementi da ima prvata niza? 6 Vnesete ja nizata : a[0]=17 a[1]=38 a[2]=-9 a[3]=64 a[4]=17 a[5]=2 Kolku elementi da ima vtorata niza? 4 Vnesete ja nizata : a[0]=44 a[1]=38 a[2]=-9 a[3]=101 Programata pe~ati: Vnesenite nizi se : Prvata niza e : 17 38 -9 64 17 2 Vtorata niza e : 44 38 -9 101 Unijata na dvete nizi e : 17 38 -9 64 2 44 101
Programski jazik C++ PISI Funkcii
59
26. Da se napi{e programa vo programskiot jazik C++ so koja }e se pronajde najgolemata raste~ka podniza na dadena niza. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi poz
po~etnata pozicija na najgolemata raste~ka podniza
n broj na elementi na nizata
dolz dol`ina na najgolemata raste~ka podniza i pomo{na
promenliva
podniza(int *a, int n, int *pozicija, int
*dolzina)
funkcija za nao|awe na po~etnata pozicija i dol`ina na najgolemata raste~ka podniza od niza
#include<iostream> using namespace std; void podniza(int *a, int n, int *pozicija, int *dolzina); int main() { int a[20], n, poz, dolz, i; cout<<"Kolku elementi da ima nizata? "; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } podniza(a,n,&poz,&dolz); cout<<"\nVnesenata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\nNajgolemata rastecka podniza ima dolzina "<<dolz<<" i taa e: \n";
Programski jazik C++ PISI Funkcii
60
for(i=poz; i<=poz+dolz-1; i++) cout<<a[i]<<" "; cout<<"\n"; return 0; } void podniza(int *a, int n, int *pozicija, int *dolzina) { int dolz=0, poz, pom, i, j; for(i=0;i<n;i++) { pom=1; j=i; while(a[j]<a[j+1]) { pom++; j++; } if(pom>dolz) { poz=i; dolz=pom; } } *pozicija=poz; *dolzina=dolz; }
Programski jazik C++ PISI Funkcii
61
_______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata? 10 Vnesete ja nizata : a[0]=8 a[1]=18 a[2]=26 a[3]=4 a[4]=16 a[5]=35 a[6]=39 a[7]=-3 a[8]=-1 a[9]=14 Programata pe~ati: Vnesenata niza e : 8 18 26 4 16 35 39 -3 -1 14 Najgolemata raste~ka podniza ima dol`ina 4 i taa e : 4 16 35 39
Programski jazik C++ PISI Funkcii
62
27. Da se napi{e programa vo programskiot jazik C++ so koja }e se ispe~atat najmalite k elementi od nizata. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi
int b[20]
niza za ~uvawe na vnesenata niza vo raste~ki redosled na elementite n
broj na elementi od nizata
i pomo{na promenliva
nb broj na elementi na nizata b bez duplikati k
baran broj na najmali elementi
duplikati (int *a, int n)
funkcija za otstranuvawe na elementite koi se povtoruvaat vo niza
sortiranje (int *a, int n) funkcija za sortirawe na niza
#include<iostream> using namespace std; int duplikati(int *a, int n); void sortiranje(int *a, int n); int main() { int a[20], b[20], n, nb, i, k; cout<<"Kolku elementi da ima nizata? "; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"Kolku najmali elementi da se najdat? "; cin>>k;
Programski jazik C++ PISI Funkcii
63
for(i=0; i<n; i++) b[i]=a[i]; nb=duplikati(b,n); sortiranje(b,nb); if(nb<=k) { cout<<"\nOpfatena e celata niza \n"; for(i=0; i<nb; i++)
cout<<b[i]<<" "; } else { cout<<"\nVnesenata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\n"<<k<<"-te najmali elementi se : \n"; for(i=0; i<k; i++) cout<<b[i]<<" "; } cout<<"\n"; return 0; } int duplikati(int *a, int n) { int i=0, j, p;
while(i<n) {
for(j=i+1; j<n; j++) if(a[i]==a[j]) { for(p=j; p<n; p++) { a[p]=a[p+1]; } n--; } if(a[i]!=a[i+1]) i++;
} return n; } void sortiranje(int *a, int n)
Programski jazik C++ PISI Funkcii
64
{ int pom, i, j; for(i=0; i<n; i++) for(j=0; j<n-i-1; j++) if(a[j]>a[j+1]) { pom=a[j]; a[j]=a[j+1]; a[j+1]=pom; } } _______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata? 10 Vnesete ja nizata : a[0]=-3 a[1]=5 a[2]=9 a[3]=11 a[4]=7 a[5]=18 a[6]=5 a[7]=-3 a[8]=9 a[9]=19 Kolku najmali elementi da se najdat? 3 Programata pe~ati: Vnesenata niza e : -3 5 9 11 7 18 5 -3 9 19 3-te najmali elementi se : -3 5 7
Programski jazik C++ PISI Funkcii
65
28. Na ispit u~estvuvale n<20 kandidati. Minimalniot broj na poeni za upis e min. Da se napi{e programa vo programskiot jazik C++ so koja }e se opredeli brojot na kandidatite koi steknale pravo na upis i }e go presmeta nivniot sreden uspeh poka`an na ispitot. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi za poenite
polozile
broj na polo`eni u~enici
n broj na u~enici
prosek prosekot na bodovi od polo`enite u~enici
min minimalen broj poeni za polo`uvawe
i pomo{na promenliva
polozeni (int *a, int n, int min, float
*prosek)
funkcija za nao|awe na brojot na u~enici koi go polo`ile ispitot i nivniot sreden uspeh
#include<iostream> using namespace std; int polozeni(int *a, int n, int min, float *prosek); int main() { int a[20], n, i, polozile, min; float prosek; cout<<"Kolku kandidati ucestvuvale na polaganjeto? "; cin>>n; cout<<"Vnesete gi poenite za sekoj kandidat :\n"; for(i=0;i<n;i++) { cout<<i+1<<"-kandidat : "; cin>>a[i]; } cout<<"Kolku e minimumot na poeni za polozuvanje : ";
Programski jazik C++ PISI Funkcii
66
cin>>min; polozile=polozeni(a,n,min,&prosek); cout<<"\nIspitot go polozile "<<polozile<<" ucenici \n"; cout<<"Prosekot na bodovi e "<<prosek<<endl; return 0; } int polozeni(int *a, int n, int min, float *prosek) { int broj=0, i;
float suma=0.0; for(i=0; i<n; i++) { if(a[i]>=min) { broj++; suma+=a[i]; } } *prosek=suma/broj; return broj; } _______________________________________________________ Test primer: VLEZ: Kolku kandidati u~estvuvale vo polagaweto? 10 Vnesete gi poenite za sekoj kandidat : 1-kandidat : 55 2-kandidat : 45 3-kandidat : 65 4-kandidat : 90 5-kandidat : 100 6-kandidat : 35 7-kandidat : 85 8-kandidat : 45 9-kandidat : 60 10-kandidat : 85 Kolku e minimumot na poeni za polo`uvawe : 55 Programata pe~ati: Ispitot go polo`ile 7 u~enici Prosekot na bodovi e 77.1429
Programski jazik C++ PISI Funkcii
67
29. Da se napi{e programa vo programskiot jazik C++ so koja }e se pronajdat prvata i poslednata pozicija na koja se pojavil zadaden element vo edna niza. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi
prvo, posledno
prvata i poslednata pozicija na koja se pojavil baraniot element
n broj na elementi od nizata
element elementot koj se bara
i pomo{na promenliva
pojavuvanje (int *a, int n,
int element, int *prvo, int
*posledno)
funkcija za nao|awe na prvata i poslednata pozicija na koja se pojavil zadaden element vo niza
#include<iostream> using namespace std; void pojavuvanje(int *a, int n, int element, int *prvo, int *posledno); int main() { int a[20], n, i, prvo, posledno, element; cout<<"Kolku elementi da ima nizata? "; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"Koj element se bara : "; cin>>element; prvo=-1;
Programski jazik C++ PISI Funkcii
68
posledno=-1; pojavuvanje(a,n,element,&prvo,&posledno); cout<<"\nVnesenata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; if(prvo==-1) cout<<"\nElementot ne se pojavuva voopsto vo nizata"; else { cout<<"\nPrvo pojavuvanje na "<<prvo<<" -ta pozicija\n"; cout<<"Posledno pojavuvanje na "<<posledno<<" -ta pozicija"; } return 0; } void pojavuvanje(int *a, int n, int element, int *prvo, int *posledno) { int i, prv=-1, posleden=-1; for(i=0; i<n; i++) { if(a[i]==element) { posleden=i; if(prv==-1) prv=i; } } *prvo=prv; *posledno=posleden; }
Programski jazik C++ PISI Funkcii
69
_______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata ? 10 Vnesete ja nizata : a[0]=-3 a[1]=5 a[2]=9 a[3]=5 a[4]=7 a[5]=24 a[6]=5 a[7]=13 a[8]=-6 a[9]=9 Koj element se bara : 5 Programata pe~ati: Vnesenata niza e : -3 5 9 5 7 24 5 13 -6 9 Prvo pojavuvawe na 1-ta pozicija Posledno pojavuvawe na 6-ta pozicija
Programski jazik C++ PISI Funkcii
70
30. Da se napi{e programa vo programskiot jazik C++ so koja }e se pronajde najgolemata razlika na dva sosedni elementi od niza. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi
poz1, poz2
pozicijata na elementite so najgolema razlika
n broj na elementi od nizata
raz najgolemata razlika i pomo{na
promenliva razlika
(int *a, int n, int*p1, int*p2)
funkcija za nao|awe na najgolemata razlika pome|u dva sosedni elementi
#include<iostream> using namespace std; int razlika(int *a, int n, int*p1, int*p2); int main() { int a[20], n, i, raz, poz1, poz2; cout<<"Kolku elementi da ima nizata? "; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } raz=razlika(a,n,&poz1,&poz2); cout<<"\nVnesenata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\nNajgolemata ralika iznesuva "<<raz<<endl; cout<<"Toa e razlikata pomegu "<<poz1+1<<"-ot i "<<poz2+1<<"-ot element.\n";
Programski jazik C++ PISI Funkcii
71
return 0; } int razlika(int *a, int n, int *poz1, int*poz2) { int i, pom, raz, p1, p2; raz=a[1]-a[0]; if(raz<0) raz*=-1; p1=0; p2=1; for(i=2;i<n;i++) { pom=a[i]-a[i-1]; if(pom<0) pom*=-1; if(pom>raz) { raz=pom; p1=i-1; p2=i; } } *poz1=p1; *poz2=p2; return raz; } _______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata? 6 Vnesete ja nizata : a[0]=3 a[1]=8 a[2]=17 a[3]=-2 a[4]=9 a[5]=4
Programski jazik C++ PISI Funkcii
72
Programata pe~ati: Vnesenata niza e : 3 8 17 -2 9 4 Najgolemata razlika iznesuva 19 Toa e razlikata pome|u 3-ot i 4-ot element
Programski jazik C++ PISI Funkcii
73
31. Da se napi{e programa vo programskiot jazik C++ so koja }e se podredi odreden del od niza vo raste~ki redosled. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi
n broj na elementi od nizata
i pomo{na promenliva
pocetok, kraj po~etok i kraj na delot koj se podreduva
podreduvanje (int *a, int n,
int pocetok, int kraj)
funkcija za podreduvawe na del od niza vo raste~ki redosled
#include<iostream> using namespace std; int podreduvanje(int *a, int n, int pocetok, int kraj); int main() { int a[20], n, i, pocetok, kraj; cout<<"Kolku elementi da ima nizata? "; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"Od koja pozicija da pocne podreduvanjeto : "; cin>>pocetok; cout<<"Do koja pozicija da bide podreduvanjeto : "; cin>>kraj;
Programski jazik C++ PISI Funkcii
74
cout<<"\nVnesenata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; podreduvanje(a,n,pocetok,kraj); cout<<"\nDelumno podredenata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\n"; return 0; } int podreduvanje(int *a, int n, int pocetok, int kraj) { int i, j, pom; for(i=pocetok; i<kraj; i++) for(j=i+1; j<=kraj; j++) if(a[j]<a[i]) { pom=a[j]; a[j]=a[i]; a[i]=pom; } } _______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata? 8 Vnesete ja nizata : a[0]=4 a[1]=3 a[2]=9 a[3]=-2 a[4]=7 a[5]=-11 a[6]=5 a[7]=6 Od koja pozicija da po~ne podreduvaweto : 2 Do koja pozicija da bide podreduvaweto : 5
Programski jazik C++ PISI Funkcii
75
Programata pe~ati: Vnesenata niza e : 4 3 9 -2 7 -11 5 6 Delumno podredenata niza e : 4 3 -11 -2 7 9 5 6
Programski jazik C++ PISI Funkcii
76
32. Da se napi{e programa vo programskiot jazik C++ so koja }e se presmeta aritmeti~kata sredina na elementite od dadena niza, a potoa }e se isfrlat elementite pomali od taa vrednost. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20] niza od celi broevi
sredina aritmeti~kata sredina na nizata n broj na elementi
od nizata
i pomo{na promenliva
aritmeticka (int *a, int n)
funkcija za nao|awe na aritmeti~kata sredina na edna dadena niza
promena (int *a, int n, float sredina)
funkcija za otstranuvawe na elementite od nizata pomali od aritmeti~kata sredina
#include<iostream> using namespace std; float aritmeticka(int *a, int n); int promena(int *a, int n, float sredina); int main() { int a[20], n, i; float sredina; cout<<"Kolku elementi da ima nizata? "; cin>>n; cout<<"Vnesete ja nizata : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"\nVnesenata niza e: \n"; for(i=0; i<n; i++)
Programski jazik C++ PISI Funkcii
77
cout<<a[i]<<" "; sredina=aritmeticka(a,n); cout<<"\nAritmetickata sredina na nizata iznesuva "<<sredina<<endl; n=promena(a,n,sredina); cout<<"Novodobienata niza e: \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\n"; return 0; } float aritmeticka(int *a, int n) { float sum=0.0; int i; for(i=0; i<n; i++) sum+=a[i]; sum/=n; return sum; } int promena(int *a, int n, float sredina) { int i, j=0; for(i=0; i<n; i++) { if(a[i]>=sredina) { a[j]=a[i]; j++; } } return j; }
Programski jazik C++ PISI Funkcii
78
_______________________________________________________ Test primer: VLEZ: Kolku elementi da ima nizata? 8 Vnesete ja nizata : a[0]=10 a[1]=28 a[2]=15 a[3]=24 a[4]=39 a[5]=30 a[6]=17 a[7]=29 Programata pe~ati: Vnesenata niza e : 10 28 15 24 39 30 17 29 Aritmeti~kata sredina na nizata iznesuva 24 Novodobienata niza e : 28 24 39 30 29
Programski jazik C++ PISI Funkcii
79
33. Da se napi{e programa vo programskiot jazik C++ so koja }e se soberat i pomno`at dve nizi. Elementite na novodobienite nizi se dobivaat kako zbir, odnosno proizvod od soodvetnite elementi vo dadenite nizi, t.e. c[i]=a[i]+b[i] i d[i]=a[i]*b[i]. Re{enie:
Vlezni promenlivi Izlezni promenlivi
int a[20], b[20] nizi od celi broevi
int c[20], d[20] novodobienite nizi zbir i proizvod
n broj na elementi od nizite
i pomo{na promenliva
pojavuvanje (int *a, int n,
int element, int *prvo, int
*posledno)
funkcija za nao|awe na prvata i poslednata pozicija na koja se pojavil zadaden element vo niza
#include<iostream> using namespace std; void zbirIproizvod(int *a, int *b, int n, int*c, int *d); int main() { int a[20], b[20], c[20], d[20], n, i, j; cout<<"Kolku elementi da imaat nizite? "; cin>>n; cout<<"Vnesete ja prvata niza : \n"; for(i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"Vnesete ja vtorata niza : \n"; for(i=0; i<n; i++) { cout<<"b["<<i<<"]=";
Programski jazik C++ PISI Funkcii
80
cin>>b[i]; } zbirIproizvod(a,b,n,c,d); cout<<"\nVnesenite nizi se: \n"; cout<<"Prvata niza e : \n"; for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\nVtorata niza e: \n"; for(i=0; i<n; i++) cout<<b[i]<<" "; cout<<"\nZbirot na dvete nizi e :\n"; for(i=0; i<n; i++) cout<<c[i]<<" "; cout<<"\nProizvodot na dvete nizi e :\n"; for(i=0; i<n; i++) cout<<d[i]<<" "; cout<<"\n"; return 0; } void zbirIproizvod(int *a, int *b, int n, int*c, int *d) { int i; for(i=0; i<n; i++) { c[i]=a[i]+b[i]; d[i]=a[i]*b[i]; } }
Programski jazik C++ PISI Funkcii
81
_______________________________________________________ Test primer: VLEZ: Kolku elementi da imaat nizite? 5 Vnesete ja prvata niza : a[0]=1 a[1]=2 a[2]=3 a[3]=4 a[4]=5 Vnesete ja vtorata niza : a[0]=6 a[1]=7 a[2]=8 a[3]=9 a[4]=10 Programata pe~ati: Vnesenite nizi se : Prvata niza e : 1 2 3 4 5 Vtorata niza e : 6 7 8 9 10 Zbirot na dvete nizi e : 7 9 11 13 15 Proizvodot na dvete nizi e 6 14 24 36 50
Programski jazik C++ PISI Funkcii
82
2. Klasi 1. Da se razvie klasa za to~ka vo koordinaten sistem koja sodr`i metod za pe~atewe na to~kata i metod za opredeluvawe na rastojanieto od to~kata do koordinatniot po~etok. Re{enie:
Klasa Tocka
int x, y koordinati na to~kata
void pecati() funkcija za pe~atewe na koordinatite na to~kata
float rastojanie() funkcija za presmetuvawe na rastojanie od to~kata do koordinatniot po~etok
Vlezni promenlivi Izlezni promenlivi
x, y promenlivi za koordinatite na to~kata
ras rastojanie na to~kata do koordinaten po~etok
t to~ka vo koordinatniot sistem
#include<iostream> #include<math.h> using namespace std; class Tocka { private: int x; int y; public: Tocka()
Programski jazik C++ PISI Funkcii
83
{ x=0; y=0; } Tocka(int a, int b) { x=a; y=b; } ~Tocka() {} void pecati() { cout<<"\nTockata e ("<<x<<", "<<y<<")\n"; } float rastojanie() { return sqrt(x*x+y*y); } }; int main() { int x,y; cout<<"Vnesete vrednost za x : "; cin>>x; cout<<"Vnesete vrednost za y : "; cin>>y; Tocka t(x,y); float ras=t.rastojanie(); t.pecati(); cout<<"Rastojanieto do koordinaten pocetok e "<<ras<<endl; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete vrednost za x : 3 Vnesete vrednost za y : 4 Programata pe~ati: To~kata e (3, 4)
Programski jazik C++ PISI Funkcii
84
Rastojanieto do koordinaten po~etok e 5
Programski jazik C++ PISI Funkcii
85
2. Da se razvie klasa za datum koja sodr`i metod za pe~atewe na datumot i metod za razlika na dva datumi. Re{enie:
Klasa Datum
int den, mesec, godina promenlivi za denot, mesecot i godinata
void pecati() funkcija za pe~atewe na datum
void pecatiRazlika() funkcija za opisno pe~atewe na datum
Datum razlika(Datum dat)
funkcija za presmetuvawe na razlikata pome|u dva datumi
Vlezni promenlivi Izlezni promenlivi
d,m,g
promenlivi za denot, mesecot i godinata d3 razlikata pome|u
datumite d1 i d2
d1, d2 vlezni datumi
#include<iostream> #include<math.h> using namespace std; class Datum { private: int den; int mesec; int godina; public: Datum() { den=mesec=godina=0; } Datum(int d, int m, int g)
Programski jazik C++ PISI Funkcii
86
{ den=d; mesec=m; godina=g; } ~Datum() {} int getDen() { return den; } int getMesec() { return mesec; } int getGodina() { return godina; } void pecati() { cout<<den<<"."<<mesec<<"."<<godina<<".\n"; } void pecatiRazlika() { cout<<den<<" denovi, "<<mesec<<" meseci i "<<godina<<" godini.\n"; } Datum razlika(Datum dat) { int d2=dat.getDen(); int m2=dat.getMesec(); int g2=dat.getGodina(); if(d2<den) { d2+=30; m2--; } if(m2<mesec) { m2+=12; g2--;
Programski jazik C++ PISI Funkcii
87
} d2=d2-den; m2=m2-mesec; g2=g2-godina; Datum pom(d2,m2,g2); return pom; } }; int main() { int d,m,g; cout<<"Vnesete vrednosti za prviot datum : "; cin>>d>>m>>g; Datum d1(d,m,g); cout<<"Vnesete vrednosti za vtoriot datum : "; cin>>d>>m>>g; Datum d2(d,m,g); cout<<"Prviot datum e "; d1.pecati(); cout<<"Vtoriot datum e "; d2.pecati(); Datum d3=d1.razlika(d2); cout<<"Razlikata megu vtoriot i prviot datum e "; d3.pecatiRazlika(); return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete vrednosti za prviot datum: 15 10 1990 Vnesete vrednosti za vtoriot datum: 11 8 2007 Programata pe~ati: To~kata e (3, 4) Prviot datum e 15.10.1990. Vtoriot datum e 11.8.2007. Razlikata me|u vtoriot i prviot datum e 26 denovi, 9 meseci i 16 godini.
Programski jazik C++ PISI Funkcii
88
3. Da se razvie klasa za triagolnik so metodi za presmetuvawe na perimetarot i plo{tinata na triagolnikot. Re{enie:
Klasa Triagolnik
int a, b, c promenlivi za stranite na triagolnikot
plostina, perimetar plo{tina i perimetar na triagolnikot
void pecati() funkcija za pe~atewe na karakteristikite na triagolnikot
void Perimetar() funkcija za presmetuvawe na perimetarot
void Plostina() funkcija za presmetuvawe na plo{tinata
Vlezni promenlivi Izlezni promenlivi
x, y, z promenlivi za stranite na triagolnikot
tri triagolnik
#include<iostream> #include<math.h> using namespace std; class Triagolnik { private: int a, b, c; float perimetar, plostina; public: Triagolnik()
Programski jazik C++ PISI Funkcii
89
{ a=b=c=0; plostina=perimetar=0.0; } Triagolnik(int s1, int s2, int s3) { a=s1; b=s2; c=s3; plostina=perimetar=0.0; } ~Triagolnik() {} void pecati() { cout<<"\nTriagolnikot e so strani "<<a<<", "<<b<<" i "<<c<<".\n"; cout<<"Plostinata iznesuva "<<plostina<<endl; cout<<"Perimetarot iznesuva "<<perimetar<<endl; } void Perimetar() { perimetar=a+b+c; } void Plostina() { float alfa=acos((b*b+c*c-a*a)/(b*c*2.0)); float hc=b*sin(alfa); plostina=c*hc/2.0; } }; int main() { int x, y, z; cout<<"Vnesete vrednosti za triagolnikot : "; cin>>x>>y>>z; Triagolnik tri(x,y,z); tri.Perimetar(); tri.Plostina(); tri.pecati();
Programski jazik C++ PISI Funkcii
90
return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete vrednosti za triagolnikot: 3 4 5 Programata pe~ati: Triagolnikot e so strani 3, 4 i 5. Plo{tinata iznesuva 6 Perimetarot iznasuva 12
Programski jazik C++ PISI Funkcii
91
4. Da se razvie klasa za rabota so kompleksen broj koja ima funkcii za sobirawe i mno`ewe na dva kompleksni broja. Re{enie:
Klasa Kompleksen
int realen, imaginaren realniot i imaginarniot del
void pecati() funkcija za pe~atewe na karakteristikite na triagolnikot
Kompleksen sobiranje(Kompleksen k)
funkcija za sobirawe na dva kompleksni broja
Kompleksen mnozenje(Kompleksen k)
funkcija za mno`ewe na dva kompleksni broja
Vlezni promenlivi Izlezni promenlivi
re, im
promenlivi za realniot i imaginarniot del k3, k4 zbirot i proizvodot
na k1 i k2
k1, k2 kompleksni broevi
#include<iostream> using namespace std; class Kompleksen { private: int realen, imaginaren; public: Kompleksen() { realen=imaginaren=0; } Kompleksen(int r, int i) {
Programski jazik C++ PISI Funkcii
92
realen=r; imaginaren=i; } ~Kompleksen() {} int getRealen() { return realen; } int getImaginaren() { return imaginaren; } void pecati() { cout<<"\n"<<realen<<"+ i*("<<imaginaren<<") \n"; } Kompleksen sobiranje(Kompleksen k) { int re=k.getRealen(); int im=k.getImaginaren(); int pomreal, pomimag; pomreal=realen+re; pomimag=imaginaren+im; Kompleksen pom(pomreal, pomimag); return pom; } Kompleksen mnozenje(Kompleksen k) { int re=k.getRealen(); int im=k.getImaginaren(); int pomreal, pomimag; pomreal=realen*re-imaginaren*im; pomimag=realen*im+imaginaren*re; Kompleksen pom(pomreal, pomimag); return pom; } }; int main() {
Programski jazik C++ PISI Funkcii
93
int re, im; cout<<"Vnesete go prviot kompleksen broj : "; cin>>re>>im; Kompleksen k1(re,im); cout<<"Vnesete go vtoriot kompleksen broj : "; cin>>re>>im; Kompleksen k2(re,im); Kompleksen k3=k1.sobiranje(k2); Kompleksen k4=k1.mnozenje(k2); cout<<"\nPrviot kompleksen broj e "; k1.pecati(); cout<<"Vtoriot kompleksen broj e "; k2.pecati(); cout<<"Nivniot zbir iznesuva "; k3.pecati(); cout<<"Nivniot proizvod iznesuva "; k4.pecati(); return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go prviot kompleksen broj : 3 -2 Vnesete go vtoriot kompleksen broj : 4 5 Programata pe~ati: Prviot kompleksen broj e 3 + i*(-2) Vtoriot kompleksen broj e 4 + i*(5) Nivniot zbir iznesuva 7 + i*(3) Nivniot proizvod iznesuva 22 + i*(7)
Programski jazik C++ PISI Funkcii
94
5. Da se razvie klasa Student koja sodr`i ime, prezime i ocenki na studentot, kako i metod za vnesuvawe na ocenkite i metod za pe~atewe na podatocite na studentot, zaedno so prosekot od negovite ocenki. Re{enie:
Klasa Student
char ime[15], prezime[20] imeto i prezimeto na studentot
int ocenka[10], brOcenki ocenkite so brojot na ocenki
void pecati() funkcija za pe~atewe na podatocite na studentot
void vnesiOcenki() funkcija za vnesuvawe na ocenkite na studentot
float getProsek() funkcija za presmetuvawe na prosekot od ocenkite
Vlezni promenlivi Izlezni promenlivi
br promenliva za brojot na ocenki
s student
ime[15], prezime[20]
imeto i prezimeto na studentot
#include<iostream> #include<string.h> using namespace std; class Student { private: char ime[15]; char prezime[20];
Programski jazik C++ PISI Funkcii
95
int ocenka[10]; int brOcenki; public: Student() { *ime=*prezime='\0'; brOcenki=0; } Student(char *i, char *p, int brOc) { strcpy(ime,i); strcpy(prezime,p); brOcenki=brOc; } ~Student() {} void vnesiOcenki() { int i; for(i=0; i<brOcenki; i++) { cout<<"Vnesete ja "<<i+1<<"-ta ocenka : "; cin>>ocenka[i]; } } float getProsek() { int i; float prosek=0.0; for(i=0; i<brOcenki; i++) prosek+=ocenka[i]; prosek/=brOcenki; return prosek; } void pecati() { cout<<"\nIme : "<<ime<<endl; cout<<"Prezime : "<<prezime<<endl; cout<<"Ocenki : "; for(int i=0; i<brOcenki-1; i++) cout<<ocenka[i]<<", "; cout<<ocenka[brOcenki-1]<<endl;
Programski jazik C++ PISI Funkcii
96
cout<<"Prosek : "<<getProsek()<<endl; } }; int main() { int br; char ime[15], prezime[10]; cout<<"Vnesete go imeto na studentot : "; cin>>ime; cout<<"Vnesete go prezimeto na studentot : "; cin>>prezime; cout<<"Vnesete broj na ocenki : "; cin>>br; Student s(ime,prezime,br); s.vnesiOcenki(); s.pecati(); return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go imeto na studentot : Aleksandar Vnesete go prezimeto na studentot : Nikoloski Vnesete broj na ocenki : 5 Vnesete ja 1-ta ocenka : 8 Vnesete ja 2-ta ocenka : 9 Vnesete ja 3-ta ocenka : 10 Vnesete ja 4-ta ocenka : 9 Vnesete ja 5-ta ocenka : 8 Programata pe~ati: Ime : Aleksandar Prezime : Nikoloski Ocenki : 8, 9, 10, 9, 8 Prosek : 8.8
Programski jazik C++ PISI Funkcii
97
6. Da se razvie klasa Smetka koja sodr`i ime i prezime na korisnikot i iznos na smetkata, kako i metod za dodavawe i podigawe na pari od smetkata i metod za pe~atewe na podatocite od smetkata. Re{enie:
Klasa Smetka
char ime[15], prezime[20] ime i prezime na korisnikot
int iznos iznos na smetkata
void pecati() funkcija za pe~atewe na podatocite od smetkata
void dodadiSuma(int suma)
funkcija za dodavawe pari na smetkata
void podigniSuma(int suma)
funkcija za podigawe pari od smetkata
Vlezni promenlivi Izlezni promenlivi
suma promenliva za vnesenite sumi
s smetka
ime[15], prezime[20]
imeto i prezimeto na korisnikot
#include<iostream> #include<string.h> using namespace std; class Smetka { private: char ime[15]; char prezime[20];
Programski jazik C++ PISI Funkcii
98
int iznos; public: Smetka(char *i='\0', char *p='\0', int suma=0) { strcpy(ime,i); strcpy(prezime,p); iznos=suma; } ~Smetka() {} void dodadiSuma(int suma) { if(suma<=0) cout<<"Ne se dodava negativna suma\n"; else iznos+=suma; } void podigniSuma(int suma) { if(suma<=0) cout<<"Ne se podiga negativna suma\n"; else { if(iznos-suma<0) cout<<"Ne e dozvolen minus na smetkata\n"; else iznos-=suma; } } void pecati() { cout<<"\nIme : "<<ime<<endl; cout<<"Prezime : "<<prezime<<endl; cout<<"Iznos na smetka : "<<iznos<<endl; } }; int main() { int suma; char ime[15], prezime[10];
Programski jazik C++ PISI Funkcii
99
cout<<"Vnesete go imeto na korisnikot : "; cin>>ime; cout<<"Vnesete go prezimeto na korisnikot : "; cin>>prezime; cout<<"Vnesete poceten iznos na smetkata : "; cin>>suma; Smetka s(ime,prezime,suma); s.pecati(); cout<<"\nDodadete pari na smetkata : "; cin>>suma; s.dodadiSuma(suma); s.pecati(); cout<<"\nPodignete pari od smetkata : "; cin>>suma; s.podigniSuma(suma); s.pecati(); return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go imeto na korisnikot : Elena Vnesete go prezimeto na korisnikot: Doneska Vnesete po~eten iznos na smetkata : 5000 Programata pe~ati: Ime : Elena Prezime : Doneska Iznos na smetka : 5000 Dodadete pari na smetkata : 1000 Ime : Elena Prezime : Doneska Iznos na smetka : 6000 Podignete pari od smetkata : 2500 Ime : Elena Prezime : Doneska Iznos na smetka : 3500
Programski jazik C++ PISI Funkcii
100
7. Da se razvie klasa Niza koja sodr`i niza od celi broevi, kako i metod za dodavawe elementi vo nizata i metod za pe~atewe na nizata, zaedno so zbirot od elementite vo nizata. Re{enie:
Klasa Niza
int a[100], n nizata i brojot na elementi od nizata
void pecati() funkcija za pe~atewe na nizata
int dodadiElement(int element)
funkcija za dodavawe elementi vo nizata
int presmetajZbir() funkcija za presmetuvawe na zbirot na elementite od nizata
Vlezni promenlivi Izlezni promenlivi
broj pomo{na promenliva
nova niza
#include<iostream> using namespace std; class Niza { private: int a[100]; int n; public: Niza(int x) { n=x; } ~Niza() {} int dodadiElement(int element)
Programski jazik C++ PISI Funkcii
101
{ if(n<20) { a[n]=element; n++; return 1; } else { cout<<"Nizata e celosno popolneta\n"; return 0; } } int presmetajZbir() { int i, suma=0; for(i=0; i<n; i++) suma+=a[i]; return suma; } void pecati() { cout<<"\nElementite na nizata se : \n"; for(int i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\nZbirot na elementite od nizata iznesuva "<<presmetajZbir()<<endl; } }; int main() { int broj; Niza nova(0); cout<<"Vnesete gi elementite od nizata : "; while(cin>>broj) { if(nova.dodadiElement(broj)==0) break; } nova.pecati(); return 0; }
Programski jazik C++ PISI Funkcii
102
_______________________________________________________ Test primer: VLEZ: Vnesete gi elementite od nizata : 3 -4 11 -9 17 1 x Programata pe~ati: Elementite na nizata se: 3 -4 11 -9 17 1 Zbirot na elementite od nizata iznesuva 19
Programski jazik C++ PISI Funkcii
103
8. Da se razvie klasa Niza koja sodr`i niza od celi broevi, kako i metod za podreduvawe na elementite vo nizata i metod za pe~atewe na nizata. Re{enie:
Klasa Niza
int a[20] elementi od nizata
max, brojac maksimalen broj na elementi od nizata i broja~ za vnesenite elementi
void pecati() funkcija za pe~atewe na nizata
int dodadiElement(int element)
funkcija za dodavawe elementi vo nizata
void podreduvanje() funkcija za podreduvawe na elementite vo nizata
Vlezni promenlivi Izlezni promenlivi
broj pomo{na promenliva
nova niza
#include<iostream> using namespace std; class Niza { private: int a[20]; int max; int brojac; public: Niza(int x) { max=x; brojac=0;
Programski jazik C++ PISI Funkcii
104
} ~Niza() {} int dodadiElement(int element) { if(brojac<max) { a[brojac]=element; brojac++; return 1; } else { cout<<"Nizata e celosno popolneta\n"; return 0; } } void podreduvanje() { int i, j, pom; for(i=0; i<brojac-1; i++) for(j=i+1; j<brojac; j++) if(a[j]<a[i]) { pom=a[j]; a[j]=a[i]; a[i]=pom; } } void pecati() { cout<<"\nElementite na nizata se : \n"; for(int i=0; i<brojac; i++) cout<<a[i]<<" "; cout<<"\n"; } }; int main() { int broj; cout<<"Kolku najmnogu elementi ke ima nizata? ";
Programski jazik C++ PISI Funkcii
105
cin>>broj; Niza nova(broj); cout<<"Vnesete gi elementite od nizata : "; while(cin>>broj) { if(nova.dodadiElement(broj)==0) break; } cout<<"\nPred podreduvanje :"; nova.pecati(); nova.podreduvanje(); cout<<"\nPosle podreduvanje :"; nova.pecati(); return 0; } _______________________________________________________ Test primer: VLEZ: Kolku najmnogu elementi }e ima nizata? 10 Vnesete gi elementite od nizata : 4 -3 7 -11 9 0 x Programata pe~ati: Pred podreduvawe : Elementite na nizata se: 4 -3 7 -11 9 0 Posle podreduvawe : Elementite na nizata se: -11 -3 0 4 7 9
Programski jazik C++ PISI Funkcii
106
9. Da se razvie klasa Niza koja sodr`i niza od celi broevi i metod za dobivawe na nizata kako unija od dve drugi nizi. Re{enie:
Klasa Niza
int a[20], n nizata i brojot na elementi od nizata
void pecati() funkcija za pe~atewe na nizata
int dodadiElement(int element)
funkcija za dodavawe elementi vo nizata
int zemiElement(int i) funkcija za dobivawe vrednost na elementot od nizata so indeks i
int brojElementi() funkcija koja go dava brojot na elementi od nizata
void duplikati() funkcija koja gi otstranuva duplikatite vo nizata
void unija(Niza &niza1, Niza &niza2)
funkcija za dobivawe nova niza kako unija na dve nizi
Vlezni promenlivi Izlezni promenlivi
broj, el, i pomo{ni promenlivi
niza1, niza2,
nizaUnija
vleznite nizi i nizata unija
#include<iostream> using namespace std; class Niza { private: int a[20]; int n; public: Niza(int x)
Programski jazik C++ PISI Funkcii
107
{ n=x; } ~Niza() {} int dodadiElement(int element) { if(n<20) { a[n]=element; n++; return 1; } else { cout<<"Nizata e celosno popolneta\n"; return 0; } } int brojElementi() { return n; } int zemiElement(int i) { if(i>=n) { cout<<"\nPogresen index\n"; return 0; } else return a[i]; } void duplikati() { int i=0, j, p; while(i<n) { for(j=i+1; j<n; j++) if(a[i]==a[j]) { for(p=j; p<n; p++)
Programski jazik C++ PISI Funkcii
108
{ a[p]=a[p+1]; } n--; } if(a[i]!=a[i+1]) i++; } } void unija(Niza &niza1, Niza &niza2) { int i; for(i=0; i<niza1.brojElementi(); i++) dodadiElement(niza1.zemiElement(i)); for(i=0; i<niza2.brojElementi(); i++) dodadiElement(niza2.zemiElement(i)); duplikati(); } void pecati() { cout<<"\nElementite na nizata se : \n"; for(int i=0; i<n; i++) cout<<a[i]<<" "; cout<<"\n"; } }; int main() { int broj, i, el; Niza niza1(0), niza2(0), nizaUnija(0); cout<<"Kolku elementi ke ima prvata niza? "; cin>>broj; cout<<"Vnesete gi elementite od prvata niza : "; for(i=0; i<broj; i++) { cin>>el; if(niza1.dodadiElement(el)==0) break; } cout<<"Kolku elementi ke ima vtorata niza? "; cin>>broj;
Programski jazik C++ PISI Funkcii
109
cout<<"Vnesete gi elementite od vtorata niza : "; for(i=0; i<broj; i++) { cin>>el; if(niza2.dodadiElement(el)==0) break; } nizaUnija.unija(niza1, niza2); cout<<"\nPrvata niza e :"; niza1.pecati(); cout<<"\nVtorata niza e :"; niza2.pecati(); cout<<"\nUnijata na nizite e :"; nizaUnija.pecati(); return 0; } _______________________________________________________ Test primer: VLEZ: Kolku elementi }e ima prvata niza? 4 Vnesete gi elementite od prvata niza : 1 2 3 4 x Kolku elementi }e ima vtorata niza? 5 Vnesete gi elementite od vtorata niza : 3 4 5 6 7 x Programata pe~ati: Prvata niza e : Elementite na nizata se: 1 2 3 4 Vtorata niza e : Elementite na nizata se: 3 4 5 6 7 Unijata na nizite e : Elementite na nizata se: 1 2 3 4 5 6 7
Programski jazik C++ PISI Funkcii
110
10. Da se razvie klasa Kniga so naslov, avtor i cena, kako i kopi-konstruktor za knigata. Re{enie:
Klasa Kniga
char naslov[50], avtor[20] naslovot i avtorot na knigata
int cena cena na knigata
Kniga(Kniga &k) kopi-konstruktor
void pecati() funkcija za pe~atewe na podatocite od knigata
char *getNaslov(),char *getAvtor()
funkcii za dobivawe na naslovot i avtorot na knigata
int getCena() funkcija za dobivawe na cenata na knigata
Vlezni promenlivi Izlezni promenlivi
i, c pomo{ni promenlivi
k, kopija originalnata kniga i kopijata
naslov[50], avtor[25]
naslovot i avtorot na knigata
cena cenata na knigata
#include<iostream> #include<string.h> using namespace std; class Kniga { private:
Programski jazik C++ PISI Funkcii
111
char naslov[50]; char avtor[25]; int cena; public: Kniga() { *naslov=*avtor='\0'; cena=0; } Kniga(char *i, char *a, int c) { int dolzina=strlen(i); strncpy(naslov,i, dolzina); naslov[dolzina]='\0'; dolzina=strlen(a); strncpy(avtor,a, dolzina); avtor[dolzina]='\0'; cena=c; } ~Kniga() {} Kniga(Kniga &k) { strcpy(naslov,k.getNaslov()); strcpy(avtor,k.getAvtor()); cena=k.getCena(); } char *getNaslov() { return naslov; } char *getAvtor() { return avtor; } int getCena() { return cena; } void pecati() { cout<<"\nNaslov : "<<naslov<<endl;
Programski jazik C++ PISI Funkcii
112
cout<<"Avtor : "<<avtor<<endl; cout<<"Cena : "<<cena<<endl; } }; int main() { int cena, i; char naslov[50], avtor[25], c; cout<<"Vnesete go naslovot na knigata : "; i=0; while((c=getchar())!='\n') {
naslov[i]=c; i++; } naslov[i]='\0'; cout<<"Vnesete go imeto na avtorot : "; i=0; while((c=getchar())!='\n') { avtor[i]=c; i++; } avtor[i]='\0'; cout<<"Vnesete cena na knigata : "; cin>>cena; Kniga k(naslov,avtor,cena); cout<<"\nVnesenata kniga e "; k.pecati(); Kniga kopija(k); cout<<"\nKopiranata kniga e :"; kopija.pecati(); return 0; }
Programski jazik C++ PISI Funkcii
113
_______________________________________________________ Test primer: VLEZ: Vnesete go naslovot na knigata : "Zlostorstvo i kazna" Vnesete go avtorot na knigata : Dostoevski Vnesete cena na knigata : 400 Programata pe~ati: Vnesenata kniga e : Naslov : "Zlostorstvo i kazna" Avtor : Dostoevski Cena : 400 Kopiranata kniga e : Naslov : "Zlostorstvo i kazna" Avtor : Dostoevski Cena : 400
Programski jazik C++ PISI Funkcii
114
11. Da se razvie klasa Kniga so naslov, avtor i cena, i da se preoptovari operatorot za pe~atewe na ekran <<. Re{enie:
Klasa Kniga
char naslov[50], avtor[20] naslov i avtorot na knigata
int cena cena na knigata
friend ostream & operator<<(ostream &prikazi, Kniga &k)
preoptovaruvawe na operatorot <<
char *getNaslov(),char *getAvtor()
funkcii za dobivawe na naslovot i avtorot na knigata
int getCena() funkcija za dobivawe na cenata na knigata
Vlezni promenlivi Izlezni promenlivi
i, c pomo{ni promenlivi
k kniga naslov[50], avtor[25]
naslovot i avtorot na knigata
cena cenata na knigata
#include<iostream> #include<string.h> using namespace std; class Kniga { private: char naslov[50]; char avtor[25];
Programski jazik C++ PISI Funkcii
115
int cena; public: Kniga() { *naslov=*avtor='\0'; cena=0; } Kniga(char *i, char *a, int c) { int dolzina=strlen(i); strncpy(naslov,i, dolzina); naslov[dolzina]='\0'; dolzina=strlen(a); strncpy(avtor,a, dolzina); avtor[dolzina]='\0'; cena=c; } ~Kniga() {} char *getNaslov() { return naslov; } char *getAvtor() { return avtor; } int getCena() { return cena; } friend ostream & operator<<(ostream &prikazi, Kniga &k) { prikazi<<"\nKniga :"<<endl; prikazi<<"Naslov : "<<k.getNaslov()<<endl; prikazi<<"Avtor : "<<k.getAvtor()<<endl; prikazi<<"Cena : "<<k.getCena()<<endl; return prikazi; } }; int main()
Programski jazik C++ PISI Funkcii
116
{ int cena, i; char naslov[50], avtor[25], c; cout<<"Vnesete go naslovot na knigata : "; i=0; while((c=getchar())!='\n') {
naslov[i]=c; i++; } naslov[i]='\0'; cout<<"Vnesete go imeto na avtorot : "; i=0; while((c=getchar())!='\n') { avtor[i]=c; i++; } avtor[i]='\0'; cout<<"Vnesete cena na knigata : "; cin>>cena; Kniga k(naslov,avtor,cena); cout<<k; return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go naslovot na knigata : "Zlostorstvo i kazna" Vnesete go avtorot na knigata : Dostoevski Vnesete cena na knigata : 400 Programata pe~ati: Kniga : Naslov : "Zlostorstvo i kazna" Avtor : Dostoevski Cena : 400
Programski jazik C++ PISI Funkcii
117
12. Da se razvie klasa za rabota so kompleksen broj so preoptovaruvawe na operatorite +(sobirawe) i *(mno`ewe). Re{enie:
Klasa Kompleksen
int realen, imaginaren realniot i imaginarniot del
void pecati() funkcija za pe~atewe na karakteristikite na triagolnikot
Kompleksen operator+(Kompleksen k) preotovaruvawe na operatorot +
Kompleksen operator*(Kompleksen k) preotovaruvawe na operatorot *
Vlezni promenlivi Izlezni promenlivi
re, im
promenlivi za realniot i imaginarniot del k3, k4 zbirot i proizvodot
na k1 i k2
k1, k2 kompleksni broevi
#include<iostream> using namespace std; class Kompleksen { private: int realen, imaginaren; public: Kompleksen() { realen=imaginaren=0; } Kompleksen(int r, int i) {
Programski jazik C++ PISI Funkcii
118
realen=r; imaginaren=i; } ~Kompleksen() {} int getRealen() { return realen; } int getImaginaren() { return imaginaren; } void pecati() { cout<<"\n"<<realen<<"+ i*("<<imaginaren<<") \n"; } Kompleksen operator+(Kompleksen k) { int re=k.getRealen(); int im=k.getImaginaren(); int pomreal, pomimag; pomreal=realen+re; pomimag=imaginaren+im; Kompleksen pom(pomreal, pomimag); return pom; } Kompleksen operator*(Kompleksen k) { int re=k.getRealen(); int im=k.getImaginaren(); int pomreal, pomimag; pomreal=realen*re-imaginaren*im; pomimag=realen*im+imaginaren*re; Kompleksen pom(pomreal, pomimag); return pom; } }; int main() {
Programski jazik C++ PISI Funkcii
119
int re, im; cout<<"Vnesete go prviot kompleksen broj : "; cin>>re>>im; Kompleksen k1(re,im); cout<<"Vnesete go vtoriot kompleksen broj : "; cin>>re>>im; Kompleksen k2(re,im); Kompleksen k3=k1+k2; Kompleksen k4=k1*k2; cout<<"\nPrviot kompleksen broj e "; k1.pecati(); cout<<"Vtoriot kompleksen broj e "; k2.pecati(); cout<<"Nivniot zbir iznesuva "; k3.pecati(); cout<<"Nivniot proizvod iznesuva "; k4.pecati(); system("pause"); return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go prviot kompleksen broj : 6 -11 Vnesete go vtoriot kompleksen broj : 4 17 Programata pe~ati: Prviot kompleksen broj e 6 + i*(-11) Vtoriot kompleksen broj e 4 + i*(17) Nivniot zbir iznesuva 10 + i*(6) Nivniot proizvod iznesuva 211 + i*(58)
Programski jazik C++ PISI Funkcii
120
13. Da se razvie klasa Niza koja sodr`i niza od celi broevi i da se preoptovari operatorot [ ] za dobivawe na elementite od nizata. Re{enie:
Klasa Niza
int a[20], n nizata i brojot na elementi od nizata
int &operator[](int i) preoptovaruvawe na operatorot [ ]
int dodadiElement(int element)
funkcija za dodavawe elementi vo nizata
int getSize() funkcija za dobivawe na brojot na elementi od nizata
Vlezni promenlivi Izlezni promenlivi
broj pomo{na promenliva
nova niza
#include<iostream> using namespace std; class Niza { private: int a[20]; int n; public: Niza(int x) { n=x; } ~Niza() {} int dodadiElement(int element) { if(n<20)
Programski jazik C++ PISI Funkcii
121
{ a[n]=element; n++; return 1; } else { cout<<"Nizata e celosno popolneta\n"; return 0; } } int getSize() { return n; } int &operator[](int i) { if(i<0 || i>=n) { cout<<"\nPogresen index! \n"; exit(-1); } else return a[i]; } }; int main() { int broj; Niza nova(0); cout<<"Vnesete gi elementite od nizata : "; while(cin>>broj) { if(nova.dodadiElement(broj)==0) break; } cout<<"\nVnesenata niza e :\n"; for(broj=0; broj<nova.getSize(); broj++) cout<<nova[broj]<<" "; cout<<endl; return 0; }
Programski jazik C++ PISI Funkcii
122
_______________________________________________________ Test primer: VLEZ: Vnesete gi elementite od nizata : 13 -21 36 55 -101 x Programata pe~ati: Elementite na nizata se: 13 -21 36 55 -101
Programski jazik C++ PISI Funkcii
123
14. Da se razvie klasa Delewe koja sodr`i realen broj i da se preoptovari operatorot za delewe /. Re{enie:
Klasa Delenje
float broj realen broj
Delenje operator/(Delenje d) preoptovaruvawe na operatorot /
void pecati() funkcija za pe~atewe na vrednosta na realniot broj
float getBroj() funkcija za dobivawe na realniot broj
Vlezni promenlivi Izlezni promenlivi
broj pomo{na promenliva
broj1, broj2,
rezultat
objekti od klasata Delewe
#include<iostream> using namespace std; class Delenje { private: float broj; public: Delenje(float x=1.0) { broj=x; } ~Delenje() {} Delenje operator/(Delenje d) { if(d.getBroj()==0.0) { cout<<"\nNema delenje so 0! \n";
Programski jazik C++ PISI Funkcii
124
} else { Delenje rez(broj/d.getBroj()); return rez; } } float getBroj() { return broj; } void pecati() { cout<<broj; } }; int main() { int broj; cout<<"Vnesete go delenikot : "; cin>>broj; Delenje broj1(broj); cout<<"Vnesete go delitelot : "; cin>>broj; Delenje broj2(broj); Delenje rezultat=broj1/broj2; broj1.pecati(); cout<<" / "; broj2.pecati(); cout<<" = "; rezultat.pecati(); return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go delenikot : 10 Vnesete go delitelot : 3 Programata pe~ati: 10 / 3 = 3.33333
Programski jazik C++ PISI Funkcii
125
15. Da se napi{e klasa za telo od 3D prostor so funkcii za povr{ina i volumen. Od nea da se izvedat klasite za sfera i kvadar. Re{enie:
Klasa Telo
virtual float povrsina()=0 funkcija za povr{ina na telo
virtual float volumen()=0 funkcija za volumen na telo
virtual void pecati() funkcija za pe~atewe na podatocite na teloto
Klasa Sfera
int radius radius na sferata
Klasa Kvadar
int a, b, c strani na kvadarot
Vlezni promenlivi Izlezni promenlivi
s, k sfera i kvadar
#include<iostream> using namespace std; class Telo { public: virtual float povrsina()=0; virtual float volumen()=0; virtual void pecati() {
Programski jazik C++ PISI Funkcii
126
cout<<"Povrsina : "<<povrsina()<<endl; cout<<"Volumen : "<<volumen()<<endl; } }; class Sfera: public Telo { private: int radius; public: Sfera(int r=0) { radius=r; } float povrsina() { return 4*radius*radius*3.14; } float volumen() { return (4*radius*radius*radius*3.14)/3; } void pecati() { cout<<"\nKrug so radius "<<radius<<endl; Telo::pecati(); } }; class Kvadar: public Telo { private: int a, b ,c; public: Kvadar(int x=0, int y=0, int z=0) { a=x; b=y; c=z; } float povrsina() {
Programski jazik C++ PISI Funkcii
127
return 2*(a*b+b*c+c*a); } float volumen() { return a*b*c; } void pecati() { cout<<"Kvadar so strani "<<a<<", "<<b<<" i "<<c; Telo::pecati(); } }; int main() { Sfera s(10); Kvadar k(2,3,4); s.pecati(); cout<<endl; k.pecati(); return 0; } _______________________________________________________ Test primer: Programata pe~ati: Krug so radius 10 Povr{ina : 1256 Volumen : 4186.67 Kvadar so strani 2, 3 i 4 Povr{ina : 52 Volumen : 24
Programski jazik C++ PISI Funkcii
128
16. Da se napi{e klasa za to~ka vo 2D prostor so funkcija za rastojanie pome|u dve to~ki, i od nea da se nasledi klasa za to~ka vo 3D, isto taka so funkcija za rastojanie pome|u dve to~ki vo 3D prostor. Re{enie:
Klasa Tocka2D
int x, y koordinati na to~kata
int getX(), getY() funkcii za dobivawe na vrednostite na x i y
float rastojanie(Tocka2D &t)
rastojanie pome|u to~kite od 2D prostor
void pecati() funkcija za pe~atewe na koordinatite na to~kata
Klasa Tocka3D
int z koordinatata z na to~kata
int getZ() funkcija za dobivawe na vrednosta na z
float rastojanie(Tocka3D &t)
rastojanie pome|u to~kite od 3D prostor
void pecati() funkcija za pe~atewe na koordinatite na to~kata
Vlezni promenlivi Izlezni promenlivi
t1, t2 to~ki od 2D prostor
k1, k2 to~ki od 3D prostor
Programski jazik C++ PISI Funkcii
129
#include<iostream> #include<math.h> using namespace std; class Tocka2D { private: int x, y; public: Tocka2D(int a, int b) { x=a; y=b; } ~Tocka2D() {} int getX() { return x; } int getY() { return y; } float rastojanie(Tocka2D &t) { int tx=t.getX(); int ty=t.getY(); return sqrt((x-tx)*(x-tx)+(y-ty)*(y-ty)); } void pecati() { cout<<x<<", "<<y; } }; class Tocka3D: public Tocka2D { private: int z; public: Tocka3D(int a, int b, int c):Tocka2D(a,b)
Programski jazik C++ PISI Funkcii
130
{ z=c; } ~Tocka3D() {} int getZ() { return z; } float rastojanie(Tocka3D &t) { int mx=Tocka2D::getX(); int my=Tocka2D::getY(); int tx=t.getX(); int ty=t.getY(); int tz=t.getZ(); return sqrt((mx-tx)*(mx-tx)+(my-ty)*(my-ty)+(z-tz)*(z-tz)); } void pecati() { Tocka2D::pecati(); cout<<", "<<z; } }; int main() { Tocka2D t1(3,4); Tocka2D t2(0,0); Tocka3D k1(1,2,2); Tocka3D k2(0,0,0); cout<<"Tocka vo 2D : ("; t1.pecati(); cout<<")\n"; cout<<"Tocka vo 3D : ("; k1.pecati(); cout<<")\n"; cout<<"\nRastojanie na tockata od 2D do koordinaten pocetok e "<<t1.rastojanie(t2)<<endl; cout<<"Rastojanie na tockata od 3D do koordinaten pocetok e "<<k1.rastojanie(k2)<<endl;
Programski jazik C++ PISI Funkcii
131
return 0; } _______________________________________________________ Test primer: Programata pe~ati: To~ka vo 2D : (3, 4) To~ka vo 3D : (1, 2, 2) Rastojanie na to~kata od 2D do koordinaten po~etok e 5 Rastojanie na to~kata od 3D do koordinaten po~etok e 3
Programski jazik C++ PISI Funkcii
132
17. Da se razvie klasa Smetka koja sodr`i ime i prezime na korisnikot i iznos na smetkata, kako i metod za dodavawe i podigawe pari od smetkata i metod za pe~atewe na podatocite od smetkata. Od nea da se izvede klasa SmetkaMinus vo koja }e bide dozvoleno da se odi vo minus do prethodno opredelena suma. Re{enie:
Klasa Smetka
char ime[15], prezime[20] imeto i prezimeto na korisnikot
int iznos iznos na smetkata
void pecati() funkcija za pe~atewe na podatocite od smetkata
void dodadiSuma(int suma)
funkcija za dodavawe pari na smetkata
void podigniSuma(int suma)
funkcija za podigawe pari od smetkata
int getIznos() funkcija za dobivawe na iznosot na pari na smetkata
void setIznos(int i) funkcija za dodeluvawe vrednost na iznosot na pari na smetkata
Klasa SmetkaMinus
int minus dozvolen minus (pozitiven broj)
void podigniSuma(int suma)
funkcija za podigawe pari od smetkata
Programski jazik C++ PISI Funkcii
133
Vlezni promenlivi Izlezni promenlivi
suma promenliva za vnesenite sumi
s smetka
ime[15], prezime[20]
imeto i prezimeto na korisnikot
#include<iostream> #include<string.h> using namespace std; class Smetka { private: char ime[15]; char prezime[20]; int iznos; public: Smetka(char *i='\0', char *p='\0', int suma=0) { strcpy(ime,i); strcpy(prezime,p); iznos=suma; } ~Smetka() {} void dodadiSuma(int suma) { if(suma<=0) cout<<"Ne se dodava negativna suma\n"; else iznos+=suma; } void podigniSuma(int suma) { if(suma<=0) cout<<"Ne se podiga negativna suma\n"; else
Programski jazik C++ PISI Funkcii
134
{ if(iznos-suma<0) cout<<"Ne e dozvolen minus na smetkata\n"; else iznos-=suma; } } int getIznos() { return iznos; } void setIznos(int i) { iznos=i; } void pecati() { cout<<"\nIme : "<<ime<<endl; cout<<"Prezime : "<<prezime<<endl; cout<<"Iznos na smetka : "<<iznos<<endl; } }; class SmetkaMinus: public Smetka { private: int minus; public: SmetkaMinus(char *i='\0', char *p='\0', int suma=0, int min=0):Smetka(i,p,suma) { minus=min*(-1); } ~SmetkaMinus() {} void podigniSuma(int suma) { int iz=Smetka::getIznos(); if(suma<=0) cout<<"Ne se podiga negativna suma\n"; else
Programski jazik C++ PISI Funkcii
135
{ if(iz-suma<minus) cout<<"Ne e dozvolen tolku golem minus na smetkata\n"; else { iz-=suma; Smetka::setIznos(iz); } } } }; int main() { int suma, minus; char ime[15], prezime[10]; cout<<"Vnesete go imeto na korisnikot : "; cin>>ime; cout<<"Vnesete go prezimeto na korisnikot : "; cin>>prezime; cout<<"Vnesete poceten iznos na smetkata : "; cin>>suma; cout<<"Vnesete dozvolen minus na smetkata : "; cin>>minus; SmetkaMinus s(ime,prezime,suma, minus); s.pecati(); cout<<"\nDodadete pari na smetkata : "; cin>>suma; s.dodadiSuma(suma); s.pecati(); cout<<"\nPodignete pari od smetkata : "; cin>>suma; s.podigniSuma(suma); s.pecati(); return 0; }
Programski jazik C++ PISI Funkcii
136
_______________________________________________________ Test primer: VLEZ: Vnesete go imeto na korisnikot : Elena Vnesete go prezimeto na korisnikot: Doneska Vnesete po~eten iznos na smetkata : 5000 Vnesete dozvolen minus na smetkata : 2000 Programata pe~ati: Ime : Elena Prezime : Doneska Iznos na smetka : 5000 Dodadete pari na smetkata : 1000 Ime : Elena Prezime : Doneska Iznos na smetka : 6000 Podignete pari od smetkata : 7000 Ime : Elena Prezime : Doneska Iznos na smetka : -1000
Programski jazik C++ PISI Funkcii
137
18. Da se napi{e klasa za Vraboten koja sodr`i ime, prezime i plata na vraboteniot, kako i metod za pe~atewe na podatocite. Od nea da se izvede klasa Menaxer koja sodr`i i oddel so koj rakovodi menaxerot. Re{enie:
Klasa Vraboten
char ime[15], prezime[20] imeto i prezimeto na vraboteniot
int plata plata
void pecati() funkcija za pe~atewe na podatocite za vraboteniot
Klasa Menadzer
char oddel[20] oddel so koj rakovodi menaxerot
void pecati() funkcija za pe~atewe na podatocite za menaxerot
Vlezni promenlivi Izlezni promenlivi
plata plata
v, m vraboten i menaxer ime[15],
prezime[20], oddel[20]
imeto, prezimeto i oddelot
c pomo{na promenliva
#include<iostream> #include<string.h> #include<ctype.h> using namespace std;
Programski jazik C++ PISI Funkcii
138
class Vraboten { private: char ime[15]; char prezime[20]; int plata; public: Vraboten(char *i='\0', char *p='\0', int pl=0) { strcpy(ime,i); strcpy(prezime,p); plata=pl; } ~Vraboten() {} void pecati() { cout<<"\nIme : "<<ime<<endl; cout<<"Prezime : "<<prezime<<endl; cout<<"Plata : "<<plata<<" denari"<<endl; } }; class Menadzer: public Vraboten { private: char oddel[20]; public: Menadzer(char *i='\0', char *p='\0', int suma=0, char *o='\0'):Vraboten(i,p,suma) { strcpy(oddel,o); } ~Menadzer() {} void pecati() { cout<<"\nMenadzer :"; Vraboten::pecati(); cout<<"Oddel : "<<oddel<<endl; }
Programski jazik C++ PISI Funkcii
139
}; int main() { int plata; char ime[15], prezime[20], oddel[20], c; cout<<"Vnesete go imeto na vraboteniot : "; cin>>ime; cout<<"Vnesete go prezimeto na vraboteniot : "; cin>>prezime; cout<<"Vnesete ja platata na vraboteniot : "; cin>>plata; cout<<"Dali vraboteniot e menadzer (Y/N) : "; cin>>c; c=toupper(c); if(c=='Y') { cout<<"Vnesete go oddelot na menadzerot : "; cin>>oddel; Menadzer m(ime,prezime,plata,oddel); m.pecati(); } else { Vraboten v(ime,prezime,plata); v.pecati(); } return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go imeto na vraboteniot : Marko Vnesete go prezimeto na vraboteniot: Bo`inovski Vnesete ja platata na vraboteniot: 25000 Dali vraboteniot e menaxer (Y/N) : y Vnesete go oddelot na menaxerot : Nabavki
Programski jazik C++ PISI Funkcii
140
Programata pe~ati: Menaxer : Ime : Marko Prezime : Bo`inovski Plata : 25000 Oddel : Nabavki
Programski jazik C++ PISI Funkcii
141
19. Da se razvie klasa Delewe koja sodr`i realen broj i da se preoptovari operatorot za delewe / koj pri delewe so nula dava poraka za gre{ka. Re{enie:
Klasa Delenje
float broj realen broj
Delenje operator/(Delenje d) throw(char*)
preoptovaruvawe na operatorot / so poraka za gre{ka pri delewe so nula
void pecati() funkcija za pe~atewe na vrednosta na realniot broj
float getBroj() funkcija za dobivawe na realniot broj
Vlezni promenlivi Izlezni promenlivi
broj pomo{na promenliva
broj1, broj2,
rezultat
objekti od klasata Delewe
#include<iostream> using namespace std; class Delenje { private: float broj; public: Delenje(float x=1.0) { broj=x; } ~Delenje() {} Delenje operator/(Delenje d) throw(char*) { if(d.getBroj()==0)
Programski jazik C++ PISI Funkcii
142
{ char *pom; pom="Greska! So nula ne se deli!.\n"; throw pom; } Delenje rez(broj/d.getBroj()); return rez; } float getBroj() { return broj; } void pecati() { cout<<broj; } }; int main() { int broj; cout<<"Vnesete go delenikot : "; cin>>broj; Delenje broj1(broj); cout<<"Vnesete go delitelot : "; cin>>broj; Delenje broj2(broj); try { Delenje rezultat=broj1/broj2; cout<<endl; broj1.pecati(); cout<<" / "; broj2.pecati(); cout<<" = "; rezultat.pecati(); cout<<endl; } catch(char *s) { cout<<s;
Programski jazik C++ PISI Funkcii
143
} return 0; } _______________________________________________________ Test primer: VLEZ: Vnesete go delenikot : 15 Vnesete go delitelot : 0 Programata pe~ati: Gre{ka! So nula ne se deli!
Programski jazik C++ PISI Funkcii
144
20. Da se razvie klasa Niza koja sodr`i niza od celi broevi i da se preoptovari operatorot [ ] za dobivawe na elementite od nizata koj dava poraka za gre{ka pri nevaliden indeks. Re{enie:
Klasa Niza
int a[20], n nizata i brojot na elementi od nizata
int &operator[](int i) throw(int)
preoptovaruvawe na operatorot [ ] koj dava poraka za gre{ka pri nevaliden indeks
int dodadiElement(int element)
funkcija za dodavawe elementi vo nizata
Vlezni promenlivi Izlezni promenlivi
broj, n, i pomo{ni promenlivi
nova niza
#include<iostream> using namespace std; class Niza { private: int a[20]; int n; public: Niza(int x) { n=x; } ~Niza() {} int dodadiElement(int element) { if(n<20) {
Programski jazik C++ PISI Funkcii
145
a[n]=element; n++; return 1; } else { cout<<"Nizata e celosno popolneta\n"; return 0; } } int &operator[](int i) throw(int) { if(i<0 || i>=n) throw i; else return a[i]; } }; int main() { int broj, n, i; Niza nova(0); cout<<"Kolku elementi ke ima nizata? ";
cin>>n; cout<<"Vnesete gi elementite od nizata :\n"; for(i=0; i<n; i++) {
cout<<"a["<<i<<"] = "; cin>>broj; nova.dodadiElement(broj);
} try { cout<<"Vnesete indeks na elementot koj ve interesira : "; cin>>broj; cout<<nova[broj]; } catch(int i) { cout<<"Ne postoi element a["<<i<<"] \n"; }
Programski jazik C++ PISI Funkcii
146
return 0; } _______________________________________________________ Test primer: VLEZ: Kolku elementi }e ima nizata ? 5 Vnesete gi elementite od nizata: a[0]=33 a[1]= -7 a[2]=12 a[3]=0 a[4]=10 Vnesete indeks na elementot koj ve interesira : 7 Programata pe~ati: Ne postoi element a[7].