Advertisement
Guest User

Fraction

a guest
Jul 7th, 2011
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package libTF.utils
  2. {
  3.     import adobe.utils.CustomActions;
  4.    
  5.     public class Fraction
  6.     {
  7.         internal var numerator:uint;
  8.         internal var denomenator:uint;
  9.         internal var pos:Boolean;
  10.         public var value:Number;
  11.        
  12.         public function Fraction(num:uint, denom:uint, positive:Boolean)
  13.         {
  14.             numerator = num;
  15.             denomenator = denom;
  16.             pos = positive;
  17.             simplify();
  18.         }
  19.        
  20.         public function gcf(val1:uint, val2:uint):int
  21.         {
  22.             var numfact:Vector.<uint> = MathUtils.primeFactors(val1);
  23.             var denomfact:Vector.<uint> = MathUtils.primeFactors(val2);
  24.            
  25.             var val:int = 1;
  26.            
  27.             for (var i:int = numfact.length - 1; i >= 0; i--)
  28.             {
  29.                 for (var j:int = denomfact.length - 1; j >= 0; j--)
  30.                 {
  31.                     if (numfact[i] == denomfact[j])
  32.                     {
  33.                         val *= numfact[i];
  34.                         numfact.splice(i, 1);
  35.                         denomfact.splice(j, 1);
  36.                         break;
  37.                     }
  38.                 }
  39.             }
  40.            
  41.             return val;
  42.         }
  43.        
  44.         public function simplify():Fraction
  45.         {
  46.             var factor:uint = gcf(numerator,denomenator);
  47.             numerator /= factor;
  48.             denomenator /= factor;
  49.             cacheValue();
  50.             return this;
  51.         }
  52.        
  53.         public function addFract(val:Fraction):Fraction
  54.         {
  55.             numerator = numerator * val.denomenator + val.numerator * denomenator;
  56.             denomenator = denomenator * val.denomenator;
  57.             pos = (value + val.value >= 0);
  58.             return simplify();
  59.         }
  60.        
  61.         public function subFract(val:Fraction):Fraction
  62.         {
  63.             numerator = numerator * val.denomenator - val.numerator * denomenator;
  64.             denomenator = denomenator * val.denomenator;
  65.             pos = (value - val.value >= 0);
  66.             return simplify();
  67.         }
  68.        
  69.         public function multFract(val:Fraction):Fraction
  70.         {
  71.             numerator *= val.numerator;
  72.             denomenator *= val.denomenator;
  73.             pos = (pos == val.pos);
  74.             return simplify();
  75.         }
  76.        
  77.         public function divFract(val:Fraction):Fraction
  78.         {
  79.             numerator *= val.denomenator;
  80.             denomenator *= val.numerator;
  81.             pos = (pos == val.pos);
  82.             return simplify();
  83.         }
  84.        
  85.         public function addInt(val:int):Fraction
  86.         {
  87.             numerator += denomenator * val;
  88.             pos = (value + val >= 0);
  89.             return simplify();
  90.         }
  91.        
  92.         public function subInt(val:int):Fraction
  93.         {
  94.             numerator -= denomenator * val;
  95.             pos = (value - val >= 0);
  96.             return simplify();
  97.         }
  98.        
  99.         public function multInt(val:int):Fraction
  100.         {
  101.             numerator *= val;
  102.             pos = (pos == (val >= 0));
  103.             return simplify();
  104.         }
  105.        
  106.         public function divInt(val:int):Fraction
  107.         {
  108.             denomenator *= val;
  109.             pos = (pos == (val >= 0));
  110.             return simplify();
  111.         }
  112.        
  113.         public function reciprocal():Fraction
  114.         {
  115.             return (new Fraction(denomenator, numerator, pos));
  116.         }
  117.        
  118.         public function fracPart():Fraction
  119.         {
  120.             var part:Fraction = clone();
  121.             part.numerator %= part.denomenator
  122.             return part;
  123.         }
  124.        
  125.         public function abs():Fraction
  126.         {
  127.             pos = true;
  128.             return (simplify());
  129.         }
  130.        
  131.         public function cacheValue():Number
  132.         {
  133.             value = (pos?1: -1) * Number(numerator) / Number(denomenator);
  134.             return value;
  135.         }
  136.        
  137.         public function toString():String
  138.         {
  139.             return ((pos?"":"-") + String(numerator) + "/" + String(denomenator));
  140.         }
  141.        
  142.         public function toMixedNum():String
  143.         {
  144.             return(String(int(value)) + " and " + fracPart().abs());
  145.         }
  146.        
  147.         public function clone():Fraction
  148.         {
  149.             return new Fraction(numerator, denomenator, pos);
  150.         }
  151.     }
  152.  
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement