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

Đề tài: Vấn đề về Tam giác Pascal.

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

    Mặc định Vấn đề về Tam giác Pascal.

    Hiện mình đang làm về bài in tam giác Pascal bằng C#, và có tìm hiểu dc một vài đoạn code như sau:
    Code:
      Console.Write("Nhap chieu cao : ");
                int h = int.Parse(Console.ReadLine());
                Console.Write("\n\n\n");
                for (int i = 1; i <= h; i++)
                {
                    int a = 0;
                    int b = i;
                    for (int j = 1; j <= (h * 2 - 1); j++)
                    {
                        if (j == h)
                        {
                            Console.Write(i);
                        }
                        else if ((j >= (h - i + 1)) && (j < h))
                        {
                            a = a + 1;
                            Console.Write(a);
                        }
                        else if ((j <= (h + i - 1)) && (j > h))
                        {
                            b = b - 1;
                            Console.Write(b);
                        }
                        else Console.Write("_");
    
                    }
                    Console.Write("\n");
                }
                Console.ReadLine();
    ......... và rất nhiều code xuất ra Tam giác số tương tự như đoạn code trên.
    -- mình xin nói rõ là đây chỉ là Tam giác số thôi chứ chưa hoàn toàn là tam giác Pascal.
    -- vì theo mình biết thì Tam Giác Pascal dc tạo bởi công thức:

    cho ta một tam giác như sau:
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    *****Mỗi dãy đều bắt đầu và kết thúc bằng chữ số 1, những số tiếp theo là tổng của số liền trên với số bên trái của số liền trên.
    -- hay là sự truy hồi của công thức như sau làm nên:


    (Với 1 < k < n)

    Khi viết các hệ số lần lượt với n = 0,1,2,... ta được bảng:



    Trong tam giác số này, bắt đầu từ hàng thứ hai, mỗi số ở hàng thứ n từ cột thứ hai đến cột n-1 bằng tổng hai số đứng ở hàng trên cùng cột và cột trước nó.

    Có bác nào pro chỉ dùm em cách giải quyết vấn đề này với. tại cái công thức khó quá... với lại em mới học lập trình nên mong dc sự giúp đỡ của mọi người.
    Đã được chỉnh sửa lần cuối bởi machEagle : 09-02-2012 lúc 03:08 PM.
    Thà bị chửi nhiều nhiều, còn hơn là chết vì ngu.

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

    Mặc định moi hoc nên con thieu xót

    #include"ham.h"
    int GiaiThua(int n)
    {
    int t=1;
    for(int i=1;i<=n;i++)
    t=t*i;
    return t;
    }
    int ToHop(int n,int k)
    {
    int th;
    th=GiaiThua(n)/(GiaiThua(k)*GiaiThua(n-k));
    return th;
    }
    void pacal(int n)
    {
    for(int i=0;i<=n;i++)
    {
    for(int k=n-1;k>=i;k--)
    {
    printf(" ");
    }
    for(int j=0;j<=i;j++)
    {
    int a=ToHop(i,j);
    printf("%2d",a);
    }
    printf("\n");
    }

    }

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

    hàm giai thừa của bạn ở trên còn thiếu trường hợp n=0
    thêm if (n=0) t=1;
    else .....
    ok

  4. #4
    Ngày gia nhập
    09 2012
    Bài viết
    0

    Hóa ra là bạn hỏi code C# , ko để ý.
    Mình viết hơi lan man tí :-P, xét cả trường hợp "lỡ tay" nhập phải các ký tự khác chữ số :-P
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. // In ra tam giác Pascal
    6. // Dựa vào công thức truy hồi bạn đã đưa
    7. // aCb = a! / (b! * (a-b)!)
    8. namespace TamgiacPascal
    9. {
    10.     class Program
    11.     {
    12.         public static int Giaithua(int n) // hàm tính giai thừa.
    13.         {
    14.             int giaithua = 1;
    15.             for (int i = 1; i <= n; i++)
    16.                 giaithua *= i;
    17.             return giaithua;
    18.         }
    19.         public static bool Kiemtra(string s) // hàm kiểm tra xem chuỗi nhập vào có phải là
    20.         {                               // 1 chuỗi số (trả về true) hay còn có ký tự khác chữ số (trả về false)?
    21.             bool kiemtra = true;
    22.             for (int i = 0; i < s.Length;)
    23.             {
    24.                 if (char.IsDigit(s[i]) == false)  
    25.                     return false;                // nếu ký tự thứ i trong chuỗi ko phải là số thì trả về false.
    26.                 else
    27.                     i++;
    28.             }
    29.             return kiemtra;                      // nếu tất cả các ký tự trong chuỗi là số thì trả về true.
    30.         }
    31.         public static void Main(string[] args)
    32.         {
    33.             string h;
    34.             lap:     // nhãn lặp
    35.             Console.Write("Nhap vao do cao tam giac Pascal: h = ");
    36.             h = Console.ReadLine();
    37.             if (Kiemtra(h) == false) // nếu chuỗi nhập vào có ký tự khác chữ số
    38.             {
    39.                 if (h == "quit")    //nếu nhập vào quit thì thoát khỏi chương trình.
    40.                 {
    41.                     Console.WriteLine("Xin chao...");
    42.                     Console.ReadLine();
    43.                 }
    44.                 else                //nếu nhập vào chuỗi khác thì báo nhập sai, yêu cầu nhập lại.
    45.                 {
    46.                     Console.WriteLine("Ban da nhap sai. Hay nhap lai!");
    47.                     goto lap;
    48.                 }
    49.             }
    50.             else                    // nếu chuỗi nhập vào là chuỗi số
    51.             {
    52.                 if (Convert.ToInt32(h) < 0)   //nếu số đó < 0 thì báo nhập sai, yêu cầu nhập lại.
    53.                 {
    54.                     Console.WriteLine("Ban da nhap sai. Hay nhap lai!");
    55.                     goto lap;
    56.                 }
    57.                 else               // nếu số đó >0 thì thực hiện chương trình.
    58.                 {
    59.                     for (int i = 0; i < Convert.ToInt32(h); i++)
    60.                     {
    61.                         for (int j = 0; j <= i; j++)
    62.                             Console.Write(Giaithua(i) / (Giaithua(j) * Giaithua(i - j)) + " ");
    63.                         Console.WriteLine();
    64.                     }
    65.                     goto lap;       //lặp lại chương trình
    66.                 }
    67.             }
    68.         }
    69.     }
    70. }
    Đã được chỉnh sửa lần cuối bởi Ck-boy : 12-12-2012 lúc 11:33 PM.

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

  1. SOS bài in tam giác pascal
    Gửi bởi songkyekyo trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 18
    Bài viết cuối: 30-12-2012, 04:31 AM
  2. Tam giác pascal | In tam giác pascal bằng C??
    Gửi bởi ndchauson trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 19
    Bài viết cuối: 04-10-2011, 03:13 PM
  3. Bài tập C++ In tam giác Pascal , lỗi khi h>=6 ??
    Gửi bởi congaumap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 22-03-2011, 03:06 AM
  4. In tam giác Pascal , lỗi khi h>=6 ??
    Gửi bởi congaumap trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-03-2011, 10:02 PM
  5. tương ứng của pascal và C
    Gửi bởi tung_ct trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 02-08-2009, 06:02 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