Advertisement
amarek

OOP LV5 - ZADATAK 1 (sama)

Dec 13th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1. /*Napisati klasu Trokut koje ima za parametre duljine stranica a, b i c. Klasa Trokut
  2. ima defaultni i parametarski konstruktor. U klasi postoje i metode povrsina() (za
  3. bilo koji trokut!) i opseg() koje vraćaju površinu i opseg trokuta te metoda koja
  4. provjerava je li trokut pravokutan (je/nije). Ukoliko se pokuša konstruirati objekt
  5. klase koji ne može biti trokut (teorem o nejednakosti trokuta, npr. (1,2,3))
  6. potrebno je dobaciti iznimku GeoIznimka, a u glavnom programu, prilikom
  7. obrade iznimke, ispisati tekst "Trokut sa stranicama a,b,c nije moguć" gdje
  8. umjesto a,b,c treba ispisati stvarne vrijednosti. Klasa GeoIznimka treba
  9. sadržavati duljine stranica trokuta koji je napravio iznimku. U glavnom programu
  10. kreirati dva trokuta - jedan sa defaultnim konstruktorom, drugi jednakostranični
  11. sa duljinom stranice 4. Ispisati opseg za oba trokuta, te koji trokut ima veću
  12. površinu odnosno da su površine jednake.*/
  13.  
  14. #include <iostream>
  15. #include <cmath>
  16. #include <string>
  17. using namespace std;
  18.  
  19. class GeoIznimka : public runtime_error {
  20. private:
  21.     double strA, strB, strC;
  22. public:
  23.     GeoIznimka(double a, double b, double c, string msg) : runtime_error(msg), strA(a), strB(b), strC(c){}
  24. };
  25.  
  26. class Trokut {
  27. private:
  28.     double strA, strB, strC;
  29. public:
  30.     Trokut() : strA(1), strB(1), strC(1){}
  31.     Trokut(double a, double b, double c) : strA(a), strB(b), strC(c){
  32.         if (strA >= strB + strC || strB >= strA + strC || strC >= strA + strB || strA*strB*strC == 0){
  33.             throw GeoIznimka(a, b, c, "Nije trokut.");
  34.         }
  35.     }
  36.     double povrsina();
  37.     double opseg();
  38.     bool provjera ();
  39.     friend bool operator==(const Trokut& T1, const Trokut& T2);
  40. };
  41.  
  42. bool operator==(const Trokut& T1, const Trokut& T2){
  43.     return (T1.strA == T2.strA && T1.strB == T2.strB && T1.strC == T2.strC);
  44. }
  45.  
  46. double Trokut::povrsina(){
  47.     double s = (strA + strB + strC) / 2;
  48.     double sqrt = (s*(s - strA)*(s - strB)*(s - strC));
  49.     return sqrt;
  50. }
  51.  
  52. double Trokut::opseg(){
  53.     return (strA + strB + strC);
  54. }
  55.  
  56. bool Trokut::provjera (){
  57.     if (strC == sqrt(strA * strA + strB * strB)){ //Pitagorin poučak
  58.         return true;
  59.     }
  60.     else{
  61.         return false;
  62.     }
  63. }
  64.  
  65. int main(){
  66.     try{
  67.         Trokut T1(1, 2, 3);
  68.         Trokut T2(4, 4, 4);
  69.         Trokut T3(3, 4, 5);
  70.         Trokut T4(5, 3, 4);
  71.  
  72.         cout << "PRVI\t" << "Opseg: " << T1.opseg() << "\tPovrsina: " << T1.povrsina() << endl;
  73.  
  74.         cout << "DRUGI\t " << "Opseg: " << T2.opseg() << "\tPovrsina: " << T2.povrsina() << endl;
  75.  
  76.         if (T1 == T2)
  77.             cout << "Trokuti su jednaki" << endl;
  78.         else
  79.             cout << "Trokuti nisu jednaki." << endl;
  80.  
  81.         if (T2.provjera()){
  82.             cout << "Trokut je pravokutan." << endl;
  83.         }
  84.         else{
  85.             cout << "Nije pravokutan.\n" << endl;
  86.         }
  87.  
  88.         cout << "TRECI\t" << "Opseg: " << T3.opseg() << "\tPovrsina: " << T3.povrsina() << endl;
  89.  
  90.         cout << "CETVRTI\t " << "Opseg: " << T4.opseg() << "\tPovrsina: " << T4.povrsina() << endl;
  91.  
  92.     }
  93.  
  94.     catch (const GeoIznimka& iznimka){
  95.         cout << iznimka.what();
  96.     }
  97.  
  98.     cin.get();
  99.  
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement