Autor Beitrag
Funkydonkey
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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!

ausblenden volle Höhe Delphi-Quelltext
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' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
(* ---------------------------------------------------*)
UNIT Unit1;
// NIM-Spiel [02] Dez 2010
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
{ Private-Deklarationen }
public
{ Public-Deklarationen }
END;
VAR
Form1: TForm1;
IMPLEMENTATION
{$R *.dfm}
{ 1} CONST
{ 2} bits=15//0..bits
{ 3} TYPE
{ 4} NullEins = ShortInt;
{ 5} bitfolge = ARRAY[0..bits] OF NullEins; //eine Folge als 01
{ 6} bitfolgen= ARRAY[1..3OF bitfolge; //alle drei Folgen als 01
{ 7} sbitfolgen= ARRAY[1..3OF STRING//alle drei Folgen als Strings
{ 8} tbinzahl=ARRAY[1..3OF CHAR;
{ 9}
{ 10} VAR
{ 11} bz: bitfolgen; //die drei Zahlen bitweise ( 0 und 1)
{ 12} XOR_Erg: bitfolge; //Ergebnis der Analyse der 3 Zahlen
{ 13} binzahl: tbinzahl; //enthalten die drei Zahlen an der höchsten XOR-Stelle
{ 14} //eine 0(-) oder eine 1(+)
{ 15}
{ 16} PROCEDURE analysiere; FORWARD;
{ 17}
{ 18} FUNCTION XOR3(a,b,c: NullEins): NullEins;
{ 19} FUNCTION XOR2(a,b: NullEins): NullEins;
{ 20} BEGIN
{ 21} IF a<>b THEN XOR2:=1 ELSE XOR2:=0;
{ 22} END;
{ 23} BEGIN
{ 24} XOR3:=XOR2(XOR2(a,b),c);
{ 25} END;
{ 26}
{ 27} PROCEDURE berechne;
{ 28} VAR
{ 29} z1,z2,z3: INTEGER;
{ 30} i: INTEGER;
{ 31} bfolge: sbitfolgen;
{ 32} sXOR: STRING;
{ 33}
{ 34} PROCEDURE BitsToString(bz: bitfolgen; VAR s: sbitfolgen);
{ 35} VAR
{ 36} i,j: INTEGER;
{ 37} BEGIN
{ 38} s[1]:=''; s[2]:='';s[3]:='';
{ 39} FOR j:=1 TO 3 DO
{ 40} FOR i:=0 TO bits DO
{ 41} BEGIN
{ 42} s[j]:=intToStr(bz[j,i])+s[j];
{ 43} IF (i MOD 4=3AND (i<>bits) THEN s[j]:=':'+s[j];
{ 44} END;
{ 45} END;
{ 46}
{ 47} BEGIN
{ 48} WITH form1 DO
{ 49} BEGIN
{ 50} z1:=StrToInt(edit1.TEXT);
{ 51} z2:=StrToInt(edit2.TEXT);
{ 52} z3:=StrToInt(edit3.TEXT);
{ 53}
{ 54} FOR i:= 0 TO bits DO
{ 55} BEGIN
{ 56} bz[1,i]:= z1 MOD 2; z1:= z1 DIV 2;
{ 57} bz[2,i]:= z2 MOD 2; z2:= z2 DIV 2;
{ 58} bz[3,i]:= z3 MOD 2; z3:= z3 DIV 2;
{ 59} END;
{ 60} BitsToString(bz, bfolge);
{ 61} Label1.Caption:=bfolge[1];
{ 62} Label2.Caption:=bfolge[2];
{ 63} Label3.Caption:=bfolge[3];
{ 64}
{ 65} FOR i:= 0 TO bits DO
{ 66} XOR_Erg[i]:=XOR3( bz[1,i],bz[2,i],bz[3,i]);
{ 67} sXOR:='';
{ 68} FOR i:=0 TO bits DO
{ 69} BEGIN
{ 70} sXOR:=IntToStr(XOR_Erg[i])+sXOR;
{ 71} IF (i MOD 4=3AND (i<>bits) THEN sXOR:=':'+sXOR;
{ 72} END;
{ 73} Label_XOR.Caption:= sXOR;
{ 74} END// WITH
{ 75}
{ 76} analysiere; // die 3 Zahlen
{ 77}
{ 78} END//berechne
{ 79}
{ 80} FUNCTION finde_Position_hoechster_1(b: bitfolge):INTEGER; //IN XOR
{ 81} VAR
{ 82} i: INTEGER;
{ 83} gefunden: BOOLEAN;
{ 84} BEGIN
{ 85} i:=bits;
{ 86} gefunden:=FALSE;
{ 87} WHILE (i>=0AND NOT gefunden DO
{ 88} BEGIN
{ 89} gefunden:= (b[i]=1);
{ 90} Dec(i); //i:=i-1
{ 91} END;
{ 92} finde_Position_hoechster_1:=i+1;
{ 93} END;
{ 94}
{ 95} PROCEDURE Status_aller_drei_Zahlen(VAR h: tbinzahl); //steht "dort" eine 1?
{ 96} VAR
{ 97} j: INTEGER;
{ 98} BEGIN
{ 99} FOR j:=1 TO 3 DO
{100} IF bz[j][finde_Position_hoechster_1(XOR_Erg)]=1
{101} THEN h[j]:='+' ELSE h[j]:='-'// + ja - nein
{102} END;
{103}
{104} PROCEDURE analysiere;
{105} VAR
{106} h: tbinzahl;
{107} BEGIN
{108} Status_aller_drei_Zahlen(h);
{109} Form1.button_Analyse.Caption:=
{110}
{111} 'Status '+h[1]+' '+h[2]+' '+h[3]+ ' (Bit '+IntToStr(finde_Position_hoechster_1(
XOR_Erg))+')';
{112} END;
{113}
{114} PROCEDURE tuwas(Sender: TObject; VAR Key: CHAR);
{115} VAR
{116} dummy: INTEGER;
{117} BEGIN
{118} IF Key=#13 THEN Key:=#0;
{119} IF Sender is TEdit THEN
{120} WITH Sender as TEdit DO
{121} IF TryStrToInt(TEXT, dummy)
{122} THEN IF key=#0
{123} THEN berechne;
{124} END;
{125}
{126}
{127} PROCEDURE TForm1.Edit1KeyPress(Sender: TObject; VAR Key: CHAR);
{128} VAR
{129} dummy: INTEGER;
{130} BEGIN
{
Beenden einer Eingabe mit [Enter]:
Zeilenumbrüche in einzeiligen Eingabefeldern sind logischerweise nicht erlaubt und
deshalb ertönt
bei Eingabe von [Enter] ein Fehlerton. Deshalb fängt man den Tastendruck im
"OnKeyPress"-Handler
des Edit-Controls ab und löscht ihn bei Bedarf (nämlich wenn es die [Enter]-Taste ist).
}

{137} IF Key=#13 THEN // #13 = [Enter]
{138} Key:=#0;
{139} IF TryStrToInt(Edit1.TEXT, dummy) //fehlerhafte Eingaben ignorieren
{140} THEN IF key=#0 THEN berechne;
{141} END;
{142}
{143} PROCEDURE TForm1.Edit2KeyPress(Sender: TObject; VAR Key: CHAR);
{144} BEGIN // kürzere Alternative für Profis
{145} tuwas(Sender, Key);
{146} END;
{147}
{148} PROCEDURE TForm1.Edit3KeyPress(Sender: TObject; VAR Key: CHAR);
{149} BEGIN
{150} tuwas(Sender, Key);
{151} END;
{152}
{153} PROCEDURE TForm1.Button_AnalyseClick(Sender: TObject);
{154} BEGIN
{155} berechne;
{156} END;
{157}
{158} END.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 12.12.10 14:39 
Hallo und :welcome:

user profile iconFunkydonkey hat folgendes geschrieben Zum zitierten Posting springen:
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.
Wäre super, wenn du konkret schreiben würdest was du nicht verstehst. :roll:

Wie sollen wir dir denn helfen, wenn gar nicht klar ist was du eigentlich nicht verstehst und wo du ein Problem hast? :gruebel:
Funkydonkey Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 12.12.10 15:17 
Die Zeilen 46-49, 52-54, 57, 141+142, 150-153, 156-165 :)
wirbeldelphi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 29



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 12.12.10 16:29 
Doch klar, nur ich kenne die verschiedenen Vorgehensweisen einfach nicht.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: So 12.12.10 17:09 
ausblenden 45-49
1:
2:
3:
4:
5:
{ 4} NullEins = ShortInt;
{ 5} bitfolge = ARRAY[0..bits] OF NullEins; //eine Folge als 01
{ 6} bitfolgen= ARRAY[1..3OF bitfolge; //alle drei Folgen als 01
{ 7} sbitfolgen= ARRAY[1..3OF STRING//alle drei Folgen als Strings
{ 8} tbinzahl=ARRAY[1..3OF 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]).

ausblenden 52-55
1:
2:
3:
4:
{ 11} bz: bitfolgen; //die drei Zahlen bitweise ( 0 und 1)
{ 12} XOR_Erg: bitfolge; //Ergebnis der Analyse der 3 Zahlen
{ 13} binzahl: tbinzahl; //enthalten die drei Zahlen an der höchsten XOR-Stelle
{ 14} //eine 0(-) oder eine 1(+)

Hier werden 3 Variablen deklariert, von den oben definierten typen. (sozusagen instantiiert)

ausblenden 136-143
1:
2:
3:
4:
5:
6:
7:
8:
PROCEDURE Status_aller_drei_Zahlen(VAR h: tbinzahl); //steht "dort" eine 1?
{ 96} VAR
{ 97} j: INTEGER;
{ 98} BEGIN
{ 99} FOR j:=1 TO 3 DO
{100} IF bz[j][finde_Position_hoechster_1(XOR_Erg)]=1
{101} THEN h[j]:='+' ELSE h[j]:='-'// + ja - nein
{102} 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.

ausblenden 145-154
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 PROCEDURE analysiere;
{105} VAR
{106} h: tbinzahl;
{107} BEGIN
{108} Status_aller_drei_Zahlen(h);
{109} Form1.button_Analyse.Caption:=
{110}
{111} 'Status '+h[1]+' '+h[2]+' '+h[3]+ ' (Bit '+IntToStr(finde_Position_hoechster_1(
XOR_Erg))+')';
{112} 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).

ausblenden 156-166
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
{114} PROCEDURE tuwas(Sender: TObject; VAR Key: CHAR);
{115} VAR
{116} dummy: INTEGER;
{117} BEGIN
{118} IF Key=#13 THEN Key:=#0;
{119} IF Sender is TEdit THEN
{120} WITH Sender as TEdit DO
{121} IF TryStrToInt(TEXT, dummy)
{122} THEN IF key=#0
{123} THEN berechne;
{124} 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 12.12.10 17:48 
Könnte man die Zeilen 45-49 als dreidimensionales Array verstehen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 12.12.10 19:33 
Im Grunde ja, denn du kannst es auch so schreiben und nutzen:
ausblenden Delphi-Quelltext
1:
  bitfolgen = array[1..3of array[0..bits] of ShortInt;					
Streng genommen ist es bei dir keins, weil die inneren Arrays eigene Typen sind.
Funkydonkey Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 13.12.10 09:45 
Da habe ich gar nicht drauf geachtet, klar. Mir ging es um das Prinzip. ;-)