home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / modula2 / library / fst / modula3 / cardinal.mod < prev    next >
Text File  |  1993-07-28  |  3KB  |  119 lines

  1. MODULE bigcardtest;
  2.  
  3. (* Programm zum Testen von Bigcardi,
  4.    Rechnen mit Zahlen größer als MAXCARDINAL.
  5.    Eingegeben können aber nur Zahlen werden, die kleiner oder gleich
  6.    MAXCARDINAL sind.
  7.    Zur Verfügung stehen folgende Operationen:
  8.      - Addition,
  9.      - Multiplikation,
  10.      - Exponentialfunktion,
  11.      - Fakultät.
  12. *)
  13.  
  14. FROM bigcardinal IMPORT BigNo,Create,Enter,Add,Mul,Power,Out,Tausch;
  15. FROM IO          IMPORT WrLn,WrStr,RdStr,WrCard;
  16. FROM InOut       IMPORT ReadCard,Read,Write,Done;
  17.  
  18. TYPE digit=[0..9];
  19.  
  20. VAR a,b,z:BigNo;
  21.     n,m,exp:CARDINAL;
  22.     jn:CHAR;
  23.  
  24.  
  25. PROCEDURE fac(k:CARDINAL;VAR z:BigNo);
  26. (* Berechnung der Fakultät von a, gespeichert in z *)
  27.   VAR i:CARDINAL;
  28.       lauf:BigNo;
  29.   BEGIN
  30.     Create(lauf);
  31.     Enter(z,1);
  32.     FOR i:= 1 TO k DO
  33.       Enter(lauf,i);
  34.       Mul(z,lauf,z);
  35.     END;
  36.   END fac;
  37.  
  38. BEGIN
  39.  
  40.   WrStr('Dieses Programm dient der Berechnung von großen Cardinalzahlen.');
  41.   WrLn;
  42.   REPEAT
  43.     LOOP
  44.       WrLn;
  45.       WrStr('Bitte geben Sie Zahl a ein: ');
  46.       ReadCard(n);
  47.       IF ~Done THEN WrLn;
  48.                     WrStr('Falsche Eingabe!');
  49.       ELSE EXIT
  50.       END;  (* IF *)
  51.     END;  (* LOOP *)
  52.     Create(a);
  53.     Enter(a,n);
  54.  
  55.     LOOP
  56.       WrLn;
  57.       WrStr('Bitte geben Sie Zahl b ein: ');
  58.       ReadCard(m);
  59.       IF ~Done THEN WrLn;
  60.                     WrStr('Falsche Eingabe!');
  61.       ELSE EXIT
  62.       END;  (* IF *)
  63.     END;  (* LOOP *)
  64.     WrLn;
  65.     Create(b);
  66.     Enter(b,m);
  67.  
  68.     Create(z);
  69.  
  70.     WrStr('Folgende Operationen stehen zur Verfügung:'); WrLn;
  71.     REPEAT
  72.       WrStr('1: Add: a+b;   2: Mul: a*b;   3: Hoch: a^x;');WrLn;
  73.       WrStr('4: Fakultät von x'); WrLn;
  74.       WrStr('Treffen Sie eine Auswahl: ');
  75.       ReadCard(n);
  76.  
  77.       CASE n OF
  78.         1: WrLn;
  79.            Add(a,b,z);
  80.            WrStr('Summe a+b: ');
  81.            Out(z);|
  82.         2: WrLn;
  83.            Mul(a,b,z);
  84.            WrStr('Produkt a*b: ');
  85.            Out(z);|
  86.         3: WrLn;
  87.            WrStr('Geben Sie den Exponenten ein: ');
  88.            ReadCard(exp);WrLn;
  89.            Power(a,exp,z);
  90.            WrStr('a Hoch exp: ');
  91.            Out(z);|
  92. (*        4: WrLn;
  93.            Tausch(a,b);
  94.            WrStr('Wert von a: ');
  95.            Out(a);WrLn;
  96.            WrStr('Wert von b: ');
  97.            Out(b);|                 *)
  98.         4: WrLn;
  99.            WrStr('Fakultät von ');
  100.            ReadCard(n);
  101.            WrStr(' = ');
  102.            fac(n,z);
  103.            Out(z);WrLn;
  104.       ELSE
  105.         WrLn;
  106.         WrStr('Falsche Eingabe.');WrLn;
  107.       END;  (* CASE *)
  108.       WrLn;
  109.       WrStr('Weitere Berechnungen mit a,b ?  ');
  110.       Read(jn); Write(jn);WrLn;
  111.     UNTIL (jn="n") OR (jn="N");
  112.  
  113.     WrLn;
  114.     WrStr('a,b neu setzten ?  ');
  115.     Read(jn); Write(jn);WrLn;
  116.   UNTIL (jn="n") OR (jn="N")
  117. END bigcardtest.
  118.  
  119.