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

Ответить
Alija
Сообщения: 2
Зарегистрирован: 08 сен 2009, 22:44

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

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

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

Пример

Ввод
0,2(45)

Вывод
27/110

Зранее спасибо=)
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

Так выглядит решение на 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;

ака хинт: коментируйте код, самим же легче будет разобраться ;)
Ответить