home *** CD-ROM | disk | FTP | other *** search
- (**************************************************************************)
- (* INTLOGIK.PAS *)
- (* Das INCLUDE-Modul "INT.Logik" implementiert unter Ausnutzung des CASE- *)
- (* Tricks die logischen Funktionen AND,OR,XOR,EQV,IMP auch fuer INTEGER- *)
- (* Operanden, wobei das Ergebnis natuerlich wieder vom typ INTEGER ist ! *)
- (* *)
- (* Das Modul stellt folgende Funktionen zur Verfuegung : *)
- (* *)
- (* FUNCTION XOR (b1, b2: BOOLEAN): BOOLEAN *)
- (* FUNCTION EQV (b1, b2: BOOLEAN): BOOLEAN *)
- (* FUNCTION IMP (b1, b2: BOOLEAN): BOOLEAN *)
- (* *)
- (* FUNCTION int_AND (i1, i2: INTEGER): INTEGER *)
- (* FUNCTION int_OR (i1, i2: INTEGER): INTEGER *)
- (* FUNCTION int_XOR (i1, i2: INTEGER): INTEGER *)
- (* FUNCTION int_EQV (i1, i2: INTEGER): INTEGER *)
- (* FUNCTION int_IMP (i1, i2: INTEGER): INTEGER *)
- (* FUNCTION int_NOT (i : INTEGER): INTEGER *)
- (* *)
- (**************************************************************************)
-
- (*------------------------ globale Typenvereinbarung ---------------------*)
-
- TYPE int_typ = RECORD
- CASE INTEGER OF (* ein sog. freier Verbund *)
- 1 : (int_zahl: INTEGER);
- 2 : (int_feld: PACKED ARRAY [0..15] OF BOOLEAN)
- END;
-
- (*************************************************************************)
- (* Ab hier die Formulierung der im Pascal-Wortschatz nicht vorhandenen *)
- (* logischen Funktionen XOR, EQV und IMP *)
- (* *)
- (* Wahrheitstafeln XOR : 0 1 EQV : 0 1 IMP : 0 1 *)
- (* -------- ------- ------- *)
- (* 0 : 0 1 0 : 1 0 0 : 1 1 *)
- (* 1 : 1 0 1 : 0 1 1 : 0 1 *)
- (* *)
- (*************************************************************************)
-
-
- FUNCTION EQV (b1, b2: BOOLEAN): BOOLEAN; (* logische Aequivalenz *)
-
- BEGIN EQV := (b1 = b2) END;
-
-
- FUNCTION IMP (b1, b2: BOOLEAN): BOOLEAN; (* logische Implikation *)
-
- BEGIN IMP := (NOT (b1 AND (NOT b2))) END;
-
-
- FUNCTION XOR (b1, b2: BOOLEAN): BOOLEAN; (* logisches exklusives ODER *)
-
- BEGIN XOR := (NOT EQV(b1,b2)) END;
-
-
- (**************************************************************************)
- (* Ab hier nun die Formulierung der einzelnen Routinen zur Anwendung *)
- (* aller logischer Funktionen auch auf INTEGER-Zahlen. *)
- (**************************************************************************)
-
- FUNCTION int_AND (i1, i2: INTEGER): INTEGER; (* INT.logisches AND *)
-
- VAR op1, op2, erg: int_typ; (* zur Anwendung des CASE-Tricks *)
- j : INTEGER;
-
- BEGIN
- op1.int_zahl := i1; (* Operanden als INTEGER-Zahl behandeln *)
- op2.int_zahl := i2;
- FOR j := 0 TO 15 DO (* bitweise Logik *)
- erg.int_feld[j] := (op1.int_feld[j] AND op2.int_feld[j]);
- int_AND := erg.int_zahl
- END;
-
-
- FUNCTION int_OR (i1, i2: INTEGER): INTEGER; (* INT.logisches OR *)
-
- VAR op1, op2, erg: int_typ; (* zur Anwendung des CASE-Tricks *)
- j : INTEGER;
-
- BEGIN
- op1.int_zahl := i1; op2.int_zahl := i2;
- FOR j := 0 TO 15 DO (* bitweise Logik *)
- erg.int_feld[j] := (op1.int_feld[j] OR op2.int_feld[j]);
- int_OR := erg.int_zahl
- END;
-
-
- FUNCTION int_XOR (i1, i2: INTEGER): INTEGER; (* INT.logisches XOR *)
-
- VAR op1, op2, erg: int_typ; (* zur Anwendung des CASE-Tricks *)
- j : INTEGER;
-
- BEGIN
- op1.int_zahl := i1; op2.int_zahl := i2;
- FOR j := 0 TO 15 DO (* bitweise Logik *)
- erg.int_feld[j] := XOR(op1.int_feld[j], op2.int_feld[j]);
- int_XOR := erg.int_zahl
- END;
-
-
- FUNCTION int_EQV (i1, i2: INTEGER): INTEGER; (* INT.logisches EQV *)
-
- VAR op1, op2, erg: int_typ; (* zur Anwendung des CASE-Tricks *)
- j : INTEGER;
-
- BEGIN
- op1.int_zahl := i1; op2.int_zahl := i2;
- FOR j := 0 TO 15 DO (* bitweise Logik *)
- erg.int_feld[j] := EQV(op1.int_feld[j], op2.int_feld[j]);
- int_EQV:=erg.int_zahl
- END;
-
-
- FUNCTION int_IMP (i1, i2: INTEGER): INTEGER; (* INT.logisches IMP *)
-
- VAR op1, op2, erg: int_typ; (* zur Anwendung des CASE-Tricks *)
- j : INTEGER;
-
- BEGIN
- op1.int_zahl := i1; op2.int_zahl:=i2;
- FOR j := 0 TO 15 DO (* bitweise Logik *)
- erg.int_feld[j] := IMP(op1.int_feld[j], op2.int_feld[j]);
- int_IMP := erg.int_zahl
- END;
-
-
- FUNCTION int_NOT (i: INTEGER): INTEGER; (* INT.logisches NOT = Kompl. *)
-
- VAR op, erg: int_typ; (* zur Anwendung des CASE-Tricks *)
- j : INTEGER;
-
- BEGIN
- op.int_zahl := i;
- FOR j := 0 TO 15 DO erg.int_feld[j] := (NOT op.int_feld[j]);
- int_NOT := erg.int_zahl
- END;
-
- (*------------------------------------------------------------------------*)
- (* Ende von INTLOGIK.PAS *)
-