mira nikolić
TRANSCRIPT
Mira Nikolić
Zbirka rešenih zadataka
iz programskog jezika C i C++
2. DEO
Sadržaj:
SLIČNOSTI I RAZLIKE C I C++
FUNKCIJE
POKAZIVAČI
NIZOVI
MATRICE
MODULI
PRETRAŽIVANJE I SORTIRANJE
NIZOVA
Mira Nikolić
2
PROGRAMI U C++ 1. Upotreba cin,cout
#include <iostream.h> void main(void) { int x = 5,y = 7; cout << "Unesite prvi broj "; cin >> x; cout << "Unesite drugi broj "; cin >> y; cout << endl << "Rezultati su " << endl; cout << " x+y = " << x+y << endl; cout << " x*y = " << x*y << endl; }
2. Program za izračunavanje obima i površine trougla (Heronov obrazac) #include <iostream.h> #include <conio.h> #include <math.h> #include <iomanip.h> //za postavljanje sirine ispisa i preciznosti //setw(6) sirina broja je 6 //setprecision(4) decimalnih mesta 4 void main (void) {
float a,b,c,s,o,p; clrscr(); cout<<"Program racuna obim i povrsinu trougla pomocu Heronovog
obrasca "<<endl; cout<<endl<<"Unesite duzine stranica trougla"<<endl; cout<<"a="; cin>>a; cout<<"b="; cin>>b; cout<<"c="; cin>>c; s=(a+b+c)/2; p=sqrt(s*(s-a)*(s-b)*(s-c)); o=2*s; cout<< setw(6)<< setprecision(4)<<endl<<"Obim je "<<o<<endl; cout<<"Povrsina je "<<p<<endl; getch();
}
3. Program koji resava kvadratnu jednacinu za ucitano a,b,c. #include<iostream.h> #include<math.h> void main(void) { float a,b,c,x1,x2,d;
cout<<endl<<endl<<"Ovaj program resava kvadratnu jednacinu"; cout<<endl<<"\tax^2+bx+c=0"<<endl; cout<<"a="; cin>>a; cout<<"b="; cin>>b; cout<<"c="; cin>>c; d=b*b-4*a*c; if(d>0) { x1=(-b-sqrt(d))/(2*a); x2=(-b+sqrt(d))/(2*a); cout<<endl<<"Kvadratna jednacina ima realna i
razlicita resenja:"<<endl; cout<<" x1="<<x1<<" x2="<<x2<<endl; } else if(d==0) { x1=b/(2*a); cout<<endl<<"Resenja su realna i jednaka:"; cout<<endl<<"x1=x2= "<<x1<<endl; } else { x1=-b/(2*a); x2=sqrt(-d)/(2*a); cout<<endl<<"Resenja su konjugovano kompleksna:"; cout<<endl<<"x1= "<<x1<<"+i"<<x2; cout<<endl<<"x2= "<<x1<<"-i"<<x2<<endl; }
}
Zbirka rešenih zadataka iz C jezika – drugi deo
3
4. Program koji racuna minimalni i maksimalni od dva ucitana broja a i b korišcenjem kraceg zapisa naredbe if
#include <iostream.h> void main (void) {
int a,b,min,max; cout<<endl<<"Ovaj program racuna min i max od dva ucitana
broja a i b "<<endl; cout<<endl<<"Ucitajte broj a="; cin>>a; cout<<endl<<"Ucitajte broj b="; cin>>b; (a>b)?(min=b,max=a):(min=a,max=b); cout<<endl<<"max= "<<max<<" min= "<<min<<endl; }
5. Program za nalaženje najveceg zajednickog delioca dva nenegativna cela broja #include<iostream.h> void main(void) { int prvi, drugi, pomocni; cout<<"Ukucajte dva nenegativna cela broja "<<endl; cin>>prvi>>drugi; while(drugi!=0) { pomocni=prvi%drugi; prvi=drugi; drugi=pomocni; } cout<<"Najveci zajednicki delilac ovih brojeva je "<<prvi<<endl; }
6. Program za odredjivanje Pitagorinih brojeva manjih od 40 a2+ b2= c2 #include <iostream.h> #include <math.h> void main(void) { int a,b,c; cout<<"Ovaj program odredjuje Pitagorine brojeve a,b<40"<<endl; cout<<"\t\ta*a+b*b=c*c"<<endl<<endl; for(a=1;a<=40;a++) for(b=a;b<=40;b++) { c=sqrt(float(a*a+b*b));
//funkcija sqrt mora imati float ili double argument if(a*a+b*b==c*c) cout<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t\t"<<endl; } }
7. Program za odredjivanje savršenih brojeva do učitanog m ( broj je savršen ako je jednak sumi svojih činilaca 6=1+2+3) #include <iostream.h> void main(void) { int i,n,m,suma; cout<<endl<<"Ovaj program racuna savrsene brojeve od 2 do ucitanog m"<<endl; cout<<endl<<"Ucitajte m ";
cin>>m; cout<<endl<<"Savrseni brojevi od 2 do "<<m<<" su"<<endl; for(n=2;n<=m;n++) { suma=1; for(i=2;i<=n/2;i++) if (n%i==0) suma+=i; if (suma==n) cout<<n<<"\t"; } cout<<endl; }
Mira Nikolić
4
8. Program koji učitava niz, računa zbir i srednju vrednost #include <iostream.h> void main(void) {
int i; float x[10],xsr,s; cout<<"Ucitava se niz, racuna zbir i srednja vrednost"
<<endl<<endl; cout<<"Unesite 10 elemenata niza "<<endl<<endl; for (s=0,i=0;i<10;i++) { cout<<"x["<<i+1<<"]= "; cin>>x[i]; s+=x[i]; } xsr=s/10; cout<<endl<<"Zbir clanova niza je "<<s<<", a prosecna vrednost je "
<<xsr<<endl; }
9. Program koji ucitava niz i menja predznak elementima sa parnim indeksom
#include<iostream.h> void main(void) { int i,n,a[50]; cout<<" Ovaj program za ucitanu duzinu niza"<<endl; cout<<" obrce predznak brojevima sa parnim indeksom"<<endl; cout<<endl<<"Ucitaj duzinu niza: "; cin>>n; cout<<endl; for(i=0;i<n;i++) { cout<<"\t a["<<i+1<<"]="; cin>>a[i]; if(i%2==1) //smatramo da je neparno i ono koje je na ekranu, a[i]=-a[i]; //a ne ono u programu } for(i=0;i<n;i++) cout<<endl<<" a["<<i+1<<"]="<<a[i]; cout<<endl; }
10. Program koji učitava niz od 10 kompleksnih brojeva i računa njihove module (efektivne vrednosti)
#include<iostream.h> #include<math.h> void main(void) {
int i; double Re[10], Im[10], m=0; char predzn='-';
cout<<"Program ispisuje 10 kompleksnih brojeva i racuna "<<endl; cout<<"\tnjihov moduo (efektivnu vrednost)"<<endl<<endl; for(i=0;i<10;i++) { cout<<" Re["<<i+1<<"]="; cin>>Re[i]; cout<<" Im["<<i+1<<"]="; cin>>Im[i]; } cout<<endl<<"\tKompleksno\t\tEfektivno"<<end; //zaglavlje for(i=0;i<10;i++) { m=sqrt((Re[i]*Re[i])+(Im[i]*Im[i])); if(Im[i]>=0) predzn='+'; else predzn='-';
coutl<<"\t"<<Re[i]<<predzn<<"j"<<fabs(Im[i])<<"\t\t\t"<<m<<endl;
}
Sledeće zadatke uradi za vežbu: Ulaz-izlaz
Program za računanje vrednosti izraza ba
ccba
+−
− 23
)cos()(
Zbirka rešenih zadataka iz C jezika – drugi deo
5
Program za računanje vrednosti izraza dc
ba+−3 2
Program za izračunavanje zbira cifara trocifrenog broja abc Primeti: a= n / 100; b= n / 10 % 10; c= n % 10; Program za izračunavanje otpornosti bakarnog provodnika ako se znaju dužina i prečnik u mm. # define ROcu 1.588e-8 # define PI 3.14 S=(d/1000)*(d/1000)*PI/4; R=ROcu*L/S; Program za izračunavanje kapacitivnosti pločastog kondenzatora ako se zna površina i rastojanje između obloga u mm. # define E0 8.854e-12 c=epsr*E0*s/(d*1000); Primeti: Kapacitet kondenzatora je vrlo mala veličina p se mora pisati eksponencijalno inače ce izgledati da je nula! printf("\n\tC=%e",c) Program za pretvaranje otpornosti vezanih u zvezdu u otpore vezane u trougao Rab=Ra+Rb+Ra*Rb/Rc ...... Program za pretvaranje R vezanih u trougao u otpore vezane u zvezdu Ra=Rac*Rab/(Rac+Rbc+Rab) ...... Uslovi Program za izračunavanje apsolutne vrednosti broja bez upotrebe abs Program koji računa minimalni i maksimalni od dva učitana broja a i b Korišćenjem kraćeg zapisa naredbe if
(a>b)?(min=b,max=a):(min=a,max=b);
napiši program za izračunavanje izraza za učitane x i y: ),min(1
),max(yx
yxz−
=
Program koji za učitano x štampa vrednost funkcije -1, x<0
y= x2-1, 0≤x≤3 8, x>3
Program koji računa vrednost f(x) za ucitano x.
-2 x<-2 f(x)= x -2<x<2
10-2x x>2 Program koji računa koliki je maksimalni od tri učitana broja a,b,c Program koji proverava da li je učitani broj abc Armstrongov
abc=a3+ b3+ c3 Primeti: a= n / 100; b= n / 10 % 10; c= n % 10; Program koji računa koliki je zbir cifara broja abc umanjen za max(a,b,c) Za učitani trocifren broj abc nađi najveću i najmanju cifru Program koji računa da li se dati krug može upisati u kvadrat i obrnuto. Učitavaju se površine kvadrata i kruga Pkv i Pkr.
Pomoć: a=sqrt(Pkv); r=sqrt(Pkr/PI); a*sqrt(2)<=2*r Kvadrat stranice moze da se upise u krug 2*r<=a Krug moze da se upise u kvadrat
Program koji ispisuje uspeh za učitanu ocenu korišćenjem naredbe switch-case
switch (ocena) { case 5: printf("odlican");break; case 4: printf("vrlo dobar");break; case 3: printf("dobar");break; case 2: printf("dovoljan");break; default: printf("nekorektna ocena"); /*svi ostali slucajevi*/ } Ciklusi Programi koji račnaju S:
1. S=1+2+3+.......+n 2. P=1*2*3*4*......*n=n! 3. S=2+4+6+.......+100 4. S=21+23+25+.......+99 5. Proizvod parnih brojeva između m i n 6. Zbir neparnih brojeva između k i n
Mira Nikolić
6
Program za izračunavanje 1+2+3+...+n Program za izračunavanje faktorijela
Program za traženje srednje vrednosti n celih pozitivnih brojeva Program za izračunavanje m+(m+1)+(m+2)+...+n Program za izračunavanje m*(m+1)*(m+2)+...*n Program za izračunavanje 1-1/2+3-1/4...+n Pomoć: if(i%2==0) S+=i... Program koji računa sumu kvadrata parnih, a kubova neparnih brojeva izmedju m i n Program računa zbir kubova parnih, a recipročnih vrednosti kvadrata neparnih brojeva izmedju m i n Program koji određuje maksimalnu i minimalnu temperaturu maxT i minT tokom n dana merenja t Program koji ispisuje tabelu funkcije y=-3x2+2x+1 od tačke a sa korakom dx u n tacaka Program koji ispisuje tabelu funkcije y=sin(x)+2x2 u intervalu od a do b u n tacaka
Pomoć: pre ciklusa for izračunaj priraštaj dx=(b-a)/(n-1);
Program računa n puta koren za učitano n 3.....333 +++ Program računa x+x2+x3+...xn za učitano n i x Program računa x+2x2+3x3+...nxn za učitano n i x Program računa sumu faktorijela 1!+2!+...+n! za učitano n
Pomoć: pamti prethodni član radi bržeg računanja Program za odredjivanje srednje vrednosti n celih pozitivnih brojeva Program za permutovanje cifara celog broja
Program za odredjivanje trocifrenih Armstrongovih brojeva
abc=a3+ b3+ c3 Pomoć: for(m=100;m<=999;m++) { a=... b=... c=....; if (m==a*a*a+b*b*b+c*c*c) printf("%d\n",m); } Program za određivanje n-tog Fibonačijevog broja
f1=1, f2=1, fn=fn-2+fn-1 Program za nalaženje zbira prvih n Fibonačijevih brojeva Program za nalaženje najvećeg zajedničkog delioca dva cela broja
Program za odredjivanje trocifrenih prostih brojeva Program koji određuje koliko sati se planinar penje na vrh ako svakog sata ide 25 posto sporije Pomoć: v - polazna visina, h - ciljna visina, a - visina koju savlada prvog/tekućeg sata, s – tekuća visina i - broj sati while(s<h) { a*=0.75; s+=a; i++; } Program koji određuje posle koliko godina i će broj riba u jezeru r pasti na kritičnu vrednost rkrit ako se godišnje smanjuje za dati procenat p Pomoć: while(r>=rkrit) { r*=1-p/100; i++; } Nizovi Program koji sabira elemente niza od 5 celih brojeva S=a1+ a2+ a3+ a4+ a5
Program koji računa prosečni element niza od n celih brojeva a1, a2, a3.... an Učitaj niz i nađi koliko je elemenata veće od prosečnog Program koji za učitani niz od 10 celih brojeva nalazi najveći element max
Zbirka rešenih zadataka iz C jezika – drugi deo
7
Program koji za učitani niz od 10 celih brojeva nalazi najmanji element min Program koji za učitani niz od 10 celih brojeva nalazi najveći element max i njegovu poziciju maxpoz Program koji za učitani niz od 10 celih brojeva nalazi najveći i najmanji element max i min i njihove pozicije maxpoz i minpoz Program koji učitava niz i broji neparne elemente niza Pomoć: if(a[i]%2==1) br++; Program koji učitava niz i broji koliko je elemenata niza deljivo sa 3 Učitaj niz i izbroj parne i negativne elemente niza Učitaj niz i izbroj neparne elemente niza deljive sa 7 Program koji sabira parne elemente niz sa neparnim indeksima Program koji računa aritmetičku sredinu pozitivnih elemenata niza Program koji učitava niz i menja predznak elementima sa parnim indeksom
Program koji učitava niz a duzine 2n, pa od njega formira dva niza, b i c, duzine n, tako da elementi b budu 2,4,,6..., 2n-ti element a, a elementi c pretposlednji (2n-1), 2n-3..., 1. element a
Pomoć: b[i]=a[2*i+1]; c[i]=a[2*(n-i-1)];
Program koji za poznate nizove a i b formira niz c tako što sabira odgovarajuće parove a i b za parnoi a množi ih za neparno i
Pomoć: ne moraju se učitavati vrednosti, već se zadaju pri deklaraciji: int i,a[20]={4,3,45,5,6,2,3,4,5,9,8,12,23,4,56,64,3,4,1,2}, b[20]={23,7,6,8,2,3,4,5,6,7,1,2,4,5,6,5,4,7,6,5},c[20];
Program koji učitava niz i pronalazi broj elemenata koji prethode prvom negativnom elementu Program koji učitava niz i pronalazi proizvod elemenata između prve dve nule u nizu ako ih ima Program koji učitava niz a i formira i štampa niz b tako što iz prvog niza izbacuje sve elemente deljive sa 3
Program koji učitava niz a i formira i štampa niz b tako što iz prvog niza izbacuje sve neparne elemente Program za sortiranje nizova realnih brojeva od najmanjeg do najvećeg
(Naredba koja se razlikuje za sortiranje nizova realnih brojeva od najvećeg do najmanjeg.)
Program koji učitava niz a, sortira ga po opadajućem redu, ubacuje u njega broj 7 na odgovarajuću poziciju i onda ga štampa. Pomoć: bolje je ubaciti 7 na kraj niza,pa ga onda sortirati! Odredi iz koliko se različitih cifara sastoji dati prirodni broj Pomoć: formirati niz c[10] čiji su elementi broj cifara 0,1, 2,...9 u datom broju
Mira Nikolić
8
FUNKCIJE
11. Program koji računa minimalni i maksimalni od četiri ucitana broja a,b,c i d korišćenjem funkcija min(x,y) i max(x,y)
#include <iostream.h> #include <conio.h> int min(int x, int y) { return (x<y)?x:y; } int max(int x, int y) { return (x>y)?x:y; } void main (void) {
int a,b,c,d; clrscr();
cout<<endl<<"Ovaj program racuna min i max od 4 broja "<<endl; cout<<endl<<"Ucitajte broj a="; cin>>a; cout<<endl<<"Ucitajte broj b="; cin>>b;
cout<<endl<<"Ucitajte broj c="; cin>>c; cout<<endl<<"Ucitajte broj d="; cin>>d; cout<<endl<<"Najveci broj je "<<max(max(a,b),max(c,d))<<endl;
cout<<endl<<"Najmanji broj je "<<min(min(a,b),min(c,d))<<endl; }
12. Program računa sumu kvadrata brojeva od 3 do 18 umanjenu za sumu
kvadrata brojeva od 9 do 10
#include <stdio.h> #include <conio.h> void main(void)
{ double Sk(); clrscr(); printf("Ovaj program racuna sumu kvadrata brojeva od 3 do 18\n"); printf("umanjenu za sumu kvadrata brojeva od 9 do 10\n"); printf(" Suma=%lf \n",Sk(3,18)-Sk(9,10));
}
double Sk(int m, int n) {
double y; for(y=0;m<=n;m++) y+=m*m; return(y);
}
13. Program računa n-ti stepen realnog broja a za učitano a i n
#include <iostream.h> #include <conio.h> void main(void) {
int n; double a; double stepen(double a, int n); //prototip funkcije clrscr(); cout<<endl<<"Ovaj program racuna vrednost a na n-ti stepen "<<endl; cout<<"Ucitajte a:"; cin>>a; cout<<"Ucitajte n:"; cin>>n; cout<<endl<<a<<" na "<<n<<".stepen je "<<stepen(a,n); getch();
} double stepen(double a, int n) {
int i; double an=1; for (i=0;i<n;i++) an*=a; return(an);
}
Zbirka rešenih zadataka iz C jezika – drugi deo
9
14. Program za štampanje svih prostih brojeva do učitanog n
a. u jeziku C
#include<stdio.h> #include<conio.h> void main(void) {
int n,m; int prost(); textbackground(20); textcolor(15); clrscr(); printf("\nPROGRAM ISPISUJE PROSTE BROJEVE DO N\n"); printf("Ucitajte n, n>8 :\n\n\n"); scanf("%d",&n); printf("Prosti brojevi do %d su:\n",n); printf("1\t3\t5\t7\t"); /*stampa prvih prostih brojeva*/ for(m=9; m<=n; m+=2) /*uzimamo u obzir samo neparne*/ if (prost(m)) { printf("%d\t",m); delay(100); }
} int prost(int m) {
int i=3; while ((m%i!=0)&&(i<=m/2)) i+=2; if (i>m/2) return(m); else return(0);
}
b. u jeziku C++
#include <iostream.h> #include <math.h> #include <conio.h> #include <iomanip.h> //za postavljanje sirine ispisa i preciznosti int prost(int m); //prototip funkcije void main(void) { int n,m; clrscr(); cout<<endl<<"Ovaj program ispisuje proste brojeve od 2 do
ucitanog n"<<endl; cout<<endl<<"Ucitajte n: "; cin>>n; cout<<endl<<"Prosti brojevi od 2 do "<<n<<" su"<<endl; cout<<" 1 3 5 7"; for(m=9;m<=n;m+=2) if (prost(m)) cout<<setw(8)<<m; getch(); } int prost(int m) { int i=3; while ((m%i!=0)&&(i<=m/2))i+=2; if(i>m/2) return m; else return 0; }
Mira Nikolić
10
15. Program koji za učitane 3 tačke štampa obim i površinu trougla koji čine.
#include <iostream.h> #include <conio.h> #include <math.h> float dist(float x1, float y1, float x2, float y2) { return sqrt(pow(x1-x2,2)+pow(y1-y2,2)); } int moze_tro(float a, float b, float c) { return a<b+c && b<c+a && c<a+b; } float obim(float a, float b, float c) { return a+b+c; } float povrs(float a, float b, float c) { float s=(a+b+c)/2; return sqrt(s*(s-a)*(s-b)*(s-c)); } void main (void) { float x1,x2,x3,y1,y2,y3,a,b,c; clrscr(); cout<<"Program racuna obim i povrsinu trougla"<<endl; cout<<"ako su date koordinate 3 temena "<<endl; cout<<endl<<"Unesite koordinate tacke 1:"<<endl; cin>>x1>>y1; // odjednom i x i y !! cout<<endl<<"Unesite koordinate tacke 2:"<<endl; cin>>x2>>y2; cout<<endl<<"Unesite koordinate tacke 3:"<<endl; cin>>x3>>y3; a=dist(x1,y1,x2,y2); b=dist(x1,y1,x3,y3); c=dist(x3,y3,x2,y2); if (moze_tro(a,b,c))
{ cout<<endl<<"Obim je "<<obim(a,b,c); cout<<endl<<"Povrsina je "<<povrs(a,b,c)<<endl; } else cout<<endl<<"Ove 3 tacke ne obrazuju trougao";
getch(); }
16. Program ispisuje tabelu funkcije u intervalu od a do b u 30 tačaka #include <stdio.h> #include <math.h> #include <conio.h> void main(void) {
int i; double a,b,r,dx=0; double fun(); clrscr(); printf("Ovaj program ispisuje tabelu funkcije u intervalu od a do b u
30 tacaka\n\n"); printf("\t 0\t\t\t x<-r \n "); printf("y \t -sqrt((r*r)-(x*x)) \t 0<x<-r \n "); printf("\t sqrt(x-r) \t\t x>r \n "); printf("\nUcitajte a="); scanf("%lf",&a); printf("Ucitajte b="); scanf("%lf",&b); printf("Ucitajte r="); scanf("%lf",&r); printf("\t\tx\t\ty\n\n"); dx=(b-a)/29; for(i=0;i<30;i++) printf("\t %8.4lf\t %8.4lf\n",a+(i*dx),fun(r,a+(i*dx)));
} double fun(double r, double x) {
double y; if(x<-r) y=0; else if(x<0) y=-sqrt((r*r)-(x*x)); else if(x<r) y=0; else y=sqrt(x-r); return(y);
}
Zbirka rešenih zadataka iz C jezika – drugi deo
11
Globalni parametri
17. Napisati program koji računa obim i površinu pravougaonika čije su stranice a i b korišćenjem globalnih parametara. Ovaj postupak je koristan da se program podeli na više manjih celina, radi bolje čitljivosti. #include <iostream.h> float a, b, O, P; // globalni parametri void pravougaonik() // funkcija nema ulazne parametre { O=2*(a+b); P=a*b;
} // funkcija nema return – umesto tipa stoji void // ima vise od jednog rezultata - O, P // prenose se kao globalne promenljive
void main(void) { cout << "Ovaj program racuna obim i povrsinu pravougaonika "<<endl;
cout << "Unesite stranicu a "; cin >> a;
cout << "Unesite stranicu b "; cin >> b;
pravougaonik(); //poziv funkcije
cout << endl << "Rezultati su " << endl; cout << " Obim je " <<O<< endl; cout << " Povrsina je " << P << endl; }
18. Program koji resava kvadratnu jednacinu za ucitano a,b,c. #include<iostream.h> #include<math.h> float a,b,c,x1,x2,d;
void JednoRealno(); { x1=b/(2*a); cout<<endl<<"Resenja su realna i jednaka:"; cout<<endl<<"x1=x2= "<<x1<<endl;
}
void DvaRealna() { x1=(-b-sqrt(d))/(2*a); x2=(-b+sqrt(d))/(2*a);
cout<<endl<<"Kvadratna jednacina ima realna i razlicita resenja:"<<endl;
cout<<" x1="<<x1<<" x2="<<x2<<endl; } void KompleksnoKonjugovana() { x1=-b/(2*a); x2=sqrt(-d)/(2*a); cout<<endl<<"Resenja su konjugovano kompleksna:"; cout<<endl<<"x1= "<<x1<<"+i"<<x2; cout<<endl<<"x2= "<<x1<<"-i"<<x2<<endl;
}
void main(void) {
cout<<endl<<endl<<"Ovaj program resava kvadratnu jednacinu"; cout<<endl<<"\tax^2+bx+c=0"<<endl; cout<<"a=";
cin>>a; cout<<"b=";
cin>>b; cout<<"c=";
cin>>c; d=b*b-4*a*c;
if(d==0) JednoRealno(); else if(d>0) DvaRealna();
else KompleksnoKonjugovana(); }
Mira Nikolić
12
REKURZIVNE FUNKCIJE
19. Napisati program koji ispisuje tabelu faktorijela #include <iostream.h> #include <iomanip.h> long faktorijel(int n) { return (n==0) ? 1 : n*faktorijel(n-1); } void main(void) { int i,m;
cout<<endl<<"Unesite duzinu tabele faktorijela m<14, m= "; cin>>m; cout<<endl<<"\t\t i\t\t i! "<<endl<<endl; for(i=1;i<=m;i++) cout<<"\t\t"<<setw(3)<<i<<setw(16)<<faktorijel(i)<<endl;
}
20. Napisati program koji ispisuje n članova Fibonačijevog niza pri čemu koristi rekurzivnu funkciju
#include <iostream.h> long fib(int k) { if(k==1||k==2) return 1; else return(fib(k-1)+fib(k-2)); } void main(void) {
int n,i; cout<<endl<<"Program za racunanje Fibonacijevog niza,n<35:"<<endl; cout<<"\tn="; cin>>n; cout<<endl<<endl; for (i=1;i<=n;i++) cout<<"\tf("<<i<<")= "<<fib(i)<<endl; }
21. Napisati program koji ispisuje n-ti član Fibonačijevog niza pri čemu koristi rekurzivnu funkciju #include <iostream.h> long fib(int k) {........} void main() { int n, nbroj; cout << "Unesi redni broj zeljenog Fibonacijevog broja: "; cin >> n; cout<<endl<<endl; nbroj = fib(n); cout << nbroj << " je " << n << "-ti Fibonacijev broj\n"; }
22. Napisati program koji računa novčani iznos kojim raspolaže ulagač posle n godina ako je godišnja kamata p%godišnje #include <stdio.h> #include <conio.h> double iznos(int n, double p, double s) { if (n!=0) return ((1+p/100)*iznos(n-1,p,s)); else return(s); } void main(void) {
int n;double p,s; clrscr(); printf("\nOvaj program racuna vrednost uloga posle n godina \n"); printf("\tuz godisnju kamatu od p%\n\n"); printf("pocetna suma je dinara "); scanf("%lf",&s); printf("godisnja kamata je "); scanf("%lf",&p); printf("broj godina je "); scanf("%d",&n); printf("\nUstedjevina posle %d godina uz %4.2lf kamate\n",n,p); printf("\tiznosi %8.2lf dinara\n",iznos(n,p,s));
}
Zbirka rešenih zadataka iz C jezika – drugi deo
13
Sledeće zadatke uradi za vežbu: Program za računanje vrednosti izraza 52+62+..+.82 - 32 - 22 - 12 Program računa A2+(A+1)2+(A+2)2 - B2 - (B+1)2 - (B+2)2 za učitano A i B Program za računanje vrednosti izraza 3*4 +4*5+..+.7*8 – 9*10 – 10*11 – 11*12 Program koji računa sumu faktorijela 1!+2!+...+n! za učitano n Program koji računa x+2x2+3x3+...nxn za učitano n i x Program koji ispisuje tabelu funkcije
-2 x<-2 f(x)= x -2<x<2
10-2x x>2 od tačke a sa korakom dx u n tacaka Program koji ispisuje tabelu funkcije
-1, x<0 y= x2-1, 0≤x≤3
8, x>3 u intervalu od a do b u n tacaka Program koji ispisuje k-ti prost broj korišćenjem funkcije prost Program koji računa broj kombinacija m-te klase od n elemenata, korišćenjem funkcije faktorijel
( ))!(!
!mnm
nC nm −==
Program za odredjivanje trocifrenih brojeva (ako ih ima )za koje važi: abc=a!+ b!+ c!
Programi koji računaju S korišćenjem rekurzivne funkcije:
1. S=1+2+3+.......+n 2. P=1*2*3*4*......*n=n! 3. S=2+4+6+.......+100 4. S=21+23+25+.......+99
POKAZIVAČI
Pokazivači i funkcije
23. Napisati program koji računa obim i površinu pravougaonika čije su stranice a i b korišćenjem bočnih efekata funkcije obim_povrs #include <iostream.h> void obim_povrs(float a, float b, float *pO, float *pP) { *pO=2*(a+b); *pP=a*b;
} // bocni efekti funkcije – ima vise od jednog rezultata // pO, pP - pokazivacki parametri – prenose se pomocu adrese
void main(void) { float a,b,O,P; cout << "Ovaj program racuna obim i povrsinu pravougaonika "<<endl;
cout << "Unesite stranicu a "; cin >> a;
cout << "Unesite stranicu b "; cin >> b;
obim_povrs(a,b,&O,&P); //poziv funkcije
cout << endl << "Rezultati su " << endl; cout << " Obim je " <<O<< endl; cout << " Povrsina je " << P << endl; }
24. Program za izračunavanje obima i površine trougla (Heronov obrazac)
#include <iostream.h> #include <conio.h> #include <math.h> void obim_povrs(float a, float b, float c, float *pO, float *pP) {
float s; s=(a+b+c)/2; *pO=2*s; *pP=sqrt(s*(s-a)*(s-b)*(s-c));
}
Mira Nikolić
14
void main (void) {
float a,b,c,O,P; clrscr(); cout<<"Program racuna obim i povrsinu trougla pomocu Heronovog
obrasca "<<endl; cout<<endl<<"Unesite duzine stranica trougla"<<endl; cout<<"a="; cin>>a; cout<<"b="; cin>>b; cout<<"c="; cin>>c;
obim_povrs(a,b,c,&O,&P); //poziv funkcije cout<<"Obim je "<<O<<endl; cout<<"Povrsina je "<<P<<endl; getch();
}
25. Napisati program koji računa minimum i maksimum od dva broja a i b korišćenjem jedinstvene funkcije minimax #include <iostream.h> #include <conio.h> void minimax(int a, int b, int *min, int *max) { if (a>b) {*min=b; *max=a;} else {*min=a; *max=b;} } void main(void) { int a,b,min,max; clrscr(); cout<<"a= "; cin>>a; cout<<"b= "; cin>>b; minimax(a,b,&min,&max); cout<<endl<<"Najveci je broj "<<max; cout<<endl<<"Najmanji je broj "<<min; getch(); }
26. Napisati program koji računa sumu kvadrata i kubova brojeva od učitanog m do n korišćenjem jedinstvene funkcije kvadrat_kub #include <stdio.h> #include <conio.h> void main(void) {
int m,n; long p,q; void kvadrat_kub(); clrscr(); printf("\n\nZa ucitano m i n ovaj program racuna \n"); printf("p=mm+(m+1)(m+1)+...+nn i q=mmm+(m+1)(m+1)(m+1)+...+nnn\n\n"); printf("Ucitajte m i n :\n\n\n"); printf("m="); scanf("%d",&m); printf("n="); scanf("%d",&n); kvadrat_kub(m,n,&p,&q); printf("\nOd broja %d do broja %d \n",m,n); printf("suma kvadrata iznosi p=%ld, a kubova q=%ld \n",p,q);
} void kvadrat_kub(int m, int n, long *kv, long *kub) { int i; *kv=*kub=0; for (i=m;i<=n;i++) { *kv+=i*i; *kub+=i*i*i; } }
Zbirka rešenih zadataka iz C jezika – drugi deo
15
Pokazivači i nizovi
27. Napisati program koji računa srednju vrednost pozitivnih elemenata niza #include<iostream.h>
#include<conio.h> void main(void) {
int a[100],n,*p,k=0; float asr=0; clrscr(); cout<<"Program ucitava niz od n celih brojeva i racuna "<<endl; cout<<"srednju vrednost pozitivnih elemenata niza "<<endl<<endl; cout<<"n="; cin>>n; cout<<endl<<"Ucitajte elemente niza."<<endl; cout<<"Unesite ih u jednom redu i razdvojte sa tab "<<endl; for(p=a;p<a+n;p++) //primeti: moze se i preterati sa unosom, { cin>>*p; //ali program registruje samo n elemenata if (*p>0) { asr+=*p; k++; } } if (k>0) cout<<"Srednja vrednost pozitivnih je "<<asr/k<<endl; else cout<<"Nema pozitivnih elemenata "<<endl; getch();
}
28. Napisati program koji računa koliki je prosečni elemant u nizu i koliko je elemanata niza iznad proseka #include<iostream.h> #include<conio.h> void main(void) { int i,x[20],*px,k=0; float xsr=0; clrscr(); cout<<"Ovaj program racuna koliko je elemenata miza iznad proseka";
cout<<endl<<" Uneti 20 clanova niza:"<<endl; for(px=x;px<x+20;px++) { cin>>*px; xsr+=*px; } xsr/=20; for(px=x;px<x+20;px++) if (*px>xsr) k++; cout<<"Prosecni element u nizu je "<<xsr<<endl; cout<<"Natprosecnih je "<<k<<"elemenata"; getch(); }
29. Napisati program koji od unetog niza realnih brojeva A generiše novi niz B sortiran u rastućem poretku. Realizovati zamenu elemenata niza korišćenjem pokazivačkih promenljivih. Ispisati nizove A i B.
#include <stdio.h> void main(void) { double A[15],B[15]; int i,j,n;
void zameni (double *a,double *b); printf("\nUnesite duzinu niza : "); scanf("%i",&n); printf("\nUnesite clanove niza : "); for (i=0;i<n;i++) { scanf("%lf",&A[i]); B[i]=A[i]; } for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) if (B[i]>B[j]) zameni (&B[i],&B[j]); for (i=0;i<n;i++) printf(" A[%d] = %.2lf\t B[%d] = %.2lf\n",i,A[i],i,B[i]); }
Mira Nikolić
16
void zameni (double *a,double *b) { double temp; temp=*a; *a=*b; *b=temp; }
30. Napisati program koji računa koliki je maksimalni elemant u nizu i koliko puta se pojavljuje #include<iostream.h> #include<conio.h> void max(int a[],int n, int *pmax, int *pbrmax) { int i,m=-32768,k=0; for(i=0;i<n;i++) if (a[i]>m) //prvi put se pojavljuje ovaj max { m=a[i]; k=1;} else if (a[i]==m) k++; //ovaj max se vec javljao *pmax=m; *pbrmax=k; } void main(void) { int i,a[50],n,m,k; clrscr(); cout<<"Ovaj program racuna koliko puta se pojavljuje max u nizu"; cout<<endl<<" Uneti duzinu niza:"; cin>>n; for(i=0;i<n;i++) { cout<<"a["<<i+1<<"]="; cin>>a[i]; } max(a,n,&m,&k); cout<<"Najveci element u nizu je "<<m<<endl; cout<<"i pojavljuje se "<<k<<" puta"; getch(); }
31. Napisati program koji računa minimum i maks. niza i njihove pozicije #include <iostream.h> void min_max(int x[],int *min,int *rbrmin,int *max,int *rbrmax); void main(void) {
int i,n,max,rbrmax,min,rbrmin,x[50]; cout<<"Za ucitani niz x ovaj program nalazi ekstreme "<<endl;; cout<<"\tminimum i maksimum i njihove pozicije"<<endl;
cout<<endl<<" Unesite 10 elemenata niza X"<<endl; for(i=0;i<10;i++) {
cout<<"\tx["<<i+1<<"]="; cin>>x[i];
} min_max(x,&min,&rbrmin,&max,&rbrmax); cout<<endl<<"Ekstremi u nizu x su "<<endl; cout<<"\tx["<<rbrmax+1<<"]=max="<<max<<endl;
cout<<"\tx["<<rbrmin+1<<"]=min="<<min<<endl; }
// sledi funkcija void min_max(int x[],int *min,int *rbrmin,int *max,int *rbrmax) { int i; *max=*min=x[0]; *rbrmax=*rbrmin=0; for(i=0;i<10;i++) {
if (x[i]>*max) // nadjen je veci { *max=x[i]; *rbrmax=i; }
if (x[i]<*min) // nadjen je manji { *min=x[i]; *rbrmin=i; } } }
Zbirka rešenih zadataka iz C jezika – drugi deo
17
32. Programi koji demonstriraju kako se parametri funkcije mogu proslediti po vrednosti, preko pokazivaca ili referenci (Važi za C++, ne za C!)
Prosleđivanje parametara po vrednosti #include <iostream.h> void zameni(int x, int y) { int temp; cout<<"F-ja zameni. Pre zamene, x: "<<x<<" y: "<<y <"\n"; temp = x; x = y; y = temp; cout << "F-ja zameni. Posle zamene, x: "<<x<<" y: "<<y<<"\n"; } void main() {
cout << "\n\n\nPrimer prosledjivanja po vrednosti: \n\n"; int x = 5, y = 10; cout<<"Glavni. Pre zamene, x: "<<x<<" y: "<<y<<"\n"; zameni(x,y); cout<<"Glavni. Posle zamene, x: "<<x<<" y: "<<y<< "\n";
} // ovaj nacin nece biti dobar, jer u funkciji vrednosti se // zamene, ali u glavnom programu ostaju kakve su bile
Glavni. Pre zamene, x: 5 y: 10 F-ja zameni. Pre zamene, x: 5 y: 10 F-ja zameni. Posle zamene, x: 10 y: 5 Glavni. Posle zamene, x: 5 y: 10 preko pokazivača #include <iostream.h> void zameni(int *px, int *py) { int temp; cout<<"F-ja zameni. Pre zamene, x: "<< *px<<" y: "<<*py<< "\n"; temp = *px; *px = *py; *py = temp; cout<<"F-ja zameni. Posle zamene, x: "<<*px<<" y: "<<*py<<"\n"; }
void main() {
cout<<"\n\n\nPrimer prosledjivanja preko pokazivaca: \n\n"; x = 5, y = 10; cout<<"Glavni. Pre zamene, x: "<<x<<" y: "<<y<<"\n"; zameni(&x,&y); cout << "Glavni. Posle zamene, x: " << x << " y: " << y << "\n";
} // ova dva nacin bice dobri Glavni. Pre zamene, x: 5 y: 10 F-ja zameni. Pre zamene, x: 5 y: 10 F-ja zameni. Posle zamene, x: 10 y: 5 Glavni. Posle zamene, x: 10 y: 5 preko referenci #include <iostream.h> void zameni(int &x, int &y) { // ovaj nacin je najjednostavniji za pisanje int temp; cout<<"F-ja zameni. Pre zamene, x: "<<x<<" y: " <<y<< "\n"; temp = x; x = y; y = temp; cout<<"F-ja zameni. Posle zamene, x: " <<x<<" y: "<<y<< "\n"; } void main() {
cout << "\n\n\nPrimer prosledjivanja preko referenci: \n\n"; x = 5, y = 10; cout << "Glavni. Pre zamene, x: " << x << " y: " << y << "\n"; zameni(x,y); cout << "Glavni. Posle zamene, x: " << x << " y: " << y << "\n";
}
Glavni. Pre zamene, x: 5 y: 10 F-ja zameni. Pre zamene, x: 5 y: 10 F-ja zameni. Posle zamene, x: 10 y: 5 Glavni. Posle zamene, x: 10 y: 5
Mira Nikolić
18
33. Program koji demonstrira kako se parametri funkcije mogu proslediti preko referenci (Važi za C++, ne za C!) Ovaj program raspoređuje testerasto četiri učitana broja a<b>c<d
#include <iostream.h> #include <conio.h> void razmeni(int &a, int &b) { int t; t=a; a=b; b=t; } void main() { int a,b,c,d; clrscr(); cout<<"Ovaj program rasporedjuje testerasto cetiri broja
a<b>c<d"<<endl; cout<<"a= "; cin>>a; cout<<"b= "; cin>>b; cout<<"c= "; cin>>c; cout<<"d= "; cin>>d; if (a>b) razmeni(a,b); if (b<c) razmeni(b,c); if (c>d) razmeni(c,d); cout<<"Posle zamene, raspored brojeva je: "<<endl; cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; getch(); }
34. Program koji za učitani datum pokazuje koji je datum sledećeg dana. Parametri se prenose preko pokazivača, a koristi se nekoliko funkcija #include <iostream.h> #include <conio.h> int prestupna(int g) { return (g%100!=0 && g%4==0 || g%400==0);}
int broj_dana(int g) { return 365+prestupna(g);} int broj_dana_m(int m, int g) { int s; switch(m) {case 1: case 3: case 5: case 7: case 8: case 10: case12: s=31;
break; case 4: case 6: case 9: case 11: s=30; break; case 2:s=28+prestupna(g); break; } return s; } void sledeci(int *d, int *m, int *g) { int maxd; maxd=broj_dana_m(*m,*g); (*d)++; if (*d>maxd) //taj dan je na kraju meseca, prelaz na sledeci mesec { *d=1; (*m)++; if (*m>12) //decembar, prelaz na sledecu godinu { *m=1; (*g)++; } } } void main(void) { int g,m,d; clrscr(); cout<<"Ovaj program za ucitani datum prikazuje sledeci dan"<<endl; cout<<"godina = "; cin>>g; cout<<"mesec = "; cin>>m; cout<<"dan = "; cin>>d; sledeci(&d,&m,&g); cout<<"Sledeceg dana datum je: "<<endl; cout<<d<<". "<<m<<". "<<g<<". "<<endl; getch(); }
Zbirka rešenih zadataka iz C jezika – drugi deo
19
35. Program koji za učitani datum pokazuje koji je datum posle n dana. Parametri se prenose preko pokazivača, a koristi se iste funkcije kao u prethodnom zadatku #include <iostream.h> #include <conio.h> int prestupna(int g) { ... } int broj_dana(int g) { ... } int broj_dana_m(int m, int g) { ....... } void sledeci(int *d, int *m, int *g) { .... } void N_dana_kasnije(int n, int *d, int *m, int *g) { while (n--) sledeci (d,m,g); } void main(void) { int g,m,d,n; clrscr(); cout<<"Ovaj program za ucitani datum prikazuje datum n dana
kasnije"<<endl; cout<<"godina = "; cin>>g; cout<<"mesec = "; cin>>m; cout<<"dan = "; cin>>d; cout<<"Koliko dana kasnije? n = "; cin>>n; N_dana_kasnije(n, &d,&m,&g); cout<<endl<<"Za "<<n<<" dana datum je: "<<endl; cout<<d<<". "<<m<<". "<<g<<". "<<endl; getch(); }
Sledeće zadatke uradi za vežbu: Program koji računa obim i površinu trapeza čije su osnove a i b, a visina h
korišćenjem bočnih efekata funkcije obim_povrs
Program koji računa zbir i razliku brojeva a i b korišćenjem jedinstvene funkcije zbir_razlika
Program koji raspoređuje testerasto četiri učitana broja a>b<c>d Program koji računa srednju vrednost parnih elemenata niza
Program koji računa koliki je prosečni elemant u nizu i koliko je elemanata niza
ispod proseka
Program koji računa koliki je minimalni elemant u nizu i koliko puta se pojavljuje
Program koji od unetog niza realnih brojeva A generiše novi niz B sortiran u
opadajućem poretku. Realizovati zamenu elemenata niza korišćenjem pokazivačkih promenljivih. Ispisati nizove A i B.
Napisati program koji računa minimum i maks. niza i njihove pozicije
Funkcija koja vraća datum prethodnog dana
void prethodni(int *d, int *m, int *g) Program koji koristi prethodne funkcije i koji za dva datuma d1,m1,g1 i d2,m2,g2 određuje broj dana između ta dva datuma
Mira Nikolić
20
NIZOVI (ponavljanje)
36. Program koji učitava niz i broji neparne elemente niza
#include<stdio.h> #include<conio.h> void main (void) { int i, a[6],br; clrscr(); printf("\nProgram broji neparne elemente niza\n"); for(i=0,br=0;i<6;i++) { printf("\t a[%d]=",i+1); scanf(" %d",&a[i]); if(a[i]%2==1) br++; } printf("\nUkupan broj neparnih brojeva je\tbr=%d",br); }
37. Program koji učitava niz i broji koliko je elemenata niza deljivo sa 3
#include<iostream.h> #include<conio.h>
void main(void) {
int n,i,br=0,a[50]; clrscr(); cout<<endl<<"Unesi broj elemenata niza "; cin>>n; for(i=0;i<n;i++) { cout<<"a["<<i+1<<"]="; cin>>a[i]; if(a[i]%3==0) br+=1; } cout<<endl<<"U ovom nizu ima "<<br<<" elemenata deljivih sa 3"<<endl; getch();
}
38. Program za odredjivanje broja elemenata niza pre prve nule #include<iostream.h> #include<conio.h> void main (void) { int i, a[16]; clrscr(); cout<<endl<<"Program broji elemente niza pre prve nule"<<endl; for(i=0;i<16;i++) { cout<<"a["<<i+1<<"]="; cin>>a[i]; } i=0; while(i<16 && a[i]!=0) i++; cout<<endl<<"Broj elemenata niza pre prve nule je "<<i<<endl; getch(); }
39. Program za odredjivanje broja elemenata niza posle prve nule #include<stdio.h> #include<conio.h> void main (void) { int i, n, a[50]; clrscr(); printf("\nProgram broji elemente niza posle prve nule\n"); printf("\nDuzina niza je "); scanf(" %d",&n); for(i=0;i<n;i++) { printf("\t a[%d]=",i+1); scanf(" %d",&a[i]); } i=0; while(i<n && a[i]!=0) i++; printf("\nBroj elemenata niza posle prve nule je %d",n-1-i); }
Zbirka rešenih zadataka iz C jezika – drugi deo
21
40. Program za sabiranje elemenata niza izmedju prve dve nule (ili od nule do kraja ako je samo jedna nula);
#include<iostream.h> #include<conio.h> void main (void) { int i, n, s=0; static int a[13]={ 1,0, 2, 3, 4,1,5, 2,4, 4,1, 0, 3 }; clrscr(); cout<<endl<<"Program sabira elemente niza izmedju prve dve nule"<<endl; for(i=0;i<13;i++) { cout<<"a["<<i+1<<"]="; cin>>a[i]; } i=0; while(i<13 && a[i]!=0) i++; /*prolaz kroz niz do prve nule*/ i++; while(i<13 && a[i]!=0) /*sabiranje od prve do druge nule*/ { s+=a[i]; i++; } cout<<endl<<"Suma elemenata niza izmedju prve dve nule je "<<s<<endl; getch(); }
41. Program koji učitava niz a duzine 2n, pa od njega formira dva niza, b i c,
duzine n, tako da elementi b budu 2,4,,6..., 2n-ti element a, a elementi c pretposlednji (2n-1), 2n-3..., 1. element a
#include<stdio.h> #include<conio.h> void main(void) { int n,i,a[100],b[50],c[50]; clrscr(); printf("\n\nProgram pravi nizove b i c od niza a");
printf("\n\nUcitajte duzinu nizova b i c "); scanf("%d",&n); printf("\n\nUcitaj niz a koji je dugacak %d elemenata \n",2*n); for(i=0;i<2*n;i++) { printf("\ta[%d]=",i+1); scanf("%d",&a[i]); } printf("\n\nElementi nizova b i c su:\n "); for(i=0;i<n;i++) { b[i]=a[2*i+1]; c[i]=a[2*(n-i-1)]; printf("\tb[%d]=%d\tc[%d]=%d\n",i+1,b[i],i+1,c[i]); } }
42. Program koji učitava niz i pronalazi maksimalan element i njegovu poziciju #include<stdio.h> #include<conio.h> void main (void) { int n,i,max,maxpoz=0,x[30]; clrscr(); printf("\n\t Program odredjuje maksimalan element niza:"); printf("\n Broj elemenata celobrojnog niza X je:"); scanf("%d",&n); printf("\n Unesite niz X:\n\n"); for(i=0;i<n;i++) scanf("%d",&x[i]); max=x[0]; /*pretpostavka da je prvi najveci*/ for(i=0;i<n;i++) if (x[i]>max) { max=x[i]; /*nadjen je veci*/ maxpoz=i; } printf("\n\n\t%d. element niza je maksimalan \n",maxpoz+1); printf("\t Xmax=%d \n",max);
}
Mira Nikolić
22
43. Program za sortiranje niza realnih brojeva od najmanjeg do najvećeg
#include<iostream.h> #include<conio.h> void main(void) { int n,i,j; float priv, x[100]; clrscr(); cout<<endl<<"Duzina niza n="; cin>>n;
for(i=0;i<n;++i) //Ucitavanje n brojeva { cout<<" x["<<i+1<<"]="; cin>>x[i]; }
for(j=0;j<n-1;++j) //Sortiranje for(i=j+1;i<n;++i) if(x[i]>x[j]) { priv=x[j]; x[j]=x[i]; x[i]=priv; }
//Stampanje sortiranih brojeva cout<<endl<<"Sortirani brojevi:"<<endl; for(i=0;i<n;++i) cout<<endl<<"x["<<i+1<<"]="<<x[i];
getch(); }
Sledeće zadatke uradi za vežbu: Program koji učitava niz a i formira i štampa niz b tako što iz prvog niza izbacuje sve elemente deljive sa 3
Program za sabiranje elemenata niza pre prvog neparnog elementa Program koji učitava niz od 10 kompleksnih brojeva i računa njihove module
(efektivne vrednosti) Program koji za poznate nizove a i b formira niz c tako što sabira/množi
odgovarajuće parove a i b c[i]=a[i]+b[i], ako je i parno, c[i]=a[i]*b[i], ako je i neparno
MATRICE
44. Program za unos matrice i računanje prosečnog elementa. #include <iostream.h> #include <conio.h> void main(void) { int i,j; float x[4][4], xsr,s;
clrscr(); cout<<"Ucitava se matrica, racuna zbir i srednja vrednost"<<endl; cout<<"Unesite elemente matrice "<<endl<<endl; for (s=0,i=0;i<4;i++) for (j=0;j<4;j++) { cout<<"x["<<i+1<<","<<j+1<<"]= "; cin>>x[i][j]; s+=x[i][j]; } xsr=s/16;
cout<<endl<<"Zbir elemenata matrice "<<s<<endl; cout<<"a prosecna vrednost je " <<xsr<<endl; getch(); }
45. Program za sabiranje matrica koji koristi funkcije.
#include<stdio.h> #include<conio.h> void main (void) {
int i,j,a[10][10],b[10][10],c[10][10]; long ucitmat(); /* ova funkcija ucitava matricu*/ void stampmat(); /* ova funkcija stampa matricu*/ clrscr(); printf("\nOvaj program ucitava i sabira dve matrice i stampa ih\n");
Zbirka rešenih zadataka iz C jezika – drugi deo
23
printf("\n\n Unesite vrednosti prve matrice:\n\n"); ucitmat(2,3,'a',a); printf("Unesite vrednosti druge matrice:\n\n"); ucitmat(2,3,'b',b); printf("\n Matrica A ima elemente:\n"); stampmat(2,3,'a',a); printf("\n Matrica B ima elemente:\n"); stampmat(2,3,'b',b); for(i=1;i<=2;i++) /*izracunavanje elemenata c*/ for(j=1;j<=3;j++) c[i][j]=a[i][j]+b[i][j]; printf("\n Matrica C=A+B ima elemente:\n"); stampmat(2,3,'c',c); getch();
} long ucitmat(int m,int n, char ime, int x[][10]) {
int i,j,a[10][10]; for(i=1;i<=m;i++,printf("\n")) for(j=1;j<=n;j++) { printf("%c[%d,%d]= ",ime,i,j); scanf("%d",&x[i][j]); } return (x[m][n]);
} void stampmat(int m,int n, char ime, int x[][10]) {
int i,j; printf("\n"); for(i=1;i<=m;i++, printf("\n")) for(j=1;j<=n;j++) printf("%c[%d,%d]=%d\t",ime,i,j,x[i][j]);
}
46. Program za unos matrice i sabiranje elemenata iznad glavne dijagonale. #include <iostream.h> #include <conio.h>
void main(void) {
int i,j; int x[4][3], s; clrscr(); cout<<"Ucitava se matrica i racuna zbir elemenata
iznad glavne dijagonale"; cout<<endl<<"Unesite elemente matrice "<<endl<<endl;
for (s=0,i=0;i<4;i++,cout<<endl) for (j=0;j<3;j++) { cout<<"x["<<i+1<<","<<j+1<<"]= "; cin>>x[i][j]; if (i<j)
s+=x[i][j]; }
cout<<endl<<"Zbir elemenata iznad glavne dijagonale je "<<s<<endl; getch(); }
47. Program za unos matrice i množenje elemenata na glavnoj dijagonali.
#include <iostream.h> #include <conio.h> void main(void) {
int i,j; int x[3][4], p; clrscr(); cout<<"Ucitava se matrica i racuna proizvod na glavnoj dijagonali"; cout<<endl<<"Unesite elemenate matrice "<<endl<<endl; for (p=1,i=0;i<3;i++,cout<<endl)
for (j=0;j<4;j++) {
cout<<"x["<<i+1<<","<<j+1<<"]= "; cin>>x[i][j]; if (i==j) p*=x[i][j];
} cout<<endl<<"Proizvod elemenata na glavnoj dijagonali je "<<p<<endl; getch();
}
Mira Nikolić
24
48. Program za unos matrice i sabiranje elemenata na sporednoj dijagonali. #include <iostream.h> #include <conio.h> void main(void) {
int i,j; int x[4][4], s; clrscr(); cout<<"Ucitava se matrica i racuna zbir na sporednoj dijagonali"<<endl; cout<<"Unesite elemente matrice "<<endl<<endl; for (s=0,i=0;i<4;i++,cout<<endl)
for (j=0;j<4;j++) {
cout<<"x["<<i+1<<","<<j+1<<"]= "; cin>>x[i][j]; if (i+j==3) s+=x[i][j];
} cout<<endl<<"Zbir elemenata na sporednoj dijagonali je "<<s<<endl; getch();
}
49. Napisati program u kojem se unosi matrica celih brojeva M, a zatim se štampa transponovana matrica N[i,j]=M[j,i]. Prikazati matrice M i N.
#include <iostream.h> #include <conio.h> void main(void) {
int i,j,M[15][15],N[15][15],m,n; clrscr(); cout<<endl<<"Unesite dimenzije matrice m,n za M[mxn] "<<endl; cout<<"m= "; cin>>m; cout<<"n= "; cin>>n; for(i=0;i<m;i++) for(j=0;j<n;j++) { cout<<"M["<<i+1<<","<< j+1<<"]= "; cin>>M[i][j]; N[j][i]=M[i][j]; }
cout<<endl<<" Matrica M je "<<endl; for(i=0;i<m;i++,cout<<endl) for(j=0;j<n;j++) cout<<" M["<<i+1<<","<< j+1<<"]= "<<M[i][j]; cout<<endl<<"Transponovana matrica N je"<<endl; for(i=0;i<n;i++,cout<<endl) for(j=0;j<m;j++) cout<<" N["<<i+1<<","<< j+1<<"]= "<<N[i][j]; getch();
}
50. Program za računanje srednjih vrednosti vrsta poznate matrice #include<stdio.h> #include<conio.h> void main (void) {
static float a[3][4]={ {1.0, 2.0, 3.0, 4.0}, {1.5, 2.4, 3.3, 4.2}, {1.1, 0.2, 3.3, 0.4} }; int i,j; float sredina(float x[],int n); clrscr(); printf("\nOvaj program racuna srednju vrednost vrste matrice\n\n"); printf("Elementi matrice a su:\n\n"); for(i=0;i<3;i++, printf("\n")) for(j=0;j<4;j++) printf("%.2f\t",a[i][j]); for(i=0;i<3;i++, printf("\n")) printf("Srednja vrednost %d. vrste je %f\n",i+1,sredina(a[i],4)); getch();
} float sredina(float x[],int n) {
int i; float suma=0; for(i=0;i<n;i++) suma+=x[i]; return suma/n;
}
Zbirka rešenih zadataka iz C jezika – drugi deo
25
51. Napisati program koji od unetog niza A (maksimalne dužine 15 elemenata) generiše kvadratnu matricu M čiji su elementi reda vrednosti iz niza A pomnoženi brojem reda. Ispisati matricu u tabelarnom formatu.
#include <iostream.h> #include <conio.h> void main() { double A[15],M[15][15]; int i,j,n; clrscr(); cout<<endl<<"Unesite dimenziju niza : "; cin>>n; cout<<endl<<"Unesite clanove niza : "; for (i=0;i<n;i++) cin>>A[i]; for (i=0;i<n;i++) for (j=0;j<n;j++) M[i][j]=A[j]*(i+1); clrscr(); cout<<endl<<"Matrica M ima sledece elemente"<<endl; for (i=0;i<n;i++,cout<<endl)
for (j=0;j<n;j++) cout<<" M["<<i<<","<<j<<"]="<<M[i][j]; getch(); }
52. Program za skalarno množenje matrica, m=k*m (svaki element matrice množi se skalarom k) #include<stdio.h> #include <conio.h> void main() { int i,j; float k; static float m[3][5]={ {7.0, 16.8, 5.1, 3.1, 2.9}, {1.0, 1.9, 2.9, 0.0, 7.7}, {-2.2, 1.1, 2.2, 4.4, 9.9} };
clrscr(); printf("Originalna m:\n");
for(i=0;i<3;i++) for(j=0;j<5;j++, printf("\n");) printf("%10f",m[i][j]); printf("\n k=\n");
scanf("%f",&k); for(i=0;i<3;i++) for(j=0;j<5;j++) m[i][j]*=k; printf("\n Matrica posle skalarnog mnozenja:\n"); for(i=0;i<3;i++) { for(j=0;j<5;j++) printf("%10f\t", m[i][j]); printf("\n");
} getch();
}
53. Napisati program za množenje matrica C=AxB #include<iostream.h> #include<conio.h> void main(void) { /*inicijalizacija matrica A i B*/ static int A[2][3]={ {1,2,4}, {11,22,33}, }; static int B[3][4]={ {1,2,3,4}, {11,22,33,44}, {10,20,30,40}, }; int i,j,k; int C[2][4]; clrscr(); cout<<endl<<"Ovaj program mnozi matrice i stampa C=AxB"<<endl; for(i=0;i<2;i++,cout<<endl) for(j=0;j<4;j++) { for(C[i][j]=0,k=0;k<3;k++) C[i][j]+=A[i][k]*B[k][j]; cout<<" C["<<i+1<<","<<j+1<<"]="<<C[i][j]; } getch(); }
Mira Nikolić
26
54. Napisati program za unos matrice M[3x4], a zatim sortirati kolone matrice u rastućem poretku po vrednosti zbira elemenata kolona. #include <stdio.h> #include <conio.h> void zameni (int &A, int &B) { int temp=A; A=B; B=temp; } void main(void) { int i,j,k,M[3][4],suma[4]={0,0,0,0}; clrscr(); printf("Unesite elemente matrice M\n"); for (i=0;i<3;i++) for (j=0;j<4;j++) { printf("M[%i][%i] =",i+1,j+1); scanf ("%i",&M[i][j]); suma[j]+=M[i][j]; } for (i=0;i<3;i++) for (j=i+1;j<4;j++) if (suma[j]<suma[i]) { zameni(suma[j],suma[i]); for (k=0;k<3;k++) zameni (M[k][j],M[k][i]); } printf("\nSortirana matrica M je\n",M[i][j]); for (i=0;i<3;i++,printf ("\n")) for (j=0;j<4;j++) printf("%i\t",M[i][j]); getch(); }
Sledeće zadatke uradi za vežbu: Program za unos matrice i računanje maksimalnog elementa. Funkcije za kvadratnu matricu koje određuju
- sumu pozitivnih elemenata - minimalni element na sporednoj dijagonali - sumu elemenata ispod glavne dijagonale - sumu elemenata iznad sporedne dijagonale
Program za unos matrice i množenje elemenata ispod glavne dijagonale.
Program za unos matrice i množenje elemenata na sporednoj dijagonali.
Program za unos matrice i sabiranje elemenata ispod sporedne dijagonale. Program za oduzimanje matrica koji koristi funkcije. Funkcija razmena koja zamenjuje elemente m-t i n-te
- vrste - kolone
Program za računanje srednjih vrednosti kolona poznate matrice
Program za unos matrice M[3x4], a zatim sortirati vrste matrice u opadajućem
poretku po vrednosti zbira elemenata vrsta. Program dnevnik sa matricom učenika i ocenama po predmetima koji računa
proseke učenika i proseke po predmetima.
Zbirka rešenih zadataka iz C jezika – drugi deo
27
MODULI
55. Napisati modul pomocni.h koji sadrži funkcije za učitavanje i ispis niza i matrice #include<iostream.h> #include<conio.h> long ucitniz(); /* ova funkcija ucitava niz*/ void stampniz(); /* ova funkcija stampa niz*/ long ucitmat(); /* ova funkcija ucitava matricu*/ void stampmat(); /* ova funkcija stampa matricu*/ long ucitniz(int m, char ime, int x[]) {
int i; for(i=0;i<m;i++) { cout<<ime<<"["<< i+1"]= "; cin>>x[i]; } return (x[m]);
} void stampniz(int m, char ime, int x[100]) {
int i; for(i=1;i<=m;i++) cout<<ime<<"["<< i+1"]= "<<x[i];
} long ucitmat(int m,int n, char ime, int x[][10]) {
int i,j; for(i=0;i<m;i++,cout<<endl) for(j=0;j<n;j++) { cout<<ime<<"["<< i+1<<“,“<<j+1<<"]= "; cin>>x[i][j]; } return (x[m][n]);
}
void stampmat(int m,int n, char ime, int x[][10]) {
int i,j; cout<<endl; for(i=0;i<m;i++, cout<<endl ) for(j=0;j<n;j++) cout<<ime<<"["<< i+1<<“,“<<j+1<<"]= "<<x[i][j];
}
56. Napisati program sa prethodinim modulom koji učitava dva niza A i B, od po 6 elemenata, pa ih sabira dajući elemente niza C, a onda štampa sva 3 niza. #include<iostream.h> #include<conio.h> #include"pomocni.h" /*obrati paznju: pisu se navodnici ", ne <>!*/ void main (void) { int i,j,a[10],b[10],c[10]; clrscr(); cout<<endl<<"Ovaj program ucitava i sabira dva niza i stampa ih"; cout<<endl<<"Unesite vrednosti prvog niza:"<<endl; ucitniz(6,'a',a); cout<<endl<<"Unesite vrednosti drugog niza:"<<endl; ucitniz(6,'b',b); clrscr(); cout<<endl<<"Niz A ima elemente:"<<endl; stampniz(6,'a',a); cout<<endl<<"Niz B ima elemente:"<<endl; stampniz(6,'b',b); for(i=0;i<=6;i++) /*izracunavanje elemenata c*/ c[i]=a[i]+b[i]; cout<<endl<<"Niz C=A+B ima elemente:"<<endl; stampniz(6,'c',c); }
Mira Nikolić
28
57. Napisati program sa prethodnim modulom koji učitava dve matrice A i B,
od 2x3 elemenata, pa ih sabira dajući elemente matrice C, a onda štampa sve 3 matrice. #include<iostream.h> #include<conio.h> #include"pomocni.h" /*obrati paznju: pisu se navodnici ", ne <>!*/ void main (void) { int i,j,a[10][10],b[10][10],c[10][10]; clrscr(); cout<<endl<<"Ovaj program ucitava i sabira dve matrice i stampa ih"; cout<<endl<<"Unesite vrednosti prve matrice:" <<endl; ucitmat(2,3,'a',a); cout<<endl<<"Unesite vrednosti druge matrice:" <<endl; ucitmat(2,3,'b',b); clrscr(); cout<<endl<<"Matrica A ima elemente:"<<endl; stampmat(2,3,'a',a); cout<<endl<<"Matrica B ima elemente:"<<endl; stampmat(2,3,'b',b); for(i=1;i<=2;i++) /*izracunavanje elemenata c*/ for(j=1;j<=3;j++) c[i][j]=a[i][j]+b[i][j]; cout<<endl<<"Matrica C=A+B ima elemente:"<<endl; stampmat(2,3,'c',c); }
PRETRAŽIVANJE I SORTIRANJE NIZOVA - MODULI
58. Napisati program koji pretražuje niz a metodom sekvencijalnog
pretraživanja.
#include <iostream.h> #include<conio.h> #include"pomocni.h" int nadjenS(int broj, int n, int niz[]) { int i; for(i=0;i<n;i++) if(niz[i]==broj) return 1; return 0; } void main(void) {
int a[10],x; clrscr(); cout<<endl<<"Program pretrazuje zadati niz i nalazi ucitani broj x"; cout<<endl<<"Ucitaj x "; cin>>x; cout<<endl<<""\nUcitaj vrednost niza a\n"); ucitniz(10,'a',a); if (nadjenS(x,10,a)==1) //sekvencijalna pretraga cout<<"Trazeni broj "<<x<<“ jeste u nizu a“<<endl; else cout<<"Trazeni broj "<<x<<“ nije u nizu a“ <<endl;
}
Zbirka rešenih zadataka iz C jezika – drugi deo
29
59. Napisati program koji sortira niz metodom selection sort #include <iostream.h> #include <stdio.h> #include <conio.h> #include "pomocni.h" void zameni(int *a, int *b) { int pom; pom=*a; *a=*b; *b=pom; } void selection_sort(int n,int x[]) { int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if (x[i]>x[j]) zameni(&x[i],&x[ j]); } void main (void) {
int a[50]; clrscr(); cout<<endl<<" Ovaj program sortira niz od 5 elemenata"<<endl; ucitniz(5,'a',a); selection_sort(5,a); stampniz(5,'a',a); cout<<endl<<"Program za sortiranje niza - selection sort";
}
60. Napisati program koji pretražuje niz b metodom binarnog pretraživanja
(niz mora biti sortiran). #include <iostream.h> #include<conio.h> #include"pomocni.h"
int nadjenB(int broj,int n,int niz[ ]) { int sredina,donja=0,gornja=n-1,nasao=0; while(donja<=gornja && !nasao) { sredina=(donja+gornja)/2; if(broj==niz[sredina]) nasao=1; else if (broj<niz[sredina]) gornja=sredina-1; else donja=sredina+1; } if(!nasao)return 0; else return 1; } void zameni(int *a, int *b) { int pom; pom=*a; *a=*b; *b=pom; } void main(void) {
int i,j,b[6],x,broj,n,niz; clrscr(); cout<<endl<<"Program pretrazuje zadate nizove i nalazi ucitani broj x"; cout<<endl<<"Ucitaj x "; cin>>x; cout<<endl<<"Ucitaj vrednost niza b"; ucitniz(6,'b',b);
for(i=0;i<n-1;i++) //niz b mora biti sortiran for(j=i+1;j<n;j++) if (x[i]>x[j]) zameni(&x[i],&x[ j]);
if (nadjenB(x,6,b)==1) //binarna pretraga, za sortirani niz cout<<"Trazeni broj "<<x<<“ jeste u nizu b“ <<endl; else cout<<"Trazeni broj "<<x<<“ nije u nizu b“ <<endl;
}
Mira Nikolić
30
61. Napisati program koji sortira niz metodom neposrednog umetanja #include <stdio.h> #include <conio.h> #include "pomocni.h" void zameni(int *a, int *b) { int pom; pom=*a; *a=*b; *b=pom; } void neposredno_umetanje(int n,int x[]) { int i,j; for(i=1;i<n;i++) for(j=i;(j>0)&&x[j-1]>x[j]);j--)
zameni(&x[j],&x[ j-1]); } void main (void) {
int a[50]; clrscr(); cout<<endl<<" Ovaj program sortira niz od 5 elemenata"<<endl; ucitniz(5,'a',a); neposredno_umetanje(,5,a); stampniz(5,'a',a); cout<<endl<<"Program za sortiranje niza - neposredno umetanje ";
}
62. Napisati program koji sortira niz metodom bubble sort #include <stdio.h> #include <conio.h> #include "pomocni.h" #include "sort.h"
void zameni(int *a, int *b) { int pom; pom=*a; *a=*b; *b=pom; } void bubble_sort(int n,int a[]) { int i,j,provera; for(i=n-1;i>0;i--) { provera=1; for(j=1;j<=i;j++) if ((a[j-1]>a[j])) { zameni(&a[j-1],& a[ j]) provera=0; } if (provera==1) break; } } void main (void) {
int a[50]; clrscr(); cout<<endl<<" Ovaj program sortira niz od 5 elemenata"<<endl; ucitniz(5,'a',a); bubble_sort(5,a); stampniz(5,'a',a); cout<<endl<<"Program za sortiranje niza - bubble sort ";
}
Sledeće zadatke uradi za vežbu: Programi za sortiranje nizova svim prethodnim metodama po opadajućem
redosledu.