Autor Beitrag
Caesar44
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mo 01.06.09 21:24 
Hallo liebe Delphiexperten, ich versuche gerade das 8Damenproblem zu lösen. Grundstruktur ist auf dem Blatt fertig, bloß mit der Syntax haperts leider:

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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Feldticker;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Feldticker;
var Feld: Array[1..64of integer;
    i,Counter,p : Integer;
begin
  for i:= 1 to 64 do
  begin
    Feld[i]:=0;
  end;
  i:=1;
  p:=1;
  while Feld[i]>0 do
  begin
    inc (i);
  end;
  if i <=8 then
  begin
    For p := 1 to 8 do
    begin
      Feld[p]:= 1;
    end;
  end;
  if (i >=9and if (i <=18then
  begin
    For p := 9 to 18 do
    begin
      Feld[p]:=1;
    end;
  end;
  Feld[i]:=2;

end;; // operator ist nicht auf operandentyp anwendbar
  Feld[i]:=2;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Feldticker;
end;

end.// ";" erwartet aber "." gefunden



Es kommen dabei folgende Fehlermeldungen:
operator ist nicht auf operandentyp anwendbar
; erwartet, aber . gefunden

Weiß wirklich nicht woran es liegen könnte

Gruß Caesar


Zuletzt bearbeitet von Caesar44 am Mo 01.06.09 21:52, insgesamt 4-mal bearbeitet
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 01.06.09 21:27 
du solltest mal begin und end blöcke benutzen. ich kann dir sonst Suche in der Entwickler-Ecke CHRISTIANS CRASHKURS nahelegen...
Caesar44 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mo 01.06.09 21:37 
Habs geändert, aber keine Besserung :-(
Kann ich ein Array mit zwei verschiedenen Zählvariablen i und p durchlaufen?

Gruß
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 01.06.09 21:39 
Du solltest dir die Grundlagen anschauen...
ausblenden Delphi-Quelltext
1:
if i >=9 and if i <=18 then begin					
Das muss so heißen:
ausblenden Delphi-Quelltext
1:
2:
if (i >= 9and (i <= 18then
begin
Und wenn deine Zeilennummern von den Fehlern nicht zum Quelltext passen, dann markiere die Fehlerzeilen am besten...
Ich meine, dieser Fehler war jetzt auf den ersten Blick zu sehen, aber sonst...

// EDIT:
Oder ganz einfach:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  if i <= 8 then
    for p := 1 to 8 do
      Feld[p] := 1
  else if i <= 18 then
    for p := 9 to 18 do
      Feld[p] := 1;
Caesar44 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mo 01.06.09 21:44 
Ok geändert.

EDIT:

Oh ich hatte noch ein If zuviel, deswegen hat es nicht funktioniert.

Vielen Dank

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ich habe jetzt mein Programm soweit fertig geschrieben.
Leider kommt jetzt, wenn ich versuche das Programm zu starten Interner Fehler T 2541
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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    edt1_ausgabe: TEdit;
    procedure Feldticker;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  i : Integer;
  Feld : array[1..64of integer;

implementation

{$R *.DFM}

procedure TForm1.Feldticker;
var
    Counter,p : Integer;
begin
  Counter := 0;
  For i := 1 to 64 do
  begin
    If Feld[i]=2 then
    begin
      inc (Counter);
      edt1_ausgabe.text:=edt1_ausgabe.text+'feld'+InttoStr(i);
    end;
  end;
  If Counter = 8 then
  begin
  break;
  end;
  i:=1;
  For i:= 1 to 64 do
  begin
    if Feld[i] = 0 then
    begin
      if (i <=8then
      begin
        For p := 1 to 8 do
        begin
          Feld[p]:= 1;
        end;
      end;
      if (i>=9and (i<=16)then
      begin
        For p := 9 to 16 do
        begin
          Feld[p]:=1;
        end;
      end;
      if (i>=17and (i<=24)then
      begin
        For p := 17 to 24 do
        begin
          Feld[p]:=1;
        end;
      end;
      if (i>=25and (i<=30)then
      begin
        For p := 25 to 32 do
        begin
          Feld[p]:=1;
        end;
      end;

      if (i>=31and (i<=36)then
        begin
          For p := 33 to 40 do
          begin
            Feld[p]:=1;
          end;
        end;
  if (i>=41and (i<=48)then
  begin
    For p := 41 to 48 do
    begin
      Feld[p]:=1;
    end;
  end;
  if (i>=49and (i<=56)then
  begin
    For p := 49 to 56 do
    begin
      Feld[p]:=1;
    end;
  end;
  if (i>=57and (i<=64)then
  begin
    For p := 57 to 64 do
    begin
      Feld[p]:=1;
    end;
  end;
  Feld[i]:=2;
  If (i<>8and (i<>16and (i<>24and (i<>32and (i<>40and (i<>48and (i<>56and (i<>64then
  begin
    For p := 1 to 10 do
    begin
      If i+p*9 > 64 then
      break;
      Feld[i+p*9]:=1;
    end;
  end;
  If (i<>8and (i<>16and (i<>24and (i<>32and (i<>40and (i<>48and (i<>56and (i<>64then
  begin
    For p := 1 to 10 do
    begin
      If i-p*7 < 0 then
      break;
      Feld[i-p*7]:=1;
    end;
  end;
  If (i<>1and (i<>9and (i<>17and (i<>25and (i<>33and (i<>41and (i<>49and (i<>57then
  begin
    For p := 1 to 10 do
    begin
      If i+p*7 > 64 then
      break;
      Feld[i+p*7]:=1;
    end;
  end;
  If (i<>1and (i<>9and (i<>17and (i<>25and (i<>33and (i<>41and (i<>49and (i<>57then
  begin
    For p := 1 to 10 do
    begin
      If i-p*9 < 0 then
      break;
      Feld[i-p*9]:=1;
    end;
  end;
  end;
  end;
  Feldticker;
end<span style="color: red"></span>Interner Fehler T2541


procedure TForm1.Button1Click(Sender: TObject);
begin
  for i:= 1 to 64 do
  begin
    Feld[i]:=0;
  end;
  Feldticker;
end;

Entschuldigung für die drei Ends vor feldticker die alle gleich übereinander stehen. Ich hatte leider noch zuletzt zwei begin-end Blöcke hinzugesetzt, hab keine Ahnung wie ich den gesamten Quelltext nach vorn verschieben kann, einzeln war mir es zuviel jede Zeile vier nach vorne zu verschieben.

Gruß Caesar
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 01.06.09 23:41 
user profile iconCaesar44 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Feldticker;
var
    Counter,p : Integer;
begin
  [...]
  Feldticker;
end;
Naja, wenn du in der Prozedur die selbst wieder aufrufst...
Wie lange soll das denn laufen? ;-)
(Endlosrekursion, Stacküberlauf, ...)

user profile iconCaesar44 hat folgendes geschrieben Zum zitierten Posting springen:
hab keine Ahnung wie ich den gesamten Quelltext nach vorn verschieben kann, einzeln war mir es zuviel jede Zeile vier nach vorne zu verschieben.
Strg + Shift + U, Strg + Shift + I
Caesar44 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mo 01.06.09 23:57 
Stimmt ne Abbruchbedingung wäre wohl net schlecht. Oh wie peinlich *erröt*

Dankeschön für die Hilfe!