diff --git a/pom.xml b/pom.xml index 3abccea2f..4ba02204e 100644 --- a/pom.xml +++ b/pom.xml @@ -81,6 +81,7 @@ students/23K0186 students/23K0755 students/23K1292 + students/23K0342 @@ -147,7 +148,7 @@ com.puppycrawl.tools checkstyle - 10.20.1 + 10.19.0 diff --git a/students/23K0342/23K0342-p21/pom.xml b/students/23K0342/23K0342-p21/pom.xml new file mode 100644 index 000000000..fb9c1f7d7 --- /dev/null +++ b/students/23K0342/23K0342-p21/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p21 + Массивы + diff --git a/students/23K0342/23K0342-p21/src/main/java/ru/mirea/practice/s0000001/Converter.java b/students/23K0342/23K0342-p21/src/main/java/ru/mirea/practice/s0000001/Converter.java new file mode 100644 index 000000000..338e888f0 --- /dev/null +++ b/students/23K0342/23K0342-p21/src/main/java/ru/mirea/practice/s0000001/Converter.java @@ -0,0 +1,21 @@ +package ru.mirea.practice.s0000001; + +import java.util.Arrays; +import java.util.List; + +public abstract class Converter { + public static List convertArrayToList(T[] array) { + return Arrays.asList(array); + } + + public static void main(String[] args) { + String[] stringArray = {"a", "b", "c"}; + List stringList = convertArrayToList(stringArray); + System.out.println("Список строк: " + stringList); + + Integer[] intArray = {1, 2, 3}; + List intList = convertArrayToList(intArray); + System.out.println("Список чисел: " + intList); + } +} +// diff --git a/students/23K0342/23K0342-p21/src/main/java/t2/Array.java b/students/23K0342/23K0342-p21/src/main/java/t2/Array.java new file mode 100644 index 000000000..8b8ff02f6 --- /dev/null +++ b/students/23K0342/23K0342-p21/src/main/java/t2/Array.java @@ -0,0 +1,53 @@ +package ru.mirea.practice.s0000001.t2; + +public class Array { + private T[] elements; + + public Array(T[] elements) { + this.elements = elements; + } + + public T get(int index) { + if (index >= 0 && index < elements.length) { + return elements[index]; + } else { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + elements.length); + } + } + + public void set(int index, T element) { + if (index >= 0 && index < elements.length) { + elements[index] = element; + } else { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + elements.length); + } + } + + public int size() { + return elements.length; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("["); + for (int i = 0; i < elements.length; i++) { + sb.append(elements[i]); + if (i < elements.length - 1) { + sb.append(", "); + } + } + sb.append("]"); + return sb.toString(); + } + + public static void main(String[] args) { + Integer[] intArray = {1, 2, 3, 4, 5}; + Array intStorage = new Array<>(intArray); + System.out.println("Integer array: " + intStorage); + + String[] stringArray = {"СТОЛ", "СТУЛ", "ЗОНТ"}; + Array stringStorage = new Array<>(stringArray); + System.out.println("String array: " + stringStorage); + } +} +// diff --git a/students/23K0342/23K0342-p22/pom.xml b/students/23K0342/23K0342-p22/pom.xml new file mode 100644 index 000000000..851a05274 --- /dev/null +++ b/students/23K0342/23K0342-p22/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p22 + Массивы + diff --git a/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Calculator.java b/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Calculator.java new file mode 100644 index 000000000..f7dd2a217 --- /dev/null +++ b/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Calculator.java @@ -0,0 +1,63 @@ +package ru.mirea.practice.s0000001; + +import java.util.Stack; + +public class Calculator { + private Stack stack; + + public Calculator() { + stack = new Stack<>(); + } + + public double evaluate(String expression) { + stack.clear(); + String[] tokens = expression.split(" "); + for (String token : tokens) { + if (isOperator(token)) { + if (stack.size() < 2) { + throw new ArrayIndexOutOfBoundsException("Ошибка: недостаточно данных для операции"); + } + double b = stack.pop(); + double a = stack.pop(); + stack.push(applyOperator(a, b, token)); + } else { + try { + stack.push(Double.parseDouble(token)); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Ошибка: неверный формат числа", e); + } + } + } + if (stack.size() != 1) { + throw new IllegalStateException("Ошибка: выражение некорректно"); + } + return stack.pop(); + } + + private boolean isOperator(String token) { + return "+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token); + } + + private double applyOperator(double a, double b, String operator) { + try { + switch (operator) { + case "+": + return a + b; + case "-": + return a - b; + case "*": + return a * b; + case "/": + if (b == 0) { + throw new ArithmeticException("Ошибка: деление на ноль"); + } + return a / b; + default: + throw new IllegalArgumentException("Ошибка: неизвестная операция " + operator); + } + } catch (ArithmeticException | IllegalArgumentException e) { + throw e; + } + } +} +// diff --git a/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Rpn.java b/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Rpn.java new file mode 100644 index 000000000..7e145a54c --- /dev/null +++ b/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Rpn.java @@ -0,0 +1,94 @@ +package ru.mirea.practice.s0000001; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.SwingUtilities; + +public class Rpn extends JFrame { + private JTextField display; + private Calculator calculator; + + public Rpn() { + calculator = new Calculator(); + display = new JTextField(); + display.setEditable(false); + display.setFont(new Font("Arial", Font.PLAIN, 24)); + setLayout(new BorderLayout()); + add(display, BorderLayout.NORTH); + + JPanel panel = new JPanel(new GridLayout(5, 4, 5, 5)); + String[] buttons = { + "7", "8", "9", "/", + "4", "5", "6", "*", + "1", "2", "3", "-", + "0", ".", "=", "+", + "C", "Space", "", "" + }; + + for (String text : buttons) { + JButton button = new JButton(text); + button.setFont(new Font("Arial", Font.PLAIN, 18)); + if ("Space".equals(text)) { // Литерал теперь идет первым + button.setPreferredSize(new Dimension(80, 50)); + } + button.addActionListener(new ButtonClickListener()); + panel.add(button); + } + add(panel, BorderLayout.CENTER); + + setTitle("RPN Calculator"); + setSize(400, 500); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLocationRelativeTo(null); + } + + private class ButtonClickListener implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + String command = e.getActionCommand(); + switch (command) { + case "=": + try { + double result = calculator.evaluate(display.getText().trim()); + display.setText(String.valueOf(result)); + } catch (ArithmeticException ex) { + display.setText("Ошибка: деление на ноль"); + } catch (NumberFormatException ex) { + display.setText("Ошибка: неверный формат числа"); + } catch (ArrayIndexOutOfBoundsException ex) { + display.setText("Ошибка: недостаточно данных для операции"); + } catch (IllegalStateException ex) { + display.setText("Ошибка: выражение некорректно"); + } catch (Exception ex) { + display.setText("Неизвестная ошибка: " + ex.getMessage()); + } + break; + case "C": + display.setText(""); + break; + case "Space": + display.setText(display.getText() + " "); + break; + default: + display.setText(display.getText() + command); + break; + } + } + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + Rpn calc = new Rpn(); + calc.setVisible(true); + }); + } +} +// diff --git a/students/23K0342/23K0342-p23/pom.xml b/students/23K0342/23K0342-p23/pom.xml new file mode 100644 index 000000000..e2c90628c --- /dev/null +++ b/students/23K0342/23K0342-p23/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p23 + Массивы + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java new file mode 100644 index 000000000..83afade3a --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java @@ -0,0 +1,56 @@ +package ru.mirea.practice.s0000001.task1; + +public class ArrayQueue { + private Object[] elements; + private int size; + private int front; + private int rear; + + public ArrayQueue() { + elements = new Object[10]; + size = 0; + front = 0; + rear = 0; + } + + public void enqueue(Object element) { + if (size == elements.length) { + throw new IllegalStateException("Queue is full"); + } + elements[rear] = element; + rear = (rear + 1) % elements.length; + size++; + } + + public Object element() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + return elements[front]; + } + + public Object dequeue() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + Object result = elements[front]; + front = (front + 1) % elements.length; + size--; + return result; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void clear() { + size = 0; + front = 0; + rear = 0; + } +} + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdT.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdT.java new file mode 100644 index 000000000..8ce6985cc --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdT.java @@ -0,0 +1,57 @@ +package ru.mirea.practice.s0000001.task1; + +public class ArrayQueueAdT { + private Object[] elements; + private int size; + private int front; + private int rear; + + public ArrayQueueAdT() { + elements = new Object[10]; + size = 0; + front = 0; + rear = 0; + } + + public void enqueue(Object element) { + if (size == elements.length) { + throw new IllegalStateException("Queue is full"); + } + elements[rear] = element; + rear = (rear + 1) % elements.length; + size++; + } + + public Object element() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + return elements[front]; + } + + public Object dequeue() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + Object result = elements[front]; + front = (front + 1) % elements.length; + size--; + return result; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void clear() { + size = 0; + front = 0; + rear = 0; + } +} +// + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdTtest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdTtest.java new file mode 100644 index 000000000..41af58adb --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdTtest.java @@ -0,0 +1,21 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class ArrayQueueAdTtest { + public static void main(String[] args) { + ArrayQueueAdT queue = new ArrayQueueAdT(); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + + System.out.println(queue.dequeue()); + System.out.println(queue.element()); + System.out.println(queue.size()); + + queue.clear(); + System.out.println(queue.isEmpty()); + } +} + +// + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java new file mode 100644 index 000000000..657bde07e --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java @@ -0,0 +1,58 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class ArrayQueueModule { + private static final int DEFAULT_CAPACITY = 10; + private static Object[] elements; + private static int size; + private static int front; + private static int rear; + + static { + elements = new Object[DEFAULT_CAPACITY]; + size = 0; + front = 0; + rear = 0; + } + + public static void enqueue(Object element) { + if (size == elements.length) { + throw new IllegalStateException("Queue is full"); + } + elements[rear] = element; + rear = (rear + 1) % elements.length; + size++; + } + + public static Object element() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + return elements[front]; + } + + public static Object dequeue() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + Object result = elements[front]; + front = (front + 1) % elements.length; + size--; + return result; + } + + public static int size() { + return size; + } + + public static boolean isEmpty() { + return size == 0; + } + + public static void clear() { + size = 0; + front = 0; + rear = 0; + } +} +// + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModuleTest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModuleTest.java new file mode 100644 index 000000000..d29a9568e --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModuleTest.java @@ -0,0 +1,18 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class ArrayQueueModuleTest { + public static void main(String[] args) { + ArrayQueueModule.enqueue(1); + ArrayQueueModule.enqueue(2); + ArrayQueueModule.enqueue(3); + + System.out.println(ArrayQueueModule.dequeue()); // 1 + System.out.println(ArrayQueueModule.element()); // 2 + System.out.println(ArrayQueueModule.size()); // 2 + + ArrayQueueModule.clear(); + System.out.println(ArrayQueueModule.isEmpty()); // true + } +} +// + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueTest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueTest.java new file mode 100644 index 000000000..687725b63 --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueTest.java @@ -0,0 +1,20 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class ArrayQueueTest { + public static void main(String[] args) { + ArrayQueue queue = new ArrayQueue(); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + + System.out.println(queue.dequeue()); // 1 + System.out.println(queue.element()); // 2 + System.out.println(queue.size()); // 2 + + queue.clear(); + System.out.println(queue.isEmpty()); // true + } +} +// + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java new file mode 100644 index 000000000..2b0db4d59 --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java @@ -0,0 +1,22 @@ +package ru.mirea.practice.s0000001.task2; + +public abstract class AbstractQueue implements Queue { + protected int size; + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public void clear() { + size = 0; + } +} +// + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueue.java new file mode 100644 index 000000000..b1954112b --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueue.java @@ -0,0 +1,47 @@ +package ru.mirea.practice.s0000001.task2; + +public class ArrayQueue extends AbstractQueue { + private Object[] elements; + private int front; + private int rear; + + private static final int DEFAULT_CAPACITY = 10; + + public ArrayQueue() { + elements = new Object[DEFAULT_CAPACITY]; + size = 0; + front = 0; + rear = 0; + } + + @Override + public void enqueue(Object element) { + if (size == elements.length) { + throw new IllegalStateException("Queue is full"); + } + elements[rear] = element; + rear = (rear + 1) % elements.length; + size++; + } + + @Override + public Object dequeue() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + + final Object result = elements[front]; + front = (front + 1) % elements.length; + size--; + return result; + } + + @Override + public Object element() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + return elements[front]; + } +} +// diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueueTest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueueTest.java new file mode 100644 index 000000000..27a5baf3c --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueueTest.java @@ -0,0 +1,20 @@ +package ru.mirea.practice.s0000001.task2; + +public abstract class ArrayQueueTest { + public static void main(String[] args) { + ArrayQueue queue = new ArrayQueue(); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + + System.out.println(queue.dequeue()); + System.out.println(queue.element()); + System.out.println(queue.size()); + + queue.clear(); + System.out.println(queue.isEmpty()); + } +} +// + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java new file mode 100644 index 000000000..7230f3f4f --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java @@ -0,0 +1,53 @@ +package ru.mirea.practice.s0000001.task2; + +public class LinkedQueue extends AbstractQueue { + private Node head; + private Node tail; + + private static class Node { + Object value; + Node next; + + Node(Object value) { + this.value = value; + } + } + + @Override + public void enqueue(Object element) { + Node newNode = new Node(element); + if (tail == null) { + head = newNode; + tail = newNode; + } else { + tail.next = newNode; + tail = newNode; + } + size++; + } + + @Override + public Object dequeue() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + + final Object result = head.value; + head = head.next; + + if (head == null) { + tail = null; + } + size--; + return result; + } + + @Override + public Object element() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + return head.value; + } +} +// diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueueTest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueueTest.java new file mode 100644 index 000000000..9fd9e6bb9 --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueueTest.java @@ -0,0 +1,20 @@ +package ru.mirea.practice.s0000001.task2; + +public abstract class LinkedQueueTest { + public static void main(String[] args) { + LinkedQueue queue = new LinkedQueue(); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + + System.out.println(queue.dequeue()); + System.out.println(queue.element()); + System.out.println(queue.size()); + + queue.clear(); + System.out.println(queue.isEmpty()); + } +} +// + diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java new file mode 100644 index 000000000..7afe843d0 --- /dev/null +++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java @@ -0,0 +1,16 @@ +package ru.mirea.practice.s0000001.task2; + +public interface Queue { + void enqueue(Object element); + + Object dequeue(); + + Object element(); + + int size(); + + boolean isEmpty(); + + void clear(); +} +// diff --git a/students/23K0342/23K0342-p24/pom.xml b/students/23K0342/23K0342-p24/pom.xml new file mode 100644 index 000000000..f06f2d003 --- /dev/null +++ b/students/23K0342/23K0342-p24/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p24 + Массивы + diff --git a/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java new file mode 100644 index 000000000..3a9ae3136 --- /dev/null +++ b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java @@ -0,0 +1,26 @@ +package ru.mirea.practice.s0000001.task1; + +public class Complex { + private int real; + private int imaginary; + + public Complex(int real, int imaginary) { + this.real = real; + this.imaginary = imaginary; + } + + public int getReal() { + return real; + } + + public int getImaginary() { + return imaginary; + } + + @Override + public String toString() { + return real + " + " + imaginary + "i"; + } +} +// + diff --git a/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java new file mode 100644 index 000000000..bb04879bc --- /dev/null +++ b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java @@ -0,0 +1,10 @@ +package ru.mirea.practice.s0000001.task1; + +public interface ComplexAbstractFactory { + + Complex createComplex(); + + Complex createComplex(int real, int imaginary); +} +// + diff --git a/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java new file mode 100644 index 000000000..64ce90854 --- /dev/null +++ b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s0000001.task1; + +public class ConcreteFactory implements ComplexAbstractFactory { + + @Override + public Complex createComplex() { + return new Complex(0, 0); + } + + @Override + public Complex createComplex(int real, int imaginary) { + return new Complex(real, imaginary); + } +} +// diff --git a/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Use.java b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Use.java new file mode 100644 index 000000000..fdfae3273 --- /dev/null +++ b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Use.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Use { + public static void main(String[] args) { + ComplexAbstractFactory factory = new ConcreteFactory(); + + Complex defaultComplex = factory.createComplex(); + System.out.println("Default complex number: " + defaultComplex); + + Complex customComplex = factory.createComplex(5, 3); + System.out.println("Custom complex number: " + customComplex); + } +} +// + diff --git a/students/23K0342/23K0342-p25/pom.xml b/students/23K0342/23K0342-p25/pom.xml new file mode 100644 index 000000000..b5df35f91 --- /dev/null +++ b/students/23K0342/23K0342-p25/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p25 + Массивы + diff --git a/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/DateValidator.java b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/DateValidator.java new file mode 100644 index 000000000..42357f407 --- /dev/null +++ b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/DateValidator.java @@ -0,0 +1,23 @@ +package ru.mirea.practice.s0000001; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public abstract class DateValidator { + public static void main(String[] args) { + String[] dates = { + "29/02/2000", "30/04/2003", "01/01/2003", + "29/02/2001", "30-04-2003", "1/1/1899" + }; + + String dateRegex = "^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/(19|20)\\d{2}$"; + Pattern pattern = Pattern.compile(dateRegex); + + System.out.println("Проверка дат в формате dd/mm/yyyy:"); + for (String date : dates) { + Matcher matcher = pattern.matcher(date); + System.out.println(date + ": " + matcher.matches()); + } + } +} +// diff --git a/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/EmailChecker.java b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/EmailChecker.java new file mode 100644 index 000000000..3845ea36c --- /dev/null +++ b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/EmailChecker.java @@ -0,0 +1,30 @@ +package ru.mirea.practice.s0000001; + +import java.util.regex.Pattern; + +public abstract class EmailChecker { + private static final String EMAIL_REGEX = + "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"; + + private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX); + + public static boolean isValidEmail(String email) { + if (email == null) { + return false; + } + return EMAIL_PATTERN.matcher(email).matches(); + } + + public static void main(String[] args) { + String[] testEmails = { + "test@mail.ru", + "name.test@gmail.com", + "invalid-email@" + }; + + for (String email : testEmails) { + System.out.printf("Email: %s подходит ли: %b%n", email, isValidEmail(email)); + } + } +} +// diff --git a/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/Main.java new file mode 100644 index 000000000..6d75ba81e --- /dev/null +++ b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/Main.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s0000001; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("первая практическая работа!"); + } +} +// diff --git a/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/PriceExtractor.java b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/PriceExtractor.java new file mode 100644 index 000000000..d4a142b5c --- /dev/null +++ b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/PriceExtractor.java @@ -0,0 +1,18 @@ +package ru.mirea.practice.s0000001; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public abstract class PriceExtractor { + public static void main(String[] args) { + String text = "Цены: 25.98 USD, 44 ERR, 0.004 EU, 10.00 RUB, 99.95 EUR"; + Pattern pattern = Pattern.compile("\\b\\d{1,3}(\\.\\d{1,2})? (USD|RUB|EUR)\\b"); + Matcher matcher = pattern.matcher(text); + + System.out.println("Цены в USD, RUB, EUR:"); + while (matcher.find()) { + System.out.println(matcher.group()); + } + } +} +// diff --git a/students/23K0342/23K0342-p26/pom.xml b/students/23K0342/23K0342-p26/pom.xml new file mode 100644 index 000000000..b67daa6bf --- /dev/null +++ b/students/23K0342/23K0342-p26/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p26 + Массивы + diff --git a/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/ArrayInverter.java b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/ArrayInverter.java new file mode 100644 index 000000000..21fad10ec --- /dev/null +++ b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/ArrayInverter.java @@ -0,0 +1,34 @@ +package ru.mirea.practice.s0000001; + +import java.util.Stack; + +public abstract class ArrayInverter { + public static void invertArray(int[] array) { + Stack stack = new Stack<>(); + + for (int element : array) { + stack.push(element); + } + + for (int i = 0; i < array.length; i++) { + array[i] = stack.pop(); + } + } + + public static void main(String[] args) { + int[] array = {1, 2, 3, 4, 5}; + + System.out.println("Исходный массив:"); + for (int num : array) { + System.out.print(num + " "); + } + + invertArray(array); + + System.out.println("\nИнвертированный массив:"); + for (int num : array) { + System.out.print(num + " "); + } + } +} +// diff --git a/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/CustomList.java b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/CustomList.java new file mode 100644 index 000000000..293cc2e51 --- /dev/null +++ b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/CustomList.java @@ -0,0 +1,53 @@ +package ru.mirea.practice.s0000001; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class CustomList implements Iterable { + private Object[] elements; + private int size; + + public CustomList() { + elements = new Object[10]; + size = 0; + } + + public void add(T element) { + if (size == elements.length) { + resize(); + } + elements[size++] = element; + } + + private void resize() { + elements = Arrays.copyOf(elements, elements.length * 2); + } + + public int size() { + return size; + } + + @Override + public Iterator iterator() { + return new CustomIterator(); + } + + private class CustomIterator implements Iterator { + private int currentIndex = 0; + + @Override + public boolean hasNext() { + return currentIndex < size; + } + + @Override + public T next() { + if (!hasNext()) { + throw new NoSuchElementException("Нет больше элементов в итераторе."); + } + return (T) elements[currentIndex++]; + } + } +} +// diff --git a/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/Main.java new file mode 100644 index 000000000..6d75ba81e --- /dev/null +++ b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/Main.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s0000001; + +public final class Main { + + private Main() { + + } + + public static void main(String[] args) { + System.out.println("первая практическая работа!"); + } +} +// diff --git a/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/TestCustomList.java b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/TestCustomList.java new file mode 100644 index 000000000..2b837d87d --- /dev/null +++ b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/TestCustomList.java @@ -0,0 +1,16 @@ +package ru.mirea.practice.s0000001; + +public abstract class TestCustomList { + public static void main(String[] args) { + CustomList list = new CustomList<>(); + list.add("Первый"); + list.add("Второй"); + list.add("Третий"); + + System.out.println("Элементы списка:"); + for (String item : list) { + System.out.println(item); + } + } +} +// diff --git a/students/23K0342/23K0342-p27/pom.xml b/students/23K0342/23K0342-p27/pom.xml new file mode 100644 index 000000000..d79f3e7ca --- /dev/null +++ b/students/23K0342/23K0342-p27/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p27 + Массивы + diff --git a/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/HashTab.java b/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/HashTab.java new file mode 100644 index 000000000..3b99861e6 --- /dev/null +++ b/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/HashTab.java @@ -0,0 +1,67 @@ +package ru.mirea.practice.s0000001; + +import java.util.LinkedList; + +public class HashTab { + private static final int SIZE = 10; + private LinkedList[] table; + + private static class Entry { + String key; + String value; + + Entry(String key, String value) { + this.key = key; + this.value = value; + } + } + + public void hashtabInit() { + table = new LinkedList[SIZE]; + for (int i = 0; i < SIZE; i++) { + table[i] = new LinkedList<>(); + } + } + + private int hashtabHash(String key) { + return Math.abs(key.hashCode() % SIZE); + } + + public void hashtabAdd(String key, String value) { + int index = hashtabHash(key); + for (Entry entry : table[index]) { + if (entry.key.equals(key)) { + entry.value = value; + return; + } + } + table[index].add(new Entry(key, value)); + } + + public String hashtabLookup(String key) { + int index = hashtabHash(key); + for (Entry entry : table[index]) { + if (entry.key.equals(key)) { + return entry.value; + } + } + return null; + } + + public void hashtabDelete(String key) { + int index = hashtabHash(key); + table[index].removeIf(entry -> entry.key.equals(key)); + } + + public void printTable() { + for (int i = 0; i < SIZE; i++) { + System.out.print("Index " + i + ": "); + for (Entry entry : table[i]) { + System.out.print("[" + entry.key + " -> " + entry.value + "] "); + } + System.out.println(); + } + } +} +// + diff --git a/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/Main.java new file mode 100644 index 000000000..266fe472d --- /dev/null +++ b/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/Main.java @@ -0,0 +1,24 @@ +package ru.mirea.practice.s0000001; + +public abstract class Main { + public static void main(String[] args) { + HashTab hashtable = new HashTab(); + hashtable.hashtabInit(); + + hashtable.hashtabAdd("апельсин", "фрукты"); + hashtable.hashtabAdd("огурец", "овощи"); + hashtable.hashtabAdd("мандарин", "фрукты"); + + System.out.println("Поиск 'апельсин': " + hashtable.hashtabLookup("апельсин")); + System.out.println("Поиск 'огурец': " + hashtable.hashtabLookup("огурец")); + System.out.println("Поиск 'мандарин': " + hashtable.hashtabLookup("мандарин")); + + hashtable.printTable(); + + hashtable.hashtabDelete("огурец"); + System.out.println("После удаления 'огурец':"); + hashtable.printTable(); + } +} +// + diff --git a/students/23K0342/23K0342-p28/pom.xml b/students/23K0342/23K0342-p28/pom.xml new file mode 100644 index 000000000..231991c57 --- /dev/null +++ b/students/23K0342/23K0342-p28/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p28 + Массивы + diff --git a/students/23K0342/23K0342-p28/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K0342/23K0342-p28/src/main/java/ru/mirea/practice/s0000001/Main.java new file mode 100644 index 000000000..499aa4a80 --- /dev/null +++ b/students/23K0342/23K0342-p28/src/main/java/ru/mirea/practice/s0000001/Main.java @@ -0,0 +1,23 @@ +package ru.mirea.practice.s0000001; + +import java.util.HashSet; +import java.util.TreeSet; + +public abstract class Main { + public static void main(String[] args) { + HashSet hashSet = new HashSet<>(); + hashSet.add("апельсин"); + hashSet.add("манадрин"); + hashSet.add("груша"); + hashSet.add("лимон"); + + TreeSet treeSet = new TreeSet<>(hashSet); + + System.out.println("Элементы TreeSet (упорядочены):"); + for (String item : treeSet) { + System.out.println(item); + } + } +} +// + diff --git a/students/23K0342/23K0342-p29/pom.xml b/students/23K0342/23K0342-p29/pom.xml new file mode 100644 index 000000000..28880901c --- /dev/null +++ b/students/23K0342/23K0342-p29/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p29 + Массивы + diff --git a/students/23K0342/23K0342-p29/src/main/java/ru/mirea/practice/s0000001/Milky.java b/students/23K0342/23K0342-p29/src/main/java/ru/mirea/practice/s0000001/Milky.java new file mode 100644 index 000000000..41c50173f --- /dev/null +++ b/students/23K0342/23K0342-p29/src/main/java/ru/mirea/practice/s0000001/Milky.java @@ -0,0 +1,37 @@ +package ru.mirea.practice.s0000001; + +import java.util.Scanner; + +public abstract class Milky { + public static void main(String[] args) { + try (Scanner scanner = new Scanner(System.in)) { + int n = scanner.nextInt(); + + if (n == 0) { + System.out.println(0); + return; + } + + int[][] matrix = new int[n][n]; + + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = scanner.nextInt(); + } + } + + int roadCount = 0; + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + if (matrix[i][j] == 1) { + roadCount++; + } + } + } + + System.out.println(roadCount); + } + } +} +// + diff --git a/students/23K0342/23K0342-p30_1/pom.xml b/students/23K0342/23K0342-p30_1/pom.xml new file mode 100644 index 000000000..caa68a471 --- /dev/null +++ b/students/23K0342/23K0342-p30_1/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0342 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0342-p30_1 + Массивы + diff --git a/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/BinaryTree.java b/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/BinaryTree.java new file mode 100644 index 000000000..bcd210977 --- /dev/null +++ b/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/BinaryTree.java @@ -0,0 +1,56 @@ +package ru.mirea.practice.s0000001; + +class BinaryTree { + TreeNode root; + + public int height(TreeNode node) { + if (node == null) { + return 0; + } else { + int leftHeight = height(node.left); + int rightHeight = height(node.right); + return Math.max(leftHeight, rightHeight) + 1; + } + } + + public void reverse(TreeNode node) { + if (node == null) { + return; + } + TreeNode temp = node.left; + node.left = node.right; + node.right = temp; + + reverse(node.left); + reverse(node.right); + } + + public boolean lookup(TreeNode node, int target) { + if (node == null) { + return false; + } + if (node.data == target) { + return true; + } + return target < node.data ? lookup(node.left, target) : lookup(node.right, target); + } + + public int size(TreeNode node) { + if (node == null) { + return 0; + } + return size(node.left) + 1 + size(node.right); + } + + public boolean sameTree(TreeNode a, TreeNode b) { + if (a == null && b == null) { + return true; + } + if (a == null || b == null) { + return false; + } + return a.data == b.data && sameTree(a.left, b.left) && sameTree(a.right, b.right); + } +} +// + diff --git a/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/TreeNode.java b/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/TreeNode.java new file mode 100644 index 000000000..65d58fc9c --- /dev/null +++ b/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/TreeNode.java @@ -0,0 +1,14 @@ +package ru.mirea.practice.s0000001; + +class TreeNode { + int data; + TreeNode left; + TreeNode right; + + public TreeNode(int item) { + data = item; + left = right = null; + } +} + +// diff --git a/students/23K0342/pom.xml b/students/23K0342/pom.xml index 8a36aecc5..cb27256fa 100644 --- a/students/23K0342/pom.xml +++ b/students/23K0342/pom.xml @@ -33,6 +33,17 @@ 23K0342-p18 23K0342-p19 23K0342-p20 + 23K0342-p22 + 23K0342-p21 + 23K0342-p23 + 23K0342-p24 + 23K0342-p25 + 23K0342-p26 + 23K0342-p27 + 23K0342-p28 + 23K0342-p29 + 23K0342-p30_1 +