PHP Aufgabe! Hilfe wer kann mir den

… Lösungsweg erklären, ich verstehe das nicht!

Beschreibung:
Erstellen Sie einen Quellcode, der das 1mal1 von 1mal1 bis 10mal10 in Zehn Reihen und 10 Spalten ausgibt.

Benutzen Sie zur besseren Darstellung eine HTML-Tabelle, die in php eingebettet ist.

Hinweis: benutzen Sie while-Schleifen.

Als Ergenis/Lösungsweg hat der Dozent das:

<?php //Initialisieren------------------
$i = 1; $z = 1; echo " "; while ($i "; while ($z "; $erg = $i \* $z; echo $erg; $z++; echo ""; } $i++; $z = 1; echo ""; } echo ""; ?\> Wer kann den Lösungsweg schritt für Schritt erläutern? Ich verstehe das um himmels willen nicht! Vorallem die Reihenfolge und warum da auf einmal $z = 1; auftaucht und was es macht?

Also:

Am Anfang werden $i und $z jeweils auf 1 gesetzt. Sie haben also einen definierten Wert - und auch gleich den richtigen… :wink:

echo „“; gibt lediglich den öffnenden table-Tag aus - er beginnt eine HTML-Tabelle.

while ( $i mitsamt Inhalt ausgegeben, also eine Zelle mit einer Zahl.
Es wird immer $erg mit dem Ergebnis von $i mal $z gefüllt und anschließend innerhalb der HTML-Tabellenzelle ausgegeben. Ganz am Anfang also 1 * 1 = 1.
Jetzt muss $z um eins erhöht werden. Sonst hättest du eine Endlosschleife, weil $z IMMER kleiner oder gleich 10 wäre.

Dann ist die innere, die z-Schleife, am Ende. Es wird wieder geprüft ob $z kleiner oder gleich 10 ist. Ja, ist es… $z ist jetzt 2… $i bleibt aber 1!
Also wird die Schleife wieder durchlaufen. Es wird $i mal $z also 1 * 2 gerechnet - und 2 ausgegeben.
Das wird immer wieder wiederholt. $z wird jedesmal um 1 größer.
Im letzten Durchlauf ist $z 10. $i ist immernoch 1. Es wird also 1 mal 10 gerechnet - 10.
Dann wird $z wieder um eins erhöht und ist jetzt 11. Damit bricht die innere Schleife, die z-Schleife ab.

Jetzt wird $i um eins erhöht. Wir sind wieder in der äußeren, der i-Schleife! Der nächste Durchlauf der i-Schleife wird vorbereitet! Wir haben jetzt alle Werte von 1 * 1 bis 1 * 10 berechnet. $i wird auf 2 gesetzt.
Lassen wir $z mal auf 11.

Die Tabellenzeile wird noch geschlossen - dann sind wir auch schon wieder beim ersten while, der i-Schleife.
$i ist jetzt 2. 2 ist kleiner als 10. Also wird die Schleife wieder durchlaufen.
Eine neue HTML-Tabellenzeile wird geöffnet.
Und wir kommen nochmal zur z-Schleife - diesmal aber mit $i = 2.
Da wir - anders als in der Lösung - $z NICHT auf 1 gesetzt haben, steht es noch immer auf 11… 11 ist weder kleiner noch gleich 10. Also wird die Schleife NICHT durchlaufen!
$i wird wieder erhöht… Und so weiter.

Du musst $z auf 1 setzen, damit die innere Schleife durchlaufen wird!

Dann ist bei $i = 2 die ganze z-Schleife wieder lauffähig. Und es werden die Werte von 2 * 1 bis 2 * 10 berechnet und ausgegeben!

Danach wird $i wieder erhöht auf 3 - und $z wieder auf 1 gesetzt… Es wird dann 3 * 1 bis 3 * 10 ausgegeben.

Im letzten Durchlauf ist $i 10 und es werden 10 * 1 bis 10 * 10 berechnet.
Anschließend ist $i 11 - was weder kleiner noch gleich 10 ist. Deshalb wird auch die äußere Schleife abgebrochen.

Dann wird die HTML-Tabelle noch geschloßen und das wars… Aufgabe erfüllt… Alle Zahlen von 1 * 1 bis 10 * 10 sind ausgegeben, in 10 Reihen und in 10 Spalten…

Der wichtige Punkt ist der mit der INNEREN Schleife. Achte darauf, dass sie innerhalb der i-Schleife läuft. Bei jedem neuen i muss diese Schleife wieder bei 1 anfangen! Deshalb das $z = 1.

Ich hoffe, das war verständlich!

Grüße,

Lars

Naja, wenn es um das Thema while-Schleifen geht, dann frag lieber gleich deinen Dozenten, warum er nicht erst die for-Schleifen macht. Diese sind um einiges einfacher zu verstehen als Umschreibungen durch while, zudem noch kürzer. Hier mal umgestellt nach for-Schleifen:

<?php for($i = 1; $i <= 10; $i++) { // Setze erst $i = 1, dann erhöhe nach jedem Durchlauf $i solange um eins bis es 10 erreicht hat.
echo "|"; for($z = 1; $z "; $erg = $i \* $z; echo $erg; echo ""; } echo ""; } ?\> Aber da ich schätze, dass erst die while Funktion dran kommt: (Etwas gekürzt) <?php $i = 1; // Fange an bei 1xZ
while($i \<= 10) { // Durchgang des 1. Faktors bis 10 $z = 1; // Fange an bei Ix1 while($z \<= 10) { // Durchgang des 2. Faktors bis 10 $erg = $i \* $z; $z++; // 2. Faktor um 1 erhöhen } $i++; } ?\> Vielleicht ist es so etwas deutlicher. Statt dort oben $z = 1; kann $z = 1; wie im gegebenen Beispiel auch einmal außerhalb der 1. while und einmal nach der 2. while stehen, was aber das selbe bewirkt, dass bei jedem durchlauf der 1. while $z wieder zurückgesetzt wird.

Ich hoffe die Erklärung hift.

<?php //Initialisieren------------------
$i = 1; $z = 1; echo " "; // Tabelle ausgeben while ($i "; //Tabellen element ausgeben while ($z "; //Tabellen element ausgeben $erg = $i \* $z; //Ergebnis berechnen 1\*1=1 ; // beim 2. durchlauf 1\*2=2 usw. echo $erg; //Ergebnis ausgeben $z++; // $z wird bei jedem durchlauf // der Schleife erhöht echo ""; //Tabellen element ausgeben } $i++; // jetzt wir $i erhöht $z = 1; // und $z wieder auf 1 gesetzt //damit die Rechnung 2\*1=2 //2\*2=4 usw. durchgeführt //werden kann echo ""; } echo ""; ?\>

$i = 1; Nummer der Zeile (ist zu Beginn 1)
$z = 1; Nummer der Spalte (ist zunächst Spalte 1)

echo „“; html-tag für den Beginn einer Tabelle

while ($i "; schreibe und beginne damit eine Zeile
while ($z ";schreibe und beginne eine Spalte innerhalb der Zeile (Zelle1,1)

$erg = $i * $z; berechne den Wert aus Spaltennummer mal Zeilennummer 1 mal 1 = 1

echo $erg;schreibe das Ergebnis in die Zelle

$z++;, erhöhe die Spaltennummer um 1

echo „“; schließe die Zelle 1 ab
}

Jetzt ist Zeilennummer i =1 und Spalte z = 2, dann wird wieder 1 mal 2 gerechnet usw. bis 1 mal 10

$i++;Wenn die erste Zeile voll geschrieben ist, wird die Zeilennummer auf 2 erhöht und mit

$z = 1; die Spaltennummer wider auf 1 gesetzt

echo „“; danach wird mit die aktuelle Zeile abgeschlossen
} Das läuft solange Zeile für Zeile bis die Zeilennummer 11 wird, dann bricht die while-Schleife ab, weil die Bedingung i";

?>

Hallo!

Ich habe mal jeden Befehl kommentiert was er macht und warum. Ich hoffe das hilft Dir weiter.

Im Zweifelsfall lass das Programm mit Papier und Bleistift „ablaufen“: Links ein Blatt mit je einer Spalte „$i“, „$z“ in Die Du untereinander den jeweils aktuellen Wert der Variablen schreibst und daneben ein zweites Blatt auf das Du das Schreibst was der „echo“-Befehl ausgibt. ich gehe davon aus dass Du dann dem HTML-Ergbenis das da rauskommt folgen kannst, sonst fehlt Dir ein HTML-Grundkurs und Du bist mit PHP falsch dran.

Viele Grüße,
Markus

<?php // Setze den Zähler der aktuelle Zeile auf 1
$i = 1; // Setze den Zähler der aktuellen Spalte auf 1 $z = 1; // Beginne Tabelle echo " "; // Solange $i (Zähler fü die aktuelle Zeile) kleiner gleich 10... while ($i "; // Solange $z (Zähler für die aktuelle Spalte) kleiner gleich 10... while ($z "; // Berechne das Produkt "aktuelle Zeile mal aktuelle Spalte" $erg = $i \* $z; // Gib das Ergebnis aus echo $erg; // Erhöhe den Zähler für die Spalte um eins $z++; // Schließe die Datenzelle echo ""; // Zurück zum While, prüfen ob die Bedingung "aktuele Spalte ist kleiner gleich 10" erfüllt ist und führe die Schleife wieder aus } // Erhöhe den Zähler für die Zeile um 1 $i++; // In der neuen Zeile beginne wieder mit Spalte 1 $z = 1; // Schließe die Zeile echo ""; // Zurück zum While, prüfen ob die Bedingung "aktuelle Zeile ist kleiner gleich 10" erfüllt ist und führe die Schleife wieder aus } // Beende die Tabelle echo ""; ?\>

Hallo,

mit $i werden die Zeilen erstellt, mit $z die Spalten. Von oben nach unten durcherklärt:

solange i kleiner oder gleich 10 ist, wird zunächst eine Zeile in der Tabelle eingeleitet, hier beginnt die 2. schleife, solange z kleiner oder gleich 10 ist wird diese ausgeführt, bei jeder Ausführung wird z*i berechnet und innerhalb einer Zelle ausgegeben, anschließend wird z mittels $z++ um eins erhöht. Wenn Z den Wert 10 erreicht hat, wird die Ergebnisberechnung das letzte mal durchgeführt, und anschließend der Rest aus der ersten while-Schleife abgearbeitet und z auch wieder auf 1 zurückgestellt, beim 2. Durchlauf hat i bereits den Wert 2, und das spiel beginnt von vorne.

Hallo,

eineg rercht einfache Sache,ich hoffe du weißt wie eine Tabelle in HTML gemacht wird und was eine WHILE-Schleif ist.

Es sind zwei Schleifen, die äußere gibt die Reihen, die innere die Spalten aus.

Um das ganze herum ein , jede Reihe wird mit und jedes Feld mit getagt.

Wenn die Reihe mit allen Spalten fertig ist, muß der Wert für die Spalten auf 1 ($z=1) zürckgesetzt werden, damit mit $i*1 wieder begonnen wird.

Ich würde das mit dem $z jedoch deutlich eleganter machen und in der inneren Schleife initialisieren:

$i = 1;
echo „“;
while ($i „;
while ($z „.($i*$z++).““;
}
$i++;
echo „“;
}
echo „“;

oder mit FOR

echo „“;
for ($i=1;$i>10;$i++){
echo „“;
for ($z=1;$z>10;$z++){
echo „“.($i*$z)."";
}
echo „“;
}
echo „“;

Grüße
Tom

ich hab es in deinem text erläutert… hoffe es hilft beim verständnis

… Lösungsweg erklären, ich verstehe das nicht!

Beschreibung:
Erstellen Sie einen Quellcode, der das 1mal1 von 1mal1 bis
10mal10 in Zehn Reihen und 10 Spalten ausgibt.

Benutzen Sie zur besseren Darstellung eine HTML-Tabelle, die
in php eingebettet ist.

Hinweis: benutzen Sie while-Schleifen.

Als Ergenis/Lösungsweg hat der Dozent das:

<?php // anfang des php skriptes
//Initialisieren------------------ $i = 1; // variable i ist gleich 1 $z = 1; //variable z ist gleich 1 echo " "; // echo ist eine ausgabe in dem fall soll er eine tabelle ausgeben tabelle while ($i "; // tr steht für tablerow also tabellenspalte while ($z "; // td = tabledata also tabellendaten $erg = $i \* $z; // $erg ist eine neue variable... ergebnis... ist wie mathematik... c= a\*b... also $erg=$i\*$z echo $erg; //erg wird ausgegeben... also das ergebnis $z++; // $z++ bedeutet, das immer eine zahl drauf gerechnet wird... als wenn z=1 ist dann ist z++ als nächstes zb $z=2 echo ""; } $i++; // mit $i++ ist es das gleiche wie bei $z++ $z = 1; //warum hier aber nochmals die variable z als 1 deklariert wird weiß ich nicht... echo ""; // hier ist das ende der ausgabe der spalten } echo ""; // und hier ist das ende der tabelle ?\> // ende des skriptes Wer kann den Lösungsweg schritt für Schritt erläutern? Ich verstehe das um himmels willen nicht! Vorallem die Reihenfolge und warum da auf einmal $z = 1; auftaucht und was es macht?

Hallo;
sorry leider keine Zeit, habe gerade einen neuen Job als Soft/und Hardwareentwickler angenommen und muss mich einarbeiten, daher keine Zeit mich mit deinem/Ihrem Problem zu beschäftigen, evtl. später, Bitte neu fragen.
Gruß von Norbert

… Lösungsweg erklären, ich verstehe das nicht!

Beschreibung:
Erstellen Sie einen Quellcode, der das 1mal1 von 1mal1 bis
10mal10 in Zehn Reihen und 10 Spalten ausgibt.

Benutzen Sie zur besseren Darstellung eine HTML-Tabelle, die
in php eingebettet ist.

Hinweis: benutzen Sie while-Schleifen.

Als Ergenis/Lösungsweg hat der Dozent das:

<?php ://Initialisieren------------------
$i = 1; $z = 1; echo " "; while ($i "; while ($z "; $erg = $i \* $z; echo $erg; $z++; echo ""; } $i++; $z = 1; echo ""; } echo ""; ?\>

Hallo,

erst einmal ganz wichtig: Das ist ein Lösungsansatz, nicht die Lösung!

Der Code berechnet genau das 1er-Einmaleins.
$i wird mit 1 initialisiert.
$z zählt in der Schleife von 1 bis 10, miltipliziert den aktuellen Wert mit $i und gibt den aus.
Damit es besser lesbar ist, in einer HTML-Tabelle.
Am Ende der Schleife wird $z dann wieder auf 1 gesetzt, damit das Ganze wieder für das 2er-, 3er, usw., -Eonmaleins wiederhilt werden kann. Darum wird auch $i um eins erhöht.

Was noch fehlt ist die äussere Schleife, die $i überwacht und diese beendet, sobald $i > 10 ist.

Das müsstest Du aber hinbekommen, da es identisch ist, wie die vorhandene Schleife.

Wenn Du mit PHP, bzw. Coding im Allgemeinen, auf Kriegsfuss stehst und keine Lust hast dicke Bücher zu lesen, dann leih Dir aus der Bücherei Video-Trainings zu dem Thema aus. Die sind sehr gut, beispielsweise von Video-2-Brain, Galileo Press, …

Gruß aus München,
Frank

weil wir gerade beides parallel lernen. habe die aufgabe mit for schon durchgekaut, mit while aber nicht verstanden :wink:

ok super erklärt :smile:
aber: warum wird die schleife nicht ausgeführt, wenn ich nicht $z=1; also $z auf 1 setze?
Ich dachte , wenn ich while($z

weil wir gerade beides parallel lernen. habe die aufgabe mit
for schon durchgekaut, mit while aber nicht verstanden :wink:

Nun, in diesem Fall tut die while zusammen mit den Variablen genau das selbe wie die for-Variante. Ich hoffe, dass Du das soweit verstanden hast. :smile:

in diesem fall wenig hilfreich:wink:

in diesem fall wenig hilfreich:wink:

Hallo,

achte auf die Klammern, die die Schleifen begrenzen, also { und }, und darauf, dass immer Zeile für Zeile durchlaufen wird. Dann sollte es dir klar werden.

LG,

frozen