Страница 1 из 1

Ввод периодической дроби в Паскале!!

Добавлено: 28 сен 2009, 21:45
Alija
Периодическая десятичная дробь обычно записывается в виде:
[целая_часть,непериодическая_часть(период)]
Любая простая дробь может быть представлена в виде десятичной периодической дроби и наоборот. Например, десятичная дробь 0,2(45) соответствует дроби 27/110. Ваша задача перевести периодическую дробь в обыкновенную.

Входные данные
Во входном файле в первой строке содержится периодическая десятичная дробь x (0 < x < 1) в формате, описанном выше. Общее количество цифр в периоде и непериодической части дроби не превосходит 8. Непереодическая часть может отсутствовать, периодическая отсутствовать не может (но может быть равна любому неотрицательному числу).

Выходные данные
В выходной файл вывести представление дроби x в виде простой дроби p/q, где p и q являются взаимно простыми целыми числами.

Пример

Ввод
0,2(45)

Вывод
27/110

Зранее спасибо=)

Re: Ввод периодической дроби в Паскале!!

Добавлено: 01 окт 2009, 06:44
demon416
Так выглядит решение на delphi:

Код: Выделить всё

function nod(n1,n2:integer):integer;
var
temp:integer;
begin
if n1>n2 then
begin
temp:=n1;
n1:=n2;
n2:=temp;
end;
while (n2-n1)>0 do
begin
n2:=n2-n1;
result:=n2;
if n1>n2 then
begin
temp:=n1;
n1:=n2;
n2:=temp;
end;
end;
end;
function p2p (s:string):string;
var
chisl,znam,cel,i: integer;
temp:string;
begin
temp:='';
chisl:=strtoint(copy(s,pos('(',s)+1,pos(')',s)-pos('(',s)-1));
cel:=strtoint(copy(s,1,pos(',',s)-1));
for i:=1 to length(inttostr(chisl)) do
temp:=temp+'9';
for i:=1 to pos('(',s)-pos(',',s)-1 do
temp:=temp+'0';
znam:=strtoint(temp);
chisl:=strtoint(copy(s,pos(',',s)+1,pos('(',s)-pos(',',s)-1)+inttostr(chisl))-strtoint(copy(s,pos(',',s)+1,pos('(',s)-pos(',',s)-1));
chisl:=chisl+znam*cel;
result:=inttostr(chisl div nod(chisl,znam))+'/'+inttostr(znam div nod(chisl,znam));
end;