in while Schleife 2 Vergleiche

schiese

Erfahrenes Mitglied
Hallo,
ich möchte ein kleines Programm schreiben und hänge an einer Stelle.
Ich muss bei einer while-Schleife 2 Vergleiche überprüfen.

PHP:
while (($j <= $laenge-1) && !($erfolg)) {
.
.
.
}

Hier geht das Programm aber nicht in den Schleifenrumpf.
Ist so etwas unzulässig?

Grüße

schiese
 
Hallo,
danke für eure Antworten. $j ist ein Zähler, $laenge gibt die Länge des Arrays an und $erfolg hat den Wert true oder false.
Der Code hat jetzt keinen tieferen Sinn, er soll nur Damen so platzieren, dass sie sich nicht gegenseitig schlagen können. Möchte da später nur was anderes draus basteln.
PHP:
<?php

$laenge = 4;

/*
Anlegen der wichtigen Felder. 

*/

$rowplace = array();
for($i=0;$i<=$laenge-1;$i++) {
	$rowplace[$i] = $laenge+1;
}

$co = array();
for($i=0;$i<=$laenge-1;$i++) {
	$co[$i] = 0;
}

$diag = array();
for($i=0;$i<=2*$laenge-2;$i++) {
	$diag[$i] = 0;
}

$codiag = array();
for($i=0;$i<=2*$laenge-2;$i++) {
	$codiag[$i] = 0;
}


# Hier kommen die wichtigen Funktionen


function platziereKoenigin($i,$j) {
$rowplace[$i] = $j;
$co[$j] = 1;
$diag[$i+$j] = 1;
$codiag[$j-$i+($laenge-1)-1] = 1;
}

function loescheKoenigin($i,$j) {
$rowplace[$i] = $laenge+1;
$co[$j] = 0;
$diag[$i+$j] = 0;
$codiag[$j-$i+($laenge-1)-1] = 0;
}

function pruefeObSicher($i,$j) {
if (($rowplace[$i] == $laenge+1) && $co[$j] == 0 && $diag[$i+$j] == 0 && $codiag[$j-$i+($laenge-1)-1] == 0) {
return true;
} else {
return false;
}
}


function teste($i) {
if ($i == $laenge-1) {
return true;
} else {
$erfolg = false;
$j = 0;

while(($j <= $laenge-1) && !($erfolg)) {
echo "hallo";
if(pruefeObSicher($i,$j) == true) {
platziereKoenigin($i,$j);
$erfolg = teste($i+1);
if(!($erfolg)) {
loescheKoenigin($i,$j);
}
}
$j = $j + 1;
}
}
return $erfolg;
}

teste(0);


for($i=0;$i<=$laenge-1;$i++) {
echo $rowplace[$i]." &nbsp; ";
}

echo "<p>";

for($j=0;$j<=$laenge-1;$j++) {
echo $co[$j]." &nbsp; ";
}




?>

Grüße
 
Also der Code ist nicht sonderlich übersichtlich. Formatiert sieht es nun etwas besser aus:

PHP:
<?php

$laenge = 4;

/*
 Anlegen der wichtigen Felder.

*/

$rowplace = array();
for($i=0;$i<=$laenge-1;$i++) {
	$rowplace[$i] = $laenge+1;
}

$co = array();
for($i=0;$i<=$laenge-1;$i++) {
	$co[$i] = 0;
}

$diag = array();
for($i=0;$i<=2*$laenge-2;$i++) {
	$diag[$i] = 0;
}

$codiag = array();
for($i=0;$i<=2*$laenge-2;$i++) {
	$codiag[$i] = 0;
}


# Hier kommen die wichtigen Funktionen


function platziereKoenigin($i,$j) {
	$rowplace[$i] = $j;
	$co[$j] = 1;
	$diag[$i+$j] = 1;
	$codiag[$j-$i+($laenge-1)-1] = 1;
}

function loescheKoenigin($i,$j) {
	$rowplace[$i] = $laenge+1;
	$co[$j] = 0;
	$diag[$i+$j] = 0;
	$codiag[$j-$i+($laenge-1)-1] = 0;
}

function pruefeObSicher($i,$j) {
	if (($rowplace[$i] == $laenge+1) && $co[$j] == 0 && $diag[$i+$j] == 0 && $codiag[$j-$i+($laenge-1)-1] == 0) {
		return true;
	} else {
		return false;
	}
}


function teste($i) {
	if ($i == $laenge-1) {
		return true;
	} else {
		$erfolg = false;
		$j = 0;

		while(($j <= $laenge-1) && !($erfolg)) {
			echo "hallo";
			if(pruefeObSicher($i,$j) == true) {
				platziereKoenigin($i,$j);
				$erfolg = teste($i+1);
				if(!($erfolg)) {
					loescheKoenigin($i,$j);
				}
			}
			$j = $j + 1;
		}
	}
	return $erfolg;
}

teste(0);


for($i=0;$i<=$laenge-1;$i++) {
	echo $rowplace[$i]." &nbsp; ";
}

echo "<p>";

for($j=0;$j<=$laenge-1;$j++) {
	echo $co[$j]." &nbsp; ";
}

?>

Und das ganze verursacht bei meinen Entwicklungsserver-Settings, was im Anhang zu sehen ist.
 

Anhänge

  • dame.warnings.png
    dame.warnings.png
    15,6 KB · Aufrufe: 11
Das stimmt. Übersichtlich ist er wirklich nicht. Der kannte die Variable $laenge in der Funktion nicht. Musste sie global machen, dann ging es.

Grüße
 
Zurück