LANGUAGE TRANSLATION

12 AEMN


NHÀ MÌNH ONLINE !

Tiến Quốc
Tố Uyên
Thuý Hằng
Linh Sương
Vũ Mai
Nguyễn Duyên
Chi Uyên
Minh Anh
Châu Tuấn
Thành Nhân
Chí Thành
Đức Thiệu

QT của thầy Văn Ngãi

danh mục nội dung web mmtt

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • GD

    XIN KÍNH CHÀO

    3 khách và 0 thành viên

    111

    Gốc > TRI THỨC CUỘC SỐNG - CHIA SẺ KINH NGHIỆM > HỌC TIN HỌC > TURBO PASCAL >

    Tìm ước chung lớn nhất và bội chung nhỏ nhất pascal

     

     

    Ý tưởng: Lấy số lớn hơn trong 2 số trừ đi nhau. Lặp lại thao tác đến khi nào 2 số bằng nhau -> UCLN. Lấy tích của 2 số chia cho UCLN -> BCNN.
     

    Thuật toán tìm Bội chung nhỏ nhất và Ước chung lớn của 2 số trong Pascal:


    Cách 1: Dưới đây là thuật toán tìm UCLN bằng cách trừ đi nhau, được trình bày trong SGK tin học 10. 

    var x,y,UCLN,BCNN:integer;
    begin
    readln(x,y);
    BCNN:=x*y;
    While x<>y do If x>y then x:=x-y else y:=y-x;
    UCLN:=x;
    BCNN:=BCNN div UCLN;
    write(UCLN,' ',BCNN);
    end.

    Cách 2: Thuật toán Euclide: Ngoài cách tìm UCLN như trên. Các bạn có thể sử dụng cách chia lấy dư (mod), chương trình sẽ tối ưu do phải thực hiện ít phép tính hơn.

    Ý tưởng: UCLN của 2 số x, y cũng là UCLN của 2 số y và x mod y, vậy ta sẽ đổi x là y, y là x mod y cho đến khi y bằng 0. Khi đó UCLN là x. 

    var x,y,UCLN,BCNN,t:integer;
    begin
    readln(x,y);
    BCNN:=x*y;
    t:= y mod x;
    While t <> 0 do
          Begin
            t:= x MOD y;
            x:= y;
            y:= t;
          End;
    ucln:=x;
    BCNN:=BCNN div UCLN;
    write(UCLN,' ',BCNN);
    end.

    Cách 3: Tìm UCLN bằng cách dùng đệ quy: Đệ quy được hiểu đơn giản là sự gọi nhiều lần chương trình con trong chương trình. Thực sự, đối với bài toán đơn giản, không ai sử dụng đệ quy vì sẽ làm phức tạp vấn đề và làm chương trình trở nên rắc rối, phải thực hiện nhiều phép tính hơn. Tuy nhiên, nếu bắt buộc phải dùng đệ quy, các bạn có thể tham khảo cách làm dưới đây:
     
    function ucln(x,y:integer):integer;
    begin
    if x = y then
    ucln:=x
    else if x > y then 
    ucln:=ucln(x mod y,y)
    else 
    ucln:=ucln(x, y mod x); 
    end;
    var x,y:integer;
    begin
     
     
    readln(x,y);
     
    write('Ước chung lớn nhất là: ', UCLN(x,y), ' Bội chung nhỏ nhất là: ', (x*y) div UCLN(x,y));
    end.



    codepascal.blogspo

    Nhắn tin cho tác giả
    Trần Thị Thúy Hằng @ 01:32 14/12/2012
    Số lượt xem: 17711
    Số lượt thích: 0 người
     
    Gửi ý kiến