• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Chuyển số thập phân sang phân số

Đây là nơi để các bạn trao đổi về cấu trúc dữ liệu và giải thuật

Điều hành viên: Điều hành

f1_tnl
Thành viên chính thức
Thành viên chính thức
Bài viết: 16
Ngày tham gia: T.Sáu 19/09/2008 10:03 pm

Chuyển số thập phân sang phân số

Gửi bàigửi bởi f1_tnl » CN 27/12/2009 9:50 am

Có cách nào để chuyển số thập phân sang phân số (áp dụng được cho lập trình máy tính) không?

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4726
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 475 time

Re: Chuyển số thập phân sang phân số

Gửi bàigửi bởi truongphu » CN 27/12/2009 11:29 am

1- Với số Pi: (thập phân siêu việt); số căn: (thập phân vô hạn) thì thua

2- Các số thập phân hữu hạn và thập phân vô hạn tuần hoàn đều có thể chuyển qua phân số

a- Thập phân hữu hạn: Đổi ra phân số thập phân

* tử số là số nguyên gồm tất cả ký tự số của số thập phân hữu hạn
* mẫu số là 10^n; mà n là tổng số ký tự thập phân

vd: 21,458 = 21458 / 10^3

Sau khi có được phân số thập phân, tiến hành giản lược phân số
- Cho vòng lặp i đi từ 2 đến phần nguyên của căn 2 tử số
- Nếu tử số và mẫu số cùng chia chẵn cho i thì tiến hành

b- Thập phân vô hạn tuần hoàn: đó là lim của phần thập phân tuần hoàn.

* vd với số 0,(9)
lim 0.(9) =1

* vd với số 0,(3)
x = 0,(3)
10x = 3,(3) = 3 + x
9x = 3
x = 3 / 9
x = 1 / 3

* vd với số 0,(714285)
y = 0,(714285)
10^6x = 714285,(714285) = 714285 + y
999999y = 714285
y = 714285 / 999999
y = 5 / 7

c- Làm mò, không cần lý luận: phần nguyên bỏ, khảo sát phần thập phân
Cho 2 vòng lặp lồng nhau: i từ 1 đến 1000 và j cũng thế. Tính i/j. Nếu kết quả bằng phần thập phân thì
i/j là phân số cần tìm (của phần thập phân)

Có thể còn cách khác chăng?
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

chipmunk
Thành viên tích cực
Thành viên tích cực
Bài viết: 125
Ngày tham gia: T.Hai 28/03/2011 9:19 am
Has thanked: 2 time
Been thanked: 5 time

Re: Chuyển số thập phân sang phân số

Gửi bàigửi bởi chipmunk » CN 03/04/2011 4:29 pm

Cái này hay đây, mình cũng rất thắc mắc
Chuyển từ phân số sang thập phân thì khả thi, nhưng còn chuyển ngược lại thì mình bó tay
nhưng phải lưu số dạng mảng và tự tạo hàm chia

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1255
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 136 time
Liên hệ:

Re: Chuyển số thập phân sang phân số

Gửi bàigửi bởi VuVanHoanh » CN 03/04/2011 4:33 pm

Mình đưa ra thuật toán nè, sau đó nếu rảnh thì mình code cho.
Nhân phân số ấy với 10^x để thành số nguyên.
Và mình nhớ ở đâu có code rút gọn phân số bằng C++, khi nào rảnk mình conv sang VB cho.
Dead.

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1255
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 136 time
Liên hệ:

Re: Chuyển số thập phân sang phân số

Gửi bàigửi bởi VuVanHoanh » CN 03/04/2011 9:10 pm

Có cách rồi, nếu là số hữu tỉ và phần thập phân đếm được thì đã có code hoàn chỉnh để giải :)
Dead.

Hình đại diện của người dùng
tdat00
Thành viên tích cực
Thành viên tích cực
Bài viết: 136
Ngày tham gia: T.Bảy 29/03/2008 8:18 am
Đến từ: QNgãi
Has thanked: 8 time
Been thanked: 2 time
Liên hệ:

Re: Chuyển số thập phân sang phân số

Gửi bàigửi bởi tdat00 » T.Hai 04/04/2011 9:52 pm

truongphu đã viết:* vd với số 0,(3)
x = 0,(3)
10x = 3,(3) = 3 + x
9x = 3
x = 3 / 9
x = 1 / 3

* vd với số 0,(714285)
y = 0,(714285)
10^6x = 714285,(714285) = 714285 + y
999999y = 714285
y = 714285 / 999999
y = 5 / 7



Cái này hồi lớp 9 cũng đã học lóm được từ sách nhưng không hiểu tại sao. Sau này cũng ko chịu tìm hiểu lại. Giờ mới đọc được cách chứng minh, thành thật cảm ơn bác, hay thật ^^

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1255
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 136 time
Liên hệ:

Re: Chuyển số thập phân sang phân số

Gửi bàigửi bởi VuVanHoanh » T.Ba 05/04/2011 11:56 am

Chuyển số thập phân xác định được phần thập phân thành phân số:
  1. Public Function RutGonPS(a As Long, b As Long) As Variant
  2.     Dim ts As Integer, ms As Integer, n As Integer, i As Integer
  3.     If b = 0 Then
  4.         MsgBox "Phân so^' không ho+.p le^."
  5.     Else
  6.         If a <> 0 Then
  7.             ts = a: ms = b
  8.             Do
  9.                 n = ms
  10.                 ms = ts Mod ms
  11.                 ts = n
  12.             Loop Until ms = 0
  13.             ms = b / n
  14.             ts = a / n
  15.             If ms < 0 Then
  16.                 RutGonPS = Array(-ts, -ms)
  17.             Else
  18.                 RutGonPS = Array(ts, ms)
  19.             End If
  20.         Else
  21.             RutGonPS = Array(0, ms)
  22.         End If
  23.     End If
  24. End Function
  25.  
  26. Public Function DblToPS(num As String)
  27.     Dim i As Integer, k As Long, v As Variant
  28.     ' O+? ?ây dùng da^'u "." ?e^? nga(n cách pha^`n tha^.p phân
  29.    i = Len(CStr(num)) - InStrRev(num, ".")
  30.     k = 10 ^ CInt(i)
  31.     v = RutGonPS(CLng(CDbl(num) * k), CLng(k))
  32.     MsgBox v(0) & "/" & v(1)
  33. End Function
  34.  

Function đã test !!!
Dead.

chipmunk
Thành viên tích cực
Thành viên tích cực
Bài viết: 125
Ngày tham gia: T.Hai 28/03/2011 9:19 am
Has thanked: 2 time
Been thanked: 5 time

Re: Chuyển số thập phân sang phân số

Gửi bàigửi bởi chipmunk » T.Năm 07/04/2011 10:44 am

phần

Mã: Chọn hết

           Do
                n = ms
                ms = ts Mod ms
                ts = n
            Loop Until ms = 0

có phải là tìm ước số chung lớn nhất không

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1255
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 136 time
Liên hệ:

Re: Chuyển số thập phân sang phân số

Gửi bàigửi bởi VuVanHoanh » T.Năm 07/04/2011 11:01 am

Đúng. Thực ra cái Func được chuyển từ một bài tìm USCLN bằng C++. Mình vẽ vời thêm mấy cái là OK ấy mà :)
Dead.


Quay về “Cấu trúc dữ liệu và giải thuật”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách