Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графический интерфейс С++, постфиксные выражения 
:(
    Опции темы
Aleksandra24
  Дата 11.7.2013, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.2.2013

Репутация: нет
Всего: нет



Ребята помогите пожалуйста с программкой...)
Буду очень благодарна!!!
Я пишу программу на С++
Мне нужно написать программу с графическим интерфейсом для преобразования выражения в простой форме в постфиксную форму...
У меня программа работает но когда пишешь простое выражение без скобок, когда пишешь со скобками выдает непонятные знаки...
Помогите пожалуйста исправить ошибку!!!!
Сейчас напишу вам мой код, архив со всеми файлами будет прикреплен ниже....Я Пишу на 6 борланде....
Вот код программы:
Код
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "gra.h"
#include "fff.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int oper(char x)
{
    if (x=='*'||
            x=='/'||
        x=='+'||
            x=='-')
        return x;
        return 0;
}
class stack
{
    int top;
    char *mass;
public :
    stack(){top=0; mass=new char[50]; mass="";}
    bool empty(){return top==0;}
    char get_top_element()
        {
        return mass[top];
        }
        int top_oper()
        {
          return oper(mass[top]);}

    void dob(char x)
    {
        top++;
        mass[top]=x;
    }
    char ud()
    {
        top--;
        return mass[top+1];
    }
        ~stack(){delete []mass;};
};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
      char *ar1,*ar2;
      int i=0;
       int k=0;
       ar1 = new char[100];     ar2 = new char[100]; ar2="";
  stack st;
  ar1=Edit1->Text.c_str();
for(i=0; i<strlen(ar1);  i++)
    {
        if (ar1[i]=='(') st.dob(ar1[i]);
        else if ((ar1[i]=='+')||(ar1[i]=='-')||(ar1[i]=='/')||(ar1[i]=='*'))
        {
            while((!st.empty())&&(st.top_oper()>oper(ar1[i])))
            {
                k++;
                ar2[k]=st.ud();
            }
            st.dob(ar1[i]);
        }
        else if(ar1[i]==')')
        {
            while((!st.empty())&&(st.get_top_element()!='('))
            {

                ar2[k]=st.ud();
                         k++;
            }
            st.ud();
        }
        else
        {
                        ar2[k]=ar1[i];
            k++;
        }
    }
       while(!st.empty())
    {
        ar2[k]=st.ud();
                k++;
        
    }


 Edit2->Text = ar2;
 delete[]ar1; delete []ar2;
}
//---------------------------------------------------------------------------


Модератор: не забываем пользоваться кнопочкой "Код"

 ! 
bsa
Не надо писать сообщения жирным шрифтом


Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  ccc.rar 380,69 Kb
PM MAIL   Вверх
SVN74
Дата 11.7.2013, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(Aleksandra24 @  11.7.2013,  19:29 Найти цитируемый пост)
stack(){top=0; mass=new char[50]; mass="";}

Код

stack()
{
      top=0; 
      mass=new char[50]; 
      memset(mass, 0, 50);
}

Цитата(Aleksandra24 @  11.7.2013,  19:29 Найти цитируемый пост)
ar1=Edit1->Text.c_str();

strcpy(ar1, Edit1->Text.c_str());
и т.д.


Это сообщение отредактировал(а) SVN74 - 11.7.2013, 23:04
PM MAIL WWW   Вверх
xvr
Дата 6.8.2013, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Жуть какая  smile Посмотрите как пишут парсеры, например методом Рекурсивного Спуска

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0668 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.