Autor Beitrag
Pandax3
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



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

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







ausblenden 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(0and if stringgrid1.Cells[i,j+1]=IntToStr(0and
      if stringgrid1.Cells[i,j+2]=IntToStr(0then stringgrid1.Cells[i,j+3]:=IntToStr(1)  else


      Repeat
      randomize;
      a:=random(6)+0;
      b:=random(6)+0;
      until    stringgrid1.cells[a,b]=''; //--> hier kommt die erste Fehlermeldung

      if stringgrid1.cells[a,6]='' then stringgrid1.cells[a,6]:=IntToStr(1else
      if stringgrid1.cells[a,5]='' then stringgrid1.cells[a,5]:=IntToStr(1else
      if stringgrid1.cells[a,4]='' then stringgrid1.cells[a,4]:=IntToStr(1else
      if stringgrid1.cells[a,3]='' then stringgrid1.cells[a,3]:=IntToStr(1else
      if stringgrid1.cells[a,2]='' then stringgrid1.cells[a,2]:=IntToStr(1else
      if stringgrid1.cells[a,1]='' then stringgrid1.cells[a,1]:=IntToStr(1else
      if stringgrid1.cells[a,0]='' then stringgrid1.cells[a,0]:=IntToStr(1);

      Button1Click(Sender);
end;


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Do 10.03.11 20:21 
Naja ich würde erstmal drauf tippen, dass die Zeilen hier falsch sind:
ausblenden Delphi-Quelltext
1:
2:
if stringgrid1.Cells[i,j]=IntToStr(0and if stringgrid1.Cells[i,j+1]=IntToStr(0and 
if stringgrid1.Cells[i,j+2]=IntToStr(0then stringgrid1.Cells[i,j+3]:=IntToStr(1else

Versuchs mal mit
ausblenden 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(1else


Lg
Pandax3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: Do 10.03.11 21:46 
so habe den fehler behoben ;D

richtig ist :

ausblenden 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 :(



ausblenden 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)); endend


        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(1else
      if stringgrid1.cells[a,5]='' then stringgrid1.cells[a,5]:=IntToStr(1else
      if stringgrid1.cells[a,4]='' then stringgrid1.cells[a,4]:=IntToStr(1else
      if stringgrid1.cells[a,3]='' then stringgrid1.cells[a,3]:=IntToStr(1else
      if stringgrid1.cells[a,2]='' then stringgrid1.cells[a,2]:=IntToStr(1else
      if stringgrid1.cells[a,1]='' then stringgrid1.cells[a,1]:=IntToStr(1else
      if stringgrid1.cells[a,0]='' then stringgrid1.cells[a,0]:=IntToStr(1);

end;
      Button1Click(Sender);
end;


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



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

ausblenden 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); // das funktioniert leider nicht ;D ich möchte die Procedure eigentlich noch mal von vorne aufrufen , ist das irgendwie möglich? 
//Also so das man sich nochmal aussuchen kann, wo man den Stein reinwirft 
 end;


         Button1Click(Sender);
         Button3Click(Sender);

        end;
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 11.03.11 15:11 
ausblenden Delphi-Quelltext
1:
stringgrid1.cells[acol,c[acol]]=IntToStr(1// Weshalb nicht = '1'					

Wofür zwei If-Abfragen, wenn auch eine reicht?
ausblenden 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


user profile iconPandax3 hat folgendes geschrieben Zum zitierten Posting springen:
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(!). :zustimm:


Zuletzt bearbeitet von Marc. am Fr 11.03.11 15:31, insgesamt 1-mal bearbeitet
Pandax3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: 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 :D
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 11.03.11 15:37 
user profile iconPandax3 hat folgendes geschrieben Zum zitierten Posting springen:
ich würde nicht sagen das die schleife non-sense ist ;)

Ich würde das Problem vermutlich anders lösen, aber beim schnellen Überfliegen habe c[] falsch interpretiert. Selbstverständlich finde ich deinen Code nicht - anyway. :roll:

user profile iconPandax3 hat folgendes geschrieben Zum zitierten Posting springen:
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 :D

Im Gegenteil. Dadurch das du hier nur zwei Themen mischst, haben später andere User mit den gleichen Problemen das Vergnügen die Antwort im Wirr von Fragen zu entdecken.
Wo ist das Problem ein Topic zu einer konkreten Frage zu eröffnen, sofern diese bisher noch nicht diskutiert wurde (Suche). :nixweiss:
Pandax3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.03.11 15:45 
na gut wenn du meinst ;D dann kann das hier geschlossen werden :O