Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

6 отчёт(работающий пример)

.docx
Скачиваний:
1
Добавлен:
03.08.2021
Размер:
73.05 Кб
Скачать

Поволжский Государственный Университет Телекоммуникаций и Информатики

Кафедра ПОУТС

Лабораторная работа №6

Двумерные массивы

Выполнила :

Студентка гр. ИСТ 74У

Смолева В.А.

Проверили:

Атаев С.Г.

Самара 2018

Листинг

Main

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { List<Triangle> triangles = new ArrayList<>(); List<Triangle> equilaterals = new ArrayList<>(); List<Triangle> isosceles = new ArrayList<>(); List<Triangle> rects = new ArrayList<>(); List<Triangle> arbitraries = new ArrayList<>(); TriangleUtil.startInit(triangles); Scanner sc = new Scanner(System.in); for (int p=0;p<5;p++){ TriangleUtil.inputTriangle(triangles, sc);} equilaterals = TriangleUtil.findEquilateral(triangles); String text = "Cписок равносторонних треугольников: "; TriangleUtil.output(equilaterals, text); System.out.println("Итого " + equilaterals.size() + " равносторонних треугольников"); System.out.println(); isosceles = TriangleUtil.findIsosceles(triangles); text = "Cписок равнобедренных треугольников: "; TriangleUtil.output(isosceles, text); System.out.println("Итого " + isosceles.size() + " равнобедренных треугольников"); System.out.println(); rects = TriangleUtil.findRect(triangles); text = "Cписок прямоугольных треугольников: "; TriangleUtil.output(rects, text); System.out.println("Итого " + rects.size() + " прямоугольных треугольников"); System.out.println(); arbitraries = TriangleUtil.findArbitrary(triangles); text = "Cписок произвольных треугольников: "; TriangleUtil.output(arbitraries, text); System.out.println("Итого " + arbitraries.size() + " произвольных треугольников"); System.out.println(); Triangle minSEquilateral = TriangleUtil.findMinSTriangle(equilaterals); System.out.println("Равносторонний треугольник с минимальной площадью: " + minSEquilateral.toString() + ", площадь: " + minSEquilateral.findSquare()); Triangle minSIsosceles = TriangleUtil.findMinSTriangle(isosceles); System.out.println("Равнобедренный треугольник с минимальной площадью: " + minSIsosceles.toString() + ", площадь: " + minSIsosceles.findSquare()); Triangle minSRect = TriangleUtil.findMinSTriangle(rects); System.out.println("Прямоугольный треугольник с минимальной площадью: " + minSRect.toString() + ", площадь: " + minSRect.findSquare()); Triangle minSArbitrary = TriangleUtil.findMinSTriangle(arbitraries); System.out.println("Произвольный треугольник с минимальной площадью: " + minSArbitrary.toString() + ", площадь: " + minSArbitrary.findSquare()); Triangle maxSEquilateral = TriangleUtil.findMaxSTriangle(equilaterals); if (maxSEquilateral.isNotTriangle()) { System.out.println("Треугольник не найден, т.к. список равносторонних треугольников пуст."); } else { System.out.println("Равносторонний треугольник с максимальной площадью: " + maxSEquilateral.toString() + ", площадь: " + maxSEquilateral.findSquare()); } Triangle maxSIsosceles = TriangleUtil.findMaxSTriangle(isosceles); if (maxSIsosceles.isNotTriangle()) { System.out.println("Треугольник не найден, т.к. список равнобедренных треугольников пуст."); } else { System.out.println("Равнобедренный треугольник с максимальной площадью: " + maxSIsosceles.toString() + ", площадь: " + maxSIsosceles.findSquare()); } Triangle maxSRect = TriangleUtil.findMaxSTriangle(rects); if (maxSRect.isNotTriangle()) { System.out.println("Треугольник не найден, т.к. список прямоугольных треугольников пуст."); } else { System.out.println("Прямоугольный треугольник с максимальной площадью: " + maxSRect.toString() + ", площадь: " + maxSRect.findSquare()); } Triangle maxSArbitrary = TriangleUtil.findMaxSTriangle(arbitraries); if (maxSArbitrary.isNotTriangle()) { System.out.println("Треугольник не найден, т.к. список произвольных треугольников пуст."); } else { System.out.println("Произвольный треугольник с максимальной площадью: " + maxSArbitrary.toString() + ", площадь: " + maxSArbitrary.findSquare()); } } }

POINT

public class Point { public static final double MAX = 100; private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } @Override public String toString() { final StringBuilder sb = new StringBuilder("{"); sb.append("x=").append(x); sb.append(", y=").append(y); sb.append('}'); return sb.toString(); } } class Triangle { private Point a; private Point b; private Point c; private double ab; private double bc; private double ac; public static final double EPS = 1e-6; public Triangle(Point a, Point b, Point c) throws IllegalArgumentException { ab = findDist(a,b); bc = findDist(b,c); ac = findDist(a,c); boolean isNot = isNotTriangle(); if (isNot) { throw new IllegalArgumentException("Не может быть треугольником! "); } this.a = a; this.b = b; this.c = c; } public Triangle() { a = new Point(0,0); b = new Point(0,0); c = new Point(0,0); } public boolean isNotTriangle() { return (ab > bc + ac || areEqual(ab, bc + ac) || bc > ab + ac || areEqual(bc, ab + ac) || ac > ab + bc || areEqual(ac, ab + bc) || (ab==0 && bc==0 && ac==0)); } @Override public String toString() { final StringBuilder sb = new StringBuilder("{"); sb.append("a=").append(a); sb.append(", b=").append(b); sb.append(", c=").append(c); sb.append('}'); return sb.toString(); } private double findDist(Point a, Point b) { double dx = b.getX()- a.getX(); double dy = b.getY()- a.getY(); return Math.sqrt(dx*dx + dy*dy); } public double findPerimetr() { return findDist(a,b) + findDist(b,c) + findDist(c,a); } public double findSquare() { double p = findPerimetr()/2; return Math.sqrt(p * (p-ab) * (p-bc) * (p-ac)); } public boolean isEquilateral() { // равносторонний return areEqual(ab, bc) && areEqual(bc, ac); } public boolean isIsosceles() { // равнобедренный return (areEqual(ab, bc) || areEqual(bc, ac) || areEqual(ab, ac)) && (!isEquilateral()); } public boolean isRect() { // прямоугольный double x = ab * ab; double y = bc * bc; double z = ac * ac; return (areEqual(x, y+z)) || (areEqual(y, x+z)) || (areEqual(z, x+y)); } public boolean isArbitrary() { // произвольный return !isIsosceles() && !isEquilateral() && !isRect(); } private boolean areEqual (double x, double y) { return Math.abs(x-y) < EPS; } public void setA(Point a) { this.a = a; ab = findDist(a,b); ac = findDist(a,c); } public void setB(Point b) { this.b = b; ab = findDist(a,b); bc = findDist(b,c); } public void setC(Point c) { this.c = c; bc = findDist(b,c); ac = findDist(a,c); } }

И ТРЕТЬЯ

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class TriangleUtil { public TriangleUtil() { } public static void startInit(List<Triangle> triangles) { } // finds triangle in list with max square public static Triangle findMaxSTriangle(List<Triangle> triangles) { if (triangles.size() > 0) { Triangle maxS = triangles.get(0); for (Triangle triangle : triangles) { if (maxS.findSquare() < triangle.findSquare()) { maxS = triangle; } } return maxS; } else return new Triangle(); } // finds triangle in list with min square public static Triangle findMinSTriangle(List<Triangle> triangles) { if (triangles.size() > 0) { Triangle minS = triangles.get(0); for (Triangle triangle : triangles) { if (minS.findSquare() > triangle.findSquare()) { minS = triangle; } } return minS; } else return new Triangle(); } // return list of arbitrary triangles public static List<Triangle> findArbitrary(List<Triangle> triangles) { List<Triangle> res = new ArrayList<>(); for (Triangle triangle : triangles) { if (triangle.isArbitrary()) { res.add(triangle); } } return res; } // return list of rectangular triangles public static List<Triangle> findRect(List<Triangle> triangles) { List<Triangle> res = new ArrayList<>(); for (Triangle triangle : triangles) { if (triangle.isRect()) { res.add(triangle); } } return res; } // return list of isosceles triangles public static List<Triangle> findIsosceles(List<Triangle> triangles) { List<Triangle> res = new ArrayList<>(); for (Triangle triangle : triangles) { if (triangle.isIsosceles()) { res.add(triangle); } } return res; } // return list of equilateral triangles public static List<Triangle> findEquilateral(List<Triangle> triangles) { List<Triangle> res = new ArrayList<>(); for (Triangle triangle : triangles) { if (triangle.isEquilateral()) { res.add(triangle); } } return res; } // ввод треугольника через клавиатуру public static void inputTriangle(List<Triangle> triangles, Scanner sc) { System.out.println("Введите координаты точек треугольника: "); System.out.println("Точка A: "); Point pA = TriangleUtil.inputPoint(sc); System.out.println("Точка B: "); Point pB = TriangleUtil.inputPoint(sc); System.out.println("Точка C: "); Point pC = TriangleUtil.inputPoint(sc); try { Triangle newTriangle = new Triangle(pA, pB, pC); triangles.add(newTriangle); } catch (IllegalArgumentException e) { System.out.println(e.getMessage() + "Треугольник не создан!"); } } // inputs point coordinates from keyboard private static Point inputPoint(Scanner sc) { System.out.println("Введите координату x: "); double x = inputDouble(sc); System.out.println("Введите координату y: "); double y = inputDouble(sc); return new Point(x, y); } // prints triangle list to console public static void output(List<Triangle> triangles, String s) { System.out.println(s); int k = 0; for (Triangle triangle : triangles) { System.out.println("Треугольник №" + ++k + ": " + triangle); } } // provides correct input of double public static double inputDouble(Scanner sc) { double value = 0; boolean isNotSuccess = true; while (isNotSuccess) { try { String s = sc.nextLine(); value = Double.parseDouble(s); isNotSuccess = false; } catch (NumberFormatException e) { System.out.println("Ошибка формата ввода! Введите ещё раз:"); } } return value; } }

Пример выполнения программы

Соседние файлы в предмете Программирование