Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Chuyển code từ turbo C++ 3.0 sang VC++ không còn chạy nữa?

  1. #1
    Ngày gia nhập
    05 2008
    Bài viết
    23

    Mặc định Chuyển code từ turbo C++ 3.0 sang VC++ không còn chạy nữa?

    Dạo trước mình toàn lập trình trên turbo C++ nay muốn học VC++. Mình làm 1 bài trên turbo C chạy thì đúng nhưng mình copy code sang VC++ 6.0 lẫn VC++ express 2008 thì đều bị báo lỗi. Code là bài tình giá trị biểu thức nhập vào từ bàn phím:

    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    #include<string.h>
    #include<stdlib.h>
    #include<malloc.h>
    
    
    typedef struct stack_toantu    { char *c;
    				 int top;}stack_toantu;
    typedef struct stack_toanhang  { int *x;
    				 int dinh;}stack_toanhang;
    
    //Tao stack rong
    void creat_stack_toantu(stack_toantu *s)
    {
     s->c=NULL;
     s->top=-1;
     }
    void creat_stack_toanhang(stack_toanhang *s)
    {
     s->x=NULL;
     s->dinh=-1;
     }
    
    //Lay ra phan tu o dinh stack
    int pop(stack_toanhang *s)
    {
     int x=s->x[s->dinh];
     s->dinh--;
     s->x=(int*)realloc(s->x,(s->dinh+1)*sizeof(int));
     return x;
     }
    
    char pop(stack_toantu *s)
    {   char x=s->c[s->top];
    	s->top--; s->c= (char*)realloc(s->c,(s->top+1)*sizeof(char));
    	return x;
    }
    
    //Lay gia tri dinh
    int top(stack_toanhang *s)
    {
     return s->x[s->dinh];
     }
    char top(stack_toantu *s)
    {
     return s->c[s->top];
     }
    
    //Them 1 phan tu vao stack
    void push(stack_toanhang *s, int a)
    {
     s->dinh++;
     s->x= (int*)realloc(s->x,(s->dinh+1)*sizeof(int));
     s->x[s->dinh]=a;
     }
    void push(stack_toantu *s, char x)
    {   
      s->top++;
      s->c= (char*)realloc(s->c,(s->top+1)*sizeof(char));
      s->c[s->top]=x;
     }
    
    //Ham tinh luy thua
    int mu(int x, int y)
    {
      int s=1;
      for(int i=1;i<=y;i++) s*=x;
      return s;
     }
    
    //Tinh gia tri cua 2 so
    int cal(int down, int top, char pheptoan)
    { switch(pheptoan) {
    	case '+': return down+top;
    	case '-': return down-top;
    	case 'x': return down*top;
    	case ':': return down/top;
    	case '^': return mu(down,top);
    	case '%': return down%top;
    	default : return 0;
    		    }
    
     }
    
    //Tinh gia tri 2 so o dinh stack
    void tinhgt(stack_toanhang *s,char c)
    { int top=pop(s);
      int down=pop(s);
      int x=cal(down,top,c);
      push(s,x);
     }
    
    //Do uu tien phep toan ngoai stack
    int uutien(char c)
    { switch(c){
    	case'+':
    	case'-': return 1;
    	case'x':
    	case':':
    	case'%': return 2;
    	case'^': return 4;
    	default: return 0;
    	    }
     }
    
    //Do uu tien phep toan trong stack
    int uutientrong(char c)
    { switch(c){
    	case'+':
    	case'-': return 1;
    	case'x':
    	case':':
    	case'%': return 2;
    	case'^':return 3;
    	case'(': return -1;
    	default: return 0;
    	   }
     }
    
    //Kiem tra 1 chu cai co phai la phep toan ko
    int toantu(char c)
    { switch(c) {
    	case'+':
    	case'-':
    	case'x':
    	case':':
    	case'^':
    	case'%': return 1;
    	case'(':
    	case')': return 2;
    	default: return 0;
    	    }
     }
    
    void main()
    { char t[100],*a=NULL;
      int count=-1;
      stack_toantu *s1;
      stack_toanhang *s2;
    clrscr();
    creat_stack_toantu(s1);        //Tao 2 stack rong
    creat_stack_toanhang(s2);
    gets(t);
    //Phan nay la thuat toan
    for(int i=0;i<strlen(t);i++)     
    {
    if(toantu(t[i])==0) { count++;
    		      a=(char*)realloc(a,(count+1)*sizeof(char));
    		      a[count]=t[i];}
    else {
          if(a){ int x=atoi(a);
    	     push(s2,x);
    	     a=NULL;
    	     count=-1;}
          if(toantu(t[i])==1)
    	{ if(s1->top==-1) push(s1,t[i]);
    	  else {
    	       if(uutien(t[i])>uutientrong(top(s1))) push(s1,t[i]);
    	       else
    		{
    		 while(s1->top!=-1&&uutien(t[i])<=uutientrong(top(s1))) tinhgt(s2,pop(s1));
    		 push(s1,t[i]);
    		    }
    	    }
          }
    if(toantu(t[i])==2)
      {  if(t[i]=='(') push(s1,t[i]);
         if(t[i]==')') {
    		    while(top(s1)!='(') tinhgt(s2,pop(s1));
    		    pop(s1);
    		   }
      }
    }
    }
    if(a){ int x=atoi(a);
           push(s2,x);}
    while(s1->top!=-1) tinhgt(s2,pop(s1));
    printf("\n%s=%d",t,pop(s2));
    getch();
    }
    Mình chỉ biết là code trên chạy trên turbo C++ thì đúng còn khi sang VC++ 6.0 báo lỗi hàm clrscr(); mình xóa hàm này đi thì run được nhưng màn hình ko hiện gì hết chỉ hiện mỗi press any key rồi exit. Copy code sang Vc++ 2008 khi debug nó báo lỗi thiếu file MS..dll gì đó inorge thì cũng ra press any key.

    Các bạn có thể ko cần quan tâm đến code nhưng hãy giải thích cho minh liệu có phải là 2 môi trường turbo C++ va VC++ khác nhau nhiều lắm không. Giờ mình muốn chuyển sang VC++ thì cần chú ý gì vì trước nay mình toàn dùng turbo C nên giờ sang VC++ thấy hơi lạ lẫm. Và 2 môi trường VC++ 6.0 va 2008 express có khác nhau không. Nên dùng môi trường nào. Sorry vì hỏi hơi nhiều. Bạn nào giải đáp giùm mình với.

  2. #2
    Ngày gia nhập
    10 2008
    Bài viết
    99

    Bạn đọc bài viết hướng dẫn biên dịch chương trình trên VC ++ 2008 Express của anh R_R xem

    http://forums.congdongcviet.com/showthread.php?t=5331

  3. #3
    Ngày gia nhập
    05 2008
    Bài viết
    23

    Phần đấy mình đã rõ nhưng cái mình quan tâm là file cpp của turbo C vác sang VC++ có run được không, có phải chỉnh sửa nhiều không, mình thấy VC++ có mấy cái using namespace gì gì đó, vậy cấu trúc các lệnh giữa 2 cái có khác nhau nhiều ko. Code nó mà khác nhau nhiều thì từ trước đâm đầu vào turbo hóa ra công cốc nhỉ chỉ được cái thuật toán h lại phải học lại từ đầu

  4. #4
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Oài, đây chính là cái sai lầm của giáo dục toàn vác cái tool lỗi be bét của Borland mang đi giáo dục cho sinh viên trong khi Borland nó bảo nên dùng version mới nhất

    Bài ở trên sửa đúng 3 dòng là chạy pheng pheng trên tất cả các compiler trừ Borland: Dev-C++, C-Free, Visual C++, GCC, Cygwin...

    1. Sửa
    Code:
    void main() => int main(void)
    2. Xóa
    Code:
    clrscr()
    3. Sửa:
    Code:
    getch() => return 0;
    Muốn nó chạy trên Linux thì xóa thêm cái dòng

    Code:
    #include <conio.h>
    Lý do tại sao thì:
    1. Search trong diễn đàn xem mấy bài cũ nào đó tôi viết về sử dụng tiêu chuẩn C quốc tế.
    2. Có thể Google phát cho nó nhanh (C99 wiki)
    None!

  5. #5
    Ngày gia nhập
    05 2008
    Bài viết
    23

    Mình sửa như trên sao luc compile thì báo 0 error nhưng lúc execute thì lại báo 2 lỗi
    Code:
    LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
    Debug/asd.exe : fatal error LNK1120: 1 unresolved externals
    Trường mình năm đầu dạy turbo C vài cái lệnh cơ bản sang năm 2 học cấu trúc dữ liệu thì thầy tang hẳn bài tập lớn ngoài phần giải thuật thì phải thiết kế giao diện với người dùng. Thằng nào cũng ngớ người ra. Có biết tí gì về đồ họa đâu mà làm, ngoài cái giao diện với bàn phím. :(
    Giờ mình biết tuơng đối về C rồi thì liệu chuyển sang VC++ có gặp trở ngại gì ko? Mục tiêu của mình là học C# vậy nên chuyển sang C# luôn hay phải qua VC++ đã.

  6. #6
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Mặc định Chuyển code từ turbo C++ 3.0 sang VC++ không còn chạy nữa?

    Sửa đầy đủ đến mức nó run chính xác đây; còn run đúng hay sai cá nhân tự sửa

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<math.h>
    4. #include<string.h>
    5. #include<stdlib.h>
    6. #include<malloc.h>
    7.  
    8.  
    9. typedef struct stack_toantu    { char *c;
    10.                  int top;}stack_toantu;
    11. typedef struct stack_toanhang  { int *x;
    12.                  int dinh;}stack_toanhang;
    13.  
    14. //Tao stack rong
    15. void creat_stack_toantu(stack_toantu *s)
    16. {
    17.  s->c=NULL;
    18.  s->top=-1;
    19.  }
    20. void creat_stack_toanhang(stack_toanhang *s)
    21. {
    22.  s->x=NULL;
    23.  s->dinh=-1;
    24.  }
    25.  
    26. //Lay ra phan tu o dinh stack
    27. int pop(stack_toanhang *s)
    28. {
    29.  int x=s->x[s->dinh];
    30.  s->dinh--;
    31.  s->x=(int*)realloc(s->x,(s->dinh+1)*sizeof(int));
    32.  return x;
    33.  }
    34.  
    35. char pop(stack_toantu *s)
    36. {   char x=s->c[s->top];
    37.     s->top--; s->c= (char*)realloc(s->c,(s->top+1)*sizeof(char));
    38.     return x;
    39. }
    40.  
    41. //Lay gia tri dinh
    42. int top(stack_toanhang *s)
    43. {
    44.  return s->x[s->dinh];
    45.  }
    46. char top(stack_toantu *s)
    47. {
    48.  return s->c[s->top];
    49.  }
    50.  
    51. //Them 1 phan tu vao stack
    52. void push(stack_toanhang *s, int a)
    53. {
    54.  s->dinh++;
    55.  s->x= (int*)realloc(s->x,(s->dinh+1)*sizeof(int));
    56.  s->x[s->dinh]=a;
    57.  }
    58. void push(stack_toantu *s, char x)
    59. {  
    60.   s->top++;
    61.   s->c= (char*)realloc(s->c,(s->top+1)*sizeof(char));
    62.   s->c[s->top]=x;
    63.  }
    64.  
    65. //Ham tinh luy thua
    66. int mu(int x, int y)
    67. {
    68.   int s=1;
    69.   for(int i=1;i<=y;i++) s*=x;
    70.   return s;
    71.  }
    72.  
    73. //Tinh gia tri cua 2 so
    74. int cal(int down, int top, char pheptoan)
    75. { switch(pheptoan) {
    76.     case '+': return down+top;
    77.     case '-': return down-top;
    78.     case 'x': return down*top;
    79.     case ':': return down/top;
    80.     case '^': return mu(down,top);
    81.     case '%': return down%top;
    82.     default : return 0;
    83.             }
    84.  
    85.  }
    86.  
    87. //Tinh gia tri 2 so o dinh stack
    88. void tinhgt(stack_toanhang *s,char c)
    89. { int top=pop(s);
    90.   int down=pop(s);
    91.   int x=cal(down,top,c);
    92.   push(s,x);
    93.  }
    94.  
    95. //Do uu tien phep toan ngoai stack
    96. int uutien(char c)
    97. { switch(c){
    98.     case'+':
    99.     case'-': return 1;
    100.     case'x':
    101.     case':':
    102.     case'%': return 2;
    103.     case'^': return 4;
    104.     default: return 0;
    105.         }
    106.  }
    107.  
    108. //Do uu tien phep toan trong stack
    109. int uutientrong(char c)
    110. { switch(c){
    111.     case'+':
    112.     case'-': return 1;
    113.     case'x':
    114.     case':':
    115.     case'%': return 2;
    116.     case'^':return 3;
    117.     case'(': return -1;
    118.     default: return 0;
    119.        }
    120.  }
    121.  
    122. //Kiem tra 1 chu cai co phai la phep toan ko
    123. int toantu(char c)
    124. { switch(c) {
    125.     case'+':
    126.     case'-':
    127.     case'x':
    128.     case':':
    129.     case'^':
    130.     case'%': return 1;
    131.     case'(':
    132.     case')': return 2;
    133.     default: return 0;
    134.         }
    135.  }
    136.  
    137. int main()
    138. { char t[100],*a=NULL;
    139.   int count=-1;
    140.   stack_toantu *s1;
    141.   stack_toanhang *s2;
    142.  
    143.     if (( s1 = (stack_toantu *) malloc( sizeof(stack_toantu) ) ) == NULL) {
    144.         printf("ERROR ALLOCATING s1\n");
    145.         exit;
    146.     }
    147.     if (( s2 = (stack_toanhang *) malloc( sizeof(stack_toanhang) ) ) == NULL) {
    148.         printf("ERROR ALLOCATING s2\n");
    149.         exit;
    150.     }
    151.  
    152.  
    153.  
    154. creat_stack_toantu(s1);        //Tao 2 stack rong
    155. creat_stack_toanhang(s2);
    156. gets(t);
    157. //Phan nay la thuat toan
    158. for(int i=0;i<strlen(t);i++)    
    159. {
    160. if(toantu(t[i])==0) { count++;
    161.               a=(char*)realloc(a,(count+1)*sizeof(char));
    162.               a[count]=t[i];}
    163. else {
    164.       if(a){ int x=atoi(a);
    165.          push(s2,x);
    166.          a=NULL;
    167.          count=-1;}
    168.       if(toantu(t[i])==1)
    169.     { if(s1->top==-1) push(s1,t[i]);
    170.       else {
    171.            if(uutien(t[i])>uutientrong(top(s1))) push(s1,t[i]);
    172.            else
    173.         {
    174.          while(s1->top!=-1&&uutien(t[i])<=uutientrong(top(s1))) tinhgt(s2,pop(s1));
    175.          push(s1,t[i]);
    176.             }
    177.         }
    178.       }
    179. if(toantu(t[i])==2)
    180.   {  if(t[i]=='(') push(s1,t[i]);
    181.      if(t[i]==')') {
    182.             while(top(s1)!='(') tinhgt(s2,pop(s1));
    183.             pop(s1);
    184.            }
    185.   }
    186. }
    187. }
    188. if(a){ int x=atoi(a);
    189.        push(s2,x);}
    190. while(s1->top!=-1) tinhgt(s2,pop(s1));
    191. printf("\n%s=%d",t,pop(s2));
    192.  
    193. return 0;
    194. }

    C++ với C# chả có liên quan gì tới nhau. Học luôn chả sao.
    None!

Các đề tài tương tự

  1. Chuyển code sang code ngắn hơn trong LINQ
    Gửi bởi tinhthanhiepsi9x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 14-04-2012, 11:19 AM
  2. Chuyển code Nested Dolls từ C sang code pascal
    Gửi bởi longago trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 04-01-2011, 08:54 AM
  3. Chuyển code kết nối RAS từ c++ sang c#
    Gửi bởi chuotnho123 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 25-07-2009, 09:49 PM
  4. Chuyển code C++ sang code C, giúp mình với?
    Gửi bởi rong3sao trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 03-04-2009, 09:28 AM
  5. code không còn lỗi nhưng ko chạy được
    Gửi bởi Forever Love trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 08-11-2008, 06:57 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn