Đến nội dung

Hình ảnh

Thuật toán đổi phân số ra số thập phân

- - - - -

  • Please log in to reply
Chủ đề này có 13 trả lời

#1
hieuchuoi@

hieuchuoi@

    Thành viên lười nhác

  • Thành viên
  • 418 Bài viết
Có ai biết thuật toán đổi từ phân số ra số thập phân không? Lưu ý là số thập phân có 3 loại:
- Vô hạn tuần hoàn đơn, ví dụ 3,(9)
- Vô hạn tuần hoàn tạp, ví dụ 5,67(8)
- Hữu hạn

#2
classpad300

classpad300

    Lamborghini

  • Thành viên
  • 2075 Bài viết
Có. Bên forum Casio tui có pót rồi đấy.
http://casio.phpbb3.net/

#3
hieuchuoi@

hieuchuoi@

    Thành viên lười nhác

  • Thành viên
  • 418 Bài viết
Ý anh nói là cái này phải không: http://casio.phpbb3.net/ftopic159.html
Nhưng đó là chuyển từ số thập phân ra phân số. (cái này em đc học từ hồi lớp 7 rùi :D )
Còn của em là phân số là số thập phân.
Nếu ở chỗ casio đó có thì anh cho em xin cái link nhá.

#4
classpad300

classpad300

    Lamborghini

  • Thành viên
  • 2075 Bài viết
Có đấy. Nhuưng hình như anh chưa post. Thuật toán này có trong cuốn Casio FX-4500P của anh chàng nào đó anh quên tên rồi. Nó chẳng qua là nghịch của đổi thập phân sang phân số. Ngồi bấm máy nhìn chóng mặt quá...

#5
hieuchuoi@

hieuchuoi@

    Thành viên lười nhác

  • Thành viên
  • 418 Bài viết
Đây là bài tập Pascal của em :D em cũng làm kiểu nghịch lại của đổi tp->ps rồi như chạy mãi ko xong :D (dốt quá :beat )

#6
vanhoa

vanhoa

    Binh nhất

  • Thành viên
  • 27 Bài viết
Cái này là code của máy ClassPad tui hay dùng, thử xem

local k,n,s,tu,mau,temp
Input n,"Nhap phan so",".:Nhap phan so:."
s=""
tu=numerator(n)
mau=denominator(n)k=0
While k=0
GetKey k
temp=int(tu/mau)
tu=10(tu-mauîtemp)
ExpToStr temp,temp
StrJoin s,temp,s
WhileEnd
Print s

Thuật toán này ko hay lắm...

#7
hieuchuoi@

hieuchuoi@

    Thành viên lười nhác

  • Thành viên
  • 418 Bài viết
Code này em sao hiểu nổi :D

#8
vanhoa

vanhoa

    Binh nhất

  • Thành viên
  • 27 Bài viết
Thực ra là thế này:
B1:TU=nhập tử.
B2:MAU=nhập mẫu.
B3:gán k=0
B4.1:gán cho biến nguyên temp=int(TU/MAU)
B4.2:Gán cho biến string ST=phần nguyên của tử chia cho mẫu: ST=tostring(temp)
B5: TU=10*(TU-temp*MAU)
B6:nếu có phím ấn thì gán vào k, nếu ko k=0
B7:Thêm vào chuỗi ST giá trị temp: ST+=tostring(temp)
B8:Nếu temp==0 thì quay lại bước 5, nếu k<>0 thì đưa ra ST rồi kết thúc.

Ví dụ với tu=7,mau=6:
TU    7  10 40  40 40  40
MAU 6  6   6    6   6   6
ST    1  1   6   6   6   6...

Thực ra thuật toán này là phép chia dọc căn bản :D

#9
vanhoa

vanhoa

    Binh nhất

  • Thành viên
  • 27 Bài viết
lưu ý để cho ra phân số vô hạn tuần hoàn cần thêm 1 bước check sẽ làm chậm đáng kể chương trình.

#10
vanhoa

vanhoa

    Binh nhất

  • Thành viên
  • 27 Bài viết
Bạn xem thử cái này xem (mình viết bằng VB).
Nó tính được:
92/97=0,(948453608247422680412371134020618556701030927835051546391752577319587628865979381443298969072164)

1001/1003=0,(99800598205383848454636091724825523429710867397806580259222333000997008973080757726819541375872382851445663010967098703888334995014955134596211365902293120638085742771684945164506480558325024925224327018943170488534396809571286141575274177467597208374875373878364905284147557328015952143569292123629112662013958125623130608175473579262213359920239282153539381854436689930209371884346959122632103688933200398803589232303090727816550348953140578265204386839481555333)

277531/24975=11,11(235)

Thử tính 12345/54321 thử xem... :D chu kỳ lớn lắm...

Nhưng nếu chu kỳ quá lớn các bạn sẽ phải chờ lâu đấy! (ví dụ 123456/654321 chẳng hạn, máy mình đứng luôn)

File gửi kèm

  • File gửi kèm  chia.rar   11.08K   271 Số lần tải

Bài viết đã được chỉnh sửa nội dung bởi vanhoa: 30-11-2006 - 17:14


#11
hieuchuoi@

hieuchuoi@

    Thành viên lười nhác

  • Thành viên
  • 418 Bài viết
Có thuật toán hay: Cũng dùng phép chia, lưu các số dư vào một mảng, dùng cách kiểm tra xem đến khi nào số dư ấy lặp lại là ok :D

#12
vanhoa

vanhoa

    Binh nhất

  • Thành viên
  • 27 Bài viết
Thì mình cũng làm vậy đó

#13
huy thanh

huy thanh

    Binh nhì

  • Thành viên
  • 16 Bài viết
bài này là bài tập pascal đây mà .bài này nếu chạy bằng pascal cũng ko lâu lắm còn việc có chu kì dài thì càng khỏi lo vì có mảng 1000 đến 10000 phần tử còn quá lớn thì dùng freepascal

#14
TheIncredibleMachine

TheIncredibleMachine

    Binh nhất

  • Thành viên
  • 42 Bài viết

bài này là bài tập pascal đây mà .bài này nếu chạy bằng pascal cũng ko lâu lắm còn việc có chu kì dài thì càng khỏi lo vì có mảng 1000 đến 10000 phần tử còn quá lớn thì dùng freepascal

Đây là bài tập thuật toán nói chung chứ không phải là Pascal hay ngôn ngữ nào cả. Pascal là tên ngôn ngữ lập trình, còn Free Pascal là IDE (môi trường phát triển tích hợp) có tích hợp trình biên dịch FPC, Turbo Pascal cũng là IDE tích hợp trình biên dịch là TPC.
Một ứng dụng rất hay của bài toán về số thuật phân vô hạn tuần hoàn: https://www.spoj.pl/problems/DEADFR/
Diễn đàn thảo luận giải thuật và lập trình: http://www.ioicamp.net/forums/
Các online judge hay: Sphere Online Judge - SPOJ Vietnam - TopCoder




0 người đang xem chủ đề

0 thành viên, 0 khách, 0 thành viên ẩn danh