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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 02:19   #1
RamilFaz
 
Регистрация: 07.04.2010
Сообщений: 8
Сообщение Рекурсия

Написал прогу на задачу:Построить синтаксический анализатор для понятия скобки:

скобки::={ кругл
квадр

кругл::={ A
((кругл)[квадр])

квадр::={ B
[[квадр](кругл)]


помогите исправит,пожалуйста....а то прога вроде компилируется,но видно гдето я неправильно сделал.....


Код:
#include<fstream>
#include<iostream>
#include<string>
using namespace std;

bool Skobki();
bool Krugl();
bool Kvadr();
void Shag();
void Oshibka(const string& InName);
string S;

int main()
{
ifstream fin("file.txt");
  if(!fin)
  {
  cout<<"Oshibka otkrytiya fayla."<<endl;
  return 1;
  }
    getline(fin,S);
    if (Skobki())
    {
      cout<<"Pravilniy rezultat:"<<endl;
    }
  return 0;
}

bool Skobki()
{
     if((S[0]=='(')||(S[0]=='A'))
       {
       Krugl();
       return 0;
       }
     if((S[0]=='[')||(S[0]=='B'))
       {
       Kvadr();
       return 0;
       }
     Oshibka("Skobki");
     return 1;
}

bool Krugl()
{
  if(S[0]=='(')
  {
    Shag();
    S[0]='(';
    Krugl();
    S[0]=')';
    S[0]='[';
    Kvadr();
    S[0]=']';
      if(S[0]==')')
      {
        Shag();
        return 0;
      }
    else Oshibka("Krugl");
  }
  if(S[0]=='A')
  {
    Shag();
    return 0;
  }
Oshibka("Krugl");
return 1;
}

bool Kvadr()
{
  if(S[0]=='[')
  {
    Shag();
    S[0]='[';
    Kvadr();
    S[0]=']';
    S[0]='(';
    Krugl();
    S[0]=')';
      if(S[0]==']')
      {
        Shag();
        return 0;
      }
    else Oshibka("Kvadr");
  }
  if(S[0]=='B')
  {
    Shag();
    return 0;
  }
Oshibka("Kvadr");
return 1;
}

void Shag()
{
  S=S.substr(1);
}

void Oshibka(const string& InName)
{
cout<<"Oshibka v:"<<InName<<"with"<<"\""<<S<<"\"\n";
}
RamilFaz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия DrDre9991 Паскаль, Turbo Pascal, PascalABC.NET 4 22.05.2010 15:00
рекурсия c++ dzhegan Помощь студентам 0 20.05.2010 18:19
рекурсия -Spirit- Помощь студентам 1 14.01.2010 16:40