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

Лабораторная №21-32 #685

Merged
merged 1 commit into from
Dec 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions students/23K0505/23K0505-p21/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>23K0505</artifactId>
<groupId>ru.mirea.practice</groupId>
<version>2024.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>23K0505-p21</artifactId>
<description>Лабораторная 21</description>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.mirea.practice.s23k0505;

public final class Main {

private Main() {

}

public static void main(String[] args) {
System.out.println("Двадцать первая практическая работа!");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ru.mirea.practice.s23k0505.task1;

import java.util.ArrayList;
import java.util.List;

public abstract class Main {
public static <T> List<T> arrToList(T[] array) {
List<T> list = new ArrayList<>(array.length);
for (T e : array) {
list.add(e);
}
return list;
}

public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 5};
List<Integer> list = arrToList(arr);
System.out.println(list);

Integer[] arr1 = new Integer[10];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ru.mirea.practice.s23k0505.task2;

import java.util.Arrays;

public class Array<T> {
private final T[] array;
private final int length;

Array(T[] array) {
this.array = array;
this.length = array.length;
}

public T get(int index) {
return array[index];
}

public int getLength() {
return length;
}

@Override
public String toString() {
return Arrays.toString(array);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package ru.mirea.practice.s23k0505.task2;

public abstract class Main {
public static void main(String[] args) {
Integer[] arr = {5, 4, 3, 2, 1};
Array<Integer> array = new Array<>(arr);
System.out.println(array);
}
}
13 changes: 13 additions & 0 deletions students/23K0505/23K0505-p22/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>23K0505</artifactId>
<groupId>ru.mirea.practice</groupId>
<version>2024.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>23K0505-p22</artifactId>
<description>Лабораторная 22</description>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.mirea.practice.s23k0505;

public final class Main {

private Main() {

}

public static void main(String[] args) {
System.out.println("Двадцать первая практическая работа!");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package ru.mirea.practice.s23k0505.task1;

import ru.mirea.practice.s23k0505.task1.utilclasses.Number;
import ru.mirea.practice.s23k0505.task1.utilclasses.Operation;

import java.util.Stack;

public class Calculator {
private final Stack<ComputingElement> stack;

public Calculator() {
this.stack = new Stack<>();
}

public void clear() {
stack.clear();
}

public void addNumber(Number number) {
stack.push(number);
}

public void addOperation(Operation operation) {
stack.push(operation);
}

public Stack<ComputingElement> getStack() {
return stack;
}

public Number compute() {
Number result = new Number();
Number b;
Number a;
ComputingElement popped = stack.pop();
if (popped instanceof Operation) {
b = compute();
a = compute();
result = ((Operation) popped).compute(a, b);
} else if (popped instanceof Number) {
result = (Number) popped;
}

return result;
}

@Override
public String toString() {
return stack.toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package ru.mirea.practice.s23k0505.task1;

import ru.mirea.practice.s23k0505.task1.utilclasses.Number;
import ru.mirea.practice.s23k0505.task1.utilclasses.Operation;
import ru.mirea.practice.s23k0505.task1.utilclasses.OperationType;

import java.util.LinkedList;
import java.util.List;

public class CalculatorController {
private final Calculator calculator;
private final List<ComputingElement> fakeStack;
private int numbersCount;
private int operationCount;

public CalculatorController() {
this.calculator = new Calculator();
fakeStack = new LinkedList<>();
numbersCount = 0;
operationCount = 0;
}

public void addNumber(double number) {
fakeStack.add(new Number(number));
numbersCount += 1;
}

public void addOperation(OperationType operationType) {
if (operationCount < numbersCount - 1) {
fakeStack.add(new Operation(operationType));
operationCount += 1;
}
}

public void clear() {
fakeStack.clear();
}

public ComputingElement delete() {
ComputingElement element = null;
if (!fakeStack.isEmpty()) {
element = fakeStack.remove(fakeStack.size() - 1);
if (element instanceof Number) {
numbersCount -= 1;
} else {
operationCount -= 1;
}
}
return element;
}

public double compute() {
toRealStack();
fakeStack.clear();
final Number result = calculator.compute();
fakeStack.addAll(calculator.getStack());
calculator.clear();
numbersCount -= operationCount + 1;
operationCount = 0;
return result.getValue();
}

public int getStackSize() {
return fakeStack.size();
}

private void toRealStack() {
for (ComputingElement element : fakeStack) {
if (element instanceof Number) {
calculator.addNumber((Number) element);
} else if (element instanceof Operation) {
calculator.addOperation((Operation) element);
}
}
}

@Override
public String toString() {
StringBuilder fakeStackStr = new StringBuilder();
for (ComputingElement element : fakeStack) {
fakeStackStr.append(element.toString());
fakeStackStr.append(" ");
}
return fakeStackStr.toString();
}

public String printStack() {
return String.format("Numbers: %d, Operations: %d", numbersCount, operationCount);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package ru.mirea.practice.s23k0505.task1;

public interface ComputingElement {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package ru.mirea.practice.s23k0505.task1;

import ru.mirea.practice.s23k0505.task1.utilclasses.OperationType;

public abstract class Main {
public static void main(String[] args) {
CalculatorController calculator = new CalculatorController();
calculator.addNumber(100);
calculator.addNumber(2);
calculator.addNumber(3);
calculator.addNumber(4);
calculator.addNumber(5);
calculator.addNumber(6);
calculator.addOperation(OperationType.MULTIPLY);
calculator.addOperation(OperationType.ADD);
calculator.addOperation(OperationType.SUBTRACT);
calculator.addOperation(OperationType.DIVIDE);
System.out.println(calculator);
System.out.println(calculator.compute());
System.out.println(calculator);
calculator.addOperation(OperationType.DIVIDE);
System.out.println(calculator);
System.out.println(calculator.compute());
System.out.println(calculator);
System.out.println(calculator.compute());
System.out.println(calculator);
System.out.println(calculator.compute());
System.out.println(calculator);
System.out.println(calculator.compute());
System.out.println(calculator);
System.out.println(calculator.compute());
System.out.println(calculator);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ru.mirea.practice.s23k0505.task1.utilclasses;

import ru.mirea.practice.s23k0505.task1.ComputingElement;

public class Number implements ComputingElement {
private double value;

public Number() {
// Default constructor
}

public Number(double value) {
this.value = value;
}

public double getValue() {
return value;
}

public void setValue(double value) {
this.value = value;
}

@Override
public String toString() {
return Double.toString(value);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package ru.mirea.practice.s23k0505.task1.utilclasses;

import ru.mirea.practice.s23k0505.task1.ComputingElement;

public class Operation implements ComputingElement {

private final OperationType operation;

public Operation(OperationType operation) {
this.operation = operation;
}

public OperationType getOperation() {
return operation;
}

public Number compute(Number numA, Number numB) {
double result = 0;
double a = numA.getValue();
double b = numB.getValue();
switch (operation) {
case ADD:
result = a + b;
break;
case SUBTRACT:
result = a - b;
break;
case MULTIPLY:
result = a * b;
break;
case DIVIDE:
result = a / b;
break;
default:
break;
}
return new Number(result);
}

@Override
public String toString() {
String strOp = "";
switch (operation) {
case ADD:
strOp = "+";
break;
case SUBTRACT:
strOp = "-";
break;
case MULTIPLY:
strOp = "*";
break;
case DIVIDE:
strOp = "/";
break;
default:
break;
}
return strOp;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.mirea.practice.s23k0505.task1.utilclasses;

public enum OperationType {
ADD,
SUBTRACT,
MULTIPLY,
DIVIDE
}
Loading
Loading