aboutsummaryrefslogtreecommitdiff
path: root/projects/09/Fraction
diff options
context:
space:
mode:
authorYuchen Pei <me@ypei.me>2018-01-20 15:41:49 +0100
committerYuchen Pei <me@ypei.me>2018-01-20 15:41:49 +0100
commitd3a0cc3a8ba6dfeb64d3faeffdeb6845b60e5840 (patch)
treed58df9ec2480e2a9ec6240f9c797f83d1a0b1056 /projects/09/Fraction
parent3571f998b28fbc8d9250ba04c983935f10a16c15 (diff)
rearranged the dir for github
- removed tools and pdfs - rearranged the projects dirs - added md files - other minor changes
Diffstat (limited to 'projects/09/Fraction')
-rw-r--r--projects/09/Fraction/Fraction.jack65
-rw-r--r--projects/09/Fraction/Main.jack16
2 files changed, 0 insertions, 81 deletions
diff --git a/projects/09/Fraction/Fraction.jack b/projects/09/Fraction/Fraction.jack
deleted file mode 100644
index c86f0a5..0000000
--- a/projects/09/Fraction/Fraction.jack
+++ /dev/null
@@ -1,65 +0,0 @@
-// This file is part of www.nand2tetris.org
-// and the book "The Elements of Computing Systems"
-// by Nisan and Schocken, MIT Press.
-// File name: projects/09/Fraction/Fraction.jack
-
-/** Represents the Fraction type and related operations. */
-class Fraction {
- field int numerator, denominator; // field = property = member variable.
-
- /** Constructs a (reduced) fraction from the given numerator and denominator. */
- constructor Fraction new(int x, int y) {
- let numerator = x;
- let denominator = y;
- do reduce(); // reduces the fraction
- return this; // a constructor is expected to return a reference to the new object
- }
-
- // Reduces this fraction.
- method void reduce() {
- var int g;
- let g = Fraction.gcd(numerator, denominator);
- if (g > 1) {
- let numerator = numerator / g;
- let denominator = denominator / g;
- }
- return;
- }
-
- /** Accessors. */
- method int getNumerator() { return numerator; }
- method int getDenominator() { return denominator; }
-
- /** Returns the sum of this fraction and the other one. */
- method Fraction plus(Fraction other) {
- var int sum;
- let sum = (numerator * other.getDenominator()) + (other.getNumerator() * denominator);
- return Fraction.new(sum, denominator * other.getDenominator());
- }
-
- // More fraction-related methods (minus, times, div, etc.) can be added here.
-
- /** Disposes this fraction. */
- method void dispose() {
- do Memory.deAlloc(this); // uses an OS routine to recycle the memory held by the object
- return;
- }
-
- /** Prints this fraction in the format x/y. */
- method void print() {
- do Output.printInt(numerator);
- do Output.printString("/");
- do Output.printInt(denominator);
- return;
- }
-
- // Computes the greatest common divisor of the given integers.
- function int gcd(int a, int b) {
- var int r;
- while (~(b = 0)) { // applies Euclid's algorithm
- let r = a - (b * (a / b)); // r = remainder of the integer division a/b
- let a = b; let b = r;
- }
- return a;
- }
-}
diff --git a/projects/09/Fraction/Main.jack b/projects/09/Fraction/Main.jack
deleted file mode 100644
index 43ddece..0000000
--- a/projects/09/Fraction/Main.jack
+++ /dev/null
@@ -1,16 +0,0 @@
-// This file is part of www.nand2tetris.org
-// and the book "The Elements of Computing Systems"
-// by Nisan and Schocken, MIT Press.
-// File name: projects/09/Fraction/Main.jack
-
-// Computes the sum of 2/3 and 1/5.
-class Main {
- function void main() {
- var Fraction a, b, c;
- let a = Fraction.new(2,3);
- let b = Fraction.new(1,5);
- let c = a.plus(b); // Computes c = a + b
- do c.print(); // Prints "13/15"
- return;
- }
-}