diff --git a/task01/src/com/example/task01/Point.java b/task01/src/com/example/task01/Point.java index ec5c69e8..1f511dc7 100644 --- a/task01/src/com/example/task01/Point.java +++ b/task01/src/com/example/task01/Point.java @@ -4,8 +4,27 @@ * Класс точки на плоскости */ public class Point { - int x; - int y; + private int x; + private int y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + void flip(){ + int temp = x; + x = - y; + y = - temp; + } + + double distance(Point point){ + return Math.sqrt(Math.pow(point.x - x, 2) + Math.pow(point.y - y, 2)); + } + + public String toString(){ + return x + y + ""; + } void print() { String pointToString = String.format("(%d, %d)", x, y); diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 7d71173a..1f4f24d0 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -2,15 +2,13 @@ public class Task01Main { public static void main(String[] args) { - Point p1 = new Point(); - p1.x = 10; - p1.y = 45; - Point p2 = new Point(); - p2.x = 78; - p2.y = 12; + Point p1 = new Point(5,-7); + Point p2 = new Point(78,12); System.out.println("Point 1:"); p1.print(); + p1.flip(); + p1.print(); System.out.println(p1); System.out.println("Point 2:"); p2.print(); diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index 644a0eba..2d3e964d 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -3,5 +3,32 @@ public class Task02Main { public static void main(String[] args) { + TimeSpan timeSpan = new TimeSpan(0, 0, 0); + + System.out.println("Time span 1 is:\n" + timeSpan.toString()); + + System.out.println("hours before setter is " + timeSpan.getHour()); + System.out.println("minutes is " + timeSpan.getMinute()); + System.out.println("seconds is " + timeSpan.getSecond()); + System.out.println(); + + timeSpan.setHour(18); + timeSpan.setMinute(80); + timeSpan.setSecond(90); + + System.out.println("hours after setter is:" + timeSpan.getHour()); + System.out.println("minutes after setter is:" + timeSpan.getMinute()); + System.out.println("seconds after setter is:" + timeSpan.getSecond()); + + TimeSpan timeSpan2 = new TimeSpan(timeSpan.getHour(), timeSpan.getMinute(), timeSpan.getSecond()); + + timeSpan2.add(timeSpan); + System.out.println("Time span 2 is:\n" + timeSpan2); + timeSpan2.subtract(timeSpan); + + + System.out.println("Time span 2 is:\n" + timeSpan2); + + } } diff --git a/task02/src/com/example/task02/TimeSpan.java b/task02/src/com/example/task02/TimeSpan.java new file mode 100644 index 00000000..f2ffd3fa --- /dev/null +++ b/task02/src/com/example/task02/TimeSpan.java @@ -0,0 +1,94 @@ +package com.example.task02; + +public class TimeSpan { + private int hour; + private int minute; + private int second; + + public TimeSpan(int hour, int minute, int second) { + this.hour = hour; + this.minute = minute; + this.second = second; + normalize(); + } + + public void setSecond(int second) { + if (second < 0) { + throw new IllegalArgumentException("секунды не могут быть отрицательными"); + } + this.second = second; + normalize(); + } + + public void setMinute(int minute) { + if (minute < 0) { + throw new IllegalArgumentException("минуты не могут быть отрицательными"); + } + this.minute = minute; + normalize(); + } + + public void setHour(int hour) { + if (hour >= 0) { + this.hour = hour; + } else { + throw new IllegalArgumentException("часы не могут быть отрицательными"); + } + } + + public int getHour() { + return hour; + } + + public int getMinute() { + return minute; + } + + public int getSecond() { + return second; + } + + // Метод для нормализации времени + private void normalize() { + if (this.second >= 60) { + this.minute += this.second / 60; + this.second = this.second % 60; + } else if (this.second < 0) { + this.minute -= Math.abs(this.second) / 60 + 1; + this.second = 60 - Math.abs(this.second) % 60; + } + + if (this.minute >= 60) { + this.hour += this.minute / 60; + this.minute = this.minute % 60; + } else if (this.minute < 0) { + this.hour -= Math.abs(this.minute) / 60 + 1; + this.minute = 60 - Math.abs(this.minute) % 60; + } + } + + public void add(TimeSpan time){ + this.hour += time.getHour(); + this.minute += time.getMinute(); + this.second += time.getSecond(); + normalize(); + } + + public void subtract(TimeSpan time){ + this.hour -= time.getHour(); + this.minute -= time.getMinute(); + this.second -= time.getSecond(); + + if (this.hour < 0) { + this.hour = 0; + this.minute = 0; + this.second = 0; + } else { + normalize(); + } + } + + public String toString() { + return String.format("%02d:%02d:%02d", this.hour, this.minute, this.second); + } +} \ No newline at end of file diff --git a/task03/src/com/example/task03/ComplexNum.java b/task03/src/com/example/task03/ComplexNum.java new file mode 100644 index 00000000..90c8f3f5 --- /dev/null +++ b/task03/src/com/example/task03/ComplexNum.java @@ -0,0 +1,42 @@ +package com.example.task03; + +public class ComplexNum { + private double real; + private double imag; + + public ComplexNum(double real, double imag) { + this.real = real; + this.imag = imag; + } + public double getReal() { + return real; + } + public void setReal(double real) { + this.real = real; + } + public double getImag() { + return imag; + } + public void setImag(double imag) { + this.imag = imag; + } + + public static ComplexNum add(ComplexNum a, ComplexNum b) { + double newReal = a.real + b.real; + double newImag = a.imag + b.imag; + return new ComplexNum(newReal, newImag); + } + + public static ComplexNum multiply(ComplexNum a, ComplexNum b) { + double newReal = (a.real * b.real) - (a.imag * b.imag); + double newImag = (a.real * b.imag) + (a.imag * b.real); + return new ComplexNum(newReal, newImag); + } + + public String toString() { + return String.format("%.1f + %.1fi", real, imag); + } + + + +} diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index ae40e6f2..459b6e0d 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -2,6 +2,11 @@ public class Task03Main { public static void main(String[] args) { - + ComplexNum a = new ComplexNum(3, 2); + ComplexNum b = new ComplexNum(1, 7); + ComplexNum c = ComplexNum.add(a, b); + System.out.println("Sum:\n" + a + " + " + b + " = " + c); + c = ComplexNum.multiply(a, b); + System.out.println("Multiply:\n(" + a + ") * (" + b + ") = " + c); } } diff --git a/task04/src/com/example/task04/Line.java b/task04/src/com/example/task04/Line.java new file mode 100644 index 00000000..41fee441 --- /dev/null +++ b/task04/src/com/example/task04/Line.java @@ -0,0 +1,32 @@ +package com.example.task04; + +public class Line { + private final Point p1; + private final Point p2; + + public Line(Point p1, Point p2) { + this.p1 = p1; + this.p2 = p2; + } + + public Point getP1() { + return p1; + } + + public Point getP2() { + return p2; + } + + public boolean isCollinearLine(Point p) { + // Проверяем, если три точки (p1, p2 и p) коллинеарны, используя определитель матрицы + double determinant = (p2.getX() - p1.getX()) * (p.getY() - p1.getY()) - (p2.getY() - p1.getY()) * (p.getX() - p1.getX()); + + // Если определитель равен 0, значит, точки коллинеарны + return Math.abs(determinant) < 1e-9; // учёт погрешности + } + + public String toString() { + return String.format("Отрезок от %s до %s", p1.toString(), p2.toString()); + } +} + diff --git a/task04/src/com/example/task04/Point.java b/task04/src/com/example/task04/Point.java new file mode 100644 index 00000000..11081e7e --- /dev/null +++ b/task04/src/com/example/task04/Point.java @@ -0,0 +1,22 @@ +package com.example.task04; + +public class Point { + private final double x; + private final double y; + + public Point(double x, double y) { + this.x = x; + this.y = y; + } + + public double getX() { + return x; + } + public double getY() { + return y; + } + + public String toString() { + return String.format("(%.2f, %.2f)", x, y); + } +} diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 55917a30..95be7503 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -2,6 +2,15 @@ public class Task04Main { public static void main(String[] args) { + Point p1 = new Point(0, 0); + Point p2 = new Point(4, 4); + Point p3 = new Point(2, 2); + Line line = new Line(p1, p2); + + boolean isCollinear = line.isCollinearLine(p3); + + System.out.println(line); + System.out.println("Точка " + p3 + " лежит на линии: " + isCollinear); } } diff --git a/task05/src/com/example/task05/Point.java b/task05/src/com/example/task05/Point.java index 968ea652..f8653390 100644 --- a/task05/src/com/example/task05/Point.java +++ b/task05/src/com/example/task05/Point.java @@ -4,6 +4,8 @@ * Точка в двумерном пространстве */ public class Point { + private final double x; // Координата X + private final double y; // Координата Y /** * Конструктор, инициализирующий координаты точки @@ -11,8 +13,10 @@ public class Point { * @param x координата по оси абсцисс * @param y координата по оси ординат */ + public Point(double x, double y) { - throw new AssertionError(); + this.x = x; + this.y = y; } /** @@ -20,9 +24,9 @@ public Point(double x, double y) { * * @return координату точки по оси X */ + public double getX() { - // TODO: реализовать - throw new AssertionError(); + return x; } /** @@ -31,8 +35,7 @@ public double getX() { * @return координату точки по оси Y */ public double getY() { - // TODO: реализовать - throw new AssertionError(); + return y; } /** @@ -42,8 +45,11 @@ public double getY() { * @return расстояние от текущей точки до переданной */ public double getLength(Point point) { - // TODO: реализовать - throw new AssertionError(); + return Math.sqrt(Math.pow(point.getX() - this.x, 2) + Math.pow(point.getY() - this.y, 2)); + } + + public String toString() { + return String.format("(%.2f, %.2f)", x, y); } } diff --git a/task05/src/com/example/task05/PolygonalLine.java b/task05/src/com/example/task05/PolygonalLine.java index b534bfd5..5ebf5f79 100644 --- a/task05/src/com/example/task05/PolygonalLine.java +++ b/task05/src/com/example/task05/PolygonalLine.java @@ -1,9 +1,14 @@ package com.example.task05; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + /** * Ломаная линия */ public class PolygonalLine { + private final List points = new ArrayList<>(); /** * Устанавливает точки ломаной линии @@ -11,7 +16,11 @@ public class PolygonalLine { * @param points массив точек, которыми нужно проинициализировать ломаную линию */ public void setPoints(Point[] points) { - // TODO: реализовать + this.points.clear(); + for (Point point : points) { + // Копируем каждую точку, чтобы предотвратить влияние внешних изменений + this.points.add(new Point(point.getX(), point.getY())); + } } /** @@ -20,7 +29,8 @@ public void setPoints(Point[] points) { * @param point точка, которую нужно добавить к ломаной */ public void addPoint(Point point) { - // TODO: реализовать + // Копируем объект точки перед добавлением + this.points.add(new Point(point.getX(), point.getY())); } /** @@ -30,7 +40,7 @@ public void addPoint(Point point) { * @param y координата по оси ординат */ public void addPoint(double x, double y) { - // TODO: реализовать + this.points.add(new Point(x, y)); } /** @@ -39,8 +49,22 @@ public void addPoint(double x, double y) { * @return длину ломаной линии */ public double getLength() { - // TODO: реализовать - throw new AssertionError(); + double totalLength = 0.0; + for (int i = 1; i < points.size(); i++) { + totalLength += points.get(i - 1).getLength(points.get(i)); + } + return totalLength; + } + + public String toString() { + StringBuilder sb = new StringBuilder("PolygonalLine: "); + for (Point point : points) { + sb.append(point.toString()).append(" -> "); + } + if (!points.isEmpty()) { + sb.setLength(sb.length() - 4); // Удаляем последний "->" + } + return sb.toString(); } } diff --git a/task05/src/com/example/task05/Task05Main.java b/task05/src/com/example/task05/Task05Main.java index 4f745fb6..282674ff 100644 --- a/task05/src/com/example/task05/Task05Main.java +++ b/task05/src/com/example/task05/Task05Main.java @@ -2,6 +2,21 @@ public class Task05Main { public static void main(String[] args) { +// Создаем несколько точек + Point p1 = new Point(0, 0); + Point p2 = new Point(3, 4); + Point p3 = new Point(6, 8); + // Создаем ломаную линию + PolygonalLine line = new PolygonalLine(); + line.addPoint(p1); + line.addPoint(p2); + line.addPoint(p3); + + // Вывод ломаной линии + System.out.println(line); + + // Вычисление длины ломаной линии + System.out.println("Длина ломаной линии: " + line.getLength()); } }