PDA

View Full Version : [Q] Phan so



tsondt
13-10-2002, 07:00
Mấy sư huynh sư tỷ giải giúp em bài này với :
Cho một phân số m/n (m,n<=10^4), biểu diễn m/n ra dạng thập phân. VD :
3/5 0,6
1/3 0,(3)
5/11 0,(45)

real_time
13-10-2002, 08:25
không biết bạn có nhầm đề bài không nếu như thế này có phải là chỉ write phép chia kia ra mà thôi có phải viết chương trình hay thuật toán gì đâu.

Junior IT
13-10-2002, 09:18
chi co' 10^4 thoi huh? 10^10, cung la`m duoc muh, noi chi den 10^4, co 2 cach: xu ly chuoi (viet khoang 30 do`ng), va` = cong thuc (khoang 10 do`ng), cong thuc nay you co the ti`m trong sach toan nang cao lop...7

tsondt
13-10-2002, 11:13
Xin lưu ý mấy huynh là có những số vô hạn tuần hoàn đến ... mấy tỉ chữ số, lại có nhưng số đại loại như 0,12345123451234512345671234512345123451234567... hay la 0,123123(12345). Cái khó là tìm được phần tuần hoàn thôi. Hồi đó em học chuyên Toán lớp 7 mà đâu có dạy ba cái vụ này. Nếu được thì xin chỉ cụ thể chứ em mới đọc bài này cũng tưởng dễ lắm,ai dè.

Junior IT
13-10-2002, 13:12
vay em di hoi ban na`o chuyen ve Toan tren may tinh Casio day, lop 7 hoc roi. ~ vi du cua em con don gian lam, em thu chia = tay 2 so na`y xem se biet : 315/413

tsondt
13-10-2002, 14:58
Junior IT sao toàn nói không vậy ? Nếu nói dễ thì làm thử bằng Pascal hay C rồi gửi Source cho em đi, lúc đó mới tâm phục khẩu phục.

vys
14-10-2002, 09:27
Để ý phân số này m/n chắc chắn sẽ ra một số hữu tỉ ( cùng lắm là số thập phân vô hạn tuần hoàn thôi. Vì thế mà phần thập phân không thể nào lên mấy tỉ chủ số được. Bạn vừa nêu ra ví dụ về một số như vậy sao : 0.12345123451234567.... Thực chất bạn không bao giờ tìm được 2 số m và n sao cho m/n= số trên. Nếu bạn tìm được thì tôi khâm phục bạn đó. vì nếu bạn tạo ra tới số 0.1234512345 thì chắc chắn số cần tìm là 0.(12345). Bạn cũng chú ý thêm một chổ là m mod n có tối đa là n số dư thôi, vì thế mà
trong quà trình chia đến một lúc nào đó trong dãy m1,m2..mk khi chia cho n thi se có hai số mi=mj, và số k này sẽ không lớn lắm đâu, bạn cũng chỉ có tối đa n chữ số trong phần tuần hoàn thôi. Bạn chỉ cần dùng Boolean[0..10^4-1] để đánh dấu mi đã xuất hiện 2 lần hay chưa, khi tỉm được số mi rồi thì bạn sẽ xác định được phần tuần hoàn đơn giản thôi. Tôi mới đọc nội dung bạn gởi nên không có chủng bị source đuợc, nếu bạn cần thì tôi sẽ gởi cho bạn. Tạm biệt. Vui vẻ hén

real_time
16-10-2002, 17:15
tsondt cho mình hỏi thế nếu trường hợp gặp số pi hay số vô hạn tuần hoàn thì sẽ xử lý ra làm sao?? số pi sẽ sinh ra mấy tỉ số đó.

tsondt
16-10-2002, 17:27
Xin lưu ý là số pi không phải là số vô hạn tuần hoàn, còn nếu là vô hạn tuần hoàn thì xin viết phần tuần hoàn vào trong ngoặc ở sau cùng của số tìm được.VD : 0,(3) ; 0,111(23) ; 0,(123)...

vys
17-10-2002, 10:44
Bạn có cân source của chương trình không ?

tsondt
17-10-2002, 12:04
Nếu được xin post lên hoặc gửi cho mình <tsondtlhp@yahoo.com>

vys
17-10-2002, 17:05
// Chương trình được viết trong BC++3.1
// Chuong trinh tim so thap phan
#include <iostream.h>
#include <conio.h>
#include <process.h>

const MaxN=10000;
short int A[MaxN];
int Vitri[MaxN];
long m,n,First,Last,PhanNguyen;

void Nhap()
{
clrscr();
cout << "Chuong trinh tim so thap phan." << endl;
cout << "Chu y : Nhap so n=0 de thoat chuong trinh"<< endl;
cout << "Nhap 2 so m,n : ";
cin >> m >> n ;
if (n==0) exit(0);
if (n>10000)
{
cout <<"Error : So n>10^4 ";
getch();
exit(0);
}
}
void GiaiQuyet()
{
int Count=0;
for (First=MaxN-1;First>=0;First--) Vitri[First]=0;
PhanNguyen=m/n;
m=m%n;
if (m>0) // m khong chia het cho n, nghia la co phan thap phan
{
do
{
Count++;
if (Vitri[m]>0) break;
Vitri[m]=Count;
m=m*10;
A[Count]=m/n;
m=m%n;
}
while (1==1);
First=Vitri[m];
Last=Count-1;
}
}
void GhiKetQua()
{
int i;
cout <<"Ket qua m/n :" <<endl;
cout <<PhanNguyen;

if (First>0)
{
cout<<'.';
for (i=1;i<First;i++) cout<< A[i];
if (!((First==Last) && (A[First]==0)))
{
cout<<"(";
for (i=First;i<=Last;i++) cout<<A[i];
cout<<")";
}
}
cout<<endl<<"Press ENTER to restart";
getch();
}
void main()
{
while (1==1)
{
Nhap();
GiaiQuyet();
GhiKetQua();
}
}

CrazyBabe
18-10-2002, 09:18
Eh, góp ý chút nhá, đây là thread Delphi & Pascal mà sao lắm người post bài bằng C zậy ??? :")

tsondt
18-10-2002, 12:12
Không sao, C cũng đâu có hại gì ai, tui cũng đọc được mà, cảm ơn vys nha.

real_time
19-10-2002, 16:25
mình cần thuật toán và trí tuệ của mọi người mà pascal và C mình thấy cũng không khác nhau nhiều lắm post bài theo C hay pascal cũng được

Zero
19-10-2002, 16:54
Nếu có thể mọi người nên post bài bằng Pascal nếu không thì mã giả cũng được. Thanks.