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ố 14 kết quả

Đề tài: Vẽ tam giác pascal dùng hàm trên C++???

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

    Angry Vẽ tam giác pascal dùng hàm trên C++???

    b) Viết định nghĩa hàm ve_tgPascal(int h), vẽ tam giac Pascal có chiều cao h.
    Ví dụ h= 4:
    1
    1 1
    1 2 1
    1 3 3 1
    mỗi số tương ứng với công thức của tổ hợp

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

    C Code:
    1. #include <stdio.h>
    2.  
    3. int TinhGiaiThua( int n )
    4. {
    5.     if( 0 == n )   
    6.         return 1;
    7.     return n*TinhGiaiThua( n-1 );
    8. }
    9.  
    10. int TinhToHop( int k, int n )
    11. {
    12.     return TinhGiaiThua( n )/(TinhGiaiThua( k )*TinhGiaiThua( n - k ));
    13. }
    14.  
    15. void VeTgPascal( int h )
    16. {
    17.     int i, j;
    18.    
    19.     for( i = 0; i < h; i++ )
    20.     {
    21.         for( j = 0; j <= i; j++ )
    22.             printf( "%4d", TinhToHop( j, i ) );
    23.         printf( "\n" );
    24.     }
    25. }
    26.  
    27. int main()
    28. {
    29.     int h;
    30.  
    31.     do
    32.     {
    33.         printf( "Nhap do cao tam giac Pascal: " );
    34.         scanf( "%d", &h );
    35.     }
    36.     while( h <= 0 );
    37.    
    38.     printf( "Tam giac Pascal co do cao %d:\n", h );
    39.     VeTgPascal( h );
    40.    
    41.     return 0;
    42. }
    Đã được chỉnh sửa lần cuối bởi nammae : 08-01-2010 lúc 06:07 PM.

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

    Bài này phần tính tổ hợp còn có một cách nữa là dựa vào tính chất C(k,n)+C(k+1,n)=C(k+1,n+1) để tính. Với C(0,n)=C(n,n)=1.
    PHP Code:
    int TinhToHop(int m,int n)
    {
        if ((
    m==n)||(m==0))return 1;
        else return(
    TinhToHop(m,n-1)+TinhToHop(m-1,n-1));

    Đã được chỉnh sửa lần cuối bởi pannaruto : 08-01-2010 lúc 07:15 PM.

  4. #4
    Ngày gia nhập
    09 2009
    Nơi ở
    Hoa sơn tuyệt đỉnh
    Bài viết
    407

    Truy hồi theo cách 2 vòng for để tính tổ hợp nhanh hơn nhiều

    my houses
    my school
    tỐnG lÊ cHâN mAnG kỶ nIệM bUồN cHo AnH...

  5. #5
    Ngày gia nhập
    01 2010
    Nơi ở
    Hai_Duong
    Bài viết
    7

    Mình có code đây bạn thử xem:

    #include <conio.h>>
    #include<stdio.h>
    const int MAX_SIZE = 10;
    void calPascal(int a[][MAX_SIZE], int n);
    void printPascal(int a[][MAX_SIZE], int n);

    int main()
    {
    int a[MAX_SIZE][MAX_SIZE];

    int n;
    printf( "n = ");
    scanf("%i",&n);

    calPascal(a, n);
    printPascal(a, n);

    printf("\n");
    getch();
    return 0;
    }

    void calPascal(int a[][MAX_SIZE], int n)
    {
    for (int i = 0; i <= n; i++) {
    a[i][0] = 1;
    }

    for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= i; j++) {
    a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    }
    }
    }
    void printPascal(int a[][MAX_SIZE], int n)
    {

    for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= i; j++) {
    printf("%5i" ,a[i][j]);
    }


    }
    }

  6. #6
    Ngày gia nhập
    10 2009
    Bài viết
    34

    Mặc định Vẽ tam giác pascal dùng hàm trên C++???

    Mình thấy thuật toán của bạn rất hay, bạn chỉ cần chú ý chỉ số mảng bắt đầu từ 0 và kết thúc tại n-1.
    C Code:
    1. void calPascal(int a[][MAX_SIZE], int n)
    2. {
    3.     for (int i = 0; i < n; i++)  ////
    4.     {
    5.         a[i][0] = 1;
    6.     }
    7.    
    8.    
    9.     for (int i = 1; i < n; i++)
    10.     {
    11.         a[i][i] = 1;      ////
    12.         a[i][i+1] = 0;    ////
    13.         for (int j = 1; j < i; j++) ////
    14.         {  
    15.             a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    16.         }
    17.     }
    18. }
    19. void printPascal(int a[][MAX_SIZE], int n)
    20. {
    21.     for (int i = 0; i < n; i++)  ////
    22.     {
    23.         for (int j = 0; j <= i; j++)
    24.         {
    25.             printf("%5i" ,a[i][j]);
    26.         }
    27.         printf( "\n" );  //
    28.  
    29.     }
    30. }

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

    Để ý là 1 dòng thứ i đc tính theo dòng thứ i-1, => chỉ cần dùng mảng a[2][n] là đủ.
    C++ Code:
    1. void pascal(int n){
    2.     int* p[2], p1, p2;
    3.     p[0] = new int[n];
    4.     p[1] = new int[n];
    5.  
    6.     for (int i = 0; i<n; i++){
    7.         int k = i%2;
    8.         p[k][0] = p[k][i] = 1;
    9.         if (i>0){
    10.             cout<<1 <<' ';
    11.             for (int j = 1; j<i; j++){
    12.                 p[k][j] = p[1-k][j-1] + p[1-k][j];
    13.                 cout <<p[k][j] <<' ';
    14.             }
    15.         }
    16.         cout<<1 <<endl;
    17.     }
    18.  
    19.     delete[] p[0];
    20.     delete[] p[1];
    21. }

    C++ Code:
    1. pascal(4);

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

    mấy pác xem rồi góp ý giúp với, em mới bắt đầu học c++
    #include<iostream.h>
    #include<stdio.h>
    #include<conio.h>
    #include<iomanip.h>
    unsigned int a[10][10];
    int i,j,n;
    main()
    {
    cout<<"Nhap so hang cua tam giac: ";cin>>n;
    for (j=0;j<=n-1;j++)
    {
    a[j][0]=1;
    }
    for (i=0;i<=n-1;i++)
    {
    for(j=1;j<=i;j++)
    {
    a[i][j]=a[i-1][j]+a[i-1][j-1];
    }
    }
    for (i=0;i<=n-1;i++)
    {
    for(j=0;j<=i;j++) {cout<<a[i][j]<<setw(6);}
    cout<<"\n";
    }
    getch();
    return 0;
    }

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

    //Vì mình không biết cách nào ngoài vòng lặp for nên sẽ hơi khó hiểu. Ai có cách nào hay thì chia sẻ cho mình nũa nhé. Cái này là mình viết trong C#...

    private static void Main(string[] args)
    {

    int n, gt, gt1, gt2, dem, cal,l;
    Console.Write("Enter Number: ");
    n = Convert.ToInt32(Console.ReadLine());
    for (int i = 0; i <= n; i++)
    {
    //(gt/(gt1*gt2)
    gt = 1;
    gt1 = 1;
    gt2 = 1;
    for (int j = 0; j <= i; j++)
    {
    #region tim gt

    l = j;
    if (j == 0)
    {
    l = 1;
    }
    gt = gt * l;


    #endregion

    }
    //Console.Write("{0}", gt1);
    #region tim gt1 va gt2 trong cung 1 for
    for (int j = 0; j <= i; j++)
    {
    #region tim gt1

    dem = (i - j);
    if (dem==0)
    {
    dem = 1;
    }
    for (int k = 1; k <= dem; k++)
    {
    gt1 = gt1*k;
    }



    //Console.Write("gt1:{0} ", gt1);
    #endregion

    #region tim gt2

    l = j;
    if (j==0)
    {
    l=1;
    }

    gt2 = gt2*l;

    #endregion
    cal = gt / (gt1 * gt2);
    Console.Write(" {0}", cal);
    gt1 = 1;

    }
    #endregion

    Console.WriteLine();

    }
    Console.ReadLine();
    }

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

    Trích dẫn Nguyên bản được gửi bởi nammae Xem bài viết
    Mình thấy thuật toán của bạn rất hay, bạn chỉ cần chú ý chỉ số mảng bắt đầu từ 0 và kết thúc tại n-1.
    C Code:
    1. void calPascal(int a[][MAX_SIZE], int n)
    2. {
    3.     for (int i = 0; i < n; i++)  ////
    4.     {
    5.         a[i][0] = 1;
    6.     }
    7.    
    8.    
    9.     for (int i = 1; i < n; i++)
    10.     {
    11.         a[i][i] = 1;      ////
    12.         a[i][i+1] = 0;    ////
    13.         for (int j = 1; j < i; j++) ////
    14.         {  
    15.             a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    16.         }
    17.     }
    18. }
    19. void printPascal(int a[][MAX_SIZE], int n)
    20. {
    21.     for (int i = 0; i < n; i++)  ////
    22.     {
    23.         for (int j = 0; j <= i; j++)
    24.         {
    25.             printf("%5i" ,a[i][j]);
    26.         }
    27.         printf( "\n" );  //
    28.  
    29.     }
    30. }
    cái [] nghĩa là j vậy bạn, mình cũng mới học C, nhưng k thấy có dấu đó

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

  1. Graphic Làm sao để vẽ một cây bất kì trên c# dùng graphic để node không đè lên nhau
    Gửi bởi lenhatnguyen trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 04-08-2013, 05:34 PM
  2. Code vẽ tam giác pascal
    Gửi bởi thanhdieu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 18-12-2010, 07:50 PM
  3. Cách dùng đa luồng trong vẽ hình ảnh?
    Gửi bởi tuandoi1 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 17-11-2010, 11:54 PM
  4. interval timer trên C# | Lấy mẫu vẽ đồ thị trên C#. Giúp mình với?
    Gửi bởi mrvui trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 09-05-2009, 10:16 PM
  5. LT tam giác Pascal dùng mãng 2 chiều
    Gửi bởi thivtr trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 10-04-2008, 11:38 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