michael_hartman_cz

PedF UK - OKB1319306 Zkouškový úkol 1 Trojúhelník

Jan 27th, 2015
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.97 KB | None | 0 0
  1. package triangle;
  2.  
  3. import java.util.Arrays;
  4.  
  5. // třída výjimky kdy daný trojúhelník nemůže existovat. Tohle nejspíš dělat nemusíte.
  6. class NotATriangleException extends Exception {
  7.  
  8.     public NotATriangleException(String message) {
  9.         super(message);
  10.     }
  11. }
  12.  
  13. public class Triangle {
  14.  
  15.     double strA, strB, strC;
  16.  
  17.     Triangle(double a, double b, double c) throws NotATriangleException {
  18.     // kontroluje trojúhleníkovou nerovnost a kladnost parametrů
  19.         if ((a + b <= c) || (a + c <= b) || (b + c <= a) || (a <= 0) || (b <= 0) || (c <= 0)) {
  20.         // místo hození výjimky můžete třeba vypsat chybovou hlášku
  21.             throw new NotATriangleException("Sides " + a + " and " + b + " and " + c + " don't make a triangle!");
  22.         }
  23.  
  24.         strA = a;
  25.         strB = b;
  26.         strC = c;
  27.     }
  28.  
  29.     Triangle(double x) throws NotATriangleException {
  30.         this(x, x, x);
  31.     }
  32.  
  33.     double obvod() {
  34.         return strA + strB + strC;
  35.     }
  36.  
  37.     boolean jePravouhly() {
  38.         double arr[] = {strA, strB, strC};
  39.         Arrays.sort(arr);
  40.     //kontroluje, že platí Pythagorova věta s relativní přesností na tisíciny
  41.         return Math.abs(Math.pow(arr[2], 2) - (Math.pow(arr[1], 2) + Math.pow(arr[0], 2))) < 0.001 * arr[0];
  42.     }
  43.  
  44.     double obsah() {
  45.     //implementuje Heronův vzorec viz http://www.matematika.cz/obsah-trojuhelniku
  46.         double s = (strA + strB + strC) / 2;
  47.         return Math.sqrt(s * (s - strA) * (s - strB) * (s - strC));
  48.     }
  49.  
  50.     boolean jeRovnostranny() {
  51.     //relace ekvivalence je tranzitivní, stačí kontrolovat rovnost A s B a A s C
  52.         return (strA == strB && strA == strC);
  53.     }
  54.  
  55.     void vypisInfo() {
  56.         System.out.println("Trojúhelník má:");
  57.         System.out.println("Stranu A dlouhou: " + strA);
  58.         System.out.println("Stranu B dlouhou: " + strB);
  59.         System.out.println("Stranu C dlouhou: " + strC);
  60.         System.out.println("Obvod: " + this.obvod());
  61.         System.out.println("Obsah: " + this.obsah());
  62.         if (this.jePravouhly()) {
  63.             System.out.print("Je");
  64.         } else {
  65.             System.out.print("Není");
  66.         }
  67.         System.out.println(" pravoúhlý.");
  68.         if (this.jeRovnostranny()) {
  69.             System.out.print("Je");
  70.         } else {
  71.             System.out.print("Není");
  72.         }
  73.         System.out.println(" rovnostranný.");
  74.     }
  75.  
  76.     public static void main(String[] args) {
  77.     // pokud nepoužíváte vyjímky, bloky try a catch nepotřebujete
  78.         try {
  79.             Triangle a = new Triangle(6);
  80.             a.vypisInfo();            
  81.         } catch (NotATriangleException e) {
  82.             System.err.println("Error: " + e.getMessage());
  83.         }
  84.  
  85.         System.out.println();
  86.        
  87.         try {
  88.             Triangle b = new Triangle(3, 4, 5);
  89.             b.vypisInfo();
  90.         } catch (NotATriangleException e) {
  91.             System.err.println("Error: " + e.getMessage());
  92.         }
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment