Лабораторная работа №3.2. Исходный код



 

Класс Info

 

package Lab4;

public class Info {

public static void infolab (int numberLab) {

String info="Лабораторная работа №"+numberLab+" Выполнил: Позняков Д.А. Группа: ЗИВТ-171";
String labinfo = "Программа, позволяющая вычислить среднюю площадь, минимальный периметр и набиольшую гипотенузу \n"+
           "у обычных и прямоугольных треугольник. \n"+
           "Позволяет ввести количество обычных и прямоугольных треугольников, задаются случайные значения точек.";
System.out.println(info);
System.out.println(labinfo);
System.out.println();

}
}

 

Класс Point 2 D

 

package Lab4;

public class Point2D {
private float x,y;

public Point2D(float x, float y) {
   this.x = x;
   this.y = y;
}

public float getX() {
   return x;
}

public void setX(float x) {
   this.x = x;
}

public float getY() {
   return y;
}

public void setY(float y) {
   this.y = y;
}
}

 

 

Класс Triangle

 

package Lab4;

public class Triangle {

private Point2D a,b,c;

public Triangle(Point2D a, Point2D b, Point2D c) {
   this.a = a;
   this.b = b;
   this.c = c;
}

public Point2D getA() {
   return a;
}

public void setA(Point2D a) {
   this.a = a;
}

public Point2D getB() {
   return b;
}

public void setB(Point2D b) {
   this.b = b;
}

public Point2D getC() {
   return c;
}

public void setC(Point2D c) {
   this.c = c;
}

//Вычисление стороны треугольника
public float side(Point2D a, Point2D b){
   return (float) Math.sqrt(Math.pow(b.getX()-a.getX(),2)+Math.pow(b.getY()-a.getY(),2));
}

//Проверка существования треугольника через стороны треугольника
public boolean exist(){
  if( side(a,b)+side(b,c)>side(c,a) && side(b,c)+side(c,a)>side(a,b) && side(c,a)+side(a,b)>side(b,c)) {
      return true;
  }
  return false;
}

//Вычисление угла
public float angle(Point2D a, Point2D b){
// return (float) Math.acos((a.getX()*b.getX()+a.getY()*b.getY())/ (Math.sqrt(Math.pow(a.getX(),2)+Math.pow(b.getX(),2))*Math.sqrt(Math.pow(a.getY(),2)+Math.pow(b.getY(),2))));
   return (float) Math.abs(Math.toDegrees(Math.atan2(b.getX()-a.getX(),b.getY()-a.getY())));
}
//Вычисление периметра
public float perimeter(){
   return side(a,b)+side(b,c)+side(c,a);
}

//Площадь прямоугольника
public float space(){
   return (float) Math.sqrt( perimeter()/2*(perimeter()/2-side(a,b))*(perimeter()/2- side(b,c))*(perimeter()/2- side(c,a)));
}
}

 

Класс LineTriangle

 

package Lab4;


public class LineTriangle extends Triangle {

public LineTriangle(Point2D a, Point2D b, Point2D c) {
   super(a, b, c);
}

public boolean linaAngle(){
   if(angle(getA(),getB())==90 ||angle(getB(),getC())==90||angle(getC(),getA())==90 ){
       return true;
   }

   return false;
}
}

 

 

Класс Main

 

package Lab4;

import java.util.Random;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
   Info.infolab(4);
   Scanner scan = new Scanner(System.in);

   boolean outb = true;
   do {
       String out;

       //Ввод количества треугольников
       System.out.print("Введите количество треугольников: ");
       int counttriangle = scan.nextInt();

       //Ввод количества прямоугольных треугольников
       System.out.print("Введите количество прямоугольных треугольников: ");
       int countlinetriangle = scan.nextInt();

       //Объявление перменных: рандомных данных, количество сущ. треугольников, массива треугольников и площади
       Random rand = new Random();
       int randtriangle = 9, randlinetriangle = 3, existtriangle = 0;
       Triangle[] triangles = new Triangle[counttriangle];
       LineTriangle[] linetriangles = new LineTriangle[countlinetriangle];
       float area = 0;


       //Вызов метода создания треугольника, а именно координат точек через аргументы X и Y
       for (int i = 0; i < counttriangle; i++) {
           Point2D pointA = new Point2D(rand.nextInt(randtriangle), rand.nextInt(randtriangle));
           Point2D pointB = new Point2D(rand.nextInt(randtriangle), rand.nextInt(randtriangle));
           Point2D pointC = new Point2D(rand.nextInt(randtriangle), rand.nextInt(randtriangle));
           triangles[i] = new Triangle(pointA, pointB, pointC);
           //Вывод на экран координат треугольника. + проверка существования треугольника
           String answer = triangles[i].exist() ? "Да" : "Нет";

           System.out.println("Координаты треугольника: A {" + pointA.getX() + ";" + pointA.getY()
                   + "}, B {" + pointB.getX() + ";" + pointB.getY() + "}, C {" + pointC.getX() + ";" + pointC.getY()
                   + "}. Является треугольником? - " + answer);
       }

       //Считаем площадь и периметр на основе созданных треугольников
       float perimet = triangles[0].perimeter();
       for (int i = 0; i < triangles.length; i++) {
           //Считаем площадь и периметр только тех треугольников, которые существуют.
           if (triangles[i].exist()) {
               existtriangle++;
               //Считаем площадь
               area = triangles[i].space() + area;
               //Считаем периметр
               if (perimet > triangles[i].perimeter()) {
                   perimet = triangles[i].perimeter();
               }
           }
       }

       //Пустая строка
       System.out.println();

       //Вызов метода создания прямоугольного треугольника, а именно координат точек через аргументы X и Y
       for (int i = 0; i < countlinetriangle; i++) {
           Point2D pointAp = new Point2D(rand.nextInt(randlinetriangle), rand.nextInt(randlinetriangle));
           Point2D pointBp = new Point2D(rand.nextInt(randlinetriangle), rand.nextInt(randlinetriangle));
           Point2D pointCp = new Point2D(rand.nextInt(randlinetriangle), rand.nextInt(randlinetriangle));
           linetriangles[i] = new LineTriangle(pointAp, pointBp, pointCp);
           String answer = linetriangles[i].exist() ? "Да" : "Нет";
           //Вывод на экран координат прямоугольного треугольника. + проверка существования треугольника
           System.out.println("Координаты прямоугольного треугольника: A {" + pointAp.getX() + ";" + pointAp.getY()
                   + "}, B {" + pointBp.getX() + ";" + pointBp.getY() + "}, C {" + pointCp.getX() + ";" + pointCp.getY()
                   + "}. Является прямоугольным треугольником? - " + answer);
       }


       //Считаем наибольшую гипотенузу прямоугольного треугольника
       float hypotenuse = linetriangles[0].side(linetriangles[0].getA(), linetriangles[0].getB());
       for (int i = 0; i < linetriangles.length; i++) {
           //Считаем наибольшую гипотенузу только тех треугольников, которые существуют.
           if (linetriangles[i].exist() && linetriangles[i].linaAngle()) {
               existtriangle++;
               //Считаем наибольшую гипотенузу
               if (hypotenuse < linetriangles[i].side(linetriangles[0].getA(), linetriangles[0].getB())) {
                   hypotenuse = linetriangles[i].side(linetriangles[0].getA(), linetriangles[0].getB());
               }
               if (hypotenuse < linetriangles[i].side(linetriangles[0].getB(), linetriangles[0].getC())) {
                   hypotenuse = linetriangles[i].side(linetriangles[0].getB(), linetriangles[0].getC());
               }
               if (hypotenuse < linetriangles[i].side(linetriangles[0].getC(), linetriangles[0].getA())) {
                   hypotenuse = linetriangles[i].side(linetriangles[0].getC(), linetriangles[0].getA());
               }
           }
       }

       //Окончательное вычисление площади и вывод на экран площади, периметра и гипотенузы.
       area /= 6;
       System.out.println();

       String formattedDoubleArea = String.format("%.2f", area);
       System.out.println("Средняя площадь всех N треугольников: " + formattedDoubleArea);

       String formattedDoublePerimet = String.format("%.2f", perimet);
       System.out.println("Минимальный периметр из всех N треугольников: " + formattedDoublePerimet);

       String formattedDoubleHypotenuse = String.format("%.2f", hypotenuse);
       System.out.println("Наибольшая гипотенуза из всех M прямоугольных треугольников: " + formattedDoubleHypotenuse);

       System.out.println();
       System.out.print("Чтобы выйти введите 'Выйти', иначе введите 'Продолжить': ");
       out = scan.nextLine();
       out = scan.nextLine();
       if (out.equals("Продолжить")) {
           outb=true; } else {
           outb=false;
       }

   } while (outb);
}
}


 

Приложение А5

 


Дата добавления: 2018-11-24; просмотров: 278; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!