2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 вот почему оно не запускается?
Сообщение17.03.2009, 19:41 
Вот смотрите написал я програмуа она проходит этам компиляции но при запуске просто ничего не делает. Как это может быть? Уже не первый раз такое встречается. Что я делаю не так (gcc компилятор).
Вот кусок кода который работает, а как только добавляю реализацыю фанкции то все даже незапускается. И ещо более странно что даже когда я ее не использую. Всеравно все не работает. :shock: :shock:

Код:
#include <limits>
#include<iostream>
#include "math.h"

using namespace std;

void Calculator();


int main(int aa)
{
   cout<<"im hear"<<endl;

       system("pause");

       Calculator();



       system("pause");
       return 0;

}

 
 
 
 
Сообщение17.03.2009, 20:01 
Команда gcc такое и не скомпилит, а вот g++ мой честно говорит, что
Код:
/tmp/ccbgLLHf.o: In function `main':
test.cpp:(.text+0xb4): undefined reference to `Calculator()'
collect2: ld returned 1 exit status
То есть скомпилилось, но не слинкилось, ошибка.

Добавлено спустя 2 минуты 4 секунды:

Убрал вызов Calculator() - вполне нормально всё работает.
Код:
im hear
sh: pause: command not found
sh: pause: command not found

 
 
 
 
Сообщение17.03.2009, 22:09 
так оно и уменя работает но только до тех пор пока не добавлю реализацыю этой функции, и это меня в ступор вводит.
вот полный код:
Код:
//#include <limits>
//#include<cstring>
#include<iostream>

//#include<vector>
//#include<fstream>
//#include<cctype>
//#include <cstdlib>
//#include <string>
#include "math.h"


using namespace std;



typedef char* Str;
typedef  int TInt;

typedef  struct _Lex
{
      bool isOp;
       int V;
}*Lex;

typedef
struct  _NODE
{
   struct _Lex* Rez;
   struct _Lex* ThisV;
   struct _NODE *Left;
   struct _NODE *Right;
}* NODE;


         bool LastLexIsPrev;
         int Regim;
         char Buffer[LONG_MAX];
         int  LastRezult;
         long buff_pos;
         long limit_pos;
         int Prev_Buff;
         bool Prev_buff;
         Lex  LastLex;



bool Get_Buf()//+
{
   if (buff_pos==limit_pos)
   {
      cout<<"#";
      char temp[INT_MAX];
      cin.get(temp,INT_MAX);
      Buffer[1]=Buffer[buff_pos];
      long i=0;
      long tt = sizeof(temp);
      while(i<tt)
      {
         if(temp[i]==' '){i++; continue;}
         Buffer[i+2] = temp[i];
         i++;

      }
      limit_pos=i+2;
   }

   buff_pos++;
    return 1;

}




bool StartCalc();

void Calculator()
{

              buff_pos =0;
           limit_pos=0;
         Prev_Buff=0;
      Prev_buff=0;

        Regim = 0;
      cout<<"constructor()"<<endl;
      /*36145*/
      string a;
      reg:
      cout<<"Enter Mode: Normal,Lint,Debug."<<endl;

      {cin>>a;
      if(a=="Normal") Regim = 0;
      else if( a=="Lint") Regim =1;
      else if (a=="Debug")Regim=2;
      else{cout<<"Regim incorect"<<endl; goto reg;}
      }

      /*1456*/


          buff_pos=0;
          LastRezult=0;

          LastLexIsPrev=false;
          cout<<"LastLexIsPrev = "<<LastLexIsPrev<<endl;
          LastLex= NULL;
          Get_Buf();
        StartCalc();

}



  //   bool SetS(Str &a){};

     Lex NextLex();

     bool PrevLex();

     bool If_Icmd();

     bool If_Comment();

     bool Get_Buf();

     Lex E();

     Lex S();

     Lex M();

     Lex A();

     bool isplus(Lex);
     bool ismnos(Lex);
     bool ispow(Lex);
     bool isleft(Lex);
     bool isright(Lex);

     Lex NewNe(){  cout<<"New Ne()"<<endl;
          Lex T=new _Lex;
          T->isOp=1;
          T->V= 0;
         return T;
         };

     Lex NewNe(char a){
        cout<<endl<<"New Ne( "<<(char)a<<" )"<<endl;
        Lex T=new _Lex;
             T->isOp=1;T->V='a';return T;};


     Lex Oper(Lex,Lex,Lex);




     bool Ne(Lex T){return (((T->isOp)==1)&&((T->V)==0));}

     bool Is_TInt(Lex);

     void Help(){cout<<"help is coming...";}

     void Exit(){exit(1);};

     char InBuff()
     {

        if(Prev_buff==1){Prev_buff=0; return Prev_Buff;}
        cout<<"inbuff = "<<Buffer[buff_pos]; return (char)Buffer[buff_pos];
        };






bool Is_TInt(Lex T)//+
{
   bool rez =0;

      cout<<"IsInt?"<<endl;

      system("pause");

      cout<<"read simvol"<<(char)InBuff();

      T->V =0;

      while(InBuff()=='0')T->isOp=0; Get_Buf();

      int size =0;

    while((InBuff()>='0')&&(InBuff()<='9'))
    {
       size++;
       rez = 1;
            T->isOp=0;
      T->V=(T->V)*10 + (InBuff()-'0')%10;
      Get_Buf();
      }
   cout<<endl<<"is namber =   "<<T->V<<endl;


    return rez;
}

bool If_Icmd()//+
{
cout<<"Is_Icmd?"<<endl;
    system("pause");
             if (InBuff()=='h')
               { Get_Buf();
                  if (InBuff()=='e')
                    { Get_Buf();;
                        if (InBuff()=='l')
                           { Get_Buf();;
                             if (InBuff()=='p')
                                { Get_Buf();;Help();return 1;}
                           }
                     }
               }
               if (InBuff()=='e')
               { Get_Buf();;
                  if (InBuff()=='x')
                    { Get_Buf();
                        if (InBuff()=='i')
                           { Get_Buf();;
                             if (InBuff()=='t')
                                {Exit();return 1;}
                           }
                     }

               }
                if (InBuff()=='q')
               { Get_Buf();;
                  if (InBuff()=='u')
                    { Get_Buf();;
                        if (InBuff()=='i')
                           { Get_Buf();;
                             if (InBuff()=='t')
                                {cout<<"Last rezult==  "<<(LastLex->isOp==0?LastLex->V:(char)LastLex->V)<<endl;system("pause"); Exit(); return 1;}
                           }
                     }
               }

         return 0;
}



bool If_Comment()//+
{
               cout<<"Is Comment?"<<endl;
    system("pause");
             if (InBuff()=='/')
               { Get_Buf();
                  if (InBuff()=='*')
                    {
                      while(1)
                      {
                        Get_Buf();
                        if(InBuff()== '*')
                         { Get_Buf();
                            if (InBuff()== '/')
                                { Get_Buf();  return 1;}
                         }
                      }
                    }
                  else if (InBuff()=='/')
                          { Get_Buf();
                            while(InBuff()!='\n')Get_Buf();
                            return 1;
                          }
                }
             cout<<"is no comentar  "<<endl;
         return 0;
}

Lex NextLex()//+
{
    cout<<"generate Next Lex"<<endl;
    system("pause");


if (LastLexIsPrev==1){cout<<"return Last Lex"<<endl;system("pause"); LastLexIsPrev=0;return LastLex;}
else
   {
       Lex R;
       R= new _Lex;

     R->V=0;
     R->isOp=0;

     cout<<"LastLex == NULL;"<<endl;

     system("pause");

      int gopa;
         do
           {
            gopa=0;
   If_Icmd();

      If_Comment();
if ((InBuff()==';')||(InBuff()=='\n')||(InBuff()=='\0')||(InBuff()==',')||(InBuff()=='.')){ Get_Buf();R->isOp=1;R->V=';';break;}
else if(InBuff() == '+'){ Get_Buf();cout<<" + "<<endl;R->isOp = 1;R->V = '+';}
else if(InBuff() == '-'){ Get_Buf();cout<<" - "<<endl;R->isOp = 1;R->V = '-';}
else if(InBuff() == '%'){ Get_Buf();cout<<" % "<<endl;R->isOp = 1;R->V = '%';}
else if(InBuff() == '('){ Get_Buf();cout<<" ( "<<endl;R->isOp = 1;R->V = '(';}
else if(InBuff() == ')'){ Get_Buf();cout<<" ) "<<endl;R->isOp = 1;R->V = ')';}
else if(InBuff() == '/'){ Get_Buf();cout<<" / "<<endl;R->isOp = 1;R->V = '/';}
else if(InBuff() == '^'){ Get_Buf();cout<<" ^ "<<endl;R->isOp = 1;R->V = '^';}
else if(InBuff() == '*'){ Get_Buf();
                                  if(InBuff() == '*'){ Get_Buf();; cout<<" ^ "<<endl; R->isOp=1;R->V='^';}
                                  else {cout<<" * "<<endl;R->isOp=1;R->V='*';Prev_Buff=InBuff(); Prev_buff =1;}
                                 }
else if(Is_TInt(R)==1){R->isOp=0;cout<<" is realy int "<<endl;}
else {gopa=1;Get_Buf();cout<<" is musor "<<endl;}

          cout<<"gopa="<<gopa<<endl;
         }while(gopa==1);

      if(R->isOp==0)

           {cout<<"Next Lex()=  "<<R->V<<endl;}

      else {cout<<"Next Lex()=  "<<(char)R->V<<endl;}

        LastLex=R;

         return R;
     }


}

bool StartCalc()//+
{
  Lex T;
  cout<<"Start Calc..."<<endl<<endl;
  system("pause");

while(1)
{
     cout<<"New Expiriens"<<endl;
   T=E();
   if(T==NULL)cout<<"\nERROR\n";
   else
   {
   if(T->isOp==1){ cout<<"reaultat******=====\n 0 \n ========*****========="<<endl;NextLex();continue;}

   LastRezult = T->V;

   cout<<endl<<"reaultat******====="<<endl<<T->V<<endl<<"========*****========="<<endl;

   NextLex();

   }

}


}
Lex E()//+
{
   cout<<"Start E()"<<endl;
   system("pause");
   Lex ET,ER,EL;

   ER = S();

   EL = NextLex();

   while(isplus(EL))
   {
                ET=S();
                ER=Oper(ER,ET,EL);
                EL=NextLex();
    }
    PrevLex();
      cout<<"End E()"<<endl;
    system("pause");
    return ER;

}

Lex S()//+
{
     cout<<"Start S()..."<<endl;
     system("pause");
    Lex SR,SL,ST;

    SR=M();

    SL=NextLex();

    while(ismnos(SL))
    {
                      ST=M();

                SR=Oper(SR,ST,SL);

                SL=NextLex();
    }
    PrevLex();
      cout<<"End S()"<<endl;
    system("pause");
    return SR;

}

Lex M()//+
{
    cout<<"Start M()"<<endl;
       system("pause");

    Lex MR,ML;
    MR=A();
    ML=NextLex();
    if(ispow(ML))
    {
               if(Ne(ML)) return M();
               else MR=Oper(MR,M(),ML);
      }
      else PrevLex();
   cout<<"End M()"<<endl;
    system("pause");

      return MR;

}

Lex A()//+
{
    cout<<"Start A()"<<endl;
       system("pause");

    Lex AR,AE,AT;
       AR=NextLex();

    if(isleft(AR))
    {
                 AE=E();
                  AT=NextLex();
               if(isright(AT))
                  {AR=Oper(AE,AT,AR);
                 }
             else {
                     AR=Oper(AE,AE,NewNe(')'));
                      }
      }
      else if(AR->isOp==0)cout<<endl<<"is INT = "<<AR->V<<endl;
     else{AR=NewNe();PrevLex();}
     cout<<"End A()"<<endl;
    system("pause");
     return AR;

}

bool isplus(Lex T)//+
{
    cout<<"is+ ?"<<endl;
    system("pause");
    bool t=(T->isOp==1)&&((T->V=='+')||(T->V=='-'));
    if (t) cout<<"is realy +"<<endl;
    else cout<<"is not +"<<endl;
    return t;
}

bool ismnos(Lex T)//+
{
    cout<<"is* ?"<<endl;
    system("pause");
    bool t= (T->isOp)&&((T->V=='*')||(T->V=='/')||(T->V=='%'));

          if (t) cout<<"is realy *"<<endl;
    else cout<<"is not *"<<endl;
     return t;
}

bool ispow(Lex T)//+
{
    cout<<"is^ ?"<<endl;
    system("pause");
    bool t=(T->isOp)&&(T->V=='^');
          if (t) cout<<"is realy ^"<<endl;
    else cout<<"is not ^"<<endl;;
     return t;
}
bool isleft(Lex T)//+
{
    cout<<"is '(' ?"<<endl;
    system("pause");
bool t;
    if ((T->isOp)&&(T->V==(int)'('))
   {t=1; cout<<"is realy '('"<<endl;}

    else {t=0;cout<<"is not '('"<<endl;}


    return t;
}
bool isright(Lex T)//+
{
      cout<<"is ')'  ?"<<endl;
    system("pause");
bool t;
    if ((T->isOp)&&(T->V==(int)')'))
   {t=1; cout<<"is realy ')'"<<endl;}

    else {t=0;cout<<"is not ')'"<<endl;}


    return t;
}
Lex Oper(Lex L,Lex R,Lex OP)//+
{
    cout<<"Calculte Operation"<<endl;
   if(OP->isOp==0) cout<<"Hrenovo.. shos naputav z operatciami"<<endl;     system("pause");
   Lex Rez = new _Lex;
   Rez->isOp =0;
   if(Ne(L)&&Ne(R)){Rez->isOp=1;Rez->V=0;}
   else
     if(Ne(L)){Rez=L;}
    else
     if(Ne(R)){Rez=R;}

    else

                        if(OP->V=='+') Rez->V=L->V + R->V;
                       else
                        if(OP->V=='-') Rez->V=L->V - R->V;
                       else
                        if(OP->V=='*') Rez->V=L->V * R->V;
                       else
                        if(OP->V=='/')
                           if(R->V==0){return R;}
                          else {Rez->V=L->V / R->V;}
                       else
                        if(OP->V=='%') Rez->V=L->V % R->V;
                       else
                        if(OP->V=='^'){
                           if(R->V<0) return L;
                            Rez->V=(long long)pow((double)L->V,(double)R->V);
                        }



      else {cout<<"PPc Musor"<<endl;Rez->isOp=1;Rez->V=0;}
        cout<<"End Oper()"<<endl;
    system("pause");

      return Rez;

}
bool PrevLex()//+-
{
  cout<<"prevlex()"<<endl;
  system("pause");
  LastLexIsPrev=1;
  return 1;
}

int main()
{
     cout<<"im hear"<<endl;
       system("pause");

       Calculator();

       system("pause");
       return 0;

}


Оно компилюется но даже надпись "im hear" невыдает.

 
 
 
 
Сообщение18.03.2009, 11:27 
У меня не "компилюется", говорит
Код:
test.cpp: In function 'bool Get_Buf()':
test.cpp:48: error: total size of local objects too large


Добавлено спустя 2 минуты 16 секунд:

Заменил там INT_MAX на 100, скомпилилось, запустилось, и тут же сказало Killed. Думаю, Вы переборщили с выделением памяти где-то.

Добавлено спустя 1 минуту 49 секунд:

Вы хорошо себе представляете, что такое LONG_MAX байтов? (Глобальная переменная Buffer)

Добавлено спустя 1 минуту 23 секунды:

На моей платформе это 2гб памяти. Разумеется, линуксовое ядро такую программу убивает без предупреждения.

 
 
 
 
Сообщение18.03.2009, 20:37 
хм, ну переменная LONG_MAX описана в моей среде как 2147483647
Странно но когда обявил как SHRT_MAX то все заработало. Странно...

Добавлено спустя 4 минуты 37 секунд:

зато теперь оно начало вылетать вовремя работы. После любого ввода.

Добавлено спустя 5 минут 34 секунды:

*исправил , теперь оно зацыкливает алгоритм обработки, буду удосконаливать.

 
 
 
 
Сообщение21.03.2009, 14:06 
Nerazumovskiy в сообщении #196423 писал(а):
хм, ну переменная LONG_MAX описана в моей среде как 2147483647
Ну это и есть два гига. Собственно, поэтому и ограничен максимальный размер памяти на 32-битных платформах - условно говоря, чтобы адрес в long умещался.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group