Autor |
Beitrag |
Funkydonkey
Hält's aus hier
Beiträge: 5
|
Verfasst: So 12.12.10 13:51
Könnte mir viellecht jemand, die einzelen Programmschritte folgenden Programms erklären? Ich schreibe Anfang nächter Woche eine Informatik Klausur über dieses Programm, nur blicke ich nicht vollständig durch. Wäre super wenn mir jemand helfen könnte.
Vielen Dank im Vorraus!
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. |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.12.10 14:39
|
|
Funkydonkey 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 12.12.10 15:17
Die Zeilen 46-49, 52-54, 57, 141+142, 150-153, 156-165 
|
|
wirbeldelphi
      
Beiträge: 29
|
Verfasst: So 12.12.10 16:11
Du meinst, du hast dich gar nicht damit beschäftigt.
_________________ Ich bin keine Signatur - ich putz hier nur.
|
|
Funkydonkey 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 12.12.10 16:29
Doch klar, nur ich kenne die verschiedenen Vorgehensweisen einfach nicht.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 12.12.10 17:09
45-49 1: 2: 3: 4: 5:
| 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; |
Hier werden verschiedene Typen deklariert. Einmal ein array aus ShortInts = NullEins.
Dann ein Array of bitfolge = Array of array of ShortInt.
Und ein Array aus Strings und aus Chars. Die Zahlen in eckigen Klammern geben jeweils an, welchen Bereich das array abdeckt (es besteht z.B. aus den Einträgen [1],[2] und [3]).
52-55 1: 2: 3: 4:
| bz: bitfolgen; XOR_Erg: bitfolge; binzahl: tbinzahl; |
Hier werden 3 Variablen deklariert, von den oben definierten typen. (sozusagen instantiiert)
136-143 1: 2: 3: 4: 5: 6: 7: 8:
| 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; |
h ist ein array [1..3] of char (siehe oben). bz ist ein zweidimensionales array. Die erste Dimension wird mit j durchlaufen, und dabei gibt "finde_Position_hoechster_1(XOR_Erg)" die Position in der zweiten Dimension an. Ist diese 1, so wird h[j] zu '+', sonst '-'. finde_Position_hoechster_1 ist eine funktion und gibt einen integer zurück.
145-154 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| 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; |
Hier wird im Wesentlichen die Caption des Buttons "Button_Analyse" gesetzt, bestehend aus 3 Chars, die zuvor aus der procedure Status_aller_drei_Zahlen(h) geliefert wurde (h ist dort als VAR definiert, somit werden Änderungen auch außerhalb der procedure vorgenommen).
156-166 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| 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; |
Hier wird im wesentlichen die Eingabe #13 (= Entertaste) auf #0 gesetzt. Dann wird geguckt, ob im angewählten Edit ne Zahl steht. Wenn ja wird berechnet...der Weg über das #0 ist etwas eigenwillig...es wird halt dann berechnet, wenn man Einter drückt...
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Funkydonkey 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 12.12.10 17:48
Könnte man die Zeilen 45-49 als dreidimensionales Array verstehen?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.12.10 19:33
Im Grunde ja, denn du kannst es auch so schreiben und nutzen: Delphi-Quelltext 1:
| bitfolgen = array[1..3] of array[0..bits] of ShortInt; | Streng genommen ist es bei dir keins, weil die inneren Arrays eigene Typen sind.
|
|
Funkydonkey 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 13.12.10 09:40
Habe gerade nochmal drübergeguckt. Wäre es nicht doch ein zweidimensionales Array? Ich sehe die dritte nicht.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 13.12.10 09:45
Da habe ich gar nicht drauf geachtet, klar. Mir ging es um das Prinzip. 
|
|
|