Помощь - Поиск - Пользователи - Календарь
Полная версия: запись дроби)) Help
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Катюха
народ! help! )))) как перевести дробь из десятичной в правильную и чтоб была несократимой (чтобы числитель и знаменатель были простыми натуральными числами) smile.gif
Altair
я не старался.... и время 3.49 .... я еще не спал smile.gif
const
eps=0.000001;
var
r:real;
z,d,ch,m:integer;
dt:real;
i,nod:integer;

function max(a,b:integer):integer;
begin
if a > b then max := a else max := b;
end;
begin
readln( r );
z := trunc( r );
dt := r-z; m := 1;
while abs(dt-trunc(dt)) > eps do begin dt := dt * 10; m := m * 10; end;
d := trunc( dt );
ch := m*z+d;
{ñîêðàùàåì}
for i := 1 to max(ch,m) do if (ch mod i=0) and (m mod i=0) then nod:=i;
ch:=ch div nod; m:=m div nod;
writeln(ch,'/',m);
end.

Romtek
Пример из FAQ Исходников: Математика, Работа с числами:
Приближённое представление числа в виде дроби
VAR p,q,qmax:integer;
d, r, min: real;
BEGIN
write('r, qmax=');
readln(r, qmax); { r - не целое число, qmax - кол-во итераций (циклов) }
p:=0; q:=1; min:=r;
REPEAT
IF p / q < r
THEN inc(p)
ELSE inc(q);
d:=abs(r-p/q);
IF d < min THEN
BEGIN
min:=d;
writeln(p:7,'/',q)
END
UNTIL (q >= qmax) OR (d = 0);
readln;
END.


А вообще:
чтобы дробь была несократимой .нужно поделить числитель и знаменатель на НОД (GCD):
{ Евклид (Euclidus) }
function GCD (A: integer; B: integer): integer;
begin
while (a <> 0) and (b <> 0) do
if a >= b then
a := a mod b
else
b := b mod a;
GCD := a + b; { один - ноль }
end;
Катюха
спасибки всем откликнувшимся))))))

Добавлено:
народ, ещё один глупый вопрос: как сохранить результаты решения в файл?))))
Romtek
writeln (F, 'Результат: ', result);

Банально, да? smile.gif
klem4
Я думаю, если вознимкют подобные вопросы, то одной строчкой не обойтись :D , Катюха, посмотри вот это : FAQ Файлы ну или вот тебе пример записи :

uses crt;
var
x:integer;
f:Text; // или например file of integer;

Begin
clrscr;
write('x='); readln(x);

assign(f,'c:\Data.txt');
rewrite(f);
write(f,x);
close(f);

readln;

End.


зыы чот форум лагает... третий раз пытаюсь запостить)

Ты постил как раз во время объединения темы...
Volvo
Катюха
народ, всем спасибки!!! smile.gif Помогли очень smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.