1 / 108

C++

C++. Vježbenica 2 9. dio. Deklaracija funkcije. Deklaracija funkcije ima oblik: t ip _f unkcije naziv_f unkcije ( popis argumenata). tip podatka kojeg funkcija vraća pozivatelju. broj i tip podataka (argumenata) koji se predaju funkciji prilikom njenog poziva. Matematičke funkcije.

ossie
Télécharger la présentation

C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Vježbenica 2 9. dio (c) S.Šutalo i D.Grundler, 2005.

  2. Deklaracija funkcije • Deklaracija funkcije ima oblik: tip_funkcije naziv_funkcije(popis argumenata) tip podatkakojeg funkcija vraća pozivatelju broj i tip podataka (argumenata) koji se predaju funkciji prilikom njenog poziva (c) S.Šutalo i D.Grundler, 2005.

  3. Matematičke funkcije • Korisniku na raspolaganju stoji mnoštvo funkcija razvrstanih u odgovarajuće biblioteke. • Većina matematičkih funkcija deklarirana je u datoteci cmath koju treba uključiti pretprocesorskom naredbom #include. (c) S.Šutalo i D.Grundler, 2005.

  4. Matematičke funkcije float abs (float x); Funkcija kao rezultat vraća apsolutnu vrijednost broja x. float ceil (float x); Funkcija zaokružuje argument x na najbliži veći cijeli broj. float floor (float x); Funkcija zaokružuje argument x na najbliži manji cijeli broj. (c) S.Šutalo i D.Grundler, 2005.

  5. Matematičke funkcije float fmod (float djeljenik, float djelitelj); Funkcija računa ostatak dijeljenja dva realna broja. float pow (float baza, float eksponent); Funkcija računa potenciju baza eksponent. float sqrt (float x); Funkcija računa kvadratni korijen argumenta x. (c) S.Šutalo i D.Grundler, 2005.

  6. Primjer 41 • Zadatak (računanje kvadratnog korijena): • Treba unijeti realni broj pa provjeriti je li >= 0. Ako je, računa se kvadratni korijen tog broja, a ako nije ispisuje se poruka: Broj je manji od 0, ponovi upis. i ponavlja se unos broja. Upisi broj: Kvadratni korijen od ... je .... (c) S.Šutalo i D.Grundler, 2005.

  7. Primjer 41 • Napomene: • Treba uključiti biblioteku cmath, da bi se moglo rabiti funkcijusqrt. • Ponovljeni unos broja omogućit će naredbagoto. (c) S.Šutalo i D.Grundler, 2005.

  8. Primjer 41 ako je uneseni broj < 0, upis valja ponoviti (c) S.Šutalo i D.Grundler, 2005.

  9. Primjer 41a #include<iostream> #include<cmath> using namespace std; int main() { float broj,rez; upis:cout<<"Upisi broj:"; cin>>broj; if (broj<0) { cout<<"Broj je manji od 0, ponovi upis"<<endl; goto upis; } (c) S.Šutalo i D.Grundler, 2005.

  10. Primjer 41b else { rez=sqrt(broj); cout<<"Kvadratni korijen od "<<broj<<" je "<<rez<<endl; } return 0; } (c) S.Šutalo i D.Grundler, 2005.

  11. Primjer 41 • Provjera za broj >= 0: za broj < 0: (c) S.Šutalo i D.Grundler, 2005.

  12. Primjer 42 • Zadatak (funkcije floor i fmod): • Treba unijeti dva realna broja pa izračunati i ispisati njihov cjelobrojni kvocijent i ostatak dijeljenja. Potrebno je načiniti i provjeru. Ako je djelitelj 0, treba ispisati poruku: Ne moze se dijeliti sa 0 i zaustaviti program. Upisidjeljenik: Upisidjelitelj: ... / ... = ... cijelih i ... ostatka. Provjera: ... * ... + ... = ... (c) S.Šutalo i D.Grundler, 2005.

  13. Primjer 42 • Napomene: • Cjelobrojni se kvocijent može dobiti uporabom funkcije floor (zaokružuje realni broj na prvi manji cijeli broj). • Ostatak dijeljenja vraća funkcija fmod. • Za provjeru je potrebno sadržaj varijable u koju je pohranjen cjelobrojni kvocijent pomnožiti s djeliteljem i tome umnošku pribrojiti vrijednost varijable ostatak. (c) S.Šutalo i D.Grundler, 2005.

  14. Primjer 42 uključivanje biblioteke cmath uporaba matematičkih funkcija (c) S.Šutalo i D.Grundler, 2005.

  15. Primjer 42a #include<iostream> #include<cmath > using namespace std; int main() { float a,b,ost,rez; cout<<"Upisi djeljenik:"; cin>>a; cout<<"Upisi djelitelj:"; cin>>b; if (b==0) cout<<"Ne moze se dijeliti sa 0."<<endl; (c) S.Šutalo i D.Grundler, 2005.

  16. Primjer 42b else { rez=a/b; rez=floor(rez); ost=fmod(a,b); cout<<endl<<a<<"/"<<b<<"="<<rez<<" cijelih i " <<ost<<" ostatka."<<endl; cout<<endl<<"Provjera: "<<rez<<"*"<<b<<"+"<<ost <<"="<<rez*b+ost<<endl; } return 0; } (c) S.Šutalo i D.Grundler, 2005.

  17. Primjer 42 • Provjera djelitelj != 0: djelitelj == 0: (c) S.Šutalo i D.Grundler, 2005.

  18. Primjer 43 • Zadatak (funkcije pow i abs): • Treba unijeti cijeli broj paprovjeriti je li paran. Ako je paran, trebaizračunati i ispisati njegovu treću potenciju, a ako nije, apsolutnu vrijednost. • Ispis neka bude oblika: Unesi broj: Broj ... je paran, a njegovatreca potencija iznosi... ili Broj ... je neparan, a njegova apsolutna vrijednost iznosi... (c) S.Šutalo i D.Grundler, 2005.

  19. uporaba matematičkih funkcija Primjer 43 uporaba matematičkih funkcija (c) S.Šutalo i D.Grundler, 2005.

  20. Primjer 43/a #include <iostream> #include <cmath> using namespace std; int main () { int i,rez1,rez2; cout<<"Unesi broj:"; cin>>i; (c) S.Šutalo i D.Grundler, 2005.

  21. Primjer 43/b if (i%2==0) { rez1=pow(i,3); cout<<"Broj "<<i<<" je paran, a njegova\ treca potencija iznosi "<<rez1<<endl; } else { rez2=abs(i); cout<<"Broj "<<i<<" je neparan, a njegova \ apsolutna vrijednost iznosi "<<rez2<<endl; } return 0; } (c) S.Šutalo i D.Grundler, 2005.

  22. Primjer 43 • Provjera: (c) S.Šutalo i D.Grundler, 2005.

  23. Primjer 44 • Zadatak (udaljenost dvije točke): • Treba unijeti koordinate točaka A i B, pa izračunati njihovu udaljenost u koordinatnom sustavu. • Ispis neka bude oblika: Koordinate tocke A: x1= y1= Koordinate tocke B: x2= y2= Udaljenost tocaka A(...,...) i B(...,...) je ... (c) S.Šutalo i D.Grundler, 2005.

  24. Primjer 44 • Udaljenost točaka A(x1,y1) i B(x2,y2) u koordinatnom sustavu može se izračunati uz pomoć formule: (c) S.Šutalo i D.Grundler, 2005.

  25. Primjer 44 uporaba matematičkih funkcija (c) S.Šutalo i D.Grundler, 2005.

  26. Primjer 44/a #include<iostream> #include<cmath> using namespace std; int main() { float x1,y1,x2,y2,pom,d; cout<<"Koordinate tocke A:"<<endl; cout<<"x1= "; cin>>x1; cout<<"y1= "; cin>>y1; cout<<"Koordinate tocke B:"<<endl; cout<<"x2= "; cin>>x2; cout<<"y2= "; cin>>y2; (c) S.Šutalo i D.Grundler, 2005.

  27. Primjer 44/b pom=pow((x2-x1),2)+pow((y2-y1),2); d=sqrt(pom); cout<<"Udaljenost tocaka A("<<x1<<","<<y1 <<") i B("<<x2 <<","<<y2<<") je "<<d<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2005.

  28. Primjer 44 • Provjera: (c) S.Šutalo i D.Grundler, 2005.

  29. Primjer 45 • Zadatak (najmanji od tri broja): • Treba unijeti tri realna broja papronaći i ispisati najmanji. • Ispis neka bude oblika: Upisi prvi broj: Upisi drugi broj: Upisi treci broj: Ako se upisu brojevi: ..., ... i ... najmanji od njih je ... (c) S.Šutalo i D.Grundler, 2005.

  30. Primjer 45 • Napomena: • Jedan od mogućih načina rješenja ovog zadatka je uvođenje pomoćne varijablemin u koju se na početku sprema prvi broj. • Preostali se brojevi uspoređuju sa sadržajem pomoćne varijable. Akoje neki od brojeva manji od sadržaja varijable min, privremeno se pohranjuje u min. (c) S.Šutalo i D.Grundler, 2005.

  31. Primjer 45 U varijablu min se pohranjuje prvi broj. Ako je sadržaj varijable b manji od sadržaja varijable min, privremeno se sprema u varijablu min. (c) S.Šutalo i D.Grundler, 2005.

  32. Primjer 45a #include<iostream> using namespace std; int main() { float a,b,c,min; cout<<"Upisi prvi broj:"; cin>>a; cout<<"Upisi drugi broj:"; cin>>b; cout<<"Upisi treci broj:"; cin>>c; (c) S.Šutalo i D.Grundler, 2005.

  33. Primjer 45b min=a; if (b<min) {min=b;} if (c<min) {min=c;} cout<<"Ako se upisu brojevi: "<<a<<", "<<b<<" i "<<c <<" najmanji od njih je "<<min<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2005.

  34. Primjer 45 • Provjera: (c) S.Šutalo i D.Grundler, 2005.

  35. Primjer 46 • Zadatak (linearna jednadžba): • Treba unijeti koeficijente linearne jednadžbe, pa ovisno o njihovim vrijednostima izračunati i ispisati iznos varijable x. U slučaju da je vrijednost jednog od koeficijenata 0, ispisati odgovarajuća upozorenja. Upisi koeficijenta: Upisi koeficijent b: Ako je a=0, jednadzba 0*x+...=0 nema rjesenje. ili Ako je b=0 rjesenje jednadzbe..*x+0=0 je: x=0.ili Rjesenje jednadzbe..*x+..=0 je: x=... (c) S.Šutalo i D.Grundler, 2005.

  36. Primjer 46 • Napomene: • Zadatak će se riješiti uporabom razgranate naredbe if. • Ako je a == 0, to nije linearna jednadžba. • Ako je b == 0, rješenje je uvijek 0. • Za ostale vrijednosti koeficijenata, x = –b/a. (c) S.Šutalo i D.Grundler, 2005.

  37. Primjer 46 uporaba razgranate naredbe if (c) S.Šutalo i D.Grundler, 2005.

  38. Primjer 46a #include<iostream> using namespace std; int main() { float a,b,x; cout<<"Upisi koeficijent a:"; cin>>a; cout<<"Upisi koeficijent b:"; cin>>b; if(a==0) { cout<<"Ako je a=0, jednadzba "<<a<<"*x+("<<b <<")=0 nema rjesenje."<<endl; } (c) S.Šutalo i D.Grundler, 2005.

  39. Primjer 46b else if(b==0) { cout<<"Ako je b=0, rjesenje jednadzbe "<<a<<"*x+("<<b<<")=0 je:"<<endl; cout<<"x=0"<<endl; } else { x=-b/a; cout<<"Rjesenje jednadzbe "<<a<<"*x+("<<b<<")=0 je:"<endl; cout<<"x= "<<x<<endl; } return 0; } (c) S.Šutalo i D.Grundler, 2005.

  40. Primjer 46 • Provjera za a == 0: za b == 0: za (a i b != 0): (c) S.Šutalo i D.Grundler, 2005.

  41. Primjer 47 • Zadatak (brojevi poredani po veličini): • Treba unijeti tri realna broja paih ispisati od najmanjeg do najvećeg. • Ispis neka bude oblika: Upisi prvi broj: Upisi drugi broj: Upisi treci broj: Brojevi: ..., ... i ... poredani od najmanjeg ka najvecem: ..., ..., ... (c) S.Šutalo i D.Grundler, 2005.

  42. Primjer 47 • Napomene: • Problem se može riješiti tako da se prvo pronađu najveći i najmanji broj. • Nakon toga je potrebno pronaći srednji broj. (c) S.Šutalo i D.Grundler, 2005.

  43. Primjer 47 • Napomene: • Kod traženja srednjeg broja polazi se od pretpostavke da srednji broj mora biti različit i od najmanjeg i od najvećeg broja. • Koristit će se logički operator I (&&) i operator uspoređivanjarazličito (!=). if ((b!=max)&&(b!=min)) mid=b; (c) S.Šutalo i D.Grundler, 2005.

  44. Primjer 47 najmanji broj najveći broj srednji broj (c) S.Šutalo i D.Grundler, 2005.

  45. Primjer 47a #include<iostream> using namespace std; int main() { float a,b,c,min,mid,max; cout<<"Upisi prvi broj:"; cin>>a; cout<<"Upisi drugi broj:"; cin>>b; cout<<"Upisi treci broj:"; cin>>c; min=a; if (b<min) {min=b;} if (c<min) {min=c;} (c) S.Šutalo i D.Grundler, 2005.

  46. Primjer 47b max=a; if (b>max) {max=b;} if (c>max) {max=c;} mid=a; if ((b!=max)&&(b!=min)) {mid=b;} if ((c!=max)&&(c!=min)) {mid=c;} cout<<"Brojevi: "<<a<<", "<<b<<" i "<<c <<" poredani od najmanjeg ka najvecem:"<<endl; cout<<min<<", "<<mid<<", "<<max<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2005.

  47. Primjer 47 • Provjera: (c) S.Šutalo i D.Grundler, 2005.

  48. Primjer 48 • Zadatak (rastaviti broj na proste faktore): • Treba unijeti prirodni broj pa ga rastaviti na proste faktore. • Ispis neka bude oblika: Upisi broj veci od 0: ... = 1 * ... * ... * ... * ... (c) S.Šutalo i D.Grundler, 2005.

  49. Primjer 48 • Broj se rastavlja na proste faktore tako da ga se dijeli najmanjim prostim brojem, sve dok je djeljiv. • Zatim se dijeljenje nastavlja sljedećim prostim brojem i tako redom sve dok se ne dobije 1. 468 2 234 2 117 3 39 3 13 13 1 (c) S.Šutalo i D.Grundler, 2005.

  50. Primjer 48 • Napomene: • Po unosu broja valja provjeriti je li br > 0.Ako nije, unos se ponavlja. • Ako je br > 0, valja zadati početnu vrijednost varijable u koju se pohranjuju prosti brojevi (prbr). Zbog lakšeg ispisa odabrano je prbr = 2. (c) S.Šutalo i D.Grundler, 2005.

More Related