Skip to content
Open
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
1 change: 0 additions & 1 deletion HomeworksAccept/homework21.09/read.me

This file was deleted.

1 change: 0 additions & 1 deletion HomeworksAccept/homework28.09/read.me

This file was deleted.

1 change: 0 additions & 1 deletion HomeworksAccept/read.me

This file was deleted.

31 changes: 31 additions & 0 deletions sortStation/sortStation.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sortStation", "sortStation\sortStation.vcxproj", "{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}.Debug|x64.ActiveCfg = Debug|x64
{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}.Debug|x64.Build.0 = Debug|x64
{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}.Debug|x86.ActiveCfg = Debug|Win32
{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}.Debug|x86.Build.0 = Debug|Win32
{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}.Release|x64.ActiveCfg = Release|x64
{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}.Release|x64.Build.0 = Release|x64
{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}.Release|x86.ActiveCfg = Release|Win32
{6E239FD9-AD88-4EA0-B69A-CC5CF6417AD7}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3014B97C-51B5-43EE-9278-48A66DA4321D}
EndGlobalSection
EndGlobal
175 changes: 175 additions & 0 deletions sortStation/sortStation/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
#include "queue.h"
#include <string.h>
#include <locale.h>

void returnOperation(Stack* operatorActions, char symbol[], int* errorCode, Queue* queue) {
char operations = pop(operatorActions, errorCode);
symbol[0] = operations;
if (*errorCode != 0) {
clear(queue);
deleteStack(&operatorActions);
return false;
}
if (operations != '(') {
enqueue(queue, symbol);
}
}

bool converterToPostfixForm(const char buffer[], char result[]) {
size_t sizeBuffer = strlen(buffer);
Queue queue = { NULL, NULL };
Stack* operatorActions = createStack();
size_t i = 0;
int errorCode = 0;
char number[100] = { '\0' };
while (i < sizeBuffer) {
memset(number, 0, strlen(number));
int walker = 0;
while (buffer[i] >= '0' && buffer[i] <= '9') {
number[walker] = buffer[i];
++i;
++walker;
}
if (strlen(number) != 0) {
enqueue(&queue, number);
}
if (buffer[i] == '*' || buffer[i] == '+' || buffer[i] == '/' || buffer[i] == '-' || buffer[i] == '(' || buffer[i] == ')') {
if (isEmpty(operatorActions)) {
push(operatorActions, buffer[i]);
}
else if (buffer[i] == '(') {
push(operatorActions, buffer[i]);
}
else if (top(operatorActions) == '(') {
push(operatorActions, buffer[i]);
}
else if (buffer[i] == ')') {
while (!isEmpty(operatorActions)) {
char symbol[2] = { '\0' };
returnOperation(operatorActions, symbol, &errorCode, &queue);
if (errorCode != 0) {
return false;
}
}
}
else if (buffer[i] == '*' || buffer[i] == '/') {
if (top(operatorActions) == '/' || top(operatorActions) == '*') {
while (!isEmpty(operatorActions) && (top(operatorActions) == '/' || top(operatorActions) == '*')) {
char symbol[2] = { '\0' };
returnOperation(operatorActions, symbol, &errorCode, &queue);
if (errorCode != 0) {
return false;
}
}
}
push(operatorActions, buffer[i]);
}
else if (buffer[i] == '+' || buffer[i] == '-') {
while (!isEmpty(operatorActions)) {
char symbol[2] = { '\0' };
returnOperation(operatorActions, symbol, &errorCode, &queue);
if (errorCode != 0) {
return false;
}
}
push(operatorActions, buffer[i]);
}
}
++i;
}
while (!isEmpty(operatorActions)) {
char symbol[2] = { '\0' };
returnOperation(operatorActions, symbol, &errorCode, &queue);
if (errorCode != 0) {
return false;
}
}
size_t j = 0;
while (!isEmptyQueue(queue)) {
char queueElements[100] = { '\0' };
dequeue(&queue, &errorCode, queueElements);
if (errorCode != 0) {
clear(&queue);
return false;
}
size_t sizeQueueElements = strlen(queueElements);
size_t i = 0;
while (i < sizeQueueElements) {
result[j] = queueElements[i];
++i;
++j;
}
result[j] = ' ';
++j;
}
if (!isEmptyQueue(queue)) {
clear(&queue);
return false;
}
if (operatorActions != NULL) {
if (!isEmpty(operatorActions)) {
deleteStack(&operatorActions);
return false;
}
deleteStack(&operatorActions);
}
return true;
}

bool firstTest() {
char buffer[] = "(1 + 2) * 2";
char arrayOutput[100] = { '\0' };
if (!converterToPostfixForm(buffer, arrayOutput)) {
return false;
}
char bufferNew[] = "1 2 + 2 *";
size_t sizeArrayOutput = strlen(arrayOutput);

for (int i = 0; i < sizeArrayOutput - 1; ++i) {
if (bufferNew[i] != arrayOutput[i]) {
return false;
}
}
return true;
}

bool secondTest() {
char buffer[] = "(1 + 2) * (1 + 2)";
char arrayOutput[100] = { '\0' };
if (!converterToPostfixForm(buffer, arrayOutput)) {
return false;
}
char bufferNew[] = "1 2 + 1 2 + *";
size_t sizeArrayOutput = strlen(arrayOutput);

for (int i = 0; i < sizeArrayOutput - 1; ++i) {
if (bufferNew[i] != arrayOutput[i]) {
return false;
}
}
return true;
}

int main() {
setlocale(LC_ALL, "RUS");

if (firstTest() && secondTest()) {
printf("����� ������ �������\n");
} else {
printf("����� �����������...\n");
return -1;
}

printf("������� ������ ������� � ����������� �����\n");
char buffer[100] = { '\0' };
gets_s(buffer, 100);
char result[100] = { '\0' };
if (converterToPostfixForm(buffer, result)) {
printf("%s", result);
} else {
printf("��������� ������...\n");
}
}
65 changes: 65 additions & 0 deletions sortStation/sortStation/queue.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include "queue.h"
#include <stdio.h>
#include <malloc.h>
#include <string.h>

int enqueue(Queue* queue, char value[]) {
Node* temp = calloc(1, sizeof(Node));
if (temp == NULL) {
printf("Problems with memory allocation");
return -1;
}
size_t sizeValue = strlen(value);
memset(temp->value, 0, strlen(temp->value));
strncpy(temp->value, value, sizeValue);
temp->next = NULL;

if (queue->tail == NULL) {
queue->tail = temp;
queue->head = temp;
}
else {
queue->tail->next = temp;
queue->tail = temp;
}

return 0;
}

void dequeue(Queue* queue, int* errorCode, char value[]) {
if (queue->head == NULL) {
if (errorCode != NULL) {
*errorCode = -1;
}

return 0;
}
if (errorCode != NULL) {
*errorCode = 0;
}

size_t sizeQueueHeadValue = strlen(queue->head->value);
strncpy(value, queue->head->value, sizeQueueHeadValue);

Node* next = queue->head->next;
//free(queue->head);
memset(queue->head->value, 0, strlen(queue->head->value));
(queue->head)->next = NULL;
queue->head = NULL;
queue->head = next;
if (next == NULL) {
queue->tail = NULL;
}
}

bool isEmptyQueue(Queue queue) {
return queue.head == NULL;
}

void clear(Queue* queue) {
while (!isEmptyQueue(*queue)) {
int errorCode = 0;
dequeue(queue, &errorCode, "");
}
queue = NULL;
}
20 changes: 20 additions & 0 deletions sortStation/sortStation/queue.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#pragma once
#include <stdbool.h>

typedef struct Node {
char value[100];
struct Node* next;
} Node;

typedef struct Queue {
struct Node* head;
struct Node* tail;
} Queue;

int enqueue(Queue* queue, char value[]);

void dequeue(Queue* queue, int* errorCode, char value[]);

bool isEmptyQueue(Queue queue);

void clear(Queue* queue);
Loading