Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
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: