Перевести код с консоли на C++Builder форму

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
KatyaLancina
Сообщения: 4
Зарегистрирован: 29 дек 2014, 18:27

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define STACK_LENGTH 80
#define BUFFER_LENGTH 81
 
/* Переменные для хранения стека */
int Stack_Count;
int Stack_Array[STACK_LENGTH];
 
 
/* Функции самого стека */
void stack_push(int n) /* Добавить элемент в стек */
{
    if( Stack_Count < STACK_LENGTH )
        Stack_Array[Stack_Count++] = n;
}
 
int stack_pop() /* Извлечь элемент из стека */
{
    if(Stack_Count != 0)
        return Stack_Array[--Stack_Count];
    else
        return 0;
}
 
void stack_init() /* Начальная инициализация стека*/
{
    Stack_Count = 0;
}
 
 
/* Функции стекового калькулятора */
void stack_add() /* Сложение */
{
    stack_push( stack_pop() + stack_pop() );
}
 
void stack_sub() /* Вычетание */
{
    stack_push( stack_pop() - stack_pop() );
}
 
void stack_mul() /* Умножение */
{
    stack_push( stack_pop() * stack_pop() );
}
 
void stack_div() /* Деление */
{
    stack_push( stack_pop() / stack_pop() );
}
 
void stack_print() /* Печать последнего элемента */
{
    printf( "Last: %d\n", stack_pop() );
}
 
/* Функции работы с пользователем */
void parse(char *str) /* Функция распознавания строки */
{
char *st;
 
    for(st = strtok(str, " "); st != NULL; st = strtok(NULL, " "))
    {
        switch(*st)
        {
            case '+':
                stack_add();
                break;
            case '-':
                stack_sub();
                break;
            case '*':
                stack_mul();
                break;
            case '/':
                stack_div();
                break;
            case '.':
                stack_print();
                break;
            default:
                stack_push(atoi(st));
                break;
        }
    }
}
 
 
/* Главная функция */
int main()
{
char buf[BUFFER_LENGTH];
 
    stack_init(); // Инициализируем стек
 
    printf( "Введите строки для вычисления:\n" );
    printf( "(для выхода введите строку, начинающуюся с символа '#')\n" );
 
    for( scanf("%s", buf); (strlen(buf) > 0) && (buf[0] != '#'); scanf("%s", buf) ) // Запрашиваем строки и выполняем их
        parse(buf);
    
    return 0;
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ты предлагаешь кому-то создать проект на Билдере и приатачить сюда десяток сгенерированых билдером файлов? Может попробуешь разобраться с ним сама? Это вроде как не сложно. Достаточно разместить на форме несколько диалоговых контролов. Делаешь Edit Box для ввода, куда будет вводиться выражение и задисейбленный Edit Box для вывода, куда программа запишет результат. А ещё размещаешь кнопочку "Посчитать", по которой запустится твоя функция parse. Всё это делается мышкой и всё достаточно интуитивно. По клику на кнопку на форме Билдер сам создаст обработчик кнопки, в котором ты получишь текст из входного Edit Box и передашь его в вызов parse.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
KatyaLancina
Сообщения: 4
Зарегистрирован: 29 дек 2014, 18:27

хорошо, спасибо попробую сделать :)
Ответить