Лабораторная работа №1
В приведенных ниже заданиях необходимо вывести внизу фамилию разработчика, дату получения задания, а также дату сдачи задания. Для работы с динамическим массивом вводить его с клавиатуры и необходимо использовать утилитный класс Arrays и его стандартные методы. В заданиях на числа объект можно создавать в виде массива символов. Ввести n чисел с консоли (1-15 вариант добавлять новый элемент в начало списка, 16-30 – в конец списка).
24. Вычислить определитель матрицы.
Содержание Main.java:
public class Main {
public static void main(String[] args) {
int size = Utility.readInteger("Enter size of array: ");
int[] array = Utility.readArray(size);
Utility.printArray(array);
int n = Utility.readInteger("Enter size of square matrix: ");
int[][] matrix = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = Utility.readInteger("Enter element (" + (i + 1) + "," + (j + 1) + "): ");
}
}
System.out.println("Determinant of the matrix: " + Utility.determinant(matrix));
}
}
Содержание Utility.java:
import java.util.Arrays;
public class Utility {
public static int[] readArray(int size) {
int[] array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = readInteger("Enter number " + (i + 1) + ": ");
}
return array;
}
public static int readInteger(String prompt) {
System.out.print(prompt);
int n = Integer.parseInt(System.console().readLine());
return n;
}
public static void printArray(int[] array) {
System.out.println(Arrays.toString(array));
}
public static int determinant(int[][] matrix) {
int size = matrix.length;
if (size == 1) {
return matrix[0][0];
}
if (size == 2) {
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
}
int det = 0;
for (int i = 0; i < size; i++) {
int[][] subMatrix = new int[size - 1][size - 1];
for (int j = 1; j < size; j++) {
for (int k = 0; k < size; k++) {
if (k != i) {
subMatrix[j - 1][k < i ? k : k - 1] = matrix[j][k];
}
}
}
det += ((i % 2 == 0) ? 1 : -1) * matrix[0][i] * determinant(subMatrix);
}
return det;
}
}
Результат выполнения:
Лабораторная работа №2
Создать классы, спецификации которых приведены ниже. Определить конструкторы и методы setТип(), getТип(), toString(). Определить дополнительно методы в классе, создающем массив объектов. Реализовать методы сложения, вычитания, умножения и деления объектов (для тех классов, объекты которых могут поддерживать арифметические действия). Задать критерий выбора данных и вывести эти данные на консоль. В каждом классе, обладающем информацией, должно быть объявлено несколько конструкторов.
24. Определить класс Четырехугольник на плоскости, вершины которого имеют тип Точка. Определить площадь и периметр четырехугольника. Создать массив/список/множество объектов и подсчитать количество четырехугольников разного типа (квадрат, прямоугольник, ромб, произвольный). Определить для каждой группы наибольший и наименьший по площади (периметру) объект.
import java.awt.Point;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class Четырехугольник {
Point[] вершины;
public Четырехугольник(Point... вершины) {
this.вершины = вершины;
}
public Point getТочка(int index) {
return вершины[index];
}
public void setТочка(int index, Point точка) {
вершины[index] = точка;
}
public double getПериметр() {
double periметр = 0;
for (int i = 0; i < вершины.length; i++) {
periметр += вершины[i].distance(вершины[(i + 1) % вершины.length]);
}
return periметр;
}
public double getПлощадь() {
double area = 0;
int n = вершины.length;
for (int i = 0; i < n; i++) {
area += (vertexes[i].x * vertexes[(i + 1) % n].y) - (vertexes[i].y * vertexes[(i + 1) % n].x);
}
return Math.abs(area) / 2;
}
@Override
public String toString() {
return "Четырехугольник: " + Arrays.toString(вершины);
}
}
public class Main {
public static void main(String[] args) {
Четырехугольник[] fourAngledShapes = new Четырехугольник[]{
new Четырехугольник(new Point(0, 0), new Point(1, 0), new Point(1, 1), new Point(0, 1)), // Квадрат
new Четырехугольник(new Point(0, 0), new Point(2, 0), new Point(2, 3), new Point(0, 3)), // Прямоугольник
new Четырехугольник(new Point(1, 1), new Point(4, 1), new Point(3, 4), new Point(2, 3)), // Ромб
new Четырехугольник(new Point(0, 0), new Point(1, 2), new Point(3, 2), new Point(2, 3)) // Произвольный
};
Map<String, List<Четырехугольник>> shapeMap = Arrays.stream(fourAngledShapes)
.collect(Collectors.groupingBy(fourAngledShape -> {
if (fourAngledShape.getПериметр() == 4) {
return "Квадрат";
} else if (fourAngledShape.getПериметр() == 6) {
return "Прямоугольник";
} else if (fourAngledShape.getПериметр() == 8) {
return "Ромб";
} else {
return "Произвольный";
}
}));
for (Map.Entry<String, List<Четырехугольник>> entry : shapeMap.entrySet()) {
System.out.println("Тип четырехугольника: " + entry.getKey());
System.out.println("Количество объектов: " + entry.getValue().size());
double minPerimeter = entry.getValue().stream().mapToDouble(fourAngledShape -> fourAngledShape.getПериметр()).min().getAsDouble();
double maxPerimeter = entry.getValue().stream().mapToDouble(fourAngledShape -> fourAngledShape.getПериметр()).max().getAsDouble();
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// ввод количества четырехугольников
System.out.print("Введите количество четырехугольников: ");
int count = scanner.nextInt();
// массив для хранения четырехугольников
Quadrilateral[] quadrilaterals = new Quadrilateral[count];
// ввод четырехугольников
for (int i = 0; i < count; i++) {
System.out.println("Введите четырехугольник номер " + (i + 1));
System.out.print("Введите тип четырехугольника (квадрат, прямоугольник, ромб, произвольный): ");
String type = scanner.next();
System.out.print("Введите длину стороны A: ");
double sideA = scanner.nextDouble();
System.out.print("Введите длину стороны B: ");
double sideB = scanner.nextDouble();
System.out.print("Введите длину стороны C: ");
double sideC = scanner.nextDouble();
System.out.print("Введите длину стороны D: ");
double sideD = scanner.nextDouble();
Quadrilateral quadrilateral = new Quadrilateral(type, sideA, sideB, sideC, sideD);
quadrilaterals[i] = quadrilateral;
}
// анализ и вывод результатов
// ...
scanner.close();
}
}