diff --git a/Valeria_Ivankova/2_L2/main.c b/Valeria_Ivankova/2_L2/main.c new file mode 100644 index 00000000..37e00f35 --- /dev/null +++ b/Valeria_Ivankova/2_L2/main.c @@ -0,0 +1,126 @@ +#include +#include +#include +#include + +#define MAX_STACK 100 //Определяем максимальный размер массива +typedef int N; //Тип данных, которые будут храниться в данном массиве + +typedef struct index +{ + N a[MAX_STACK]; // Размер типа для того, чтобы в него можно было записать максимальный размер теоретически возможного массива любого типа + N size; // количество элементов, и вместе с тем указатель на вершину стека + + // Вершина будет указывать на следующий элемент массива, в который будет занесено значение. + +} index; + +void push(index *stack, const N value) +{ + stack->a[stack->size] = value; //указатель на структуру + stack->size++; +} + + +int pop(index *stack) +{ + stack->size--; + return stack->a[stack->size]; +} + +int sizeStack(index *stack) + { + return stack->size; + } + +int top(const index *stack) +{ + + return stack->a[stack->size - 1]; +} + +int funct(index *stack, char c) +{ + if (stack->size == 0 || stack->size == 1 ) + { + return 1; + } + int a, b; + + +if(sizeStack(stack) != 0) +{ + a=top(stack); + pop(stack); + + b=top(stack); + pop(stack); +} + int result; + switch(c) + { + case '+': { + result = b+a; + break; + } + case '-': { + result = b-a; + break; + } + case '*': { + result = b*a; + break; + } + case '/': { + result = b/a; + break; + } + } + push(stack, result); + return 0; +} + + +int main() +{ +index stack; +stack.size=0; +char str[100]; +int control = 1; + +fgets(str, 100, stdin); +char* str1 = strtok(str, " "); //разбиение на лексемы + +while(str1 != NULL) +{ + if(isdigit(*str1)) //проверяет аргумент, является ли он десятичной цифрой + push(&stack, atoi(str1)); + + else + + if(strlen(str1) > 1) //если число двузначное или больше + { + push(&stack, atoi(str1)); + } + + else + if(strlen(str1) == 1) //если это символ, то + { + if(funct(&stack, *str1) == 1) + control = 1; + } + + str1 = strtok(NULL, " \n"); +} + +if(sizeStack(&stack) == 1) + printf("%d\n", top(&stack)); +else +{ + control = 1; + printf("error"); + return 0; +} + +return 0; +} diff --git "a/Valeria_Ivankova/2_L2/\320\276\321\202\321\207\320\265\321\202 \320\230\320\262\320\260\320\275\320\272\320\276\320\262\320\260 \321\201\320\265\320\2742 \320\273\320\260\320\2612 (1).docx" "b/Valeria_Ivankova/2_L2/\320\276\321\202\321\207\320\265\321\202 \320\230\320\262\320\260\320\275\320\272\320\276\320\262\320\260 \321\201\320\265\320\2742 \320\273\320\260\320\2612 (1).docx" new file mode 100644 index 00000000..b93e6176 Binary files /dev/null and "b/Valeria_Ivankova/2_L2/\320\276\321\202\321\207\320\265\321\202 \320\230\320\262\320\260\320\275\320\272\320\276\320\262\320\260 \321\201\320\265\320\2742 \320\273\320\260\320\2612 (1).docx" differ