Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit 7ef7370

Browse files
authored
Merge pull request #615 from 1NEILY/main
labs 21-30's
2 parents 08f2bfe + 695f588 commit 7ef7370

File tree

61 files changed

+1840
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1840
-1
lines changed

students/23K0114/23K0114-p021/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<artifactId>23K0114</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K0114-p021</artifactId>
12+
<description>Массивы</description>
13+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package ru.mirea.practice.s23k0114.lab1.task1;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public abstract class ArrayToListConverter {
7+
8+
// Метод для конвертации массива строк в список
9+
public static List<String> convertStringArrayToList(String[] array) {
10+
List<String> list = new ArrayList<>();
11+
for (String element : array) {
12+
list.add(element);
13+
}
14+
return list;
15+
}
16+
17+
// Метод для конвертации массива чисел в список
18+
public static List<Integer> convertIntegerArrayToList(Integer[] array) {
19+
List<Integer> list = new ArrayList<>();
20+
for (Integer element : array) {
21+
list.add(element);
22+
}
23+
return list;
24+
}
25+
26+
public static void main(String[] args) {
27+
// Пример использования метода для строк
28+
String[] stringArray = {"apple", "banana", "cherry"};
29+
List<String> stringList = convertStringArrayToList(stringArray);
30+
System.out.println("Список строк: " + stringList);
31+
32+
// Пример использования метода для чисел
33+
Integer[] integerArray = {1, 2, 3, 4, 5};
34+
List<Integer> integerList = convertIntegerArrayToList(integerArray);
35+
System.out.println("Список чисел: " + integerList);
36+
}
37+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package ru.mirea.practice.s23k0114.lab1.task2;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public class GenericArray<T> {
7+
private List<T> list;
8+
9+
public GenericArray() {
10+
list = new ArrayList<>(); // Мы можем менять реализацию на другую в будущем
11+
}
12+
13+
public void add(T element) {
14+
list.add(element);
15+
}
16+
17+
public T get(int index) {
18+
if (index < 0 || index >= list.size()) {
19+
throw new IndexOutOfBoundsException("Индекс вне диапазона");
20+
}
21+
return list.get(index);
22+
}
23+
24+
public int size() {
25+
return list.size();
26+
}
27+
28+
public void remove(int index) {
29+
if (index < 0 || index >= list.size()) {
30+
throw new IndexOutOfBoundsException("Индекс вне диапазона");
31+
}
32+
list.remove(index);
33+
}
34+
35+
@Override
36+
public String toString() {
37+
return list.toString();
38+
}
39+
40+
public static void main(String[] args) {
41+
GenericArray<Object> genericArray = new GenericArray<>();
42+
43+
// Пример использования
44+
genericArray.add(10); // int
45+
genericArray.add(20L); // long
46+
genericArray.add("Hello"); // String
47+
genericArray.add(3.14); // double
48+
49+
System.out.println("Массив: " + genericArray);
50+
System.out.println("Элемент по индексу 2: " + genericArray.get(2));
51+
System.out.println("Размер массива: " + genericArray.size());
52+
53+
genericArray.remove(1); // Удаляем элемент по индексу 1
54+
System.out.println("После удаления элемента: " + genericArray);
55+
}
56+
}

students/23K0114/23K0114-p022/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<artifactId>23K0114</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K0114-p022</artifactId>
12+
<description>Массивы</description>
13+
</project>
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package ru.mirea.practice.s23k0114.lab1.task1;
2+
3+
import java.util.Scanner;
4+
import java.util.Stack;
5+
6+
public abstract class RpnCalculator {
7+
8+
public static double evaluate(String expression) {
9+
Stack<Double> stack = new Stack<>();
10+
11+
// Разделяем входную строку на элементы
12+
String[] tokens = expression.split(" ");
13+
14+
for (String token : tokens) {
15+
switch (token) {
16+
case "+":
17+
stack.push(stack.pop() + stack.pop());
18+
break;
19+
case "-":
20+
double subtrahend = stack.pop();
21+
double minuend = stack.pop();
22+
stack.push(minuend - subtrahend);
23+
break;
24+
case "*":
25+
stack.push(stack.pop() * stack.pop());
26+
break;
27+
case "/":
28+
double divisor = stack.pop();
29+
double dividend = stack.pop();
30+
stack.push(dividend / divisor);
31+
break;
32+
default:
33+
// Если токен не оператор, то предполагаем, что это число
34+
stack.push(Double.parseDouble(token));
35+
break;
36+
}
37+
}
38+
39+
// Результат будет единственным элементом в стеке
40+
return stack.pop();
41+
}
42+
43+
public static void main(String[] args) {
44+
// Используем try-with-resources для безопасного закрытия Scanner
45+
try (Scanner scanner = new Scanner(System.in)) {
46+
System.out.print("Введите выражение в обратной польской нотации (RPN): ");
47+
48+
String expression = scanner.nextLine();
49+
50+
if (expression != null && !expression.trim().isEmpty()) {
51+
try {
52+
double result = evaluate(expression);
53+
System.out.println("Результат: " + result);
54+
} catch (Exception e) {
55+
System.out.println("Ошибка: " + e.getMessage());
56+
}
57+
} else {
58+
System.out.println("Вы не ввели выражение.");
59+
}
60+
}
61+
}
62+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package ru.mirea.practice.s23k0114.lab1.task2;
2+
3+
4+
import javax.swing.JButton;
5+
import java.awt.event.ActionEvent;
6+
import java.awt.event.ActionListener;
7+
8+
public class CalculatorController {
9+
private final CalculatorModel model; // Instance variable
10+
private final CalculatorView view; // Instance variable
11+
12+
public CalculatorController(CalculatorModel model, CalculatorView view) {
13+
this.model = model;
14+
this.view = view;
15+
16+
this.view.addCalculateListener(new CalculateListener());
17+
this.view.addNumberButtonListener(new NumberButtonListener());
18+
this.view.addOperationButtonListener(new OperationButtonListener());
19+
}
20+
21+
private class CalculateListener implements ActionListener {
22+
@Override
23+
public void actionPerformed(ActionEvent e) {
24+
String input = view.getInput();
25+
try {
26+
double result = model.evaluate(input);
27+
view.setResult("Результат: " + result);
28+
} catch (Exception ex) {
29+
view.setResult("Ошибка: " + ex.getMessage());
30+
}
31+
}
32+
}
33+
34+
private class NumberButtonListener implements ActionListener {
35+
@Override
36+
public void actionPerformed(ActionEvent e) {
37+
JButton source = (JButton) e.getSource();
38+
view.setInput(view.getInput() + source.getText());
39+
}
40+
}
41+
42+
private class OperationButtonListener implements ActionListener {
43+
@Override
44+
public void actionPerformed(ActionEvent e) {
45+
JButton source = (JButton) e.getSource();
46+
String operation = source.getText();
47+
if ("C".equals(operation)) {
48+
view.setInput("");
49+
} else {
50+
view.setInput(view.getInput() + " " + operation + " ");
51+
}
52+
}
53+
}
54+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package ru.mirea.practice.s23k0114.lab1.task2;
2+
3+
import java.util.Stack;
4+
5+
public class CalculatorModel {
6+
public double evaluate(String expression) {
7+
Stack<Double> stack = new Stack<>();
8+
String[] tokens = expression.trim().split("\\s+");
9+
10+
for (String token : tokens) {
11+
switch (token) {
12+
case "+":
13+
stack.push(stack.pop() + stack.pop());
14+
break;
15+
case "-":
16+
double subtrahend = stack.pop();
17+
double minuend = stack.pop();
18+
stack.push(minuend - subtrahend);
19+
break;
20+
case "*":
21+
stack.push(stack.pop() * stack.pop());
22+
break;
23+
case "/":
24+
double divisor = stack.pop();
25+
double dividend = stack.pop();
26+
stack.push(dividend / divisor);
27+
break;
28+
default:
29+
stack.push(Double.parseDouble(token));
30+
break;
31+
}
32+
}
33+
return stack.pop();
34+
}
35+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package ru.mirea.practice.s23k0114.lab1.task2;
2+
3+
import javax.swing.JButton;
4+
import javax.swing.JFrame;
5+
import javax.swing.JLabel;
6+
import javax.swing.JPanel;
7+
import javax.swing.JTextArea;
8+
import javax.swing.JTextField;
9+
import java.awt.GridLayout;
10+
import java.awt.event.ActionListener;
11+
12+
public class CalculatorView {
13+
private final JTextField inputField;
14+
private final JTextArea resultArea;
15+
private final JButton[] numberButtons;
16+
private final JButton[] operationButtons;
17+
private final JButton calculateButton;
18+
private final String[] operations = {"+", "-", "*", "/", "C"};
19+
20+
public CalculatorView() {
21+
final JFrame frame = new JFrame("RPN Calculator"); // Объявление как final и инициализация
22+
inputField = new JTextField(20);
23+
resultArea = new JTextArea(10, 30);
24+
calculateButton = new JButton("Вычислить");
25+
26+
numberButtons = new JButton[10];
27+
for (int i = 0; i < 10; i++) {
28+
numberButtons[i] = new JButton(String.valueOf(i));
29+
}
30+
31+
operationButtons = new JButton[operations.length];
32+
for (int i = 0; i < operations.length; i++) {
33+
operationButtons[i] = new JButton(operations[i]);
34+
}
35+
36+
JPanel panel = new JPanel();
37+
panel.setLayout(new GridLayout(5, 4));
38+
39+
panel.add(new JLabel("Введите выражение (RPN):"));
40+
panel.add(inputField);
41+
panel.add(calculateButton);
42+
panel.add(resultArea);
43+
44+
for (JButton numberButton : numberButtons) {
45+
panel.add(numberButton);
46+
}
47+
48+
for (JButton operationButton : operationButtons) {
49+
panel.add(operationButton);
50+
}
51+
52+
resultArea.setEditable(false);
53+
frame.add(panel);
54+
frame.setSize(400, 400);
55+
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
56+
frame.setVisible(true); // Первое использование переменной frame
57+
}
58+
59+
public String getInput() {
60+
return inputField.getText();
61+
}
62+
63+
public void setInput(String input) {
64+
inputField.setText(input);
65+
}
66+
67+
public void setResult(String result) {
68+
resultArea.setText(result);
69+
}
70+
71+
public void addCalculateListener(ActionListener listenForCalcButton) {
72+
calculateButton.addActionListener(listenForCalcButton);
73+
}
74+
75+
public void addNumberButtonListener(ActionListener listener) {
76+
for (JButton numberButton : numberButtons) {
77+
numberButton.addActionListener(listener);
78+
}
79+
}
80+
81+
public void addOperationButtonListener(ActionListener listener) {
82+
for (JButton operationButton : operationButtons) {
83+
operationButton.addActionListener(listener);
84+
}
85+
}
86+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package ru.mirea.practice.s23k0114.lab1.task2;
2+
3+
4+
5+
public abstract class RpnCalculatorApp {
6+
public static void main(String[] args) {
7+
// Create instances of the model and view
8+
CalculatorModel model = new CalculatorModel();
9+
CalculatorView view = new CalculatorView();
10+
11+
// Create the controller
12+
new CalculatorController(model, view);
13+
}
14+
}

students/23K0114/23K0114-p023/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<artifactId>23K0114</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K0114-p023</artifactId>
12+
<description>Массивы</description>
13+
</project>

0 commit comments

Comments
 (0)