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

Đề tài: Sửa giúp code Tìm BCNN của dãy số

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

    Mặc định Sửa giúp code Tìm BCNN của dãy số

    Ví dụ mình lấy dãy số là 123, 456, 980
    thì kết quả là -7000, kết quả đúng phải là 4580520 thì phải. Mong mọi người giúp cho
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <math.h>
    4. #include <process.h>
    5.  
    6. int menu()
    7. {
    8.   int c;
    9.   printf("\n----------- Menu ----------\n");
    10.   printf("\n1. Liet ke cac so hoan thien nho hon hoac bang n");
    11.   printf("\n2. Liet ke cac so nguyen to nho hon hoac bang n");
    12.   printf("\n3. Tim bo so chung nho nhat cua n so");
    13.   printf("\n0. Thoat");
    14.   printf("\n---------------------------");
    15.   printf("\nBan cho cong viec: ");
    16.   do {
    17.      c = getch();
    18.   }  while ((c>'3')||(c<'0'));
    19.   putc(c, stdout);
    20.   return c-'0';
    21. }
    22. int ktnt(int n) {
    23.    int k;
    24.    for (k=2; k<=sqrt(n); k++)
    25.       if (n%k==0) return(0);
    26.    return(1);
    27. }
    28. int ht(int n)
    29. {
    30.    int i, j=0;
    31.    for (i=1; i<=(n/2); i++)
    32.       if (n%i == 0)
    33.      j = j+i;
    34.    if (j==n) return(1);
    35.    else  return (0);
    36.    }
    37. int ucln(int a, int b)
    38. {
    39.     return (b==0)?a: ucln(b,(a%b));
    40.     }
    41. unsigned long bcnn(int b, int d)
    42. {
    43.     return (b/ucln(b,d)*d);
    44.     }
    45. void cacsohoanthien(int n)
    46. {
    47.     int i;
    48.     printf("\nNhap vao n = "); scanf("%d",&n);
    49.     for (i=6; i<=n; i++)
    50.     if (ht(i)) printf("%5d",i);
    51.     }
    52. void cacsonguyento(int n)
    53. {
    54.     int i;
    55.     printf("\nNhap vao n = "); scanf("%d",&n);
    56.     for (i=2; i<=n; i++)
    57.     if (ktnt(i)) printf("%5d",i);
    58.     }
    59. unsigned long bcnn_dayso(int n)
    60. {
    61.     int tg, i;
    62.     unsigned long  m=1;
    63.     printf("\nNhap vao n = "); scanf("%d",&n);
    64.     for (i=1; i<=n; i++)
    65.     {
    66.     printf("\na[%d] = ",i); scanf("%d",&tg);
    67.     m=bcnn(m,tg);
    68.     }
    69.     return m;
    70.     }
    71. void main()
    72. {
    73.     int n, chon;
    74.     do {
    75.        clrscr();
    76.        chon=menu();
    77.  
    78.        switch (chon)
    79.        {
    80.       case 0 : exit(0);
    81.       case 1 : cacsohoanthien(n);  break;
    82.       case 2 : cacsonguyento(n);  break;
    83.       case 3 : printf("\n bcnn = %ld",bcnn_dayso(n));     break;
    84.       }
    85.       getch();
    86.     }  while (1);
    87. }

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

    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <process.h>

    int menu()
    {
      
    int c;
      
    printf("\n----------- Menu ----------\n");
      
    printf("\n1. Liet ke cac so hoan thien nho hon hoac bang n");
      
    printf("\n2. Liet ke cac so nguyen to nho hon hoac bang n");
      
    printf("\n3. Tim bo so chung nho nhat cua n so");
      
    printf("\n0. Thoat");
      
    printf("\n---------------------------");
      
    printf("\nBan cho cong viec: ");
      do {
         
    getch();
      }  while ((
    c>'3')||(c<'0'));
      
    putc(cstdout);
      return 
    c-'0';
    }
    int ktnt(int n) {
       
    int k;
       for (
    k=2k<=sqrt(n); k++)
          if (
    n%k==0) return(0);
       return(
    1);
    }
    int ht(int n)
    {
       
    int ij=0;
       for (
    i=1i<=(n/2); i++)
          if (
    n%== 0)
         
    j+i;
       if (
    j==n) return(1);
       else  return (
    0);
       }
    unsigned long ucln(unsigned long a,unsigned long  b)
    {
       
    unsigned long r;
       
    r=a%b;
        while (
    r!=0)
         {
           
    a=b;
           
    b=r;
           
    r=a%b;
         }
        return 
    b;
        }
    void cacsohoanthien(int n)
    {
        
    int i;
        
    printf("\nNhap vao n = "); scanf("%d",&n);
        for (
    i=6i<=ni++)
        if (
    ht(i)) printf("%5d",i);
        }
    void cacsonguyento(int n)
    {
        
    int i;
        
    printf("\nNhap vao n = "); scanf("%d",&n);
        for (
    i=2i<=ni++)
        if (
    ktnt(i)) printf("%5d",i);
        }
    unsigned long bcnn_dayso(int n)
    {
        
    int i;
        
    unsigned long  m=1tg;
        
    printf("\nNhap vao n = "); scanf("%d",&n);
        for (
    i=1i<=ni++)
        {
        
    printf("\na[%d] = ",i); scanf("%ld",&tg);

        
    m=m*tg/ucln(m,tg);
        }
        return 
    m;
        }
    void main()
    {
        
    int nchon;
        do {
           
    clrscr();
           
    chon=menu();

           switch (
    chon)
           {
          case 
    : exit(0);
          case 
    cacsohoanthien(n);  break;
          case 
    cacsonguyento(n);  break;
          case 
    printf("\n bcnn = %ld",bcnn_dayso(n));     break;
          }
          
    getch();
        }  while (
    1);

    đây là code hoàn chỉnh.
    bạn mắc lỗi ở đây là miền giá trị của các kiểu dữ liệu.
    thuật toán thì hoàn toàn đúng.để dễ nhìn và dễ theo dõi mình đã thay thuật toán UCLN của bạn
    trong thuật toán tìm UCLN của bạn gặp 1 vấn đề đó là:khi bạn cho DL vào vượt quá kích thước kiểu INT thì ngay lập tức gá trị của nó sẽ bị thay đổi= giá trị đưa vào - 32768.do vậy sẽ thấy bị âm.
    bạn hãy chú ý hơn bằng cách hãy thay kiểu giá trị ở
    PHP Code:
    int ucln(int aint b)
    {
        return (
    b==0)?aucln(b,(a%b));
        }
    unsigned long bcnn(int bint d)
    {
        return (
    b/ucln(b,d)*d);
        } 
    sang kiểu unsigned long. chúc bạn thành công và chú ý về miền giá trị nhé
    (1 trong 3 lỗi kinh khủng nhất trong lập trình:Lỗi khi chạy chương trình
    Code:
    +lỗi cú pháp (dễ tìm thấy và ít nguy hiểm)
    +Lỗi thuật toán (nguy hiểm hơn cái trên, nhưng có thể tìm ra đc)
    +lỗi khi chạy chương trình (cái này khốn nạn nhất vì đúng thuật toán mà chương trình vẫn chạy sai)
    )
    Đã được chỉnh sửa lần cuối bởi xuanhung_cntt : 17-03-2009 lúc 05:11 PM.

  3. #3
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Thanks nhiều nhé đã hiểu và tự sửa được rồi
    m=m*tg/ucln(m,tg);
    cái này tui chia trước rùi nhân sau.

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

  1. Tìm ƯCLN & BCNN của số tự nhiên
    Gửi bởi vanhan611 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 26
    Bài viết cuối: 11-10-2012, 11:52 PM
  2. Bài tập C Tìm UCLN và BCNN của n số nguyên dương.
    Gửi bởi conrongchautien trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 24-05-2011, 01:27 PM
  3. Kỹ thuật C++ Tính BCNN rồi tìm UCLN như thế nào???
    Gửi bởi BlackDiam0nd trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 21-12-2010, 08:05 AM
  4. Code quản lý sinh viên bằng danh sách lối vòng. Giúp mình thay đổi code kế thừa?
    Gửi bởi caocanha trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 04-05-2009, 03:39 PM
  5. Tìm BCNN bằng đệ quy ?
    Gửi bởi tun_tun trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 21-04-2008, 12:10 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