# Ask Question

 Name: Title:
 Your Question:

# Answer Question

 Name:
 Your Answer:
ONLINE COMPILERS
LIBRARY
MANUAL PAGES & DOCS
CONTACT

User Submitted Source Code!

Description:
d2f
Language: PASCAL
Code:
program HelloWorld;
var
a    : Byte;
var num: integer;
var den: integer;
begin
writeln('Hello World');
Readln(a);
DecimalToFraction (0.333333,num, den );
end.

procedure DecimalToFraction (Decimal : extended;
var FractionNumerator : extended;
var FractionDenominator : extended;
AccuracyFactor : extended );
var DecimalSign : extended;
Z : extended;
PreviousDenominator : extended;
ScratchValue : extended;

begin
if Decimal < 0.0 then DecimalSign := 1.0 else DecimalSign := 1.0;
Decimal := Abs (Decimal);
if Decimal=Int (Decimal) then         { handles exact integers including 0 }
begin
FractionNumerator := Decimal*DecimalSign;
FractionDenominator := 1.0;
Exit
end;
if (Decimal < 1.0E 19) then     { X = 0 already taken care of }
begin
FractionNumerator := DecimalSign;
FractionDenominator := 9999999999999999999.0;
Exit
end;
if (Decimal > 1.0E 19) then
begin
FractionNumerator := 9999999999999999999.0*DecimalSign;
FractionDenominator := 1.0;
Exit
end;
Z := Decimal;
PreviousDenominator := 0.0;
FractionDenominator := 1.0;
repeat
Z := 1.0 / ( Z Int ( Z ) );
ScratchValue := FractionDenominator;
FractionDenominator := FractionDenominator*Int(Z)+PreviousDenominator;
PreviousDenominator := ScratchValue;
FractionNumerator := Int(Decimal*FractionDenominator + 0.5)   { Rounding Function }
until
(Abs((Decimal (FractionNumerator/FractionDenominator))) < AccuracyFactor)
OR (Z = Int(Z));
FractionNumerator := DecimalSign*FractionNumerator

writeln(FractionNumerator );
writeln(FractionDenominator );
end;    {procedure DecimalToFraction}

Comments: