1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202:
| program Nim; uses Forms, Unit1 in 'Unit1.pas' ; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
UNIT Unit1; INTERFACE USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; TYPE TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Edit2: TEdit; Label2: TLabel; Edit3: TEdit; Label3: TLabel; Label_XOR: TLabel; Panel1: TPanel; Button_Analyse: TButton; PROCEDURE Edit1KeyPress(Sender: TObject; VAR Key: CHAR); PROCEDURE Edit2KeyPress(Sender: TObject; VAR Key: CHAR); PROCEDURE Edit3KeyPress(Sender: TObject; VAR Key: CHAR); PROCEDURE Button_AnalyseClick(Sender: TObject); private
public
END; VAR Form1: TForm1; IMPLEMENTATION {$R *.dfm} CONST bits=15; TYPE NullEins = ShortInt; bitfolge = ARRAY[0..bits] OF NullEins; bitfolgen= ARRAY[1..3] OF bitfolge; sbitfolgen= ARRAY[1..3] OF STRING; tbinzahl=ARRAY[1..3] OF CHAR;
VAR bz: bitfolgen; XOR_Erg: bitfolge; binzahl: tbinzahl; PROCEDURE analysiere; FORWARD;
FUNCTION XOR3(a,b,c: NullEins): NullEins; FUNCTION XOR2(a,b: NullEins): NullEins; BEGIN IF a<>b THEN XOR2:=1 ELSE XOR2:=0; END; BEGIN XOR3:=XOR2(XOR2(a,b),c); END;
PROCEDURE berechne; VAR z1,z2,z3: INTEGER; i: INTEGER; bfolge: sbitfolgen; sXOR: STRING;
PROCEDURE BitsToString(bz: bitfolgen; VAR s: sbitfolgen); VAR i,j: INTEGER; BEGIN s[1]:=''; s[2]:='';s[3]:=''; FOR j:=1 TO 3 DO FOR i:=0 TO bits DO BEGIN s[j]:=intToStr(bz[j,i])+s[j]; IF (i MOD 4=3) AND (i<>bits) THEN s[j]:=':'+s[j]; END; END;
BEGIN WITH form1 DO BEGIN z1:=StrToInt(edit1.TEXT); z2:=StrToInt(edit2.TEXT); z3:=StrToInt(edit3.TEXT);
FOR i:= 0 TO bits DO BEGIN bz[1,i]:= z1 MOD 2; z1:= z1 DIV 2; bz[2,i]:= z2 MOD 2; z2:= z2 DIV 2; bz[3,i]:= z3 MOD 2; z3:= z3 DIV 2; END; BitsToString(bz, bfolge); Label1.Caption:=bfolge[1]; Label2.Caption:=bfolge[2]; Label3.Caption:=bfolge[3];
FOR i:= 0 TO bits DO XOR_Erg[i]:=XOR3( bz[1,i],bz[2,i],bz[3,i]); sXOR:=''; FOR i:=0 TO bits DO BEGIN sXOR:=IntToStr(XOR_Erg[i])+sXOR; IF (i MOD 4=3) AND (i<>bits) THEN sXOR:=':'+sXOR; END; Label_XOR.Caption:= sXOR; END; analysiere; END; FUNCTION finde_Position_hoechster_1(b: bitfolge):INTEGER; VAR i: INTEGER; gefunden: BOOLEAN; BEGIN i:=bits; gefunden:=FALSE; WHILE (i>=0) AND NOT gefunden DO BEGIN gefunden:= (b[i]=1); Dec(i); END; finde_Position_hoechster_1:=i+1; END;
PROCEDURE Status_aller_drei_Zahlen(VAR h: tbinzahl); VAR j: INTEGER; BEGIN FOR j:=1 TO 3 DO IF bz[j][finde_Position_hoechster_1(XOR_Erg)]=1 THEN h[j]:='+' ELSE h[j]:='-'; END;
PROCEDURE analysiere; VAR h: tbinzahl; BEGIN Status_aller_drei_Zahlen(h); Form1.button_Analyse.Caption:=
'Status '+h[1]+' '+h[2]+' '+h[3]+ ' (Bit '+IntToStr(finde_Position_hoechster_1( XOR_Erg))+')'; END;
PROCEDURE tuwas(Sender: TObject; VAR Key: CHAR); VAR dummy: INTEGER; BEGIN IF Key=#13 THEN Key:=#0; IF Sender is TEdit THEN WITH Sender as TEdit DO IF TryStrToInt(TEXT, dummy) THEN IF key=#0 THEN berechne; END;
PROCEDURE TForm1.Edit1KeyPress(Sender: TObject; VAR Key: CHAR); VAR dummy: INTEGER; BEGIN
IF Key=#13 THEN Key:=#0; IF TryStrToInt(Edit1.TEXT, dummy) THEN IF key=#0 THEN berechne; END;
PROCEDURE TForm1.Edit2KeyPress(Sender: TObject; VAR Key: CHAR); BEGIN tuwas(Sender, Key); END;
PROCEDURE TForm1.Edit3KeyPress(Sender: TObject; VAR Key: CHAR); BEGIN tuwas(Sender, Key); END;
PROCEDURE TForm1.Button_AnalyseClick(Sender: TObject); BEGIN berechne; END;
END. |