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

Đề tài: giúp em xem lại bài liệt kê xâu nhị phân !

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

    Mặc định giúp em xem lại bài liệt kê xâu nhị phân !

    nguyên bản của nó là !
    Code:
    #include <stdio.h>
    #include <conio.h>
    int   Stop, count=0;
    void Result(int *B, int n){
    int i;count++;  printf("\n Ket qua %d:",count);
    for(i=1; i<=n;i++) printf("%3d", B[i]);
    }
    void Function1(int *B, int n){
     
    int i = n;while(i>0 && B[i]){  B[i]=0; i--; }
    if(i==0 ) Stop=1; else	B[i]=1;
    }
    void Function2(int *B, int n){
    int i;Stop = 0;
    while (!Stop) { Result(B,n);Function1(B,n);}
    }
    void main(void){
    int  B[]= {0,0,0,0}, n=4;Function2(B,n);
    }
    còn đây là bài em gõ !
    Code:
    #include <stdio.h>
    #include <conio.h>
    int   Stop, count=0;
    void Result(int *B, int n){
    int i;count++;  printf("\n Ket qua %d:",count);
    for(i=1; i<=n;i++) printf("%3d", B[i]);
    }
    void Function1(int *B, int n){
     
    int i = n;while(i>0 && B[i]){  B[i]=0; i--; }
    if(i==0 ) Stop=1; else	B[i]=1;
    }
    void Function2(int *B, int n){
    int i;Stop = 0;
    while (!Stop) { Result(B,n);Function1(B,n);}
    }
    void main(void){
    int  B[]= {0,0,0,0}, n=4;Function2(B,n);
    }
    nhưng cho kết quả thì khác nhau .
    bạn nào biết giải thích giùm nhé !
    Attached Thumbnails Attached Thumbnails hinh1.bmp   hinh2.bmp  

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

    Lần sau bạn viết code cho rõ ràng rồi mang lên hỏi nhé. Viết cẩu thả quá.

    Liệt kê xâu nhị phân thì dùng thuật toán cộng 1 là ổn.

    Trong code của bạn sai những chỗ sau:
    +> Trong hàm Result, vòng for từ 0 chứ không phải từ 1.
    +> Trong Function1 sửa lại gán i = n-1.

    Chạy thì đúng nhưng kết quả hơi thiếu. Bạn xem lại xem.

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

    Trích dẫn Nguyên bản được gửi bởi reaper Xem bài viết
    Lần sau bạn viết code cho rõ ràng rồi mang lên hỏi nhé. Viết cẩu thả quá.

    Liệt kê xâu nhị phân thì dùng thuật toán cộng 1 là ổn.

    Trong code của bạn sai những chỗ sau:
    +> Trong hàm Result, vòng for từ 0 chứ không phải từ 1.
    +> Trong Function1 sửa lại gán i = n-1.

    Chạy thì đúng nhưng kết quả hơi thiếu. Bạn xem lại xem.
    cảm ơn anh rất nhiều !
    có gì em rút kinh nghiệm lần sau !
    cái bài trên là em copy nguyên trong sách ra , còn cái sau em gõ nhưng em so xem so sánh sau đó sửa cho đúng nhưng kết quả vẫn khác nhau !
    ai thấy sự khác biệt giữa 2 chương trình xin chỉ giùm em nhé !
    và cho em hỏi thêm đoạn này nữa :
    Code:
    void Function1(int *B, int n){
     
    int i = n;while(i>0 && B[i]){  B[i]=0; i--; }
    if(i==0 ) Stop=1; else	B[i]=1;
    }
    em không hiểu điều kiện này (i>0 && B[i]) sẽ thực hiện như thế nào !
    ai biết chỉ giùm em nhé !

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    66

    Trong C đều quy ước chung giá trị int với 0 thì là false còn khác 0 thường là 1 thì là true.
    Visual C++ Code:
    1. if (i>0 && B[i]) ...
    Câu lệnh trên cũng như câu lệnh.
    Visual C++ Code:
    1. if (i>0 && B[i]<>0) ...
    Tức là kiểm tra i > 0 và B[i] khác 0.

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

    Trích dẫn Nguyên bản được gửi bởi thienthan Xem bài viết
    Trong C đều quy ước chung giá trị int với 0 thì là false còn khác 0 thường là 1 thì là true.
    Visual C++ Code:
    1. if (i>0 && B[i]) ...
    Câu lệnh trên cũng như câu lệnh.
    Visual C++ Code:
    1. if (i>0 && B[i]<>0) ...
    Tức là kiểm tra i > 0 và B[i] khác 0.
    cảm ơn bạn rất nhiều !
    mình đã tìm ra được lỗi giữa 2 chương trình . nhưng còn hàm Function1
    Code:
    void Function1(int *B, int n){
     
    int i = n;while(i>0 && B[i]){  B[i]=0; i--; }
    if(i==0 ) Stop=1; else	B[i]=1;
    }
    mình vẫn chưa hiểu lắm !
    ai rành có thể giải thích thêm giùm nhé !

  6. #6
    Ngày gia nhập
    02 2008
    Bài viết
    66

    Mặc định giúp em xem lại bài liệt kê xâu nhị phân !

    Visual C++ Code:
    1. void Function1(int *B, int n){
    2.     int i = n;
    3.     while(i>0 && B[i])//chừng nào i > 0 và B[i] khác 0
    4.     {
    5.          B[i]=0;
    6.          i--;
    7.     }
    8.     if(i==0 )
    9.          Stop=1;
    10.     else
    11.          B[i]=1;
    12. }
    Ở đây B là một con trỏ trỏ địa chỉ đầu tiên của mảng.

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

    HTML Code:
    voi n=6 Ket qua 1: 0 0 0 0 0 0 Ket qua 2: 0 0 0 0 0 1 Ket qua 3: 0 0 0 0 0 1 Ket qua 4: 0 0 0 0 1 0 Ket qua 5: 0 0 0 0 1 0 Ket qua 6: 0 0 0 0 1 1 Ket qua 7: 0 0 0 0 1 1 Ket qua 8: 0 0 0 1 0 0 Ket qua 9: 0 0 0 1 0 0 Ket qua 10: 0 0 0 1 0 1 Ket qua 11: 0 0 0 1 0 1 Ket qua 12: 0 0 0 1 1 0 Ket qua 13: 0 0 0 1 1 0 Ket qua 14: 0 0 0 1 1 1 Ket qua 15: 0 0 0 1 1 1 Ket qua 16: 0 0 1 0 0 0 Ket qua 17: 0 0 1 0 0 0 Ket qua 18: 0 0 1 0 0 1 Ket qua 19: 0 0 1 0 0 1 Ket qua 20: 0 0 1 0 1 0 Ket qua 21: 0 0 1 0 1 0 Ket qua 22: 0 0 1 0 1 1 Ket qua 23: 0 0 1 0 1 1 Ket qua 24: 0 0 1 1 0 0 Ket qua 25: 0 0 1 1 0 0 Ket qua 26: 0 0 1 1 0 1 Ket qua 27: 0 0 1 1 0 1 Ket qua 28: 0 0 1 1 1 0 Ket qua 29: 0 0 1 1 1 0 Ket qua 30: 0 0 1 1 1 1 Ket qua 31: 0 0 1 1 1 1 Ket qua 32: 0 1 0 0 0 0 Ket qua 33: 0 1 0 0 0 0 Ket qua 34: 0 1 0 0 0 1 Ket qua 35: 0 1 0 0 0 1 Ket qua 36: 0 1 0 0 1 0 Ket qua 37: 0 1 0 0 1 0 Ket qua 38: 0 1 0 0 1 1 Ket qua 39: 0 1 0 0 1 1 Ket qua 40: 0 1 0 1 0 0 Ket qua 41: 0 1 0 1 0 0 Ket qua 42: 0 1 0 1 0 1 Ket qua 43: 0 1 0 1 0 1 Ket qua 44: 0 1 0 1 1 0 Ket qua 45: 0 1 0 1 1 0 Ket qua 46: 0 1 0 1 1 1 Ket qua 47: 0 1 0 1 1 1 Ket qua 48: 0 1 1 0 0 0 Ket qua 49: 0 1 1 0 0 0 Ket qua 50: 0 1 1 0 0 1 Ket qua 51: 0 1 1 0 0 1 Ket qua 52: 0 1 1 0 1 0 Ket qua 53: 0 1 1 0 1 0 Ket qua 54: 0 1 1 0 1 1 Ket qua 55: 0 1 1 0 1 1 Ket qua 56: 0 1 1 1 0 0 Ket qua 57: 0 1 1 1 0 0 Ket qua 58: 0 1 1 1 0 1 Ket qua 59: 0 1 1 1 0 1 Ket qua 60: 0 1 1 1 1 0 Ket qua 61: 0 1 1 1 1 0 Ket qua 62: 0 1 1 1 1 1 Ket qua 63: 0 1 1 1 1 1
    cho nay co phai sai khong cac pro cho nay sao ko co cac xau bat dau tu 1 vay
    em nghi cai cho (i>0&&b[i])
    chac la i>=0 chu
    giờ say mê bên ai em đổ lỗi anh vô tình

  8. #8
    Ngày gia nhập
    07 2008
    Bài viết
    4

    đây la code:
    C Code:
    1. #include<stdio.h>
    2. #define true 1
    3. #define false 0
    4. #define max 20
    5. int n,b[max],count,stop;
    6. void result()
    7. {
    8.  count++;
    9.  printf("\nhoan vi thu:%d",count);
    10.  for(int i=1;i<=n;i++)
    11.  printf("%3d",b[i]);
    12. }
    13. void generate()
    14. {
    15.  int i;
    16.  i=n;
    17.  while(i>0&&b[i])
    18.     {
    19.         b[i]=0;
    20.         i--;
    21.      }
    22. if(i==0)
    23.  stop=true;
    24. else
    25.  b[i]=1;
    26. }
    27. void main()
    28. {
    29.  printf("nhap n:");
    30.  scanf("%d",&n);
    31.  for(int i=1;i<=n;i++)
    32.     b[i]=0;
    33.  stop=false;
    34.  while(!stop)
    35.   {
    36.     result();
    37.     generate();
    38.    }
    39. }
    chỗ nào không hiểu bạn có thể post lên:
    thuật toán:
    +tìm i đầu tiên từ phải sang trai (i=n,n-1,...1)thỏa b[i]=0
    +gán b[i]=1 và b[j]=0 voi tất cả j>i ta được dãy cần tìm
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 07-03-2009 lúc 12:58 PM.

  9. #9
    Ngày gia nhập
    08 2010
    Bài viết
    3

    Mặc định anh toan07 giải thích cho em đoạn code này với

    Trích dẫn Nguyên bản được gửi bởi toan07 Xem bài viết
    đây la code:
    C Code:
    1. #include<stdio.h>
    2. #define true 1
    3. #define false 0
    4. #define max 20
    5. int n,b[max],count,stop;
    6. void result()
    7. {
    8.  count++;
    9.  printf("\nhoan vi thu:%d",count);
    10.  for(int i=1;i<=n;i++)
    11.  printf("%3d",b[i]);
    12. }
    13. void generate()
    14. {
    15.  int i;
    16.  i=n;
    17.  while(i>0&&b[i])
    18.     {
    19.         b[i]=0;
    20.         i--;
    21.      }
    22. if(i==0)
    23.  stop=true;
    24. else
    25.  b[i]=1;
    26. }
    27. void main()
    28. {
    29.  printf("nhap n:");
    30.  scanf("%d",&n);
    31.  for(int i=1;i<=n;i++)
    32.     b[i]=0;
    33.  stop=false;
    34.  while(!stop)
    35.   {
    36.     result();
    37.     generate();
    38.    }
    39. }
    chỗ nào không hiểu bạn có thể post lên:
    thuật toán:
    +tìm i đầu tiên từ phải sang trai (i=n,n-1,...1)thỏa b[i]=0
    +gán b[i]=1 và b[j]=0 voi tất cả j>i ta được dãy cần tìm
    C Code:
    1. while(i>0&&b[i])
    2.     {
    3.         b[i]=0;
    4.         i--;
    5.      }
    6. if(i==0)
    7.  stop=true;
    8. else
    9.  b[i]=1;

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

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 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