home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
modula2
/
library
/
fst
/
modula3
/
cardinal.mod
< prev
next >
Wrap
Text File
|
1993-07-28
|
3KB
|
119 lines
MODULE bigcardtest;
(* Programm zum Testen von Bigcardi,
Rechnen mit Zahlen größer als MAXCARDINAL.
Eingegeben können aber nur Zahlen werden, die kleiner oder gleich
MAXCARDINAL sind.
Zur Verfügung stehen folgende Operationen:
- Addition,
- Multiplikation,
- Exponentialfunktion,
- Fakultät.
*)
FROM bigcardinal IMPORT BigNo,Create,Enter,Add,Mul,Power,Out,Tausch;
FROM IO IMPORT WrLn,WrStr,RdStr,WrCard;
FROM InOut IMPORT ReadCard,Read,Write,Done;
TYPE digit=[0..9];
VAR a,b,z:BigNo;
n,m,exp:CARDINAL;
jn:CHAR;
PROCEDURE fac(k:CARDINAL;VAR z:BigNo);
(* Berechnung der Fakultät von a, gespeichert in z *)
VAR i:CARDINAL;
lauf:BigNo;
BEGIN
Create(lauf);
Enter(z,1);
FOR i:= 1 TO k DO
Enter(lauf,i);
Mul(z,lauf,z);
END;
END fac;
BEGIN
WrStr('Dieses Programm dient der Berechnung von großen Cardinalzahlen.');
WrLn;
REPEAT
LOOP
WrLn;
WrStr('Bitte geben Sie Zahl a ein: ');
ReadCard(n);
IF ~Done THEN WrLn;
WrStr('Falsche Eingabe!');
ELSE EXIT
END; (* IF *)
END; (* LOOP *)
Create(a);
Enter(a,n);
LOOP
WrLn;
WrStr('Bitte geben Sie Zahl b ein: ');
ReadCard(m);
IF ~Done THEN WrLn;
WrStr('Falsche Eingabe!');
ELSE EXIT
END; (* IF *)
END; (* LOOP *)
WrLn;
Create(b);
Enter(b,m);
Create(z);
WrStr('Folgende Operationen stehen zur Verfügung:'); WrLn;
REPEAT
WrStr('1: Add: a+b; 2: Mul: a*b; 3: Hoch: a^x;');WrLn;
WrStr('4: Fakultät von x'); WrLn;
WrStr('Treffen Sie eine Auswahl: ');
ReadCard(n);
CASE n OF
1: WrLn;
Add(a,b,z);
WrStr('Summe a+b: ');
Out(z);|
2: WrLn;
Mul(a,b,z);
WrStr('Produkt a*b: ');
Out(z);|
3: WrLn;
WrStr('Geben Sie den Exponenten ein: ');
ReadCard(exp);WrLn;
Power(a,exp,z);
WrStr('a Hoch exp: ');
Out(z);|
(* 4: WrLn;
Tausch(a,b);
WrStr('Wert von a: ');
Out(a);WrLn;
WrStr('Wert von b: ');
Out(b);| *)
4: WrLn;
WrStr('Fakultät von ');
ReadCard(n);
WrStr(' = ');
fac(n,z);
Out(z);WrLn;
ELSE
WrLn;
WrStr('Falsche Eingabe.');WrLn;
END; (* CASE *)
WrLn;
WrStr('Weitere Berechnungen mit a,b ? ');
Read(jn); Write(jn);WrLn;
UNTIL (jn="n") OR (jn="N");
WrLn;
WrStr('a,b neu setzten ? ');
Read(jn); Write(jn);WrLn;
UNTIL (jn="n") OR (jn="N")
END bigcardtest.