Schleifen
sarah
- php
0 Rouven0 suit
0 Gunnar Bittersmann0 bleicher0 Cheatah0 foomaker
Hallo liebes Forum,
ich übe gerade meine ersten Schritte in PHP und habe leider gerade ein kleines Denkproblem bei den Schleifen. Viell. kann mir ja der ein oder andere User auf die Sprünge helfen.
Folgendes Skript kommt zum Einsatz:
$char = array("", "0", "1", "2", "3");
$n = count($char);
while ($i <= $n-1) {
echo $char[$i].$char[$i].$char[$i].$char[$i].$char[$i+1];
echo "<br>";
$i++;
}
Ich definiere also ein Array mit vier Zeichen.
Mein Ziel ist es, dass alle Zeichen so abgerufen werden, dass alle miteinander verknüpft werden - nur leider erhalte ich momentan folgende Ausgabe:
0
0001
1112
2223
333
Dabei sollte es eigentlich so aussehen:
(leer), wegen 4 Mal ""
0001
0002
0003
0010
0011
0012
0013
0020
0021
0022
0023
0030
...usw.
0201
...usw.
2030
...usw.
bis:
3333
allerdings sollten dabei auch die eins-/zwei-/dreistelligen Möglichkeiten beachtet werden, also:
0
1
2
3
00
01
02
03
10
11
12
13
000
001
002
003
010
usw.
Wäre für jeden Hinweis sehr DANKBAR!
LG,
sarah
Hello,
Wäre für jeden Hinweis sehr DANKBAR!
Trockenschwimmen lautet die Lösung. Was meine ich damit? Setzt dich an einen Tisch, schnapp dir ein Stück Papier und einen Stift und überlege, wie du das Thema angehen würdest.
Beispiel:
erstmal alle einstelligen:
beginne bei Zeichen eins, ende beim letzten Zeichen
jetzt alle zweistelligen:
nimm das erste Zeichen für die erste Stelle, für die zweite Stelle verwende den Schritt für die einstelligen
nimm das zweite Zeichen für die erste Stelle, für die zweite Stelle verwende den Schritt für die einstelligen
Du wirst ein Muster erkennen - setze es in die Schleifenlogik der jeweiligen Programmiersprache um.
MfG
Rouven
Du wirst ein Muster erkennen
tipp: es ist ein zahlensystem mit der basis 4 ;)
@@sarah:
while ($i <= $n-1) {
Wie groß ist $i initial?
echo "<br>";
Sinnvollen HTML-Code ergibt das wohl nicht.
$i++;
Mir scheint für dein Anliegen die for-Schleife sinnvoller als die while-Schleife.
Live long and prosper,
Gunnar
Grüße,
du solltest $i for ablauf ein wert geben. echo einfach $i am anfang der schleife und du siehst was die sache ist.
hier wäre übrigens eine for() shleife sinvoller
MFG
bleicher
Hi,
ich übe gerade meine ersten Schritte in PHP
wenn es auch Deine ersten Schritte in der Programmierung sind, solltest Du vielleicht mit etwas beginnen, was nicht als klassische Rekursion aufgefasst werden sollte. In dem Fall ist aber eh von PHP abzuraten, weil diese Sprache es einem Anfänger *viel* zu leicht macht, sich ins eigene Knie zu schießen - und dabei Waffen zur Verfügung stellt, die von der Genfer Konvention verboten werden würden.
und habe leider gerade ein kleines Denkproblem bei den Schleifen.
Ohne Rekursion (und unter Missachtung von suits Tip, der nur unter speziellen Bedingungen gilt) bräuchtest Du hier vier ineinander geschachtelte Schleifen, da vier Stellen entstehen sollen. Möchtest Du zwölf Stellen haben, musst Du den Code auf zwölf Schleifen erweitern - oder eben mit der selben Rekursion wie zuvor arbeiten.
Cheatah
@@Cheatah:
[…] solltest Du vielleicht mit etwas beginnen, was nicht als klassische Rekursion aufgefasst werden sollte.
Immer wieder gerne rausgekramt: ZITAT225 ;-)
Live long and prosper,
Gunnar
Waffen zur Verfügung stellt, die von der Genfer Konvention verboten werden würden.
afaik ist in der genfer konvetion nur geregelt, wer wann wie und warum wem die köpfe einschlagen darf und wen man unter welchen umständen gefangennehmen darf
mit welchem mittel man sich die köpfe einschlagen darf ist in der haager landkriegsordnung geregelt - diese werden lediglich in die genfer konvetion übernommen
Hallo,
mit welchem mittel man sich die köpfe einschlagen darf ist in der haager landkriegsordnung geregelt - diese werden lediglich in die genfer konvetion übernommen
Da ist aber nur das geregelt, was den Landkrieg angeht. Deswegen heißt die Ordnung auch Landkriegsordnung. Diese ist nur eine von vielen Abkommen, die in Den Haag beschlossen wurden. Vielleicht gibt es ja irgendwann auch ein Abkommen über den Einsatz von Skriptsprachen. Haager Skriptsprachenkonvention oder so.
[...]
Art.23
Abgesehen von den durch Sonderverträge aufgestellten Verboten, ist namentlich
untersagt:
- Die Nutzung von PHP von Programmieranfängern mit einer Erfahrung von 200 MannInnenstunden oder weniger.
[...]
[latex]Mae govannen![/latex]
- Die Nutzung von PHP von Programmieranfängern mit einer Erfahrung von 200 MannInnenstunden oder weniger.
Nehm' ich halt MannAußenstunden
Cü,
Kai
@@Christoph Jeschke:
untersagt:
- Die Nutzung von PHP von Programmieranfängern mit einer Erfahrung von 200 MannInnenstunden oder weniger.
Das hilft leider wenig. Ich hatte kürzlich mit einem zu tun, der Formulareingaben unbearbeitet wieder ausgegeben hat. Er war nicht dazu zu bewegen, zu bedenken, ob dies so richtig sei, schließlich macht er das ja schon seit 15 Jahren.
Live long and prosper,
Gunnar
Hi,
Waffen zur Verfügung stellt, die von der Genfer Konvention verboten werden würden.
afaik ist in der genfer konvetion nur geregelt, wer wann wie und warum wem die köpfe einschlagen darf und wen man unter welchen umständen gefangennehmen darf
das "wie" ist wichtig: In meiner Bundeswehrzeit wurde mir beigebracht, das Gewehr G11(?) sei von der Genfer Konvention verboten worden, weil selbst ein Streifschuss den Getroffenen töten soll (wegen des Schocks). Ich bin mir nicht sicher, ob mein Vorgesetzter die Hintergründe richtig referiert hat, aber die Sache an sich bezweifele ich bis dato nicht :-)
Cheatah
und unter Missachtung von suits Tip, der nur unter speziellen Bedingungen gilt
ja schon, aber was spricht gegen eine simple schleife die aufsteigend zahlen im dezimalsystem ausgibt und dann mittels base_convert in die basis 4 konvertiert und anschließend mit nullen auffüllt?
for ($i = 0; $i <= 100; $i++) {
echo str_pad(base_convert($i, 10, 4), 4, "0", STR_PAD_LEFT);
}
nicht getestet
zudem: die datentypen passen vermutlich nicht so ganz, da str_pad natürlich einen string zurückgibt und keine (ganz)zahl
Vielen Dank für die bisherigen Tipps - werde das gleich mal ausprobieren und mich auch mal dem Thema Rekursion widmen...
LG,
sarah
Hi,
und unter Missachtung von suits Tip, der nur unter speziellen Bedingungen gilt
ja schon, aber was spricht gegen eine simple schleife die aufsteigend zahlen im dezimalsystem ausgibt und dann mittels base_convert in die basis 4 konvertiert und anschließend mit nullen auffüllt?
absolut nichts, sofern die speziellen Bedingungen erfüllt bleiben. Wenn das Array aber z.B. die Werte '7', '9', 'a' und 'X' enthält, könnte Dein Ansatz schwierig werden.
Cheatah
absolut nichts, sofern die speziellen Bedingungen erfüllt bleiben. Wenn das Array aber z.B. die Werte '7', '9', 'a' und 'X' enthält, könnte Dein Ansatz schwierig werden.
stimmt - aber ohne die nötigen hintergründe zu kennen wirds schwierig ;)
Hallo Sarah,
Was Du möchtest, sieht ausgeschrieben in Pseudocode etwa so aus:
Gehe von Element zu Element des arrays.
Verknüpfe dieses Element mit folgendem:
Gehe von Element zu Element des arrays.
Verknüpfe dieses Element mit folgendem:
Gehe von Element zu Element des arrays.
Verknüpfe dieses Element mit folgendem:
Gehe von Element zu Element des arrays
...
sieht also aus wie Schleife in Schleife in ....
so ist es auch. ;-)
in php könnte das so aussehen:
$arr=array('','1','2','3');
foreach($arr as $value1)
{
foreach($arr as $value2)
{
foreach($arr as $value3)
{
foreach($arr as $value4)
{
echo $value1.$value2.$value3.$value4.'<br>';
}
}
}
}
In diesem Fall steht von Anfang an fest, dass das array nur 4 Elemente hat. Insofern kann man diese 4 Schleifen also 'fix' verschachteln.
Was aber, wenn nicht feststeht, wieviel Elemente das array hat?
Dann hilft nur Rekursion, bedeutet eine Funktion, die sich innerhalb der Funktion so oft selbst aufruft, wie Elemente das array hat.
Ich hoffe, das bringt Dich auf 'den richtigen Weg'. ;-)
Gruß vom foomaker