Описание команд для стека - C (СИ)
Формулировка задачи:
Доброго времени суток
Возникла проблема с методом PUSH цикл работает не так как я хотел и не могу понять как исправить
по факту он должен пробежать по нашему массиву vm_programm_code[] и выдать на 5 10 0 0 0 но он находит первый элемент и сваливает 5 0 0 0 0
#include <string.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include "stdint.h" #define PUSH 0x06 #define LENGHT 5 uint32_t stack[LENGHT]; uint32_t vm_programm_code[LENGHT] = {PUSH, 5, PUSH, 10, ADD}; uint32_t sp=0; // вкршина uint32_t i; void push(void){ if(sp >= LENGHT){ printf("polon\n"); return; } for ( i = 0; i < 5; i++ ) { if(vm_programm_code[i]=PUSH){ stack[sp]=vm_programm_code[i+1]; sp++; } else return; } } void vm(void){ push(); } int main() { vm(); printf("вершина - %d\n", stack[sp-1]); printf("%d\n%d\n%d\n%d\n%d\n", stack[0], stack[1],stack[2],stack[3],stack[4]); getchar(); }
Решение задачи: «Описание команд для стека»
textual
Листинг программы
#include <stdio.h> #include <string.h> main(int argc, char *argv[]) { char *a = argv[1]; int i, N = strlen(a); STACKinit(N); for (i = 0; i < N; i++) { if (a[i] == '+') STACKpush(STACKpop()+STACKpop()); if (a[i] == '*') STACKpush(STACKpop()*STACKpop()); if ((a[i] >= '0') && (a[i] <= '9')) STACKpush(0); while ((a[i] >= '0') && (a[i] <= '9')) STACKpush(10*STACKpop() + (a[i++]-'0')); } printf("%d \n", STACKpop()); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию main, которая является точкой входа в программу
- Передаем в функцию main два аргумента: argc и argv
- Задаем значение переменной a равным argv[1]
- Объявляем переменную i и N, которая равна длине строки a
- Инициализируем стек с помощью функции STACKinit(N)
- В цикле for перебираем каждый символ в строке a
- Если символ равен
+
, то с помощью функции STACKpush() добавляем в стек результат сложения двух последних элементов стека - Если символ равен
*
, то с помощью функции STACKpush() добавляем в стек результат умножения двух последних элементов стека - Если символ является числом от '0' до '9', то добавляем в стек значение 0
- Пока символ является числом от '0' до '9', то добавляем в стек значение, равное 10 умноженное на последний элемент стека, плюс значение текущего символа минус '0'
- После завершения цикла выводим на экран последний элемент стека с помощью функции printf()
- В конце программы функция STACKpop() не имеет аргументов и возвращает значение типа int
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д