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

Commit ef38a1c

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents ee14f12 + ce871d5 commit ef38a1c

File tree

74 files changed

+2050
-6
lines changed

Some content is hidden

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

74 files changed

+2050
-6
lines changed
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>23K0120</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K0120-p22</artifactId>
12+
<description>Стек</description>
13+
</project>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package ru.mirea.practice.s23k0120;
2+
3+
public final class Main {
4+
5+
private Main() {
6+
7+
}
8+
9+
public static void main(String[] args) {
10+
System.out.println("Двадцать первая практическая работа!");
11+
}
12+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package ru.mirea.practice.s23k0120.task1;
2+
3+
import ru.mirea.practice.s23k0120.task1.utilclasses.Number;
4+
import ru.mirea.practice.s23k0120.task1.utilclasses.Operation;
5+
6+
import java.util.Stack;
7+
8+
public class Calculator {
9+
private final Stack<ComputingElement> stack;
10+
11+
public Calculator() {
12+
this.stack = new Stack<>();
13+
}
14+
15+
public void clear() {
16+
stack.clear();
17+
}
18+
19+
public void addNumber(Number number) {
20+
stack.push(number);
21+
}
22+
23+
public void addOperation(Operation operation) {
24+
stack.push(operation);
25+
}
26+
27+
public Stack<ComputingElement> getStack() {
28+
return stack;
29+
}
30+
31+
public Number compute() {
32+
Number result = new Number();
33+
Number b;
34+
Number a;
35+
36+
37+
ComputingElement popped = stack.pop();
38+
if (popped instanceof Operation) {
39+
b = compute();
40+
a = compute();
41+
result = ((Operation) popped).compute(a, b);
42+
} else if (popped instanceof Number) {
43+
result = (Number) popped;
44+
}
45+
46+
return result;
47+
}
48+
49+
@Override
50+
public String toString() {
51+
return stack.toString();
52+
}
53+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package ru.mirea.practice.s23k0120.task1;
2+
3+
import ru.mirea.practice.s23k0120.task1.utilclasses.Number;
4+
import ru.mirea.practice.s23k0120.task1.utilclasses.Operation;
5+
import ru.mirea.practice.s23k0120.task1.utilclasses.OperationType;
6+
7+
import java.util.LinkedList;
8+
import java.util.List;
9+
10+
public class CalculatorController {
11+
private final Calculator calculator;
12+
private int numbersCount;
13+
private int operationCount;
14+
private final List<ComputingElement> fakeStack;
15+
16+
public CalculatorController() {
17+
this.calculator = new Calculator();
18+
fakeStack = new LinkedList<>();
19+
numbersCount = 0;
20+
}
21+
22+
public void addNumber(double number) {
23+
fakeStack.add(new Number(number));
24+
numbersCount += 1;
25+
}
26+
27+
public void addOperation(OperationType operationType) {
28+
if (operationCount < numbersCount - 1) {
29+
fakeStack.add(new Operation(operationType));
30+
operationCount += 1;
31+
}
32+
}
33+
34+
public void clear() {
35+
fakeStack.clear();
36+
}
37+
38+
public ComputingElement delete() {
39+
return fakeStack.remove(fakeStack.size() - 1);
40+
}
41+
42+
public double compute() {
43+
toRealStack();
44+
fakeStack.clear();
45+
final Number result = calculator.compute();
46+
fakeStack.addAll(calculator.getStack());
47+
calculator.clear();
48+
numbersCount -= operationCount;
49+
operationCount = 0;
50+
return result.getValue();
51+
}
52+
53+
public int getStackSize() {
54+
return fakeStack.size();
55+
}
56+
57+
private void toRealStack() {
58+
for (ComputingElement element : fakeStack) {
59+
if (element instanceof Number) {
60+
calculator.addNumber((Number) element);
61+
} else if (element instanceof Operation) {
62+
calculator.addOperation((Operation) element);
63+
}
64+
}
65+
}
66+
67+
@Override
68+
public String toString() {
69+
StringBuilder fakeStackStr = new StringBuilder();
70+
for (ComputingElement element : fakeStack) {
71+
fakeStackStr.append(element.toString());
72+
fakeStackStr.append(" ");
73+
}
74+
return fakeStackStr.toString();
75+
}
76+
77+
public String printStack() {
78+
return String.format("Numbers: %d, Operations: %d", numbersCount, operationCount);
79+
}
80+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package ru.mirea.practice.s23k0120.task1;
2+
3+
public interface ComputingElement {
4+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package ru.mirea.practice.s23k0120.task1;
2+
3+
import ru.mirea.practice.s23k0120.task1.utilclasses.OperationType;
4+
5+
public abstract class Main {
6+
public static void main(String[] args) {
7+
CalculatorController calculator = new CalculatorController();
8+
calculator.addNumber(100);
9+
calculator.addNumber(2);
10+
calculator.addNumber(3);
11+
calculator.addNumber(4);
12+
calculator.addNumber(5);
13+
calculator.addNumber(6);
14+
calculator.addOperation(OperationType.MULTIPLY);
15+
calculator.addOperation(OperationType.ADD);
16+
calculator.addOperation(OperationType.SUBTRACT);
17+
calculator.addOperation(OperationType.DIVIDE);
18+
System.out.println(calculator);
19+
System.out.println(calculator.compute());
20+
System.out.println(calculator);
21+
calculator.addOperation(OperationType.DIVIDE);
22+
System.out.println(calculator);
23+
System.out.println(calculator.compute());
24+
System.out.println(calculator);
25+
System.out.println(calculator.compute());
26+
System.out.println(calculator);
27+
System.out.println(calculator.compute());
28+
System.out.println(calculator);
29+
System.out.println(calculator.compute());
30+
System.out.println(calculator);
31+
System.out.println(calculator.compute());
32+
System.out.println(calculator);
33+
}
34+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package ru.mirea.practice.s23k0120.task1.utilclasses;
2+
3+
import ru.mirea.practice.s23k0120.task1.ComputingElement;
4+
5+
public class Number implements ComputingElement {
6+
private double value;
7+
8+
public Number() {
9+
// Default constructor
10+
}
11+
12+
public Number(double value) {
13+
this.value = value;
14+
}
15+
16+
public double getValue() {
17+
return value;
18+
}
19+
20+
public void setValue(double value) {
21+
this.value = value;
22+
}
23+
24+
@Override
25+
public String toString() {
26+
return Double.toString(value);
27+
}
28+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package ru.mirea.practice.s23k0120.task1.utilclasses;
2+
3+
import ru.mirea.practice.s23k0120.task1.ComputingElement;
4+
5+
public class Operation implements ComputingElement {
6+
7+
private final OperationType operation;
8+
9+
public Operation(OperationType operation) {
10+
this.operation = operation;
11+
}
12+
13+
public OperationType getOperation() {
14+
return operation;
15+
}
16+
17+
public Number compute(Number numA, Number numB) {
18+
double result = 0;
19+
double a = numA.getValue();
20+
double b = numB.getValue();
21+
switch (operation) {
22+
case ADD:
23+
result = a + b;
24+
break;
25+
case SUBTRACT:
26+
result = a - b;
27+
break;
28+
case MULTIPLY:
29+
result = a * b;
30+
break;
31+
case DIVIDE:
32+
result = a / b;
33+
break;
34+
default:
35+
break;
36+
}
37+
return new Number(result);
38+
}
39+
40+
@Override
41+
public String toString() {
42+
String strOp = "";
43+
switch (operation) {
44+
case ADD:
45+
strOp = "+";
46+
break;
47+
case SUBTRACT:
48+
strOp = "-";
49+
break;
50+
case MULTIPLY:
51+
strOp = "*";
52+
break;
53+
case DIVIDE:
54+
strOp = "/";
55+
break;
56+
default:
57+
break;
58+
}
59+
return strOp;
60+
}
61+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package ru.mirea.practice.s23k0120.task1.utilclasses;
2+
3+
public enum OperationType {
4+
ADD,
5+
SUBTRACT,
6+
MULTIPLY,
7+
DIVIDE
8+
}

0 commit comments

Comments
 (0)