prog7 vjezbenica struktura grananja

118
1 Vježbenica: Vježbenica: Struktura grananja Struktura grananja © S. Šutalo i D.Grundler, 2009.

Upload: stari-dedo

Post on 25-Nov-2015

17 views

Category:

Documents


0 download

DESCRIPTION

Vjezbenica c++

TRANSCRIPT

  • Vjebenica: Struktura grananja S. utalo i D.Grundler, 2009.

  • Deklaracija funkcijetip_funkcije naziv_funkcije (popis argumenata)

  • Matematike funkcijeKorisniku na raspolaganju stoji mnotvo funkcija razvrstanih u odgovarajue biblioteke.Veina matematikih funkcija deklarirana je u biblioteci cmath. Biblioteka cmath se u program ukljuuje pretprocesorskom naredbom #include.

  • Matematike funkcije

  • Matematike funkcije

  • Primjer 30Treba unijeti realni broj pa provjeriti da li je >= 0. Ako je, rauna 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 ....

  • Primjer 30Napomene:Treba ukljuiti biblioteku cmath, da bi se moglo koristiti funkcijom sqrt.Ponovljeni unos broja omoguit e naredba goto.

  • Primjer 30

  • #include#includeusing namespace std;int main() { float broj,rez;upis:coutbroj;if (broj
  • Primjer 30Provjeraza broj >=0:za broj < 0:

  • Primjer 31Treba unijeti koordinate toaka A i B, pa izraunati njihovu udaljenost u koordinatnom sustavu. Koordinate tocke A :x1=y1= Koordinate tocke B :x2=y2=Udaljenost tocaka A(...,...) i B(...,...) je ...

  • Primjer 31Udaljenost toaka A(x1,y1) i B(x2,y2) u koordinatnom sustavu moe se izraunati uz pomo formule:

  • Primjer 31

  • #include#includeusing namespace std;int main(){float x1,y1,x2,y2,pom,d;cout
  • pom=pow((x2-x1),2)+pow((y2-y1),2);d=sqrt(pom);cout
  • Primjer 31Provjera:

  • Primjer 32Treba unijeti cijeli broj pa provjeriti da li je >= 0. Ako nije, treba izraunati apsolutnu vrijednost unesenog broja.Potom, treba provjeriti da li je broj paran. Ako je paran treba izraunati i ispisati njegovu treu potenciju, a ako nije treba ispisati: Broj je neparan.

  • Primjer 32

  • #include #include using namespace std;int main (){int i,rez;couti;if (i
  • if (i%2==0){rez=pow(i,3);cout
  • Primjer 32Provjera:

  • Primjer 33Treba unijeti koeficijente linearne jednadbe:

    Ovisno o njihovim vrijednostima izraunati i ispisati rjeenje.Ako je vrijednost nekog od koeficijenata 0, ispisati odgovarajua upozorenja.

  • Primjer 33

  • Primjer 33Napomene:Zadatak e biti rijeen uporabom viestrukog uvjetnog grananja.Ako je a==0, to nije linearna jednadba.Ako je b==0, rjeenje je uvijek 0.Za ostale vrijednosti koeficijenata, x=-b/a.

  • Primjer 33

  • #includeusing namespace std;int main() { float a,b,x;couta;coutb;if(a==0){cout
  • else if(b==0){cout
  • Primjer 33Provjera:za a == 0:za b == 0:za (a i b !=0)

  • Primjer 34Treba unijeti koeficijente kvadratne jednadbe, pa ovisno o njihovim vrijednostima izraunati i ispisati rjeenja.

    Vano je provjeriti vrijednost koeficijenta a. Ako je a=0, jednadba nije kvadratna.

  • Primjer 34Ispis neka bude oblika:

  • Primjer 34Napomene:Prvo se provjerava da li je a!=0.Ako je, treba provjeriti predznak diskriminante jer on odreuje hoe li rjeenja kvadratne jednadbe biti realni ili kompleksni brojevi.

  • Primjer 34Ako je vrijednost diskriminante vea ili jednaka 0, rjeenja su realni brojevi.

    Ako je vrijednost diskriminante manja od 0, rjeenja su kompleksni brojevi.

  • Primjer 34

  • #include#includeusing namespace std;int main() { float a,b,c,x1,x2,pom1,xR,xi;couta;coutb;coutc;

  • if (a!=0){pom1=b*b-4*a*c; if (pom1>=0){x1=(-b+sqrt(pom1))/(2*a);x2=(-b-sqrt(pom1))/(2*a);cout
  • else{cout

  • Primjer 34diskriminanta< 0,rjeenja su kompleksni brojevijednadba nije kvadratna (a=0)diskriminanta>= 0,rjeenja su realni brojevi

  • Primjer 35U pravokutnom je trokutu poznat kut alfa (izraen u stupnjevima) i kateta a (u cm).Treba izraunati vrijednost hipotenuze c.

  • Primjer 35Za izraun hipotenuze, koristi se funkcija sin(x).Funkcija sin(x) rauna sinus kuta zadanog u radijanima.Stoga, vrijednost kuta treba iz stupnjeva pretvariti u radijane (kut*PI/180).

  • Primjer 35

  • #include#includeusing namespace std;int main() { float kutalfa,a,c,kutalfa1;const float PI=3.14;coutkutalfa;couta;kutalfa1=kutalfa*PI/180;c=a/sin(kutalfa1);cout
  • Primjer 35Provjera:

  • Primjer 36amac vozi brzinom vc okomito na tok rijeke koja tee brzinom vr. Kojom brzinom se giba amac u odnosu na obalu? Za koji kut e amac skrenuti sa svoje putanje?

  • Primjer 36Unesi brzinu camca u m/s:Unesi brzinu rijeke u m/s:

    Ako je brzina rijeke ... m/s a brzina camca ... m/s, camac se u odnosu na obalu giba brzinom ... m/s.

    Camac je skrenuo sa svoje putanje za ... stupnjeva.

  • Primjer 36Brzinu kojom se giba amac u odnosu na obalu lako je izraunati po Pitagorinom teoremu.Za izraun kuta za koji e amac skrenuti sa svoje putanje koristi se funkcija atan (x). Funkcija vraa vrijednost u radijanima. Ako se eli rezultat prikazati u stupnjevima, treba ga pomnoiti sa (180/PI).

  • Primjer 36

  • #include#includeusing namespace std;int main() { float vc,vr,v,kut;const double PI=3.14159265;coutvc;coutvr;

  • v=sqrt(pow(vc,2)+pow(vr,2));kut=atan(vr/vc);kut=kut*180/PI;cout
  • Primjer 36Provjera:

  • Primjer 37Treba unijeti dva realna broja pa izraunati i ispisati njihov cjelobrojni kvocijent i ostatak dijeljenja. Potrebno je nainiti provjeru. Ako je djelitelj 0, treba ispisati poruku: Ne moze se dijeliti s 0 i zaustaviti program. Upisi djeljenik : Upisi djelitelj :... / ... = ... cijelih i ... ostatka.Provjera: ... * ... + ... = ...

  • Primjer 37Napomene:Cjelobrojni se kvocijent moe dobiti uporabom funkcije floor (zaokruuje realni broj na prvi manji cijeli broj).Ostatak dijeljenja vraa funkcija fmod.Za provjeru je potrebno cjelobrojni kvocijent pomnoiti s djeliteljem i tome umnoku pribrojiti vrijednost ostatka.

  • Primjer 37uporaba matematikih funkcija

  • #include#includeusing namespace std;int main() { float a,b,ost,rez;couta;coutb;if (b==0)cout
  • else{rez=a/b;rez=floor(rez);ost=fmod(a,b);cout
  • Primjer 37Provjeradjelitelj == 0:djelitelj != 0:

  • Primjer 38Treba unijeti tri realna broja pa pronai 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 ...

  • Primjer 38Napomena:Jedan od moguih naina rjeenja ovog problema je uvoenje pomone varijable min u koju se na poetku sprema prvi broj.Preostali se brojevi usporeuju sa sadrajem pomone varijable. Ako je neki od brojeva manji od sadraja varijable min, privremeno se pohranjuje u min.

  • Primjer 38U varijablu min se pohranjuje prvi broj.

  • #includeusing namespace std;int main() { float a,b,c,min;couta;coutb;coutc;

  • min=a;if (b
  • Primjer 38Provjera:

  • Primjer 39Treba unijeti tri realna broja pa ih ispisati od najmanjeg ka najveem. Ispis neka bude oblika:Upisi prvi broj:Upisi drugi broj:Upisi treci broj: Brojevi: ..., ... i ... poredani od najmanjeg ka najvecem:..., ..., ...

  • Primjer 39Napomene:Problem se moe rijeiti tako da se pronau najvei i najmanji broj po ugledu na prethodni primjer, a nakon toga srednji broj uz oblikovanje sloenog uvjeta.

  • Primjer 39Napomene:Kod traenja srednjeg broja polazi se npr. od pretpostavke da srednji broj mora biti razliit i od najmanjeg i od najveeg broja.Koristit e se logiki operator I (&&) i operator usporeivanja razliito (!=).

  • Primjer 39

  • #includeusing namespace std;int main() { float a,b,c,min,mid,max;couta;coutb;coutc;

  • min=a;if (bmax){max=c;}

  • mid=a;if ((b!=max)&&(b!=min)){mid=b;}if ((c!=max)&&(c!=min)){mid=c;} cout
  • Primjer 39Provjera:

  • Primjer 40Treba izraunati jakost struje, napon ili otpor prema odabiru korisnika. Za raunanje jakosti struje treba birati 1, za napon 2, a za otpor 3. Ovisno o tome to se eli raunati treba unijeti odgovarajue podatke.

    Ohmov zakon:Za raunanje jakosti struje upii 1, za raunanje napona upii 2, a za otpor 3:

    NPR:U (V)=...R (om)=...Ako je napon ...V, a otpor ...oma, jakost struje iznosi... ampera.

  • Primjer 40Napomene:Koristi se naredba grananja switch-case.Valja nainiti tri grane (jakost struje (1), napon (2) i otpor (3)).Ovisno o tome to korisnik upie (broj 1, 2 ili 3) izvrit e se jedna od grana.U sluaju da korisnik unese vrijednost koja nije 1, 2 ili 3, ispisat e se upozorenje.

  • Primjer 40

  • Primjer 40ako je vrijednost uvjeta 2, rauna se naponako je vrijednost uvjeta 3, rauna se otpor

  • #include using namespace std;int main (){cout
  • cout
  • case 3:coutU;coutI;R=U/I;cout
  • Primjer 40Provjera:

  • Primjer 41Program na osnovu unesenog rednog broja mjeseca ispisuje koliko taj mjesec ima dana. U sluaju unosa broja koji nije iz raspona od 1 do 12 treba ispisati upozorenje.

    Upisi redni broj mjeseca: ... . mjesec ima 31 dan.ili... . mjesec ima 30 dana.ili2. mjesec ima 28 dana (ili 29 ako je godina prestupna).

  • Primjer 41Zadatak se rjeava switch - case naredbom.Uneseni broj je uvjet koji se provjerava naredbom switch.Potrebno je nainiti tri grane (31, 30 i 28 dana).U sluaju unosa broja koji nije iz raspona od 1 do 12 izvrit e se blok naredbi iza naredbe default.

  • Primjer 41

  • Primjer 41

  • #includeusing namespace std;int main() { int i;cout
  • case 1:case 3:case 5:case 7:case 8:case 10:case 12:cout
  • Primjer 41

  • Primjer 42Program na osnovu unesenih vrijednosti stranica trokuta rauna opseg ili povrinu, ovisno o elji korisnika. Za izraun opsega upisuje se 1, a za povrinu 2.

  • Primjer 42Potrebno je provjeriti i da li je rije o stranicama trokuta, tj. da li su zadovoljeni uvjeti:

    Povrina se rauna po Heronovoj formuli:

  • Primjer 42

  • Primjer 42

  • #include#includeusing namespace std;int main(){cout
  • if((a
  • case 2:cout
  • Primjer 42

  • Primjer 42Mogue pogreke:

  • Primjer 43Program na osnovu unesenog maksimalnog broja bodova koji se moe ostvariti na testu oblikuje bodovnu skalu, a zatim na temelju osvojenog broja bodova na testu, ispisuje odgovarajuu ocjenu.

  • Primjer 43U prvome dijelu zadatka treba na osnovu unesenog maksimalnog broja bodova koji se moe ostvariti na testu, oblikovati bodovnu skalu.Bodovna skala se oblikuje raunanjem odgovarajueg postotnog udjela od ukupnog broja bodova, za svaku od ocjena.

  • Primjer 43Odabrani su uobiajeni postotni udjeli:89% - 100% = odlian77% - 88% = vrlo dobar64% - 76% = dobar51% - 63% = dovoljan

  • Primjer 43Da bi bodovna skala bila sainjena od cijelih brojeva, koristi se matematika funkcija floor koja zaokruuje realni broj na prvi manji cijeli.Da bi bodovna skala bila ispisana preglednije, koristi se manipulator setw.

  • Primjer 43

  • Primjer 43

  • Primjer 43U drugome dijelu zadatka treba na osnovu osvojenog broja bodova na testu ispisati odgovarajuu ocjenu.Potrebno je izraunati postotnu uspjenost postignutu na testu pa je usporediti sa ponuenim rasponima za svaku od ocjena.

  • Primjer 43

  • #include#include #includeusing namespace std;int main() { float p,i,b, po;cout
  • cout
  • cin>>b;if (bi){cout
  • else if (po
  • Primjer 43

  • Primjer 44Treba unijeti prirodni broj pa ga rastaviti na proste faktore.Ispis neka bude oblika:Upisi broj veci od 0:... = 1 * ... * ... * ... * ...

  • Primjer 44Broj se na proste faktore rastavlja tako da ga se dijeli najmanjim prostim brojem, sve dok je djeljiv.Zatim se dijeljenje nastavlja sljedeim prostim brojem i tako redom sve dok se kao rezultat dijeljenja dobije 1.

  • Primjer 44Napomene:Po unosu broja valja provjeriti da li je broj vei od 0. Ako nije, unos se ponavlja. Ako je broj vei od 0, valja zadati poetnu vrijednost varijable u koju se pohranjuju prosti brojevi (npr. prbr). Zbog lakeg ispisa odabrano je prbr=2.

  • Primjer 44

  • prbr =2468%2==0 br=468/2=234 (234==1)? NE234%2==0 br=234/2=117 (117==1)? NE117%2 !=0 prbr=prbr+1=2+1=3117%3==0 br=117/3=39 (39==1)? NE 39%3==0 br=39/3=13 (13==1)? NE 13%3 !=0 prbr=prbr+1=3+1=4 13%4 !=0 prbr=5 13%5 !=0 prbr=6 ..... prbr=13 13%13==0 br=13/13=1 (1==1)? DA

  • Primjer 44

  • Primjer 44

  • #include using namespace std;int main(){ int br, prbr; cout
  • else{prbr=2; cout
  • else{prbr=prbr+1;goto dj1;}}}kraj:cout
  • Primjer 44Provjera:

    *******************************