Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Operator nicht auf Operandentyp anwendbar?


Caesar44 - Mo 01.06.09 21:24
Titel: Operator nicht auf Operandentyp anwendbar?
Hallo liebe Delphiexperten, ich versuche gerade das 8Damenproblem zu lösen. Grundstruktur ist auf dem Blatt fertig, bloß mit der Syntax haperts leider:


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


FinnO - 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 - 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 - Mo 01.06.09 21:39

Du solltest dir die Grundlagen anschauen...

Delphi-Quelltext
1:
if i >=9 and if i <=18 then begin                    
Das muss so heißen:

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:

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 - 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

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 - Mo 01.06.09 23:41

user profile iconCaesar44 hat folgendes geschrieben Zum zitierten Posting springen:

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