отчеты по лабораторным работам / лабораторная работа 1 / java.lab1 / lab1
.doc
Системы программирования Internet-приложений
Лабораторная работа #1
Вариант 112
Работы выполнили
Голубцов Евгений
Пермяков Валерий
Группа 3100
2010
На языке Java написать консольную программу, которая определяет, какие точки из массива A входят в заданную область S. Программа должна запрашивать параметр R у пользователя и выводить на экран координаты точек, входящих в область. Для координат и параметра R использовать типы данных с плавающей точкой. Для ввода R использовать стандартный поток ввода System.in. Объектная модель программы должна реализовывать основные парадигмы ООП - наследование, инкапсуляцию и полиморфизм. В программе необходимо применить реализацию интерфейсов и перечисляемые типы.
|
Код программы:
lab1.java
import java.io.*;
class lab1 {
public static void main(String args[])
throws IOException {
double R;
PointInArea arrayOfPoints[] = { new PointInArea ( 4, 3),
new PointInArea ( 5,-4),
new PointInArea (-4,-4),
new PointInArea (-3, 3),
new PointInArea (-2, 2) };
BufferedReader inputStr = new BufferedReader (new InputStreamReader (System.in));
System.out.println ("Введите R:");
try {
R = Double.parseDouble (inputStr.readLine());
}
catch (NumberFormatException e) {
System.out.println ("Нужно ввести положительное число!");
return;
}
if (R <= 0) {
System.out.println ("Требуется ввести положительное число!");
return;
}
System.out.println("Точки, попадающие в заданную область:");
for (int i=0; i<arrayOfPoints.length; i++) {
if (arrayOfPoints[i].isInArea(R))
System.out.println(arrayOfPoints[i]);
}
}
}
PointInArea.java
class PointInArea extends Point
implements IfaceArea {
private enum Quarters { first , second, third, fourth };
private Quarters qrtr;
public PointInArea (double x_coord) {
this (x_coord, x_coord);
}
public PointInArea (double x_coord, double y_coord) {
super (x_coord, y_coord);
if (x_coord >= 0)
if (y_coord >= 0)
qrtr = Quarters.first;
else qrtr = Quarters.fourth;
else if (y_coord >= 0)
qrtr = Quarters.second;
else qrtr = Quarters.third;
}
public boolean isInArea (double R) {
switch (qrtr) {
case second:
if (x >= -R/2 && y <= R)
return true;
break;
case third:
if (y >= (-x - R))
return true;
break;
case fourth:
if ((Math.pow(x, 2) + Math.pow(y, 2)) <= Math.pow(R, 2))
return true;
break;
}
return false;
}
}
Point.java
class Point {
double x, y;
public Point (double x_coord, double y_coord) {
x = x_coord;
y = y_coord;
}
public String toString() {
return "x = " + x + "; " + "y = " + y + ";";
}
}
IfaceArea.java
public interface IfaceArea {
boolean isInArea (double R);
}