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 public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Feldticker; var Feld: Array[1..64] of 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 >=9) and if (i <=18) then begin For p := 9 to 18 do begin Feld[p]:=1; end; end; Feld[i]:=2;
end;; Feld[i]:=2;
end;
procedure TForm1.Button1Click(Sender: TObject); begin Feldticker; end;
end. |
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
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 >= 9) and (i <= 18) then 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
Narses: 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 public end;
var Form1: TForm1; i : Integer; Feld : array[1..64] of 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 <=8) then begin For p := 1 to 8 do begin Feld[p]:= 1; end; end; if (i>=9) and (i<=16)then begin For p := 9 to 16 do begin Feld[p]:=1; end; end; if (i>=17) and (i<=24)then begin For p := 17 to 24 do begin Feld[p]:=1; end; end; if (i>=25) and (i<=30)then begin For p := 25 to 32 do begin Feld[p]:=1; end; end;
if (i>=31) and (i<=36)then begin For p := 33 to 40 do begin Feld[p]:=1; end; end; if (i>=41) and (i<=48)then begin For p := 41 to 48 do begin Feld[p]:=1; end; end; if (i>=49) and (i<=56)then begin For p := 49 to 56 do begin Feld[p]:=1; end; end; if (i>=57) and (i<=64)then begin For p := 57 to 64 do begin Feld[p]:=1; end; end; Feld[i]:=2; If (i<>8) and (i<>16) and (i<>24) and (i<>32) and (i<>40) and (i<>48) and (i<>56) and (i<>64) then begin For p := 1 to 10 do begin If i+p*9 > 64 then break; Feld[i+p*9]:=1; end; end; If (i<>8) and (i<>16) and (i<>24) and (i<>32) and (i<>40) and (i<>48) and (i<>56) and (i<>64) then begin For p := 1 to 10 do begin If i-p*7 < 0 then break; Feld[i-p*7]:=1; end; end; If (i<>1) and (i<>9) and (i<>17) and (i<>25) and (i<>33) and (i<>41) and (i<>49) and (i<>57) then begin For p := 1 to 10 do begin If i+p*7 > 64 then break; Feld[i+p*7]:=1; end; end; If (i<>1) and (i<>9) and (i<>17) and (i<>25) and (i<>33) and (i<>41) and (i<>49) and (i<>57) then 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
Caesar44 hat folgendes geschrieben : |
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, ...)
Caesar44 hat folgendes geschrieben : |
| 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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!