شو المشكلة بهاد الكود !!

المشرف: AbuHammzah

شو المشكلة بهاد الكود !!

مشاركة غير مقروءةبواسطة Karam » الأحد مايو 27, 2012 10:55 pm

هاد كود C (مو ++C) .. ما بعرف ليه عم يعمل Exception @RunTime

CODE: تحديد الكل
#include <stdio.h>

typedef struct Node {
   int value;
   struct Node *next;
}* Stack;

void PUSH(Stack, int);
int POP(Stack);

int main(int argc, char *argv[]) {
   Stack S;
   
   PUSH(S, 1);
   PUSH(S, 2);
   PUSH(S, 3);
   
   printf("%d\n", POP(S));
   printf("%d\n", POP(S));
   printf("%d\n", POP(S));
}

void PUSH(Stack S, int V) {
   Node temp;
   temp.value = V;
   temp.next = NULL;

   if (S == NULL) {
      S = &temp;
   } else {
      temp.next = S;
      S = &temp;
   }
}

int POP(Stack S) {
   if (S != NULL) {
      int V = (*S).value;
      S = (*S).next;
      return V;
   }
}
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: شو المشكلة بهاد الكود !!

مشاركة غير مقروءةبواسطة decoder » الاثنين مايو 28, 2012 10:04 am

ضمن تابع الـ main
Stack S=0;
decoder
عضو جديد
عضو جديد
 
مشاركات: 12
اشترك في: الخميس يناير 12, 2012 11:37 am
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الثانية

Re: شو المشكلة بهاد الكود !!

مشاركة غير مقروءةبواسطة decoder » الاثنين مايو 28, 2012 10:11 am

بس كودك مو زابط شوف

CODE: تحديد الكل
#include <stdio.h>

typedef struct Node {
   int value;
   struct Node *next;
}* Stack;

void PUSH(Stack &, int);
int POP(Stack&);

int main(int argc, char *argv[]) {
   Stack S=0;

   PUSH(S, 1);
   PUSH(S, 2);
   PUSH(S, 3);
   
   printf("%d\n", POP(S));
   printf("%d\n", POP(S));
   printf("%d\n", POP(S));
}

void PUSH(Stack &S, int V) {
   Stack temp=new Node();
   temp->value = V;
   temp->next = NULL;

   if (S == NULL) {
      S = temp;
   } else {
      temp->next = S;
      S = temp;
   }
}

int POP(Stack &S) {
   if (S != NULL) {
      int V = (*S).value;
      S = (*S).next;
      return V;
   }
}

/*
#include"hashtable.h"
//#include"tokenizer.h"
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<sstream>
#include<iterator>
#include<algorithm>
using namespace std;
string text;
vector<string> tokens;
vector<int> token_line;
vector<string> preErrors,CErrors;

struct triple_Res{
   string var;
   int type_id;
   int valid;
   triple_Res(string a,int t,int val):var(a),type_id(t),valid(val)
   {
   }
};

vector<triple_Res> Res;
triple_Res make_triple(string a,int t,int val)
{
   triple_Res tmp( a, t, val);
   return tmp;
}
enum Error_Types{unknown_type=1,empty_var_list,double_decleration,assign_to_constant,unexpected_string_semi_expected,unexpected_eof,token_redefined};
unsigned int hash_fun(const string &a)
{
   int s=0;
   for(int i=0;i<a.size();++i)
      s+=a[i];
   return s%211;
}
hashtable<string,int> H(&hash_fun,211);
int getType_id(string s);
int is_const_tok(string s);
int get_const_type(string s);
void throw_error(int errType,int tok);
string Type_id_toString(int i);

void get_input();
void tokenize();
void preprocess();
void compile();
int main(int argc,char **args)
{
   
   //freopen("e:\\wp7\\a.in","r",stdin);
   get_input();
   

   
   tokenize();
   preprocess();
   if(preErrors.size())
   {
      cout<<1<<"\n";
      std::ostream_iterator<std::string> oit(std::cout,"\n");
//  std::copy(tokens.begin(),tokens.end() ,oit ); // Debug
   std::copy(preErrors.begin(),preErrors.end() ,oit );
   return 0;
   }

   compile();
   if(CErrors.size())
   {
      cout<<1<<"\n";
      std::ostream_iterator<std::string> oit(std::cout,"\n");
//  std::copy(tokens.begin(),tokens.end() ,oit ); // Debug
   std::copy(CErrors.begin(),CErrors.end() ,oit );
   return 0 ;
   }
   cout<<0<<"\n";
   for(int i=0;i<Res.size();++i)
   {
      string valid=(Res[i].valid?"True":"Mismatch");
      if(Res[i].type_id==0)
         valid="-";
      cout<<Res[i].var<<"\t"<<Type_id_toString(Res[i].type_id)<<"\t"<<valid<<endl;
   }
   return 0;
}

void get_input()
{
   char buff[4097]={0};
   int c=fread(buff,1,4096,stdin);
   buff[c]=0;
   while(c>0)
   {
      text.append(buff);
      c=fread(buff,1,4096,stdin);
      buff[c]=0;
   }
}

void tokenize()
{

   /////// preparing to tokenize
   string temp="";
   string boperators=",;:\n";
   size_t p=0,c=0;

   while(p!=string::npos)
   {
      c=text.find_first_of(boperators,p);
      if(c==string::npos)
         break;
      temp.append(text.begin()+p,text.begin()+c);
      temp.append(" ");
      if(text[c]==':' && text[c+1]=='=')
      {
         temp.append(":=");
         c++;
      }
      else
         temp.append(text.begin()+c,text.begin()+c+1);
      temp.append(" ");
      p=c+1;
   }

   text=temp;
   transform(text.begin(), text.end(), text.begin(), tolower);
   /////// Done preparing

   int ln=1,ps;
   tokens.push_back("START TOKENs");
   token_line.push_back(0);
   ps=tokens.size();
   int m_offset=0;
   int m_to=text.find_first_of("\n", m_offset);
   while (m_to!=string::npos)
   {
      
      // construct a stream from the string
      stringstream strstr(text.substr(m_offset, m_to - m_offset));
      
      // use stream iterators to copy the stream to the vector as whitespace separated strings
      istream_iterator<string> it(strstr);
      istream_iterator<string> end;

      tokens.insert(tokens.end(),it, end);
      token_line.insert(token_line.end(),-ps+tokens.size(),ln);
      ps=tokens.size();
      ++ln;

      m_offset=m_to+1;
      m_to=text.find_first_of("\n", m_offset);
   }

   // construct a stream from the string
   std::stringstream strstr(text.substr(m_offset));

   // use stream iterators to copy the stream to the vector as whitespace separated strings
   std::istream_iterator<std::string> it(strstr);
   std::istream_iterator<std::string> end;

   tokens.insert(tokens.end(),it, end);
   token_line.insert(token_line.end(),-ps+tokens.size(),ln);
   
   token_line.push_back(0);
   tokens.push_back("End TOKENs");
   token_line.push_back(0);
   tokens.push_back("End TOKENs");
   token_line.push_back(0);
   tokens.push_back("End TOKENs");

}
string toString(int number)
{
   stringstream ss;//create a stringstream
   ss << number;//add number to the stream
   return ss.str();//return a string with the contents of the stream
}
bool istype(string a)
{
   if(a=="integer" || a=="float")
      return true;
   return false;
}
void preprocess()
{
   int stage=0;
   // main variables
   if(tokens[tokens.size()-4]!="end.")
      preErrors.push_back(string("Syntax error: unexpected end of file the program should end with 'end.' at line:")+toString(token_line[tokens.size()-2]));

   for(int i=0;i<tokens.size()-1;++i)
   {
      if(tokens[i]=="begin")
         stage=2;
      if(stage==1)
      {
         if(tokens[i]!="var" && !istype(tokens[i]) && (tokens[i+1]!="," && tokens[i+1]!=":") && (tokens[i]!="," && tokens[i]!=":"&&tokens[i]!=";"))
         {
            preErrors.push_back(string("Syntax error: unexpected string : '")+tokens[i]+string("' at line:")+toString(token_line[i]));
         }
         if(istype(tokens[i]) && tokens[i+1]!=";")
            preErrors.push_back(string("Syntax error: unexpected string : '")+tokens[i+1]+string("' expecting ';' at line:")+toString(token_line[i+1]));
      }
      if(tokens[i]=="program" && stage>0 )
         preErrors.push_back(string("Syntax error: can't use 'program' block after another block in line:")+toString(token_line[i]));
      if(tokens[i]=="var")
         if(stage>1 )
            preErrors.push_back(string("Syntax error: can't use 'var' block after begin block in line:")+toString(token_line[i]));
         else
            stage=1;

   }
}
void compile()
{
   
   int stage=0;
   string program;
   stack<string> tmpVarl;
   for(int i=0;i<tokens.size()-1;++i)
   {
      if(tokens[i]=="begin")
      {
         stage=2;
         continue;
      }
      if(tokens[i]=="var")
      {
         stage=1;
         continue;
      }   
      if (tokens[i]=="program")
      {
         program=tokens[++i];
         continue;
      }
      if(tokens[i]=="end.")
         break;
      if(stage==1)
      {
         if(tokens[i]=="var")
            continue;
         if(tokens[i]==":")
         {   
            if(tmpVarl.empty())
            {
               throw_error(empty_var_list,i);
               continue;
            }
            if(!istype(tokens[i+1]))
            {   
               throw_error(unknown_type,++i);
               continue;
            }
            while(!tmpVarl.empty())
            {
               if(H.retrieve(tmpVarl.top())!=0)
                  throw_error(double_decleration,i+1);
               else
                  H.insert(tmpVarl.top(),getType_id(tokens[i+1]));
               tmpVarl.pop();
            }
            ++++i;
            continue;
         }
         if(istype(tokens[i]))
            throw_error(token_redefined,i);
         else if(tokens[i]=="," || tokens[i]==";")
            continue;
         else
            tmpVarl.push(tokens[i]);
      }
      else if(stage==2)
      {
         int first_op_type,sec_op_type;
         // main compiling part
         if(is_const_tok(tokens[i]))
         {   
            if(tokens[i+1]==":=")
               throw_error(assign_to_constant,i);
            ++i;
            continue;
         }
         first_op_type=H.retrieve(tokens[i]);
         if(tokens[i+1]==":=")
         {
            if(tokens[i+2]=="End TOKENs")
               throw_error(unexpected_eof,i+1);
            else if(is_const_tok(tokens[i+2]))
               sec_op_type=get_const_type(tokens[i+2]);
            else
               sec_op_type=H.retrieve(tokens[i+2]);

            if(tokens[i+3]!=";")
            {
               throw_error(unexpected_string_semi_expected ,i );
               continue;
            }

            if(first_op_type==sec_op_type)
            {
               Res.push_back(make_triple(tokens[i],first_op_type,1)) ;   
               if(!is_const_tok(tokens[i+2]))
                  Res.push_back(make_triple(tokens[i+2],first_op_type,1)) ;   
            }
            if(first_op_type!=sec_op_type)
            {
               Res.push_back(make_triple(tokens[i],first_op_type,0)) ;      
               if(!is_const_tok(tokens[i+2]))
                  Res.push_back(make_triple(tokens[i+2],sec_op_type,0)) ;   
            }

            i+=3 ;
            continue ;
         }else if(tokens[i+1]==";")
         {
            ++i ;
            continue ;
         }else
         {
            ++i ;
            throw_error(unexpected_string_semi_expected,i) ;
            continue ;
         }


      }else if(stage==0)
      {
         //error
      }

   }
}

void throw_error(int errType,int tok)
{
   
   string a=string("Err:")+toString( errType)+string(" ")+tokens[tok]+string(" line:")+toString( token_line[tok])+string("\n");
   CErrors.push_back(a);
}

int getType_id(string s)
{
   if(s=="integer")
      return 1;
   if(s=="float")
      return 2;
   return -1;
}
string Type_id_toString(int i)
{
   if(i==1)
      return "integer";
   if(i==2)
      return "float";
   
   return "undefined_type";
}
int is_const_tok(string s)
{
   for(int i=0;i<s.size();i++)
      if((!isdigit( s[i])) && s[i]!='.')
      {
         return false;
      }
      return true;
}
int get_const_type(string s)
{
   for(int i=0;i<s.size();i++)
      if( s[i]=='.')
      {
         return 2;
      }
      return 1;
}
*/
decoder
عضو جديد
عضو جديد
 
مشاركات: 12
اشترك في: الخميس يناير 12, 2012 11:37 am
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الثانية

Re: شو المشكلة بهاد الكود !!

مشاركة غير مقروءةبواسطة Karam » الأربعاء مايو 30, 2012 7:58 pm

لا ياعيني :)
CODE: تحديد الكل
Stack S = 0;


هاد pointer to struct .. عم يأشر على NULL = 0 ..

مشي الحال عرفت المشكلة
CODE: تحديد الكل
typedef Stack S = 0;


وفي كم وحدة متلها من عتعتات السي
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: شو المشكلة بهاد الكود !!

مشاركة غير مقروءةبواسطة decoder » السبت يونيو 02, 2012 12:36 pm

أنت بكودك الأساسي ما عم تعطي قيمة ابتدائية 0 أو NULL !!
بعدين كودك كلو أخطاء كبيرة و عتعتات عم تستعمل مؤشر على local بعد ما يخلص عمرو !
شوف هاد يمكن يساعدك http://stackoverflow.com/questions/5908 ... in-a-struc
decoder
عضو جديد
عضو جديد
 
مشاركات: 12
اشترك في: الخميس يناير 12, 2012 11:37 am
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الثانية

Re: شو المشكلة بهاد الكود !!

مشاركة غير مقروءةبواسطة Karam » السبت يونيو 02, 2012 2:19 pm

decoder كتب:أنت بكودك الأساسي ما عم تعطي قيمة ابتدائية 0 أو NULL !!
بعدين كودك كلو أخطاء كبيرة و عتعتات عم تستعمل مؤشر على local بعد ما يخلص عمرو !
شوف هاد يمكن يساعدك http://stackoverflow.com/questions/5908 ... in-a-struc


طيب ماشي .. شكراً لخبرتك الكبيرة فدتني كتير "الله يخليك لأهلك" :)

وبس تعرف تفرق بين C و ++C .. ردلي خبر :wink:
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم


العودة إلى مشكلة وحل

الموجودون الآن

المستخدمون المتصفحون لهذا المنتدى: لا يوجد أعضاء مسجلين متصلين و 1 زائر

cron