home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / turbopas / frac.pqs / FRAC.PAS
Pascal/Delphi Source File  |  1986-04-07  |  4KB  |  228 lines

  1. PROGRAM FRACTIONS;
  2. {$A-}
  3. {J. BEAHM 1/23/86}
  4. {PROGRAM TO ADD OR SUBTRACT FRACTIONS WITH UNLIKE DENOMINATORS}
  5. {SIMPLIFIES ANSWER}
  6. {IF YOU HAVE LONG_INTEGER ON PASCAL VERSION, USE IT INSTEAD OF INTEGER}
  7.  
  8. VAR
  9.  
  10.    NUM,                  {NUMERATOR AFTER + OR -}
  11.    DEN,                  {COMMON DENOMINATOR}
  12.    FACTOR,               {GREATEST COMMON FACTOR}
  13.    N1,                   {FIRST NUMERATOR ENTERED}
  14.    N2,                   {SECOND NUMERATOR}
  15.    D1,                   {FIRST DENOMINATOR}
  16.    D2,                   {SECOND DENOMINATOR}
  17.    N3,                   {NUMERATOR FROM N1 FOR EQUIV. FRACTION}
  18.    N4:INTEGER;           {NUMERATOR FROM N2  "   "      "}
  19.    ANS,                  {ANSWER (Y/N)}
  20.    OP:CHAR;              {OPERATION (+ OR -)}
  21.    B1,
  22.    B2:STRING[3];
  23.  
  24. {********************************************}
  25.  
  26. FUNCTION GCF(K1,K2:INTEGER):INTEGER;
  27.  
  28.  
  29. {RECURSIVE FUNCTION TO FIND G.C.F.}
  30.  
  31. BEGIN
  32.      IF K1 MOD K2 = 0 THEN
  33.         GCF:=K2
  34.      ELSE
  35.          GCF:=GCF(K2,K1 MOD K2);
  36.  
  37. END;
  38.  
  39. {*****************************************}
  40.  
  41. PROCEDURE ENTRY;
  42.  
  43. {PROCEDURE TO ENTER NUMBERS AND OPERATION}
  44.  
  45. BEGIN
  46.  
  47.       CLRSCR;
  48.  
  49.       GOTOXY(1,1);
  50.       WRITELN('ENTER THE NUMERATORS, DENOMINATORS, AND OPERATION AS INDICATED');
  51.       GOTOXY(5,6);
  52.       WRITE('-----');
  53.       GOTOXY(5,12);
  54.       WRITE('-----');
  55.  
  56.       GOTOXY(6,5);
  57.       READLN(N1);
  58.  
  59.       GOTOXY(6,7);
  60.       READLN(D1);
  61.       REPEAT
  62.             GOTOXY(3,12);
  63.             READLN(OP);
  64.       UNTIL (OP='+') OR (OP='-');
  65.  
  66.  
  67.       GOTOXY(6,11);
  68.       READLN(N2);
  69.  
  70.       GOTOXY(6,13);
  71.       READLN(D2);
  72.  
  73.  
  74.       GOTOXY(12,6);
  75.       WRITE('=');
  76.  
  77.       GOTOXY(12,12);
  78.       WRITE('=');
  79.  
  80.       GOTOXY(1,16);
  81.       WRITE('-------------------------');
  82.  
  83. END;
  84.  
  85. {***********************************}
  86.  
  87. PROCEDURE EQUIV_FRACT;
  88.  
  89. {PROCEDURE TO FIND EQUIVALENT FRACTIONS WITH LEAST COMMON DENOMINATOR}
  90.  
  91.  
  92. BEGIN
  93.      DEN:=D1 DIV FACTOR*D2;
  94.  
  95.      {FIND OUT IF WE GO OVER MAXINT}
  96.      IF D1<>DEN DIV D2*FACTOR THEN
  97.         WRITE('DENOMINATOR > MAXIMUM INTEGER, RESULTS NOT VALID');
  98.  
  99.      N3:=N1*(DEN DIV D1);
  100.      N4:=N2*(DEN DIV D2);
  101.  
  102.      GOTOXY(15,5);
  103.      WRITE(N3);
  104.  
  105.      GOTOXY(14,6);
  106.      WRITE('-----');
  107.  
  108.  
  109.  
  110.      GOTOXY(15,7);
  111.      WRITE(DEN);
  112.  
  113.      GOTOXY(15,11);
  114.      WRITE(N4);
  115.  
  116.      GOTOXY(14,12);
  117.      WRITE('-----');
  118.  
  119.  
  120.      GOTOXY(15,13);
  121.      WRITE(DEN);
  122.  
  123. END;
  124.  
  125. {************************************}
  126.  
  127. PROCEDURE WORK;
  128.  
  129. {ADD OR SUBTRACT EQUIVALENT FRACTIONS}
  130.  
  131. BEGIN
  132.      IF OP='+' THEN
  133.         NUM:=N3+N4
  134.      ELSE
  135.         NUM:=N3-N4;
  136.  
  137.      GOTOXY(15,20);
  138.      WRITE(NUM);
  139.  
  140.      GOTOXY(14,21);
  141.      WRITE('-----');
  142.  
  143.      GOTOXY(15,22);
  144.      WRITE(DEN);
  145.  
  146.  
  147.  
  148. END;
  149.  
  150. {****************************************}
  151.  
  152. PROCEDURE REDUCE;
  153.  
  154. {REDUCE IF POSSIBLE}
  155.  
  156. BEGIN
  157.      FACTOR:=GCF(NUM,DEN);
  158.      IF GCF(NUM,DEN)>1 THEN
  159.         BEGIN
  160.              NUM:=NUM DIV FACTOR;
  161.              DEN:=DEN DIV FACTOR;
  162.  
  163.              GOTOXY(20,21);
  164.              WRITE('=');
  165.  
  166.  
  167.              GOTOXY(23,20);
  168.              WRITE(NUM);
  169.  
  170.  
  171.              GOTOXY(22,21);
  172.              WRITE('-----');
  173.  
  174.  
  175.              GOTOXY(23,22);
  176.              WRITE(DEN);
  177.  
  178.  
  179.        END;
  180.  
  181. END;
  182.  
  183. {**************************************}
  184.  
  185.  
  186. PROCEDURE SIMPLIFY;
  187.  
  188. {SIMPLIFY IF IMPROPER FRACTION}
  189.  
  190. VAR
  191.    WN:INTEGER; {WHOLE NUMBER FROM IMPROPER FRACTION}
  192.  
  193. BEGIN
  194.      IF NUM>DEN THEN
  195.         BEGIN
  196.              WN:=NUM DIV DEN;
  197.              NUM:=NUM MOD DEN;
  198.  
  199.              GOTOXY(28,21);
  200.              WRITE('= ',WN,' -----');
  201.  
  202.              GOTOXY(33,20);
  203.              WRITE(NUM);
  204.  
  205.              GOTOXY(33,22);
  206.              WRITE(DEN);
  207.  
  208.           END;
  209.  
  210. END;
  211.  
  212. {*******************************************}
  213.  
  214.  
  215. BEGIN {MAIN PROGRAM}
  216.    REPEAT
  217.      ENTRY;
  218.      FACTOR:=GCF(D1,D2);
  219.      EQUIV_FRACT;
  220.      WORK;
  221.      REDUCE;
  222.      SIMPLIFY;
  223.      GOTOXY(1,24);
  224.      WRITE('ANOTHER? (Y/N)');
  225.      READLN(ANS);
  226.    UNTIL (ANS='N') OR (ANS='n');
  227. END.
  228.