Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 23:27   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию Обратная польская запись

В общем практически реализовал обратную польскую запись, но возникла проблема,она не добавляет как странно добавляет символы в выходящую строку, т.е. например если я ввел а+b то выходящая у меня получается следующая b+, а если я введу a+b+c то он вообще зацикливается, вроде все делал по алгоритму, а вот что-то не так у меня выходит, вот собственно код:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
using namespace std;

string InputString,OutputString;
int i;
        //-------------------------
        char NextChar()
        {
                char NextSymb;
                        NextSymb=InputString[i];
                        i++;
                return NextSymb;
        }
        //-------------------------------------
        int Pr(char Symb)
        {
                int Prior;
                        if(Symb=='+'||Symb=='-'){
                                Prior=1;
                        }else{
                                if(Symb=='*'||Symb=='/'){
                                        Prior=2;
                                }else{
                                        if(Symb!='#'){
                                                Prior=3;
                                        }else Prior=0;
                                 }
                         }
                return Prior;

        }
        int Rang(char Symb){
                int Rang;
                        if((Symb=='+')||(Symb=='-')||(Symb=='*')||(Symb=='/')){
                                Rang=1;
                        }else Rang=-1;
                 return Rang;
        }
        //--------------------
        void CreatePol(){
            int R,TOP;
            char S[255],N,T;
            bool Check=true;
                 TOP=0;
                 S[TOP]='#';
                 i=1;
                 R=1;
                 N=NextChar();
                        while(N!='#'){
                                while(Pr(N)<=Pr(S[TOP])){

                                        i++;
                                        T=S[TOP];
                                        TOP--;

                                        OutputString=OutputString+T;
                                        R=R+Rang(T);

                                }
                                if(R<1){
                                        Check=false;
                                }else{
                                        TOP++;
                                        S[TOP]=N;
                                        N=NextChar();
                                }
                        }
                        while(S[TOP]!='#'){
                                i++;
                                T=S[TOP];
                                TOP--;
                                OutputString=OutputString+T;
                                R=R+Rang(T);
                                        if(R<1){
                                                Check=false;
                                        }
                        }


               /*  if(Check==true){   */
                        cout<<OutputString;

              //   }
                // if(Check==false){
                 //       cout<<"\n Some mistakes ";
                 //}

        }
int main(){
        cout<<"\n ENTER STRING: ";cin>>InputString;
        InputString=InputString+'#';
        CreatePol();
        cout<<"\n ";
        system("pause");

}
CodeNOT вне форума Ответить с цитированием
Старый 13.12.2010, 22:54   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Спасибо, но у них у всех один и тот же алгоритм, связанный с приоритетом, что в принципе и у меня, но я понять не могу, почему мой не пашет(((
CodeNOT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратная польская запись alexobenikov Общие вопросы C/C++ 12 25.11.2010 23:03
Pascal. Вводится обратная польская запись Desperados Помощь студентам 5 12.11.2010 16:09
Обратная польская запись + ввод/вывод из файла (С++) Anastasiya209 Помощь студентам 0 22.04.2010 17:19
Обратная польская запись Катуха Помощь студентам 6 27.12.2008 10:23
Обратная польская запись Роман Радер Общие вопросы Delphi 0 09.12.2008 18:18