СПб НИУ ИТМО кафедра ИПМ Программирование интернет-приложений Лабораторная работа № 3 Вариант 2041 Работу выполнил: Студент II курса Группы № 2120 Журавлев Виталий Санкт-Петербург 2013 г. Цель работы: На языке Java написать консольную программу, которая определяет, какие точки из набора A входят в заданную область S. Приложение должно содержать следующие классы: Класс Mark, представляющий точку с координатами X и Y типа float. Класс Silhouette, представляющий область с заданным параметром R, в котором должен быть реализован метод, возвращающий для заданной точки значение 1, если точка входит в область, и 0, если не входит. Попадание на границу области считается попаданием в область. Класс Lab3, который получает параметр R типа int со стандартного ввода по запросу пользователя. Получение числа из строки реализовать c помощью метода Scanner.nextInt(). Точки хранятся в виде коллекции параметризованного типа PriorityQueue. Обход коллекции реализовать с помощью цикла for(a:b). Приложение должно выводить на экран список точек, не попадающих в область. Код программы: import java.util.*; public class JavaLab3 { public static void main(String [] args) { int R; Scanner Sc = new Scanner(System.in); try { R=Sc.nextInt(); } catch(Exception e) { System.out.print("Неверный формат данных"); return; } Silhouette S = new Silhouette(R); Comparator<Mark> comparator = new Comparator<Mark>() { @Override public int compare(Mark o1, Mark o2) { return 0; } }; PriorityQueue<Mark> MarkListA = new PriorityQueue<>(2, comparator); MarkListA.add(new Mark(5,4)); MarkListA.add(new Mark(-1,2)); MarkListA.add(new Mark(4,-5)); MarkListA.add(new Mark(2,-2)); MarkListA.add(new Mark(-4,-3)); MarkListA.add(new Mark(1,-2)); MarkListA.add(new Mark(-5,3)); if(R>=0) for(Mark mark:MarkListA) { if(S.IsHit(mark)==1) { System.out.println("{"+mark.x+";"+mark.y+"}"); } } else { System.out.print("R не может быть отрицательным!"); } } } class Mark //Класс точек { float x; float y; public Mark(float x,float y) { this.x = x; this.y = y; } } //Конструктор класса class Silhouette //Класс, описывающий область { int R; public Silhouette(int R) //Констуктор класса { this.R = R; } public short IsHit(Mark m) //Проверка попадания { if(m.y>=0&&m.x<=0&&m.y<=m.x+R/2||m.y<=0&&m.x>=0&&m.x<=R&&m.y>=R||m.y<=0&&m.x<=0&&Math.pow(m.x, 2)+Math.pow(m.y, 2)<=Math.pow(R/2, 2)) return 1; else { return 0; } } } Вывод: В ходе лабораторной работы я научился работать с коллекциями и разобрался в выполнении программы для определения попадания точки из набора в заданную область.