ПИП, лаба 3x

advertisement
СПб НИУ ИТМО
кафедра ИПМ
Программирование интернет-приложений
Лабораторная работа № 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;
}
}
}
Вывод:
В ходе лабораторной работы я научился работать с коллекциями и
разобрался в выполнении программы для определения попадания точки из
набора в заданную область.
Download