Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Sự khác nhau giữa 2 chuơng trình biên dịch Turbo C++ 3.0 và Dev-C là gì?

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    25

    Mặc định Sự khác nhau giữa 2 chuơng trình biên dịch Turbo C++ 3.0 và Dev-C là gì?

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. int i,j;
    5. void nhap(int *n,int *a)
    6. {
    7.      printf("\nNhap day thu %d: ",i);
    8.      for(j=1;j<=*n;j++)
    9.      {
    10.      printf("\n        Nhap so thu %d cua day %d: ",j,i);
    11.      scanf("%d",a+j);
    12.      }
    13. }
    14. void xuat(int *n,int *a)
    15. {
    16.      printf("\nDay thu %d la: ",i);
    17.      for(j=1;j<=*n;j++)printf(" %d ",*(a+j));
    18. }
    19. void main()
    20. {
    21.      int n,*a,*b[100];
    22.      printf("\nNhap so day muon nhap vao: ");
    23.      scanf("%d",&n);
    24.      for(i=1;i<=n;i++)
    25.      {
    26.      printf("\nNhap so phan tu cua day thu %d: ",i);
    27.      scanf("%d",a+i);
    28.      }
    29.      for(i=1;i<=n;i++)nhap(a+i,*(b+i));
    30.      for(i=1;i<=n;i++)xuat(a+i,*(b+i));
    31.      getch();
    32. }

    Cái code trên m viết bằng Turbo C++ ở trường thì chạy được còn về nhà mình viết trên Dev-C++ thì lại xảy ra lỗi trong quá trình chạy. cho m hỏi tại sao lại vậy? sự khác nhau giữa 2 chương trình biên dịch này là gì?

  2. #2
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Bạn phải nói lỗi là lỗi gì mới được chứ, nói chung chung thế ai biết được ?

    Về câu hỏi tiêu đề thì thế này:
    - Không có trình biên dịch nào tên là Dev-C, nó chỉ là một cái IDE, có đi kèm trình biên dịch gcc 3.4
    - Trong các chuẩn C hiện nay thì không có file header nào tên là <conio.h>, cũng như không có cái nào chấp nhận hàm main() trả về void, cho nên nhiều khả năng là lỗi vì cái này,
    - Sở dĩ BC có thể biên dịch được là bởi vì nó đi kèm file header conio.h và nó chấp nhận khai báo kiểu cũ void main().

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    25

    Bạn có thể sửa code giúp m đc không? m muốn nhập vào n dãy, mỗi dãy có 1 số lượng phần tử khác nhau và nhập các phần tử của dãy đó. V/dụ: nhập vào 2 dãy, dãy 1 có 2 phần tử, dãy 2 có 3 phần tử; các phần tử của dãy 1 là {1,2}, các phần tử của dãy 2 là {3,4,5}.
    Code trên của m chạy đến đây thì lỗi.
    C Code:
    1. printf("\nNhap so phan tu cua day thu %d: ",i);
    2. scanf("%d",a+i);
    m đã thử cấp phát bộ nhớ cho con trỏ theo code sau:
    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <conio.h>
    4.  
    5. int i,j;
    6. void nhap(int *n,int *a)
    7. {
    8.      a=(int*)malloc(sizeof(int)*100);
    9.      printf("\nNhap day thu %d: ",i);
    10.      for(j=1;j<=*n;j++)
    11.      {
    12.      printf("\n        Nhap so thu %d cua day %d: ",j,i);
    13.      scanf("%d",a+j);
    14.      }
    15. }
    16. void xuat(int *n,int *a)
    17. {
    18.      a=(int*)malloc(sizeof(int)*100);
    19.      printf("\nDay thu %d la: ",i);
    20.      for(j=1;j<=*n;j++)printf(" %d ",*(a+j));
    21. }
    22. int main()
    23. {
    24.      int n,*a,*b[100];
    25.      printf("\nNhap so day muon nhap vao: ");
    26.      scanf("%d",&n);
    27.      a=(int*)malloc(sizeof(int)*100);
    28.      for(i=1;i<=n;i++)
    29.      {
    30.      printf("\nNhap so phan tu cua day thu %d: ",i);
    31.      scanf("%d",a+i);
    32.      }
    33.      for(i=1;i<=n;i++)nhap(a+i,*(b+i));
    34.      for(i=1;i<=n;i++)xuat(a+i,*(b+i));
    35.      getch();
    36. }
    nhưng vẫn xảy ra lỗi tại tại hàm xuat
    C Code:
    1. printf("\nDay thu %d la: ",i);
    2. for(j=1;j<=*n;j++)printf(" %d ",*(a+j));
    Bạn tìm và sửa lỗi giúp m vs. cái code đầu tiên m viết trên turbo C++ 3.0 chạy ngon lành trong khi về nhà viết trên Dev-C++ không chạy được mới khổ chứ @@. Thank bạn trước nha

  4. #4
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Vừa mới xem lại code thứ nhất, thấy ngạc nhiên là vì sao nó vẫn chạy được trong khi a không hề được cấp phát bộ nhớ ? Code sai rõ ràng, việc chạy được chỉ là do may mắn, không nên dựa vào đó.

    Ở code thứ 2, không hiểu cứ mỗi lần gọi hàm (main, xuất, nhập) lại xin cấp phát bộ nhớ 1 lần để làm gì ?

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    25

    đuơng nhiên là m cũng thấy lạ, chính vì thế nên m mới muốn biết giữa 2 chuơng trình khác nhau ở điểm j mà TC không cần cấp phát bộ nhớ mà nó vẫn chạy.

    ở code thứ 2, xin cấp phát bộ nhớ ở hàm main là để lưu số phần tử của riêng mỗi dãy trong n dãy muốn nhập vào( vd nếu là theo kiểu mảng thì dãy 1 có 3 phần tử - a[1]=3, dãy 2 có 5 phần tử - a[2]=5, dãy 3 có 2 phần tử - a[3]=2...). còn cấp phát trên hàm nhap là để lưu các phần tử của từng dãy (khó nói quá @@). nói chung đó chỉ là ý tưởng của m thôi.

    p/s: còn ở chỗ hàm xuat có lệnh xin cấp phát bộ nhớ là m nhầm, có lẽ do copy dòng đó từ hàm main lên nên không để ý, copy hết vào. nếu bỏ dong cấp phát trong hàm xuat đó đi thì chương trình sẽ bị lỗi.(có dòng đấy thì nó in giá trị linh tinh ra thôi :p). hy vọng bạn sửa code hoàn chỉnh hoặc tự viết code theo ý tưởng của b giúp m vs. Thank's

    Đề bài là: nhập vào các phần tử cho n dãy số. trong đó, mỗi dãy có số phần tử tùy chọn(dãy 1 có m phần tử, dãy 2 có p phần tử, dãy 3 có q phần tử....)

  6. #6
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    Mặc định Sự khác nhau giữa 2 chuơng trình biên dịch Turbo C++ 3.0 và Dev-C là gì?

    ý tưởng thì cũng đc nhưng câu lệnh thì không đc, mình sửa luôn thêo ý tưởng của bạn nhé
    C++ Code:
    1. //hd13.viet bang ngon ngu c  - trinh bien dich DEV C++
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4. #include <conio.h>
    5.  
    6. int *b[100];
    7. void nhap(int n)
    8. {
    9.      b[n]=(int*)malloc(sizeof(int)*100);
    10.      printf("\nNhap day thu %d: ",n);
    11.      for(int j=0;j<n;j++)
    12.      {
    13.      printf("\n        Nhap so thu %d cua day %d: ",j,n);
    14.      scanf("%d",&b[n][j]);
    15.      }
    16. }
    17. void xuat(int n)
    18. {
    19.      
    20.      printf("\nDay thu %d la: ",n);
    21.      for(int j=0;j<n;j++)printf(" %d ",b[n][j]);
    22. }
    23. int main()
    24. {
    25.      int i,j;
    26.      int n,*a;
    27.      printf("\nNhap so day muon nhap vao: ");
    28.      scanf("%d",&n);
    29.      a=(int*)malloc(sizeof(int)*100);
    30.      for(i=0;i<n;i++)
    31.      {
    32.      printf("\nNhap so phan tu cua day thu %d: ",i);
    33.      scanf("%d",&a[i]);
    34.      }
    35.      for(i=0;i<n;i++)nhap(a[i]);
    36.      for(i=0;i<n;i++)xuat(a[i]);
    37.      getch();
    38.      return 0;
    39. }

  7. #7
    Ngày gia nhập
    03 2012
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi scopion93 Xem bài viết
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. int i,j;
    5. void nhap(int *n,int *a)
    6. {
    7.      printf("\nNhap day thu %d: ",i);
    8.      for(j=1;j<=*n;j++)
    9.      {
    10.      printf("\n        Nhap so thu %d cua day %d: ",j,i);
    11.      scanf("%d",a+j);
    12.      }
    13. }
    14. void xuat(int *n,int *a)
    15. {
    16.      printf("\nDay thu %d la: ",i);
    17.      for(j=1;j<=*n;j++)printf(" %d ",*(a+j));
    18. }
    19. void main()
    20. {
    21.      int n,*a,*b[100];
    22.      printf("\nNhap so day muon nhap vao: ");
    23.      scanf("%d",&n);
    24.      for(i=1;i<=n;i++)
    25.      {
    26.      printf("\nNhap so phan tu cua day thu %d: ",i);
    27.      scanf("%d",a+i);
    28.      }
    29.      for(i=1;i<=n;i++)nhap(a+i,*(b+i));
    30.      for(i=1;i<=n;i++)xuat(a+i,*(b+i));
    31.      getch();
    32. }

    Cái code trên m viết bằng Turbo C++ ở trường thì chạy được còn về nhà mình viết trên Dev-C++ thì lại xảy ra lỗi trong quá trình chạy. cho m hỏi tại sao lại vậy? sự khác nhau giữa 2 chương trình biên dịch này là gì?
    Mình mới học C nhưng nhận thấy một điều là ở DEV-C++ thì hàm void main nó ko chạy thì phải Mình thay bằng int main thì nó lại chạy cũng chẳng hiểu tại sao nữa, mọi người giải thích giùm được ko

  8. #8
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    cách 2:
    C++ Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <conio.h>
    4.  
    5. int i,j;
    6. void nhap(int n,int **a)
    7. {
    8.      *a=(int*)malloc(sizeof(int)*100);
    9.      printf("\nNhap day thu %d: ",i);
    10.      for(j=1;j<=n;j++)
    11.      {
    12.      printf("\n        Nhap so thu %d cua day %d: ",j,i);
    13.      scanf("%d",(*a)+j);
    14.      }
    15. }
    16. void xuat(int n,int *a)
    17. {
    18.      
    19.      printf("\nDay thu %d la: ",i);
    20.      for(j=1;j<=n;j++)printf(" %d ",*(a+j));
    21. }
    22. int main()
    23. {
    24.      int n,*a,*b[100];
    25.      printf("\nNhap so day muon nhap vao: ");
    26.      scanf("%d",&n);
    27.      a=(int*)malloc(sizeof(int)*100);
    28.      for(i=1;i<=n;i++)
    29.      {
    30.      printf("\nNhap so phan tu cua day thu %d: ",i);
    31.      scanf("%d",a+i);
    32.      }
    33.      for(i=1;i<=n;i++)nhap(a[i],b+i);
    34.      for(i=1;i<=n;i++)xuat(a[i],*(b+i));
    35.      getch();
    36.      return 0;
    37. }

    code 1 của bạn thì sai rồi ta không xét, còn vì sao tubor c++ nó vẫn cho phép, thì là vì nó là trình
    biên dịch được viết rất lâu rồi nên nó có sai sót; và kết quả chắc chắn sẽ là rất linh tinh nếu có đúng thì cũng chỉ là "may mắn"
    các trình biên dịch hiện nay thì nó sẽ kiểm tra điều đó vậy nên bạn chua cấp phát thì sẽ không dùng đc
    mình sẽ giả thích rõ hơn vì sao câu lệnh của bạn không thực hiện đc ý tưởng của bạn;
    câu lệnh thứ nhất:
    C++ Code:
    1. void nhap(int *n,int *a)//n không cần thiết là con trỏ nhé
    2. {
    3.      a=(int*)malloc(sizeof(int)*100);
    4.      printf("\nNhap day thu %d: ",i);
    5.      for(j=1;j<=*n;j++)
    6.      {
    7.      printf("\n        Nhap so thu %d cua day %d: ",j,i);
    8.      scanf("%d",a+j);
    9.      }
    10. }
    11.  
    12. for(i=1;i<=n;i++)nhap(a+i,*(b+i));
    13. /*khi gọi tới hàm nhap() thì a=b[i](a,b[i] đều là con trỏ)
    14. vì a nằm trong hàm nhap() nên nó chỉ đc cấp phát bộ nhớ khi hàm đc gọi tới và bộ nhớ sẽ đc giải
    15. phóng khi ra khỏi hàm nhap() nên b[i] chăng có chỗ nào mà trỏ đến:)
    16. nên viêc cấp phát bộ nhớ cho b[i] là không thành công;
    17. vì c đang hoc C nên mình ta sẽ dùng thêo kiểu C dùng con trỏ trỏ tới con trỏ
    18. như đoan code trên;*/
    Câu lệnh thứ 2:
    C++ Code:
    1. void xuat(int *n,int *a)
    2. {
    3.      a=(int*)malloc(sizeof(int)*100);
    4.      printf("\nDay thu %d la: ",i);
    5.      for(j=1;j<=*n;j++)printf(" %d ",*(a+j));
    6. }
    7. for(i=1;i<=n;i++)xuat(a+i,*(b+i));
    8. /*
    9. tại sao hàm này cậu phải khai báo a thì như trên đã nói b[i] vẫn chưa đc cấp phát
    10. nên bắt buộc phải cấp phát lại,:)
    11. cấp phát xong nhưng không có dư liệu mà lại in thì kết qua lung tung:D
    12. */

  9. #9
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    Như mình đã nói vì thằng Turbo C++ cũng đc viết khác lâu rồi nên nó mới chấp nhận viết void main()
    thực chất thì void main() chỉ dùng trong C thôi còn C++ hàm main() chuẩn của nó là: int main()
    các bạn đang học C nhưng dùng trình biên dịch thì hay sử dụng tính năng của C++, hay lưu với đuôi .cpp
    Nếu bạn đổi thành .c thì thằng DEV C++ nó sẽ chấp nhận không báo lỗi mà chỉ cảnh báo thôi

  10. #10
    Ngày gia nhập
    10 2011
    Bài viết
    25

    Thank's nha. h thì m hiểu rồi

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

  1. Lập trình C++ Sự kh 5.0ác nhau giữa C free 5.0 và turbo C++ 3.0
    Gửi bởi thientrang1203 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 09-04-2012, 02:11 PM
  2. Lập trình C Khác nhau giữa Turbo C++ 3.0 và C-Free 4.0
    Gửi bởi b0yanch0j trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 07-12-2011, 03:16 AM
  3. Lập trình C Turbo C++ 3.0 cho DOS và Turbo C++ 4.5 cho WINkhác nhau chăng?
    Gửi bởi ddatduong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 04-05-2010, 11:20 PM
  4. Lỗi khi biên dịch chuơng trình trên VC++
    Gửi bởi labimat trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 10-09-2009, 11:31 PM
  5. hỏi về trình biên dịch turbo c++
    Gửi bởi doxuanduc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 27-10-2008, 09:27 PM

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