PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Delphi Code in c++ umschreiben


LordNikon
2004-01-18, 14:59:23
Hi ,
hier erstmal der Delphi Code

procedure ueberprufen(sp,max:byte);
var ze:byte;
for ze:=1 to max do
if not bedrohung(sp,ze) Then
begin
dame[sp}:ze;
if checkbox1.Checked then brett.cells[sp-1,ze-1]:"X";
bedrohungsetzen(sp,ze,true);
if sp=max tthe begin
inc(anzahl);
end
else ueberpruefen(sp+1,max);
bedrohungsetzen(sp,ze,false);
if checkbox1.Checked then brett.Cells[sp-1,ze-]:='';
dame[sp]:0;
end
end
end;

Habe ich so in c++ so umgesetzt (und wegen einem logikfehler habe ich eine Zeile anders gesetzt):

void TForm1::ueberprufen(int sp ,int maxx)
{
int ze;

for (ze=1;ze<maxx;ze++)
{
if (bedrohung(sp,ze)==false)
{
dame[sp]=ze;
bedrohungsetzen(sp,ze,true);
if (cb->Checked==true)
{
sg->Cells[sp-1][ze-1]="X";

sg->Repaint();
}
if (sp==maxx)
{ ShowMessage("Test");
anzahl++;
txtloesung->Text=AnsiString(anzahl);
txtloesung->Repaint();
}
else
{
ueberprufen(sp+1,maxx);
}
bedrohungsetzen(sp,ze,false);
if (cb->Checked==true)
{
sg->Cells[sp-1][ze-1]="";
}
dame[sp]=0;

}
}

}

Ist die Umsetzung richtig ? Ich zweifel daran , da der Delphi Code von einem Freund ist und dort geht der gleiche Algorithmus ohne Probleme. So wird bei ihm die Anzahl auch wirklich immer angzeigt , während bei mir die Anezige nicht funktioniert , auch wenn sp und maxx den selben Wert hat. Irgendwie finde ich die Schleifen Syntax von Delphi nicht übersichtlich.

Ein weitere Frage ist wie groß dieser Array mit folgender Delphi Anweisung ist:
maxn3 ist 9
[CODE]
bedrunter:array[-maxn3..maxn3] of boolean;
[CODE]
Wäre das in c++
[CODE]
bool bedrunter[9];
[CODE
?

Einfachkrank
2004-01-18, 16:38:18
Was mir im darüberfliegen auffällt, ist der Schleifenkopf:

for(ze=1; ze < max; ze++)
// ich glaube das sollte so aussehen:
for(ze=1; ze <= max; ze++)
Zur Frage auf den Array mit maxn3 = 9:
bedrunter: array[-maxn3..maxn3] of boolean;
// würde ja ungefähr so viel wie:
bedrunter: array[-9 .. 9] of boolean;
// also schon mal 19 Einträge(korrigiert mich, falls ich mich täuschen sollte)
// also auch auf keinen Fall in C++
bool bedrunter[9];
// sondern
bool bedrunter[19]; // oder je nach dem, wie viel

LordNikon
2004-01-18, 18:21:32
thx es lagt daran , das die Arrays nicht richtig umgesetzt worden sind.

Lord Nikon
2004-01-18, 18:59:46
Zufrüh gefreut.

maxn=10;
maxn=20;
maxn3=9;
dame :array [1..maxn] of byte;
bedzeile :array [1..maxn] of Boolean;
bedaufdiagonale :array [2..maxn2] of boolean;

Was wäre das in c++ ?

Einfachkrank
2004-01-19, 09:00:14
const int maxn = 10;
const int maxn2 = 20;
const int maxn3 = 9;

byte dame[maxn];
bool bedzeile[maxn2];
bool bedaufdiagonale[maxn3];

Ach, und was ich vergessen hatte, du musste die Arrays in C/C++ von 0 bis MAX-1 ansprechen. Also ein Array mit 10 Feldern spricht man von 0 bis 9 an, nicht von 1 bis 10!!!

Also bastle die Schleifen ungefähr so:

for(int i=0; i < maxn; i++) // ...

Lord Nikon
2004-01-19, 12:59:27
danke für deine Antwort.
Du kommst, wenn du mir sagen ob die Arraygröße sich während der Laufzeit ändern kann, bekommst du einen Eintrag in der Sig:
"Einfachkrank ist Delphi Guro" ,wenn du willst oder einen andern beliebigen Satz.

Darkstar
2004-01-19, 15:44:48
Original geschrieben von Lord Nikon
danke für deine Antwort.
Du kommst, wenn du mir sagen ob die Arraygröße sich während der Laufzeit ändern kann, bekommst du einen Eintrag in der Sig:
"Einfachkrank ist Delphi Guro" ,wenn du willst oder einen andern beliebigen Satz. Guro? Vielleicht die Steigerungsform von Guru? ;)

In Delphi gibt es statische (Deklaration: array[<Startwert>..<Endwert>] of <Typ>) und dynamische Felder (Deklaration: array of <Typ>). Nur die letzteren können während der Laufzeit mittels SetLength(<Feld>, <Wert>) in der Größe geändert werden.

Einfachkrank
2004-01-20, 07:31:39
du kannst auch noch mal hier vorbeischaun, das isn alter thread von mir, ging um dynamische arrays und en paar pointern:
http://80.237.203.42/vbulletin/showthread.php?s=&threadid=117248

Lord Nikon
2004-01-20, 12:39:24
thx an euch beide.