| Autor |
Beitrag |
Pandax3
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: Do 10.03.11 20:06
Hallo, ich habe ein Problem ;D
ich weiß nicht was ich falsch mach aber ich bekomme immer diese Fehlermeldung (ich möchte 4 gewinnt programmieren):
wäre nett wenn jemand helfen könnte ;D
Quelltext 1: 2:
| [Fehler] Unit3.pas(93): Inkompatible Typen: 'String' und 'procedure, untyped pointer or untyped parameter' [Fehler] Unit3.pas(101): Inkompatible Typen: 'String' und 'procedure, untyped pointer or untyped parameter' |
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:
| procedure TForm3.Button3Click(Sender: TObject); var a,b,i,j:integer; begin
for i:=0 to 6 do for j:= 0 to 6 do if stringgrid1.Cells[i,j]=IntToStr(0) and if stringgrid1.Cells[i,j+1]=IntToStr(0) and if stringgrid1.Cells[i,j+2]=IntToStr(0) then stringgrid1.Cells[i,j+3]:=IntToStr(1) else
Repeat randomize; a:=random(6)+0; b:=random(6)+0; until stringgrid1.cells[a,b]=''; if stringgrid1.cells[a,6]='' then stringgrid1.cells[a,6]:=IntToStr(1) else if stringgrid1.cells[a,5]='' then stringgrid1.cells[a,5]:=IntToStr(1) else if stringgrid1.cells[a,4]='' then stringgrid1.cells[a,4]:=IntToStr(1) else if stringgrid1.cells[a,3]='' then stringgrid1.cells[a,3]:=IntToStr(1) else if stringgrid1.cells[a,2]='' then stringgrid1.cells[a,2]:=IntToStr(1) else if stringgrid1.cells[a,1]='' then stringgrid1.cells[a,1]:=IntToStr(1) else if stringgrid1.cells[a,0]='' then stringgrid1.cells[a,0]:=IntToStr(1);
Button1Click(Sender); end; |
Moderiert von Martok: Delphi-Tags hinzugefügt
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Do 10.03.11 20:21
Naja ich würde erstmal drauf tippen, dass die Zeilen hier falsch sind:
Delphi-Quelltext 1: 2:
| if stringgrid1.Cells[i,j]=IntToStr(0) and if stringgrid1.Cells[i,j+1]=IntToStr(0) and if stringgrid1.Cells[i,j+2]=IntToStr(0) then stringgrid1.Cells[i,j+3]:=IntToStr(1) else |
Versuchs mal mit
Delphi-Quelltext 1: 2:
| if (stringgrid1.Cells[i,j]=IntToStr(0)) and (stringgrid1.Cells[i,j+1]=IntToStr(0)) and (stringgrid1.Cells[i,j+2]=IntToStr(0)) then stringgrid1.Cells[i,j+3]:=IntToStr(1) else |
Lg
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: Do 10.03.11 20:31
so danke erstmal ;D
die fehlermeldung ist weg , jetzt komm jedoch an der selben stelle eine neue:
[Fehler] Unit3.pas(93): Operator ist auf diesen Operandentyp nicht anwendbar
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: Do 10.03.11 21:46
so habe den fehler behoben ;D
richtig ist :
Delphi-Quelltext 1: 2: 3: 4:
| for i:=0 to 6 do begin for j:= 0 to 6 do begin if ((stringgrid1.Cells[i,j]=IntToStr(0)) and (stringgrid1.Cells[i,j-1]=IntToStr(0)) and (stringgrid1.Cells[i,j-2]=IntToStr(0))) then (stringgrid1.Cells[i,j-3]:=IntToStr(1)); |
Allerdings habe ich noch eine Frage und zwar bekomm ich immer folgende Fehlermeldung: 'END' erwartet aber 'ELSE' gefunden
Was mach ich falsch? wäre nett wenn jemand helfen könnte
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:
| procedure TForm3.Button3Click(Sender: TObject); var a,b,i,j:integer; begin
for i:=0 to 6 do begin for j:= 0 to 6 do begin if ((stringgrid1.Cells[i,j]=IntToStr(0)) and (stringgrid1.Cells[i,j-1]=IntToStr(0)) and (stringgrid1.Cells[i,j-2]=IntToStr(0))) then (stringgrid1.Cells[i,j-3]:=IntToStr(1)); end; end
else
begin Repeat randomize; a:=random(6)+0; b:=random(6)+0; until stringgrid1.cells[a,b]='';
if stringgrid1.cells[a,6]='' then stringgrid1.cells[a,6]:=IntToStr(1) else if stringgrid1.cells[a,5]='' then stringgrid1.cells[a,5]:=IntToStr(1) else if stringgrid1.cells[a,4]='' then stringgrid1.cells[a,4]:=IntToStr(1) else if stringgrid1.cells[a,3]='' then stringgrid1.cells[a,3]:=IntToStr(1) else if stringgrid1.cells[a,2]='' then stringgrid1.cells[a,2]:=IntToStr(1) else if stringgrid1.cells[a,1]='' then stringgrid1.cells[a,1]:=IntToStr(1) else if stringgrid1.cells[a,0]='' then stringgrid1.cells[a,0]:=IntToStr(1);
end; Button1Click(Sender); end; |
Moderiert von Martok: Delphi-Tags hinzugefügt
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 10.03.11 21:52
Klar.
Punkt 1) Wo ein Begin ist muss auch ein end sein.
Punkt 2) Benutz hier im Forum bitte die Delphi-Tags um deinen Quellcode lesbarer zu machen ([ delphi][/delphi]
Punkt 3) Führe dir diese Tutorials zu gemüte: Delphi-Wikibook, Christians Crashkurs
Punkt 4) Lies dir die Fehlermeldung vom Compiler durch und überleg mal was sie heißen könnte.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: Do 10.03.11 22:03
hm ja ok .
danke für die tipps ;D
allerdings versteh ich das immer noch nich ganz ;(
ich habe doch zu jedem Begin ein End gesetzt? Wo muss denn noch ein end hin?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 10.03.11 22:08
auf jeden fall nach dem else. Überleg dir mal von wo bis wo die for-schleifen gehen sollten (was alles drin abgearbeitet werden soll. und danach setzt du dann die end;
außerdem solltest du mal richtig den code einrücken, da erkennt man ja überhaupt nix.  Die Anleitung dafür findest du hier.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: Fr 11.03.11 14:44
so jetzt funktionierts ;D
das mit den END's hat nicht ganz hingehauen habe das Problem jetzt andere gelöst.
Ich habe allerdings noch eine Frage und möchte kein neues Topic eröffnen daher stell ich sie hier:
Ist es möglich eine Procedure noch einmal von vorne aufzurufen?
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:
| procedure TForm3.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin
if stringgrid1.cells[acol,0]='' then begin if stringgrid1.cells[acol,c[acol]]=IntToStr(1) then repeat c[acol]:=c[acol]-1 until stringgrid1.cells[acol,c[acol]]=''; if stringgrid1.cells[acol,c[acol]]=IntToStr(0) then repeat c[acol]:=c[acol]-1 until stringgrid1.cells[acol,c[acol]]=''; stringgrid1.cells[acol,c[acol]]:=IntToStr(0); end else begin showmessage('Bitte werfen Sie den Stein in eine andere Reihe'); TForm3.StringGrid1SelectCell(Sender); end;
Button1Click(Sender); Button3Click(Sender);
end; |
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 11.03.11 15:11
Delphi-Quelltext 1:
| stringgrid1.cells[acol,c[acol]]=IntToStr(1) |
Wofür zwei If-Abfragen, wenn auch eine reicht?
Delphi-Quelltext 1:
| if (stringgrid1.cells[acol,c[acol]] = '1') or ( if stringgrid1.cells[acol,c[acol]] = '0' then |
Mal abgesehen davon, dass deine Schleife in gewisser Hinsicht Nonsense ist...
Du könntest dir durch aus noch ein paar Gedanken zu deiner Code-Formatierung machen. Wie's besser geht, steht z.B. in dem StyleGuide auf Delphi-Treff.de
Pandax3 hat folgendes geschrieben : | | Ist es möglich eine Procedure noch einmal von vorne aufzurufen? |
Meinst du, dass sich eine Funktion selbst wieder aufruft, also rekursiv?
Meine Glaskugel ist gerade etwas trübe. Am besten erstellst du eine neues(!) Topic und erläuterst dein Problem etwas ausführlicher(!). 
Zuletzt bearbeitet von Marc. am Fr 11.03.11 15:31, insgesamt 1-mal bearbeitet
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: Fr 11.03.11 15:28
ich würde nicht sagen das die schleife non-sense ist
anders würde das programm nich laufen
ja ich meine das die sich von selbst wieder aufruft ;D
dafür möcht ich jetzt aber kein neues topic erstellen  und hier alles zu spammen 
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 11.03.11 15:37
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: Fr 11.03.11 15:45
na gut wenn du meinst ;D dann kann das hier geschlossen werden :O
|
|
|