mira nikolić

30
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

Upload: independent

Post on 24-Jan-2023

1 views

Category:

Documents


0 download

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.