From b8a6605fd8d939c3cbf269be2e5a33e9b39c419e Mon Sep 17 00:00:00 2001 From: nickSavr Date: Thu, 12 Dec 2024 19:53:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D1=8B=D0=B5=20=E2=84=9621-32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- students/23K0186/23K0186-p21/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../s23k0186/lab1/ArrayToListConverter.java | 28 ++++++ .../practice/s23k0186/lab2/FlexibleArray.java | 57 ++++++++++++ .../s23k0186/lab3/ElementRetriever.java | 29 ++++++ students/23K0186/23K0186-p22/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../s23k0186/lab1/FactorialCalculator.java | 18 ++++ .../s23k0186/lab1/HarmonicSeries.java | 11 +++ .../practice/s23k0186/lab1/RpnCalculator.java | 82 +++++++++++++++++ .../ru/mirea/practice/s23k0186/lab2/Main.java | 9 ++ .../lab2/RpnCalculatorController.java | 47 ++++++++++ .../s23k0186/lab2/RpnCalculatorModel.java | 52 +++++++++++ .../s23k0186/lab2/RpnCalculatorView.java | 86 ++++++++++++++++++ .../practice/s23k0186/lab3/ArrayAccessor.java | 19 ++++ students/23K0186/23K0186-p23/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../practice/s23k0186/lab1/CircularQueue.java | 90 +++++++++++++++++++ .../s23k0186/lab1/QueueInterface.java | 17 ++++ .../practice/s23k0186/lab1/QueueTest.java | 34 +++++++ .../practice/s23k0186/lab2/BaseQueue.java | 23 +++++ .../practice/s23k0186/lab2/CustomQueue.java | 13 +++ .../practice/s23k0186/lab2/DynamicQueue.java | 44 +++++++++ students/23K0186/23K0186-p24/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../practice/s23k0186/lab1/ComplexNumber.java | 37 ++++++++ .../s23k0186/lab1/ComplexNumberFactory.java | 7 ++ .../s23k0186/lab1/StandardComplexFactory.java | 13 +++ .../s23k0186/lab2/CustomFurnitureFactory.java | 18 ++++ .../practice/s23k0186/lab2/Customer.java | 13 +++ .../s23k0186/lab2/EnchantedTable.java | 7 ++ .../practice/s23k0186/lab2/Furniture.java | 4 + .../s23k0186/lab2/FurnitureFactory.java | 9 ++ .../practice/s23k0186/lab2/RetroSofa.java | 13 +++ .../practice/s23k0186/lab2/UtilityStool.java | 7 ++ students/23K0186/23K0186-p25/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../s23k0186/lab1/CurrencyPriceFinder.java | 32 +++++++ .../s23k0186/lab2/NumericValidator.java | 31 +++++++ students/23K0186/23K0186-p26/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../practice/s23k0186/lab1/ArrayReverser.java | 37 ++++++++ .../ru/mirea/practice/s23k0186/lab2/Main.java | 10 +++ .../mirea/practice/s23k0186/lab2/MyList.java | 52 +++++++++++ .../practice/s23k0186/lab2/TestMyList.java | 19 ++++ students/23K0186/23K0186-p27/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../s23k0186/lab1/CustomHashTable.java | 65 ++++++++++++++ .../practice/s23k0186/lab1/HashTableTest.java | 22 +++++ .../s23k0186/lab2/CustomHashTable.java | 65 ++++++++++++++ .../s23k0186/lab2/PriorityQueueDemo.java | 50 +++++++++++ students/23K0186/23K0186-p28/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../lab1/SetTransformationExample.java | 33 +++++++ .../s23k0186/lab2/NameStatistics.java | 64 +++++++++++++ students/23K0186/23K0186-p29/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../practice/s23k0186/lab1/RoadInventory.java | 44 +++++++++ students/23K0186/23K0186-p30--2/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../s23k0186/lab1/BinarySearchTree.java | 77 ++++++++++++++++ .../s23k0186/lab1/BinarySearchTreeTest.java | 31 +++++++ .../practice/s23k0186/lab1/TreeNode.java | 13 +++ students/23K0186/23K0186-p30/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../s23k0186/lab1/CustomBinaryTree.java | 57 ++++++++++++ .../ru/mirea/practice/s23k0186/lab1/Node.java | 13 +++ .../mirea/practice/s23k0186/lab2/Huffman.java | 53 +++++++++++ .../practice/s23k0186/lab2/TreeNode.java | 20 +++++ students/23K0186/23K0186-p31/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../practice/s23k0186/lab1/TernaryTree.java | 81 +++++++++++++++++ .../s23k0186/lab1/TernaryTreeApp.java | 54 +++++++++++ .../practice/s23k0186/lab1/TreeNode.java | 15 ++++ students/23K0186/23K0186-p32/pom.xml | 13 +++ .../java/ru/mirea/practice/s23k0186/Main.java | 12 +++ .../s23k0186/lab1/JohnsonTrotter.java | 72 +++++++++++++++ students/23K0186/pom.xml | 13 +++ 78 files changed, 2135 insertions(+) create mode 100644 students/23K0186/23K0186-p21/pom.xml create mode 100644 students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab1/ArrayToListConverter.java create mode 100644 students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab2/FlexibleArray.java create mode 100644 students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab3/ElementRetriever.java create mode 100644 students/23K0186/23K0186-p22/pom.xml create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/FactorialCalculator.java create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/HarmonicSeries.java create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/RpnCalculator.java create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/Main.java create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorController.java create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorModel.java create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorView.java create mode 100644 students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab3/ArrayAccessor.java create mode 100644 students/23K0186/23K0186-p23/pom.xml create mode 100644 students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/CircularQueue.java create mode 100644 students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/QueueInterface.java create mode 100644 students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/QueueTest.java create mode 100644 students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/BaseQueue.java create mode 100644 students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomQueue.java create mode 100644 students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/DynamicQueue.java create mode 100644 students/23K0186/23K0186-p24/pom.xml create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/ComplexNumber.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/ComplexNumberFactory.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/StandardComplexFactory.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomFurnitureFactory.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/Customer.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/EnchantedTable.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/Furniture.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/FurnitureFactory.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/RetroSofa.java create mode 100644 students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/UtilityStool.java create mode 100644 students/23K0186/23K0186-p25/pom.xml create mode 100644 students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/lab1/CurrencyPriceFinder.java create mode 100644 students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/lab2/NumericValidator.java create mode 100644 students/23K0186/23K0186-p26/pom.xml create mode 100644 students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab1/ArrayReverser.java create mode 100644 students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/Main.java create mode 100644 students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/MyList.java create mode 100644 students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/TestMyList.java create mode 100644 students/23K0186/23K0186-p27/pom.xml create mode 100644 students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab1/CustomHashTable.java create mode 100644 students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab1/HashTableTest.java create mode 100644 students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomHashTable.java create mode 100644 students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab2/PriorityQueueDemo.java create mode 100644 students/23K0186/23K0186-p28/pom.xml create mode 100644 students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/lab1/SetTransformationExample.java create mode 100644 students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/lab2/NameStatistics.java create mode 100644 students/23K0186/23K0186-p29/pom.xml create mode 100644 students/23K0186/23K0186-p29/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p29/src/main/java/ru/mirea/practice/s23k0186/lab1/RoadInventory.java create mode 100644 students/23K0186/23K0186-p30--2/pom.xml create mode 100644 students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/BinarySearchTree.java create mode 100644 students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/BinarySearchTreeTest.java create mode 100644 students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/TreeNode.java create mode 100644 students/23K0186/23K0186-p30/pom.xml create mode 100644 students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab1/CustomBinaryTree.java create mode 100644 students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab1/Node.java create mode 100644 students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab2/Huffman.java create mode 100644 students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab2/TreeNode.java create mode 100644 students/23K0186/23K0186-p31/pom.xml create mode 100644 students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TernaryTree.java create mode 100644 students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TernaryTreeApp.java create mode 100644 students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TreeNode.java create mode 100644 students/23K0186/23K0186-p32/pom.xml create mode 100644 students/23K0186/23K0186-p32/src/main/java/ru/mirea/practice/s23k0186/Main.java create mode 100644 students/23K0186/23K0186-p32/src/main/java/ru/mirea/practice/s23k0186/lab1/JohnsonTrotter.java diff --git a/students/23K0186/23K0186-p21/pom.xml b/students/23K0186/23K0186-p21/pom.xml new file mode 100644 index 000000000..b2b846e13 --- /dev/null +++ b/students/23K0186/23K0186-p21/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p21 + 21 практика + diff --git a/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..3e3031f48 --- /dev/null +++ b/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать первая практическая работа!"); + } +} \ No newline at end of file diff --git a/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab1/ArrayToListConverter.java b/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab1/ArrayToListConverter.java new file mode 100644 index 000000000..44c0b1a96 --- /dev/null +++ b/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab1/ArrayToListConverter.java @@ -0,0 +1,28 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.Arrays; +import java.util.List; + +public abstract class ArrayToListConverter { + + public static List toList(T[] array) { + if (array == null || array.length == 0) { + throw new IllegalArgumentException("Массив не должен быть пустым или null"); + } + return Arrays.asList(array); + } + + public static void main(String[] args) { + String[] fruits = {"слон", "мышь", "заяц"}; + List fruitList = toList(fruits); + System.out.println("Список фруктов: " + fruitList); + + Double[] numbers = {1.1, 2.2, 3.3, 4.4}; + List numberList = toList(numbers); + System.out.println("Список чисел: " + numberList); + + Character[] letters = {'A', 'B', 'C'}; + List letterList = toList(letters); + System.out.println("Список букв: " + letterList); + } +} diff --git a/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab2/FlexibleArray.java b/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab2/FlexibleArray.java new file mode 100644 index 000000000..7a8c287ca --- /dev/null +++ b/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab2/FlexibleArray.java @@ -0,0 +1,57 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.Arrays; + +public class FlexibleArray { + private Object[] data; + private int count; + + public FlexibleArray(int initialCapacity) { + if (initialCapacity <= 0) { + throw new IllegalArgumentException("Начальный размер должен быть положительным"); + } + data = new Object[initialCapacity]; + count = 0; + } + + public void add(T element) { + ensureCapacity(); + data[count++] = element; + } + + @SuppressWarnings("unchecked") + public T get(int index) { + if (index < 0 || index >= count) { + throw new IndexOutOfBoundsException("Индекс: " + index + ", Размер: " + count); + } + return (T) data[index]; + } + + public int size() { + return count; + } + + private void ensureCapacity() { + if (count == data.length) { + data = Arrays.copyOf(data, data.length * 2); + } + } + + @Override + public String toString() { + return Arrays.toString(Arrays.copyOf(data, count)); + } + + public static void main(String[] args) { + FlexibleArray array = new FlexibleArray<>(5); + + array.add(42); + array.add(123456789L); + array.add("Привет"); + array.add(3.1415); + + System.out.println("Содержимое массива: " + array); + System.out.println("Элемент по индексу 1: " + array.get(1)); + System.out.println("Размер массива: " + array.size()); + } +} diff --git a/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab3/ElementRetriever.java b/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab3/ElementRetriever.java new file mode 100644 index 000000000..b16820ef0 --- /dev/null +++ b/students/23K0186/23K0186-p21/src/main/java/ru/mirea/practice/s23k0186/lab3/ElementRetriever.java @@ -0,0 +1,29 @@ +package ru.mirea.practice.s23k0145.lab3; + +import java.util.Objects; + +public abstract class ElementRetriever { + + // Обобщенный метод для получения элемента массива + public static T fetchElement(T[] array, int index) { + Objects.requireNonNull(array, "Массив не должен быть null"); + if (index < 0 || index >= array.length) { + throw new IllegalArgumentException("Некорректный индекс: " + index); + } + return array[index]; + } + + public static void main(String[] args) { + // Пример с массивом строк + String[] fruits = {"яблоко", "банан", "вишня"}; + System.out.println("Элемент на позиции 1: " + fetchElement(fruits, 1)); + + // Пример с массивом чисел + Integer[] numbers = {10, 20, 30, 40}; + System.out.println("Элемент на позиции 2: " + fetchElement(numbers, 2)); + + // Пример с массивом символов + Character[] letters = {'A', 'B', 'C'}; + System.out.println("Элемент на позиции 0: " + fetchElement(letters, 0)); + } +} diff --git a/students/23K0186/23K0186-p22/pom.xml b/students/23K0186/23K0186-p22/pom.xml new file mode 100644 index 000000000..7c58643ea --- /dev/null +++ b/students/23K0186/23K0186-p22/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p22 + 22 практика + diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..dc7d405e6 --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать вторая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/FactorialCalculator.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/FactorialCalculator.java new file mode 100644 index 000000000..18027abb9 --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/FactorialCalculator.java @@ -0,0 +1,18 @@ +package ru.mirea.practice.s23k0145.lab1; + +public abstract class FactorialCalculator { + public static void main(String[] args) { + int number = 5; // Пример числа для вычисления факториала + long factorial = calculateFactorial(number); + System.out.println("Факториал числа " + number + " = " + factorial); + } + + // Метод для вычисления факториала с использованием цикла + public static long calculateFactorial(int num) { + long result = 1; + for (int i = 2; i <= num; i++) { + result *= i; + } + return result; + } +} diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/HarmonicSeries.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/HarmonicSeries.java new file mode 100644 index 000000000..3912520e3 --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/HarmonicSeries.java @@ -0,0 +1,11 @@ +package ru.mirea.practice.s23k0145.lab1; + +public abstract class HarmonicSeries { + public static void main(String[] args) { + // Печать первых 10 чисел гармонического ряда + for (int i = 1; i <= 10; i++) { + double harmonicNumber = 1.0 / i; + System.out.printf("Гармоническое число(%d) = %.3f\n", i, harmonicNumber); + } + } +} diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/RpnCalculator.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/RpnCalculator.java new file mode 100644 index 000000000..610ab7f24 --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab1/RpnCalculator.java @@ -0,0 +1,82 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.Scanner; +import java.util.Deque; +import java.util.ArrayDeque; + +public final class RpnCalculator { + + private RpnCalculator() { + throw new UnsupportedOperationException("Utility class"); + } + + public static void main(String[] args) { + try (Scanner scanner = new Scanner(System.in)) { + System.out.println("Введите выражение в обратной польской записи (например, '2 3 +'):"); + String input = scanner.nextLine(); + + try { + double result = calculateRpn(input); + System.out.println("Результат: " + result); + } catch (Exception e) { + System.out.println("Ошибка: " + e.getMessage()); + } + } + } + + public static double calculateRpn(String expression) { + Deque stack = new ArrayDeque<>(); + String[] tokens = expression.trim().split("\\s+"); + + for (String token : tokens) { + switch (token) { + case "+": + checkStackSize(stack, 2); + stack.push(stack.pop() + stack.pop()); + break; + case "-": + checkStackSize(stack, 2); + double b = stack.pop(); + double a = stack.pop(); + stack.push(a - b); + break; + case "*": + checkStackSize(stack, 2); + stack.push(stack.pop() * stack.pop()); + break; + case "/": + checkStackSize(stack, 2); + double divisor = stack.pop(); + if (divisor == 0) { + throw new ArithmeticException("Деление на ноль."); + } + double dividend = stack.pop(); + stack.push(dividend / divisor); + break; + default: + stack.push(parseNumber(token)); + break; + } + } + + if (stack.size() != 1) { + throw new IllegalArgumentException("Некорректное выражение."); + } + return stack.pop(); + } + + private static double parseNumber(String token) { + try { + return Double.parseDouble(token); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Неверный ввод: '" + token + "'.", e); + } + } + + private static void checkStackSize(Deque stack, int requiredSize) { + if (stack.size() < requiredSize) { + throw new IllegalArgumentException("Недостаточно операндов в стеке для выполнения операции."); + } + } +} + diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/Main.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/Main.java new file mode 100644 index 000000000..5692c02c8 --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/Main.java @@ -0,0 +1,9 @@ +package ru.mirea.practice.s23k0145.lab2; + +public abstract class Main { + public static void main(String[] args) { + RpnCalculatorView view = new RpnCalculatorView(); + RpnCalculatorModel model = new RpnCalculatorModel(); + new RpnCalculatorController(view, model); + } +} diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorController.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorController.java new file mode 100644 index 000000000..95df8ff76 --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorController.java @@ -0,0 +1,47 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class RpnCalculatorController { + private final RpnCalculatorView view; + private final RpnCalculatorModel model; + + public RpnCalculatorController(RpnCalculatorView view, RpnCalculatorModel model) { + this.view = view; + this.model = model; + this.view.addButtonListener(new ButtonClickListener()); + } + + private class ButtonClickListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + String command = e.getActionCommand(); + if ("=".equals(command)) { + handleCalculation(); + } else { + appendToInput(command); + } + } + + private void handleCalculation() { + String input = view.getInput().trim(); + if (input.isEmpty()) { + view.setResult("Ошибка: пустой ввод."); + return; + } + try { + double result = model.evaluateExpression(input); + view.updateHistory(input); + view.setResult("Результат: " + result); + view.clearInput(); + } catch (Exception ex) { + view.setResult("Ошибка: " + ex.getMessage()); + } + } + + private void appendToInput(String command) { + String currentInput = view.getInput(); + view.setInput(currentInput + (currentInput.isEmpty() ? "" : " ") + command); + } + } +} diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorModel.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorModel.java new file mode 100644 index 000000000..5bdf0bef2 --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorModel.java @@ -0,0 +1,52 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.ArrayDeque; +import java.util.Deque; + +public class RpnCalculatorModel { + + public double evaluateExpression(String expression) { + Deque stack = new ArrayDeque<>(); + String[] tokens = expression.trim().split("\\s+"); + + for (String token : tokens) { + switch (token) { + case "+": + stack.push(stack.pop() + stack.pop()); + break; + case "-": + double b = stack.pop(); + double a = stack.pop(); + stack.push(a - b); + break; + case "*": + stack.push(stack.pop() * stack.pop()); + break; + case "/": + double divisor = stack.pop(); + if (divisor == 0) { + throw new ArithmeticException("Деление на ноль."); + } + double dividend = stack.pop(); + stack.push(dividend / divisor); + break; + default: + stack.push(parseNumber(token)); + break; + } + } + + if (stack.size() != 1) { + throw new IllegalArgumentException("Некорректное выражение."); + } + return stack.pop(); + } + + private double parseNumber(String token) { + try { + return Double.parseDouble(token); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Неверный ввод: '" + token + "'.", e); + } + } +} diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorView.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorView.java new file mode 100644 index 000000000..24e130cfe --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab2/RpnCalculatorView.java @@ -0,0 +1,86 @@ +package ru.mirea.practice.s23k0145.lab2; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.GridLayout; +import java.awt.event.ActionListener; + +public class RpnCalculatorView { + private final JFrame frame; + private final JTextField inputField; + private final JTextArea historyArea; + private final JTextArea resultArea; + private final JPanel buttonPanel; + + public RpnCalculatorView() { + frame = new JFrame("RPN Calculator"); + inputField = new JTextField(20); + historyArea = new JTextArea(10, 20); + resultArea = new JTextArea(5, 20); + + buttonPanel = new JPanel(new GridLayout(4, 4)); + initializeUI(); + } + + private void initializeUI() { + resultArea.setEditable(false); + historyArea.setEditable(false); + + frame.setLayout(new BorderLayout()); + frame.add(inputField, BorderLayout.NORTH); + createButtons(); + frame.add(buttonPanel, BorderLayout.CENTER); + + JPanel outputPanel = new JPanel(new BorderLayout()); + outputPanel.add(new JScrollPane(historyArea), BorderLayout.CENTER); + outputPanel.add(new JScrollPane(resultArea), BorderLayout.SOUTH); + frame.add(outputPanel, BorderLayout.EAST); + + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.pack(); + frame.setVisible(true); + } + + private void createButtons() { + String[] buttons = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"}; + for (String text : buttons) { + JButton button = new JButton(text); + buttonPanel.add(button); + } + } + + public String getInput() { + return inputField.getText(); + } + + public void setInput(String input) { + inputField.setText(input); + } + + public void updateHistory(String expression) { + historyArea.append(expression + "\n"); + } + + public void setResult(String result) { + resultArea.setText(result); + } + + public void addButtonListener(ActionListener listener) { + for (Component component : buttonPanel.getComponents()) { + if (component instanceof JButton) { + ((JButton) component).addActionListener(listener); + } + } + } + + public void clearInput() { + inputField.setText(""); + } +} + diff --git a/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab3/ArrayAccessor.java b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab3/ArrayAccessor.java new file mode 100644 index 000000000..7d7385edb --- /dev/null +++ b/students/23K0186/23K0186-p22/src/main/java/ru/mirea/practice/s23k0186/lab3/ArrayAccessor.java @@ -0,0 +1,19 @@ +package ru.mirea.practice.s23k0145.lab3; + +public abstract class ArrayAccessor { + + public static T fetchElement(T[] dataArray, int position) { + if (position < 0 || position >= dataArray.length) { + throw new IndexOutOfBoundsException("Недопустимый индекс: " + position); + } + return dataArray[position]; + } + + public static void main(String[] args) { + String[] fruits = {"кузнечик", "бабочка", "собака"}; + System.out.println("Элемент по индексу 1: " + fetchElement(fruits, 1)); + + Integer[] numbers = {42, 73, 64}; + System.out.println("Элемент по индексу 0: " + fetchElement(numbers, 0)); + } +} diff --git a/students/23K0186/23K0186-p23/pom.xml b/students/23K0186/23K0186-p23/pom.xml new file mode 100644 index 000000000..6ec476614 --- /dev/null +++ b/students/23K0186/23K0186-p23/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p23 + 23 практика + diff --git a/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..810146253 --- /dev/null +++ b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать третья практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/CircularQueue.java b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/CircularQueue.java new file mode 100644 index 000000000..f6fdc789d --- /dev/null +++ b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/CircularQueue.java @@ -0,0 +1,90 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class CircularQueue implements QueueInterface { + private final int capacity; + private final List elements; + private int head; + private int tail; + + public CircularQueue(Collection collection) { + elements = new ArrayList<>(collection); + this.capacity = collection.size(); + head = 0; + tail = this.capacity - 1; + } + + public CircularQueue(int capacity) { + elements = new ArrayList<>(); + for (int i = 0; i < capacity; i++) { + elements.add(null); + } + this.capacity = capacity; + head = 0; + tail = -1; + } + + @Override + public void enqueue(T item) { + tail = (tail + 1) % capacity; + elements.set(tail, item); + } + + @Override + public T dequeue() { + if (isEmpty()) { + return null; + } + T item = elements.get(head); + if (head == tail) { + tail = -1; + } + head = (head + 1) % capacity; + return item; + } + + @Override + public int size() { + return capacity; + } + + @Override + public boolean isEmpty() { + return tail == -1; + } + + @Override + public void clear() { + elements.clear(); + } + + @Override + public T peekFront() { + return elements.get(head); + } + + @Override + public T peekRear() { + return elements.get(tail); + } + + @Override + public String toString() { + if (isEmpty()) { + return "[]"; + } + + List output = new ArrayList<>(); + if (head <= tail) { + output.addAll(elements.subList(head, tail + 1)); + } else { + output.addAll(elements.subList(head, capacity)); + output.addAll(elements.subList(0, tail + 1)); + } + return output.toString(); + } +} + diff --git a/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/QueueInterface.java b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/QueueInterface.java new file mode 100644 index 000000000..87c24f906 --- /dev/null +++ b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/QueueInterface.java @@ -0,0 +1,17 @@ +package ru.mirea.practice.s23k0145.lab1; + +public interface QueueInterface { + void enqueue(T item); + + T dequeue(); + + int size(); + + boolean isEmpty(); + + void clear(); + + T peekFront(); + + T peekRear(); +} diff --git a/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/QueueTest.java b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/QueueTest.java new file mode 100644 index 000000000..58d1da736 --- /dev/null +++ b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab1/QueueTest.java @@ -0,0 +1,34 @@ +package ru.mirea.practice.s23k0145.lab1; + +public abstract class QueueTest { + public static void main(String[] args) { + CircularQueue queue = new CircularQueue<>(5); + + queue.enqueue(10); + queue.enqueue(20); + queue.enqueue(30); + queue.enqueue(40); + queue.enqueue(50); + System.out.println(queue); + + queue.enqueue(60); + System.out.println(queue); + + queue.dequeue(); + queue.dequeue(); + queue.dequeue(); + System.out.println(queue); + + queue.enqueue(70); + System.out.println(queue); + + queue.enqueue(80); + System.out.println(queue); + + queue.enqueue(90); + System.out.println(queue); + + queue.dequeue(); + System.out.println(queue); + } +} diff --git a/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/BaseQueue.java b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/BaseQueue.java new file mode 100644 index 000000000..96c08616e --- /dev/null +++ b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/BaseQueue.java @@ -0,0 +1,23 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.List; + +abstract class BaseQueue implements CustomQueue { + protected int currentSize; + protected List elements; + + @Override + public int getSize() { + return currentSize; + } + + @Override + public boolean isQueueEmpty() { + return elements.isEmpty(); + } + + @Override + public void reset() { + elements.clear(); + } +} diff --git a/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomQueue.java b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomQueue.java new file mode 100644 index 000000000..2f49320c8 --- /dev/null +++ b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomQueue.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s23k0145.lab2; + +public interface CustomQueue { + void add(T element); + + T remove(); + + int getSize(); + + boolean isQueueEmpty(); + + void reset(); +} diff --git a/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/DynamicQueue.java b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/DynamicQueue.java new file mode 100644 index 000000000..13fd2c18e --- /dev/null +++ b/students/23K0186/23K0186-p23/src/main/java/ru/mirea/practice/s23k0186/lab2/DynamicQueue.java @@ -0,0 +1,44 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.Collection; +import java.util.LinkedList; + +public class DynamicQueue extends BaseQueue { + + public DynamicQueue(Collection items) { + elements = new LinkedList<>(items); + currentSize = items.size(); + } + + public DynamicQueue() { + elements = new LinkedList<>(); + currentSize = 0; + } + + @Override + public void add(T element) { + elements.add(currentSize, element); + currentSize++; + } + + @Override + public T remove() { + if (isQueueEmpty()) { + throw new IllegalStateException("Очередь пуста!"); + } + T element = elements.remove(0); + currentSize--; + return element; + } + + public static void main(String[] args) { + DynamicQueue queue = new DynamicQueue<>(); + queue.add(10); + queue.add(20); + queue.add(30); + + System.out.println("Текущий размер: " + queue.getSize()); + System.out.println("Удалённый элемент: " + queue.remove()); + System.out.println("Очередь пуста? " + queue.isQueueEmpty()); + } +} diff --git a/students/23K0186/23K0186-p24/pom.xml b/students/23K0186/23K0186-p24/pom.xml new file mode 100644 index 000000000..da0e4aba0 --- /dev/null +++ b/students/23K0186/23K0186-p24/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p24 + 24 практика + diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..fc321be46 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать четвертая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/ComplexNumber.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/ComplexNumber.java new file mode 100644 index 000000000..27e1fdc67 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/ComplexNumber.java @@ -0,0 +1,37 @@ +package ru.mirea.practice.s23k0145.lab1; + +public class ComplexNumber { + private double realPart; + private double imaginaryPart; + + public ComplexNumber(double realPart, double imaginaryPart) { + this.realPart = realPart; + this.imaginaryPart = imaginaryPart; + } + + public ComplexNumber() { + this(0, 0); + } + + public double getRealPart() { + return realPart; + } + + public void setRealPart(double realPart) { + this.realPart = realPart; + } + + public double getImaginaryPart() { + return imaginaryPart; + } + + public void setImaginaryPart(double imaginaryPart) { + this.imaginaryPart = imaginaryPart; + } + + @Override + public String toString() { + String sign = imaginaryPart >= 0 ? "+" : "-"; + return String.format("%f %s %fi", realPart, sign, Math.abs(imaginaryPart)); + } +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/ComplexNumberFactory.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/ComplexNumberFactory.java new file mode 100644 index 000000000..b29584430 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/ComplexNumberFactory.java @@ -0,0 +1,7 @@ +package ru.mirea.practice.s23k0145.lab1; + +interface ComplexNumberFactory { + ComplexNumber createComplexNumber(); + + ComplexNumber createComplexNumber(int realPart, int imaginaryPart); +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/StandardComplexFactory.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/StandardComplexFactory.java new file mode 100644 index 000000000..61d5ebcff --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab1/StandardComplexFactory.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s23k0145.lab1; + +class StandardComplexFactory implements ComplexNumberFactory { + @Override + public ComplexNumber createComplexNumber() { + return new ComplexNumber(); + } + + @Override + public ComplexNumber createComplexNumber(int realPart, int imaginaryPart) { + return new ComplexNumber(realPart, imaginaryPart); + } +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomFurnitureFactory.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomFurnitureFactory.java new file mode 100644 index 000000000..4c0e74266 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomFurnitureFactory.java @@ -0,0 +1,18 @@ +package ru.mirea.practice.s23k0145.lab2; + +public class CustomFurnitureFactory extends FurnitureFactory { + @Override + RetroSofa createRetroSofa(int durability) { + return new RetroSofa(durability); + } + + @Override + EnchantedTable createEnchantedTable() { + return new EnchantedTable(); + } + + @Override + UtilityStool createUtilityStool() { + return new UtilityStool(); + } +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/Customer.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/Customer.java new file mode 100644 index 000000000..f2e7f28f8 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/Customer.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s23k0145.lab2; + +public class Customer { + private Furniture furniture; + + public void relax() { + System.out.printf("Клиент использует %s\n", furniture.getClass().getSimpleName()); + } + + public void setFurniture(Furniture furniture) { + this.furniture = furniture; + } +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/EnchantedTable.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/EnchantedTable.java new file mode 100644 index 000000000..6fc2f0fc7 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/EnchantedTable.java @@ -0,0 +1,7 @@ +package ru.mirea.practice.s23k0145.lab2; + +public class EnchantedTable { + void performMagic() { + System.out.println("Магия свершилась!"); + } +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/Furniture.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/Furniture.java new file mode 100644 index 000000000..de13d8716 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/Furniture.java @@ -0,0 +1,4 @@ +package ru.mirea.practice.s23k0145.lab2; + +public interface Furniture { +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/FurnitureFactory.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/FurnitureFactory.java new file mode 100644 index 000000000..1498dcab8 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/FurnitureFactory.java @@ -0,0 +1,9 @@ +package ru.mirea.practice.s23k0145.lab2; + +public abstract class FurnitureFactory { + abstract RetroSofa createRetroSofa(int durability); + + abstract EnchantedTable createEnchantedTable(); + + abstract UtilityStool createUtilityStool(); +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/RetroSofa.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/RetroSofa.java new file mode 100644 index 000000000..be5852ecd --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/RetroSofa.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s23k0145.lab2; + +public class RetroSofa implements Furniture { + private final int durability; + + public RetroSofa(int durability) { + this.durability = durability; + } + + public int getDurability() { + return durability; + } +} diff --git a/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/UtilityStool.java b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/UtilityStool.java new file mode 100644 index 000000000..c6393f546 --- /dev/null +++ b/students/23K0186/23K0186-p24/src/main/java/ru/mirea/practice/s23k0186/lab2/UtilityStool.java @@ -0,0 +1,7 @@ +package ru.mirea.practice.s23k0145.lab2; + +public class UtilityStool { + public int add(int x, int y) { + return x + y; + } +} \ No newline at end of file diff --git a/students/23K0186/23K0186-p25/pom.xml b/students/23K0186/23K0186-p25/pom.xml new file mode 100644 index 000000000..eb3d4bcad --- /dev/null +++ b/students/23K0186/23K0186-p25/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p25 + 25 практика + diff --git a/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..e341cf1f4 --- /dev/null +++ b/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать пятая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/lab1/CurrencyPriceFinder.java b/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/lab1/CurrencyPriceFinder.java new file mode 100644 index 000000000..c902b743c --- /dev/null +++ b/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/lab1/CurrencyPriceFinder.java @@ -0,0 +1,32 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.ArrayList; +import java.util.List; + +public abstract class CurrencyPriceFinder { + public static void main(String[] args) { + String sampleText = "Цены в магазинах: 25.98 USD, 44 ERR, 0.004 EU, 1000 RUB, 75.5 USD."; + + List extractedPrices = findValidPrices(sampleText); + + for (String price : extractedPrices) { + System.out.println(price); + } + } + + public static List findValidPrices(String inputText) { + List validPrices = new ArrayList<>(); + + String pricePattern = "\\b\\d+(?:\\.\\d{1,2})?\\s*(USD|RUB|EUR)\\b"; + Pattern compiledPattern = Pattern.compile(pricePattern); + Matcher textMatcher = compiledPattern.matcher(inputText); + + while (textMatcher.find()) { + validPrices.add(textMatcher.group()); + } + + return validPrices; + } +} diff --git a/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/lab2/NumericValidator.java b/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/lab2/NumericValidator.java new file mode 100644 index 000000000..61327eb4c --- /dev/null +++ b/students/23K0186/23K0186-p25/src/main/java/ru/mirea/practice/s23k0186/lab2/NumericValidator.java @@ -0,0 +1,31 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.Scanner; + +public abstract class NumericValidator { + public static void main(String[] args) { + try (Scanner userInput = new Scanner(System.in)) { + System.out.println("Введите строку для проверки наличия некорректных чисел:"); + String inputText = userInput.nextLine(); + + boolean containsInvalidNumbers = hasIncorrectNumbers(inputText); + + if (containsInvalidNumbers) { + System.out.println("Обнаружены числа, за которыми отсутствует знак '+'."); + } else { + System.out.println("Все числа правильно сопровождаются знаком '+'."); + } + } + } + + public static boolean hasIncorrectNumbers(String input) { + String patternExpression = "\\b\\d+\\b(?!\\s*\\+)"; + Pattern compiledPattern = Pattern.compile(patternExpression); + Matcher textMatcher = compiledPattern.matcher(input); + + return textMatcher.find(); + } +} + diff --git a/students/23K0186/23K0186-p26/pom.xml b/students/23K0186/23K0186-p26/pom.xml new file mode 100644 index 000000000..7be23480a --- /dev/null +++ b/students/23K0186/23K0186-p26/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p26 + 26 практика + diff --git a/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..3e8ecdf58 --- /dev/null +++ b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать шестая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab1/ArrayReverser.java b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab1/ArrayReverser.java new file mode 100644 index 000000000..36ed7bbfd --- /dev/null +++ b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab1/ArrayReverser.java @@ -0,0 +1,37 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.Stack; + +public abstract class ArrayReverser { + public static void main(String[] args) { + int[] numbers = {10, 20, 30, 40, 50}; + + System.out.print("Исходный массив: "); + displayArray(numbers); + + reverseArray(numbers); + + System.out.print("Перевернутый массив: "); + displayArray(numbers); + } + + public static void reverseArray(int[] numbers) { + Stack stack = new Stack<>(); + + for (int num : numbers) { + stack.push(num); + } + + for (int i = 0; i < numbers.length; i++) { + numbers[i] = stack.pop(); + } + } + + public static void displayArray(int[] numbers) { + for (int num : numbers) { + System.out.print(num + " "); + } + System.out.println(); + } +} + diff --git a/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/Main.java b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/Main.java new file mode 100644 index 000000000..f493e3990 --- /dev/null +++ b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/Main.java @@ -0,0 +1,10 @@ +package ru.mirea.practice.s23k0145.lab2; + +final class Main { + private Main() { + } + + public static void main(String[] args) { + System.out.println("Запуск программы!"); + } +} diff --git a/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/MyList.java b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/MyList.java new file mode 100644 index 000000000..3e100c0ec --- /dev/null +++ b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/MyList.java @@ -0,0 +1,52 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class MyList implements Iterable { + private Object[] items; + private int count; + + public MyList() { + items = new Object[10]; + count = 0; + } + + public void append(E element) { + if (count == items.length) { + expand(); + } + items[count++] = element; + } + + private void expand() { + items = Arrays.copyOf(items, items.length * 2); + } + + public int getSize() { + return count; + } + + @Override + public Iterator iterator() { + return new MyListIterator(); + } + + private class MyListIterator implements Iterator { + private int currentIndex = 0; + + @Override + public boolean hasNext() { + return currentIndex < count; + } + + @Override + public E next() { + if (!hasNext()) { + throw new NoSuchElementException("Элементы закончились."); + } + return (E) items[currentIndex++]; + } + } +} diff --git a/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/TestMyList.java b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/TestMyList.java new file mode 100644 index 000000000..65c98e640 --- /dev/null +++ b/students/23K0186/23K0186-p26/src/main/java/ru/mirea/practice/s23k0186/lab2/TestMyList.java @@ -0,0 +1,19 @@ +package ru.mirea.practice.s23k0145.lab2; + +public final class TestMyList { + private TestMyList() { + + } + + public static void main(String[] args) { + MyList myList = new MyList<>(); + myList.append("Элемент 1"); + myList.append("Элемент 2"); + myList.append("Элемент 3"); + + System.out.println("Содержимое списка:"); + for (String item : myList) { + System.out.println(item); + } + } +} diff --git a/students/23K0186/23K0186-p27/pom.xml b/students/23K0186/23K0186-p27/pom.xml new file mode 100644 index 000000000..41ae9a720 --- /dev/null +++ b/students/23K0186/23K0186-p27/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p27 + 27 практика + diff --git a/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..730220d45 --- /dev/null +++ b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать седьмая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab1/CustomHashTable.java b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab1/CustomHashTable.java new file mode 100644 index 000000000..a09bdf1b6 --- /dev/null +++ b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab1/CustomHashTable.java @@ -0,0 +1,65 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.LinkedList; + +public class CustomHashTable { + private static final int TABLE_SIZE = 16; + private LinkedList[] table; + + private static class KeyValuePair { + String key; + String value; + + KeyValuePair(String key, String value) { + this.key = key; + this.value = value; + } + } + + public void initializeTable() { + table = new LinkedList[TABLE_SIZE]; + for (int i = 0; i < TABLE_SIZE; i++) { + table[i] = new LinkedList<>(); + } + } + + private int computeHash(String key) { + return Math.abs(key.hashCode() % TABLE_SIZE); + } + + public void insert(String key, String value) { + int index = computeHash(key); + for (KeyValuePair pair : table[index]) { + if (pair.key.equals(key)) { + pair.value = value; + return; + } + } + table[index].add(new KeyValuePair(key, value)); + } + + public String find(String key) { + int index = computeHash(key); + for (KeyValuePair pair : table[index]) { + if (pair.key.equals(key)) { + return pair.value; + } + } + return null; // Если ключ не найден + } + + public void remove(String key) { + int index = computeHash(key); + table[index].removeIf(pair -> pair.key.equals(key)); + } + + public void displayTable() { + for (int i = 0; i < TABLE_SIZE; i++) { + System.out.print("Index " + i + ": "); + for (KeyValuePair pair : table[i]) { + System.out.print("[" + pair.key + " -> " + pair.value + "] "); + } + System.out.println(); + } + } +} diff --git a/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab1/HashTableTest.java b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab1/HashTableTest.java new file mode 100644 index 000000000..2b4138a8f --- /dev/null +++ b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab1/HashTableTest.java @@ -0,0 +1,22 @@ +package ru.mirea.practice.s23k0145.lab1; + +public abstract class HashTableTest { + public static void main(String[] args) { + CustomHashTable hashTable = new CustomHashTable(); + hashTable.initializeTable(); + + hashTable.insert("apple", "fruit"); + hashTable.insert("carrot", "vegetable"); + hashTable.insert("banana", "fruit"); + + System.out.println("Search for 'apple': " + hashTable.find("apple")); + System.out.println("Search for 'carrot': " + hashTable.find("carrot")); + System.out.println("Search for 'banana': " + hashTable.find("banana")); + + hashTable.displayTable(); + + hashTable.remove("carrot"); + System.out.println("After removing 'carrot':"); + hashTable.displayTable(); + } +} diff --git a/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomHashTable.java b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomHashTable.java new file mode 100644 index 000000000..7bab921c0 --- /dev/null +++ b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab2/CustomHashTable.java @@ -0,0 +1,65 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.LinkedList; + +public class CustomHashTable { + private static final int TABLE_SIZE = 16; + private LinkedList[] table; + + private static class KeyValuePair { + String key; + String value; + + KeyValuePair(String key, String value) { + this.key = key; + this.value = value; + } + } + + public void initializeTable() { + table = new LinkedList[TABLE_SIZE]; + for (int i = 0; i < TABLE_SIZE; i++) { + table[i] = new LinkedList<>(); + } + } + + private int computeHash(String key) { + return Math.abs(key.hashCode() % TABLE_SIZE); + } + + public void insert(String key, String value) { + int index = computeHash(key); + for (KeyValuePair pair : table[index]) { + if (pair.key.equals(key)) { + pair.value = value; + return; + } + } + table[index].add(new KeyValuePair(key, value)); + } + + public String find(String key) { + int index = computeHash(key); + for (KeyValuePair pair : table[index]) { + if (pair.key.equals(key)) { + return pair.value; + } + } + return null; + } + + public void remove(String key) { + int index = computeHash(key); + table[index].removeIf(pair -> pair.key.equals(key)); + } + + public void displayTable() { + for (int i = 0; i < TABLE_SIZE; i++) { + System.out.print("Index " + i + ": "); + for (KeyValuePair pair : table[i]) { + System.out.print("[" + pair.key + " -> " + pair.value + "] "); + } + System.out.println(); + } + } +} diff --git a/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab2/PriorityQueueDemo.java b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab2/PriorityQueueDemo.java new file mode 100644 index 000000000..1a1759c2c --- /dev/null +++ b/students/23K0186/23K0186-p27/src/main/java/ru/mirea/practice/s23k0186/lab2/PriorityQueueDemo.java @@ -0,0 +1,50 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.PriorityQueue; +import java.util.Collections; +import java.util.Scanner; + +public final class PriorityQueueDemo { + + private PriorityQueueDemo() {} + + public static void main(String[] args) { + try (Scanner scanner = new Scanner(System.in)) { + CustomHashTable customHashTable = new CustomHashTable(); + customHashTable.initializeTable(); + populateHashTable(customHashTable); + + demonstrateHashTable(customHashTable); + + demonstratePriorityQueue(); + } + } + + private static void populateHashTable(CustomHashTable hashTable) { + System.out.println("Добавление элементов в хеш-таблицу..."); + for (int i = 1; i <= 10; i++) { + hashTable.insert("item" + i, "data" + i); + } + } + + private static void demonstrateHashTable(CustomHashTable hashTable) { + System.out.println("Поиск по ключу 'item5': " + hashTable.find("item5")); + System.out.println("Удаление ключа 'item5'..."); + hashTable.remove("item5"); + System.out.println("Поиск по ключу 'item5' после удаления: " + hashTable.find("item5")); + } + + private static void demonstratePriorityQueue() { + PriorityQueue priorityQueue = new PriorityQueue<>(Collections.reverseOrder()); + + System.out.println("Создание и заполнение очереди с приоритетом..."); + for (int i = 1; i <= 10; i++) { + priorityQueue.add(i); + } + + System.out.println("Извлечение элементов из очереди с приоритетом:"); + for (int i = 0; i < 5; i++) { + System.out.println(priorityQueue.poll()); + } + } +} diff --git a/students/23K0186/23K0186-p28/pom.xml b/students/23K0186/23K0186-p28/pom.xml new file mode 100644 index 000000000..f4519f9bb --- /dev/null +++ b/students/23K0186/23K0186-p28/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p28 + 28 практика + diff --git a/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..3c2fd4dfe --- /dev/null +++ b/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать восьмая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/lab1/SetTransformationExample.java b/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/lab1/SetTransformationExample.java new file mode 100644 index 000000000..61c2c0294 --- /dev/null +++ b/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/lab1/SetTransformationExample.java @@ -0,0 +1,33 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.HashSet; +import java.util.Set; +import java.util.TreeSet; + +public final class SetTransformationExample { + + private SetTransformationExample() {} + + public static Set transformHashSetToTreeSet(Set hashSet) { + return new TreeSet<>(hashSet); + } + + public static Set createHashSet() { + Set hashSet = new HashSet<>(); + hashSet.add("яблоко"); + hashSet.add("апельсин"); + hashSet.add("банан"); + hashSet.add("виноград"); + return hashSet; + } + + public static void main(String[] args) { + Set hashSet = createHashSet(); + + Set treeSet = transformHashSetToTreeSet(hashSet); + + for (String item : treeSet) { + System.out.println(item); + } + } +} diff --git a/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/lab2/NameStatistics.java b/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/lab2/NameStatistics.java new file mode 100644 index 000000000..3053c2dd2 --- /dev/null +++ b/students/23K0186/23K0186-p28/src/main/java/ru/mirea/practice/s23k0186/lab2/NameStatistics.java @@ -0,0 +1,64 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public final class NameStatistics { + + private NameStatistics() {} + + public static Map createPeopleMap() { + Map peopleMap = new HashMap<>(); + peopleMap.put("Иванов", "Александр"); + peopleMap.put("Петрова", "Анастасия"); + peopleMap.put("Сидоров", "Александр"); + peopleMap.put("Козлов", "Александр"); + peopleMap.put("Морозов", "Александр"); + peopleMap.put("Федоров", "Михаил"); + peopleMap.put("Смирнов", "Иван"); + peopleMap.put("Новиков", "Михаил"); + peopleMap.put("Попова", "Анастасия"); + peopleMap.put("Васильев", "Алексей"); + return peopleMap; + } + + public static int countPeopleWithSameFirstName(Map peopleMap) { + Map firstNameFrequency = new HashMap<>(); + for (String firstName : peopleMap.values()) { + firstNameFrequency.put(firstName, firstNameFrequency.getOrDefault(firstName, 0) + 1); + } + + int duplicateFirstNamesCount = 0; + for (int frequency : firstNameFrequency.values()) { + if (frequency > 1) { + duplicateFirstNamesCount += frequency; + } + } + return duplicateFirstNamesCount; + } + + public static int countPeopleWithSameLastName(Map peopleMap) { + Set lastNameSet = new HashSet<>(); + int duplicateLastNamesCount = 0; + for (String lastName : peopleMap.keySet()) { + if (lastNameSet.contains(lastName)) { + duplicateLastNamesCount++; + } else { + lastNameSet.add(lastName); + } + } + return duplicateLastNamesCount; + } + + public static void main(String[] args) { + Map peopleMap = createPeopleMap(); + + int sameFirstNameCount = countPeopleWithSameFirstName(peopleMap); + int sameLastNameCount = countPeopleWithSameLastName(peopleMap); + + System.out.println("Количество людей с одинаковыми именами: " + sameFirstNameCount); + System.out.println("Количество людей с одинаковыми фамилиями: " + sameLastNameCount); + } +} diff --git a/students/23K0186/23K0186-p29/pom.xml b/students/23K0186/23K0186-p29/pom.xml new file mode 100644 index 000000000..893245c23 --- /dev/null +++ b/students/23K0186/23K0186-p29/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p29 + 29 практика + diff --git a/students/23K0186/23K0186-p29/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p29/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..9523a3b9d --- /dev/null +++ b/students/23K0186/23K0186-p29/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("двадцать девятая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p29/src/main/java/ru/mirea/practice/s23k0186/lab1/RoadInventory.java b/students/23K0186/23K0186-p29/src/main/java/ru/mirea/practice/s23k0186/lab1/RoadInventory.java new file mode 100644 index 000000000..cda9d2383 --- /dev/null +++ b/students/23K0186/23K0186-p29/src/main/java/ru/mirea/practice/s23k0186/lab1/RoadInventory.java @@ -0,0 +1,44 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.Scanner; + +public final class RoadInventory { + private RoadInventory() { + + } + + public static void main(String[] args) { + try (Scanner input = new Scanner(System.in)) { + int cityCount = input.nextInt(); + + if (cityCount == 0) { + System.out.println(0); + return; + } + + int[][] roadMap = new int[cityCount][cityCount]; + + for (int row = 0; row < cityCount; row++) { + for (int col = 0; col < cityCount; col++) { + roadMap[row][col] = input.nextInt(); + } + } + + int totalRoads = countRoads(roadMap, cityCount); + + System.out.println(totalRoads); + } + } + + private static int countRoads(int[][] map, int size) { + int roadCounter = 0; + for (int row = 0; row < size; row++) { + for (int col = row + 1; col < size; col++) { + if (map[row][col] == 1) { + roadCounter++; + } + } + } + return roadCounter; + } +} diff --git a/students/23K0186/23K0186-p30--2/pom.xml b/students/23K0186/23K0186-p30--2/pom.xml new file mode 100644 index 000000000..8f706108a --- /dev/null +++ b/students/23K0186/23K0186-p30--2/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p30--2 + 30--2 практика + diff --git a/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..9297c25e5 --- /dev/null +++ b/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("тридцать_два практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/BinarySearchTree.java b/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/BinarySearchTree.java new file mode 100644 index 000000000..66fc8bc56 --- /dev/null +++ b/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/BinarySearchTree.java @@ -0,0 +1,77 @@ +package ru.mirea.practice.s23k0145.lab1; + +class BinarySearchTree { + TreeNode root; + + public BinarySearchTree() { + root = null; + } + + public void addNode(int value) { + root = addNodeRecursive(root, value); + } + + private TreeNode addNodeRecursive(TreeNode current, int value) { + if (current == null) { + return new TreeNode(value); + } + + if (value < current.value) { + current.left = addNodeRecursive(current.left, value); + } else if (value > current.value) { + current.right = addNodeRecursive(current.right, value); + } + + return current; + } + + public void removeNode(int value) { + root = removeNodeRecursive(root, value); + } + + private TreeNode removeNodeRecursive(TreeNode current, int value) { + if (current == null) { + return null; + } + + if (value < current.value) { + current.left = removeNodeRecursive(current.left, value); + } else if (value > current.value) { + current.right = removeNodeRecursive(current.right, value); + } else { + if (current.left == null && current.right == null) { + return null; + } else if (current.left == null) { + return current.right; + } else if (current.right == null) { + return current.left; + } + + int smallestValue = findSmallestValue(current.right); + current.value = smallestValue; + current.right = removeNodeRecursive(current.right, smallestValue); + } + + return current; + } + + private int findSmallestValue(TreeNode current) { + return current.left == null ? current.value : findSmallestValue(current.left); + } + + public void traverseInOrder() { + traverseInOrderRecursive(root); + } + + private void traverseInOrderRecursive(TreeNode current) { + if (current != null) { + traverseInOrderRecursive(current.left); + System.out.print(current.value + " "); + traverseInOrderRecursive(current.right); + } + } + + public void clearTree() { + root = null; + } +} diff --git a/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/BinarySearchTreeTest.java b/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/BinarySearchTreeTest.java new file mode 100644 index 000000000..3414fad8c --- /dev/null +++ b/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/BinarySearchTreeTest.java @@ -0,0 +1,31 @@ +package ru.mirea.practice.s23k0145.lab1; + +public abstract class BinarySearchTreeTest { + public static void main(String[] args) { + BinarySearchTree tree = new BinarySearchTree(); + + int[] elements = {50, 30, 70, 20, 40, 60, 80, 15, 35, 65}; + for (int element : elements) { + tree.addNode(element); + } + + System.out.println("Initial tree (in-order traversal):"); + tree.traverseInOrder(); + System.out.println(); + + System.out.println("\nRemoving node with value 40:"); + tree.removeNode(40); + + System.out.println("Tree after removing node 40 (in-order traversal):"); + tree.traverseInOrder(); + System.out.println(); + + System.out.println("\nClearing the tree:"); + tree.clearTree(); + + System.out.println("Tree after clearing (in-order traversal):"); + tree.traverseInOrder(); + System.out.println(); + } +} + diff --git a/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/TreeNode.java b/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/TreeNode.java new file mode 100644 index 000000000..9b0b41eea --- /dev/null +++ b/students/23K0186/23K0186-p30--2/src/main/java/ru/mirea/practice/s23k0186/lab1/TreeNode.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s23k0145.lab1; + +class TreeNode { + int value; + TreeNode left; + TreeNode right; + + public TreeNode(int value) { + this.value = value; + this.left = null; + this.right = null; + } +} diff --git a/students/23K0186/23K0186-p30/pom.xml b/students/23K0186/23K0186-p30/pom.xml new file mode 100644 index 000000000..7324ef080 --- /dev/null +++ b/students/23K0186/23K0186-p30/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p30 + 30 практика + diff --git a/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..a6a107468 --- /dev/null +++ b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("тридцатая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab1/CustomBinaryTree.java b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab1/CustomBinaryTree.java new file mode 100644 index 000000000..aa211b65d --- /dev/null +++ b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab1/CustomBinaryTree.java @@ -0,0 +1,57 @@ +package ru.mirea.practice.s23k0145.lab1; + +class CustomBinaryTree { + Node rootNode; + + public int calculateHeight(Node currentNode) { + if (currentNode == null) { + return 0; + } + int leftSubtreeHeight = calculateHeight(currentNode.leftChild); + int rightSubtreeHeight = calculateHeight(currentNode.rightChild); + return Math.max(leftSubtreeHeight, rightSubtreeHeight) + 1; + } + + public void invertTree(Node currentNode) { + if (currentNode == null) { + return; + } + Node tempNode = currentNode.leftChild; + currentNode.leftChild = currentNode.rightChild; + currentNode.rightChild = tempNode; + + invertTree(currentNode.leftChild); + invertTree(currentNode.rightChild); + } + + public boolean searchValue(Node currentNode, int targetValue) { + if (currentNode == null) { + return false; + } + if (currentNode.value == targetValue) { + return true; + } + return targetValue < currentNode.value + ? searchValue(currentNode.leftChild, targetValue) + : searchValue(currentNode.rightChild, targetValue); + } + + public int calculateSize(Node currentNode) { + if (currentNode == null) { + return 0; + } + return calculateSize(currentNode.leftChild) + 1 + calculateSize(currentNode.rightChild); + } + + public boolean areTreesIdentical(Node treeOne, Node treeTwo) { + if (treeOne == null && treeTwo == null) { + return true; + } + if (treeOne == null || treeTwo == null) { + return false; + } + return treeOne.value == treeTwo.value + && areTreesIdentical(treeOne.leftChild, treeTwo.leftChild) + && areTreesIdentical(treeOne.rightChild, treeTwo.rightChild); + } +} diff --git a/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab1/Node.java b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab1/Node.java new file mode 100644 index 000000000..f601a7f14 --- /dev/null +++ b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab1/Node.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s23k0145.lab1; + +class Node { + int value; + Node leftChild; + Node rightChild; + + public Node(int data) { + this.value = data; + this.leftChild = null; + this.rightChild = null; + } +} diff --git a/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab2/Huffman.java b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab2/Huffman.java new file mode 100644 index 000000000..47912b76b --- /dev/null +++ b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab2/Huffman.java @@ -0,0 +1,53 @@ +package ru.mirea.practice.s23k0145.lab2; + +import java.util.PriorityQueue; +import java.util.Map; +import java.util.HashMap; + +abstract class Huffman { + public static void generateHuffmanTree(String input) { + Map charFrequencyMap = new HashMap<>(); + for (char ch : input.toCharArray()) { + charFrequencyMap.put(ch, charFrequencyMap.getOrDefault(ch, 0) + 1); + } + + PriorityQueue priorityQueue = new PriorityQueue<>(); + for (Map.Entry entry : charFrequencyMap.entrySet()) { + priorityQueue.add(new TreeNode(entry.getKey(), entry.getValue())); + } + + while (priorityQueue.size() > 1) { + TreeNode leftChild = priorityQueue.poll(); + TreeNode rightChild = priorityQueue.poll(); + TreeNode parentNode = new TreeNode('\0', leftChild.frequency + rightChild.frequency); + parentNode.left = leftChild; + parentNode.right = rightChild; + priorityQueue.add(parentNode); + } + + TreeNode rootNode = priorityQueue.poll(); + + Map huffmanCodeMap = new HashMap<>(); + createHuffmanCodes(rootNode, "", huffmanCodeMap); + + for (Map.Entry entry : huffmanCodeMap.entrySet()) { + System.out.println(entry.getKey() + ": " + entry.getValue()); + } + } + + private static void createHuffmanCodes(TreeNode currentNode, String code, Map codeMap) { + if (currentNode == null) { + return; + } + if (currentNode.character != '\0') { + codeMap.put(currentNode.character, code); + } + createHuffmanCodes(currentNode.left, code + "0", codeMap); + createHuffmanCodes(currentNode.right, code + "1", codeMap); + } + + public static void main(String[] args) { + String sampleText = "aabacabad"; + generateHuffmanTree(sampleText); + } +} diff --git a/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab2/TreeNode.java b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab2/TreeNode.java new file mode 100644 index 000000000..8123353b7 --- /dev/null +++ b/students/23K0186/23K0186-p30/src/main/java/ru/mirea/practice/s23k0186/lab2/TreeNode.java @@ -0,0 +1,20 @@ +package ru.mirea.practice.s23k0145.lab2; + +class TreeNode implements Comparable { + int frequency; + char character; + TreeNode left; + TreeNode right; + + public TreeNode(char character, int frequency) { + this.character = character; + this.frequency = frequency; + this.left = null; + this.right = null; + } + + @Override + public int compareTo(TreeNode otherNode) { + return this.frequency - otherNode.frequency; + } +} diff --git a/students/23K0186/23K0186-p31/pom.xml b/students/23K0186/23K0186-p31/pom.xml new file mode 100644 index 000000000..879ddb45f --- /dev/null +++ b/students/23K0186/23K0186-p31/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p31 + 31 практика + diff --git a/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..3ae4779f3 --- /dev/null +++ b/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("тридцать первая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TernaryTree.java b/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TernaryTree.java new file mode 100644 index 000000000..425efe4a8 --- /dev/null +++ b/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TernaryTree.java @@ -0,0 +1,81 @@ +package ru.mirea.practice.s23k0145.lab1; + +class TernaryTree { + private TreeNode root; + + public TernaryTree() { + this.root = null; + } + + public void insert(int key) { + root = insertNode(root, key); + } + + private TreeNode insertNode(TreeNode node, int key) { + if (node == null) { + return new TreeNode(key); + } + + if (key < node.key) { + node.left = insertNode(node.left, key); + } else if (key == node.key) { + node.middle = insertNode(node.middle, key); + } else { + node.right = insertNode(node.right, key); + } + + return node; + } + + public void delete(int key) { + root = deleteNode(root, key); + } + + private TreeNode deleteNode(TreeNode node, int key) { + if (node == null) { + System.out.println("Key " + key + " not found in the tree."); + return null; + } + + if (key < node.key) { + node.left = deleteNode(node.left, key); + } else if (key > node.key) { + node.right = deleteNode(node.right, key); + } else { + if (node.middle != null) { + node.middle = deleteNode(node.middle, key); + } else if (node.left == null) { + return node.right; + } else if (node.right == null) { + return node.left; + } else { + TreeNode minNode = findMin(node.right); + node.key = minNode.key; + node.right = deleteNode(node.right, minNode.key); + } + } + + return node; + } + + private TreeNode findMin(TreeNode node) { + while (node.left != null) { + node = node.left; + } + return node; + } + + public void printVariant5() { + printRecursiveVariant5(root, 1); + System.out.println(); + } + + private void printRecursiveVariant5(TreeNode node, int level) { + if (node != null) { + printRecursiveVariant5(node.left, level + 1); + printRecursiveVariant5(node.middle, level + 1); + printRecursiveVariant5(node.right, level + 1); + System.out.println("Node: " + node.key + " at level: " + level); + } + } +} diff --git a/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TernaryTreeApp.java b/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TernaryTreeApp.java new file mode 100644 index 000000000..06c42f858 --- /dev/null +++ b/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TernaryTreeApp.java @@ -0,0 +1,54 @@ +package ru.mirea.practice.s23k0145.lab1; + +import java.util.Scanner; + +public final class TernaryTreeApp { + private TernaryTreeApp() { + throw new UnsupportedOperationException("Utility class"); + } + + public static void main(String[] args) { + try (Scanner scanner = new Scanner(System.in)) { + TernaryTree tree = new TernaryTree(); + + while (true) { + System.out.println("\nMenu:"); + System.out.println("1 - Add a node"); + System.out.println("2 - Delete a node"); + System.out.println("3 - Print tree (Variant 5: left, middle, right, then root, with levels)"); + System.out.println("4 - Exit"); + System.out.print("Choose an option: "); + + int command = scanner.nextInt(); + switch (command) { + case 1: + System.out.print("Enter the key to insert: "); + int keyToAdd = scanner.nextInt(); + tree.insert(keyToAdd); + break; + + case 2: + System.out.print("Enter the key to delete: "); + int keyToDelete = scanner.nextInt(); + tree.delete(keyToDelete); + break; + + case 3: + System.out.println("Tree structure (Variant 5):"); + tree.printVariant5(); + break; + + case 4: + System.out.println("Exiting the program."); + return; + + default: + System.out.println("Invalid option. Please try again."); + break; + } + } + } + } + +} + diff --git a/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TreeNode.java b/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TreeNode.java new file mode 100644 index 000000000..ba914eb6e --- /dev/null +++ b/students/23K0186/23K0186-p31/src/main/java/ru/mirea/practice/s23k0186/lab1/TreeNode.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s23k0145.lab1; + +class TreeNode { + int key; + TreeNode left; + TreeNode middle; + TreeNode right; + + public TreeNode(int key) { + this.key = key; + this.left = null; + this.middle = null; + this.right = null; + } +} diff --git a/students/23K0186/23K0186-p32/pom.xml b/students/23K0186/23K0186-p32/pom.xml new file mode 100644 index 000000000..623da5027 --- /dev/null +++ b/students/23K0186/23K0186-p32/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0186 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0186-p32 + 32 практика + diff --git a/students/23K0186/23K0186-p32/src/main/java/ru/mirea/practice/s23k0186/Main.java b/students/23K0186/23K0186-p32/src/main/java/ru/mirea/practice/s23k0186/Main.java new file mode 100644 index 000000000..b9babf033 --- /dev/null +++ b/students/23K0186/23K0186-p32/src/main/java/ru/mirea/practice/s23k0186/Main.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0145; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("тридцать вторая практическая работа!"); + } +} diff --git a/students/23K0186/23K0186-p32/src/main/java/ru/mirea/practice/s23k0186/lab1/JohnsonTrotter.java b/students/23K0186/23K0186-p32/src/main/java/ru/mirea/practice/s23k0186/lab1/JohnsonTrotter.java new file mode 100644 index 000000000..e4f000594 --- /dev/null +++ b/students/23K0186/23K0186-p32/src/main/java/ru/mirea/practice/s23k0186/lab1/JohnsonTrotter.java @@ -0,0 +1,72 @@ +package ru.mirea.practice.s23k0145.lab1; + +public abstract class JohnsonTrotter { + public static void displayPermutation(int[] sequence) { + for (int value : sequence) { + System.out.print(value + " "); + } + System.out.println(); + } + + public static void generateJohnsonTrotter(int n) { + int[] sequence = new int[n]; + int[] movement = new int[n]; + + for (int i = 0; i < n; i++) { + sequence[i] = i + 1; + movement[i] = 0; + } + + displayPermutation(sequence); + + boolean hasNext = true; + + while (hasNext) { + int largestMobileValue = -1; + int largestMobileIndex = -1; + + for (int i = 0; i < n; i++) { + if (movement[i] == 0 && i > 0 && sequence[i] > sequence[i - 1] + || movement[i] == 1 && i < n - 1 && sequence[i] > sequence[i + 1]) { + + if (sequence[i] > largestMobileValue) { + largestMobileValue = sequence[i]; + largestMobileIndex = i; + } + } + } + + if (largestMobileValue == -1) { + hasNext = false; + } else { + int currentIndex = largestMobileIndex; + int tempValue = sequence[currentIndex]; + + if (movement[currentIndex] == 0) { + sequence[currentIndex] = sequence[currentIndex - 1]; + sequence[currentIndex - 1] = tempValue; + movement[currentIndex] = 1; + movement[currentIndex - 1] = 0; + } else { + sequence[currentIndex] = sequence[currentIndex + 1]; + sequence[currentIndex + 1] = tempValue; + movement[currentIndex] = 0; + movement[currentIndex + 1] = 1; + } + + for (int i = 0; i < n; i++) { + if (sequence[i] > largestMobileValue) { + movement[i] = 1 - movement[i]; + } + } + + displayPermutation(sequence); + } + } + } + + public static void main(String[] args) { + int n = 5; + generateJohnsonTrotter(n); + } +} diff --git a/students/23K0186/pom.xml b/students/23K0186/pom.xml index 29474ee42..84de11f15 100644 --- a/students/23K0186/pom.xml +++ b/students/23K0186/pom.xml @@ -34,5 +34,18 @@ 23K0186-p18 23K0186-p19 23K0186-p20 + 23K0186-p21 + 23K0186-p22 + 23K0186-p23 + 23K0186-p24 + 23K0186-p25 + 23K0186-p26 + 23K0186-p27 + 23K0186-p28 + 23K0186-p29 + 23K0186-p30 + 23K0186-p30--2 + 23K0186-p31 + 23K0186-p32