Advertisement
Vernon_Roche

Задание 1 Java (Лабораторная работа 2, вариант без функций)

Oct 8th, 2023 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.92 KB | None | 0 0
  1. import java.io.PrintStream;
  2. import java.util.Scanner;
  3.  
  4. import static java.lang.Math.abs;
  5.  
  6. public class Lab1 {
  7.     public static void main(String args[]) {
  8.         PrintStream ps = new PrintStream(System.out);
  9.         Scanner scan = new Scanner(System.in);
  10.         int n, npl, i;
  11.         double coordinates[][], area, vpr1, vpr2, vpr3, vpr4;
  12.         boolean isNotCorrect;
  13.         area = 0;
  14.         n = 0;
  15.         ps.println("Программа считает площадь многоугольника по координатам его вершин.");
  16.         ps.println("Введите количество вершин многоугольника (не более 10^6): ");
  17.         do {
  18.             isNotCorrect = false;
  19.             try {
  20.                 n = Integer.parseInt(scan.nextLine());
  21.             }
  22.             catch (NumberFormatException err) {
  23.                 ps.println("Ошибка ввода. Введите натуральное число.");
  24.                 isNotCorrect = true;
  25.             }
  26.             if (!isNotCorrect && ((n <= 2) || (n > 1000000))) {
  27.                 ps.println("Ошибка ввода. Введите натуральное число в промежутке [3;10^6]");
  28.                 isNotCorrect = true;
  29.             }
  30.         } while (isNotCorrect);
  31.         npl = n + 1;
  32.         coordinates = new double[npl][2];
  33.         do{
  34.             for (int k = 0; k < n; k++) {
  35.                 do {
  36.                     do {
  37.                         isNotCorrect = false;
  38.                         ps.print("Введите координату X");
  39.                         ps.print(k + 1);
  40.                         ps.println(" в диапазоне (-10000; 10000)");
  41.                         try {
  42.                             coordinates[k][0] = Double.parseDouble(scan.nextLine());
  43.                         }
  44.                         catch (NumberFormatException err) {
  45.                             ps.println("Ошибка ввода. Введите действительное число.");
  46.                             isNotCorrect = true;
  47.                         }
  48.                         if (!isNotCorrect && ((abs(coordinates[k][0]) > 10000))) {
  49.                             ps.println("Ошибка ввода. Введите координату точки в диапазоне (-10000; 10000)");
  50.                             isNotCorrect = true;
  51.                         }
  52.                     } while (isNotCorrect);
  53.                     do {
  54.                         isNotCorrect = false;
  55.                         ps.print("Введите координату Y");
  56.                         ps.print(k + 1);
  57.                         ps.println(" в диапазоне (-10000; 10000)");
  58.                         try {
  59.                             coordinates[k][1] = Double.parseDouble(scan.nextLine());
  60.                         }
  61.                         catch (NumberFormatException err) {
  62.                             ps.println("Ошибка ввода. Введите действительное число.");
  63.                             isNotCorrect = true;
  64.                         }
  65.                         if (!isNotCorrect && ((abs(coordinates[k][1]) > 10000))) {
  66.                             ps.println("Ошибка ввода. Введите координату точки в диапазоне (-10000; 10000)");
  67.                             isNotCorrect = true;
  68.                         }
  69.                     } while (isNotCorrect);
  70.                     i = 1;
  71.                     while (!isNotCorrect && (i < k - 1)) {
  72.                         vpr1 = (coordinates[k][0] - coordinates[k - 1][0]) * (coordinates[i - 1][1] - coordinates[k - 1][1]) - (coordinates[i - 1][0] - coordinates[k - 1][0]) * (coordinates[k][1] - coordinates[k - 1][1]);
  73.                         vpr2 = (coordinates[k][0] - coordinates[k - 1][0]) * (coordinates[i][1] - coordinates[k - 1][1]) - (coordinates[i][0] - coordinates[k - 1][0]) * (coordinates[k][1] - coordinates[k - 1][1]);
  74.                         vpr3 = (coordinates[i][0] - coordinates[i - 1][0]) * (coordinates[k - 1][1] - coordinates[i - 1][1]) - (coordinates[k - 1][0] - coordinates[i - 1][0]) * (coordinates[i][1] - coordinates[i - 1][1]);
  75.                         vpr4 = (coordinates[i][0] - coordinates[i - 1][0]) * (coordinates[k][1] - coordinates[i - 1][1]) - (coordinates[k][0] - coordinates[i - 1][0]) * (coordinates[i][1] - coordinates[i - 1][1]);
  76.                         if ((((vpr1 == 0 && vpr2 != 0) || (vpr1 != 0 && vpr2 == 0)) && ((vpr3 == 0 && vpr4 != 0) || (vpr3 != 0 && vpr4 == 0))) || (((vpr1 > 0 && vpr2 < 0) || (vpr1 < 0 && vpr2 > 0)) && ((vpr3 > 0 && vpr4 < 0) || (vpr3 < 0 && vpr4 > 0)))) {
  77.                             ps.println("Вы ввели координаты вершин самопересекающегося многоугольника! Повторите ввод.");
  78.                             isNotCorrect = true;
  79.                         }
  80.                         i++;
  81.                     }
  82.                 } while (isNotCorrect);
  83.             }
  84.             coordinates[n][0] = coordinates[0][0];
  85.             coordinates[n][1] = coordinates[0][1];
  86.             i = 2;
  87.             while (!isNotCorrect && (i < n - 1)) {
  88.                 vpr1 = (coordinates[n][0] - coordinates[n - 1][0]) * (coordinates[i - 1][1] - coordinates[n - 1][1]) - (coordinates[i - 1][0] - coordinates[n - 1][0]) * (coordinates[n][1] - coordinates[n - 1][1]);
  89.                 vpr2 = (coordinates[n][0] - coordinates[n - 1][0]) * (coordinates[i][1] - coordinates[n - 1][1]) - (coordinates[i][0] - coordinates[n - 1][0]) * (coordinates[n][1] - coordinates[n - 1][1]);
  90.                 vpr3 = (coordinates[i][0] - coordinates[i - 1][0]) * (coordinates[n - 1][1] - coordinates[i - 1][1]) - (coordinates[n - 1][0] - coordinates[i - 1][0]) * (coordinates[i][1] - coordinates[i - 1][1]);
  91.                 vpr4 = (coordinates[i][0] - coordinates[i - 1][0]) * (coordinates[n][1] - coordinates[i - 1][1]) - (coordinates[n][0] - coordinates[i - 1][0]) * (coordinates[i][1] - coordinates[i - 1][1]);
  92.                 if ((((vpr1 == 0 && vpr2 != 0) || (vpr1 != 0 && vpr2 == 0)) && ((vpr3 == 0 && vpr4 != 0) || (vpr3 != 0 && vpr4 == 0))) || (((vpr1 > 0 && vpr2 < 0) || (vpr1 < 0 && vpr2 > 0)) && ((vpr3 > 0 && vpr4 < 0) || (vpr3 < 0 && vpr4 > 0)))) {
  93.                     ps.println("Вы ввели координаты вершин самопересекающегося многоугольника! Повторите ввод.");
  94.                     isNotCorrect = true;
  95.                 }
  96.                 i++;
  97.             }
  98.         } while (isNotCorrect);
  99.         scan.close();
  100.         for (int g = n; g > 0; g--) {
  101.             area = area + coordinates[g - 1][0] * coordinates[g][1] - coordinates[g - 1][1] * coordinates[g][0];
  102.         }
  103.         area = abs(area / 2);
  104.         ps.print("Площадь заданного многоугольника равна ");
  105.         ps.println(area);
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement