Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.PrintStream;
- import java.util.Scanner;
- import static java.lang.Math.abs;
- public class Lab1 {
- public static void main(String args[]) {
- PrintStream ps = new PrintStream(System.out);
- Scanner scan = new Scanner(System.in);
- int n, npl, i;
- double coordinates[][], area, vpr1, vpr2, vpr3, vpr4;
- boolean isNotCorrect;
- area = 0;
- n = 0;
- ps.println("Программа считает площадь многоугольника по координатам его вершин.");
- ps.println("Введите количество вершин многоугольника (не более 10^6): ");
- do {
- isNotCorrect = false;
- try {
- n = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException err) {
- ps.println("Ошибка ввода. Введите натуральное число.");
- isNotCorrect = true;
- }
- if (!isNotCorrect && ((n <= 2) || (n > 1000000))) {
- ps.println("Ошибка ввода. Введите натуральное число в промежутке [3;10^6]");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- npl = n + 1;
- coordinates = new double[npl][2];
- do{
- for (int k = 0; k < n; k++) {
- do {
- do {
- isNotCorrect = false;
- ps.print("Введите координату X");
- ps.print(k + 1);
- ps.println(" в диапазоне (-10000; 10000)");
- try {
- coordinates[k][0] = Double.parseDouble(scan.nextLine());
- }
- catch (NumberFormatException err) {
- ps.println("Ошибка ввода. Введите действительное число.");
- isNotCorrect = true;
- }
- if (!isNotCorrect && ((abs(coordinates[k][0]) > 10000))) {
- ps.println("Ошибка ввода. Введите координату точки в диапазоне (-10000; 10000)");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- do {
- isNotCorrect = false;
- ps.print("Введите координату Y");
- ps.print(k + 1);
- ps.println(" в диапазоне (-10000; 10000)");
- try {
- coordinates[k][1] = Double.parseDouble(scan.nextLine());
- }
- catch (NumberFormatException err) {
- ps.println("Ошибка ввода. Введите действительное число.");
- isNotCorrect = true;
- }
- if (!isNotCorrect && ((abs(coordinates[k][1]) > 10000))) {
- ps.println("Ошибка ввода. Введите координату точки в диапазоне (-10000; 10000)");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- i = 1;
- while (!isNotCorrect && (i < k - 1)) {
- 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]);
- 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]);
- 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]);
- 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]);
- 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)))) {
- ps.println("Вы ввели координаты вершин самопересекающегося многоугольника! Повторите ввод.");
- isNotCorrect = true;
- }
- i++;
- }
- } while (isNotCorrect);
- }
- coordinates[n][0] = coordinates[0][0];
- coordinates[n][1] = coordinates[0][1];
- i = 2;
- while (!isNotCorrect && (i < n - 1)) {
- 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]);
- 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]);
- 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]);
- 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]);
- 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)))) {
- ps.println("Вы ввели координаты вершин самопересекающегося многоугольника! Повторите ввод.");
- isNotCorrect = true;
- }
- i++;
- }
- } while (isNotCorrect);
- scan.close();
- for (int g = n; g > 0; g--) {
- area = area + coordinates[g - 1][0] * coordinates[g][1] - coordinates[g - 1][1] * coordinates[g][0];
- }
- area = abs(area / 2);
- ps.print("Площадь заданного многоугольника равна ");
- ps.println(area);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement