home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
intlogik.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1987-05-18
|
6KB
|
141 lines
(**************************************************************************)
(* 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 *)