sarah: Schleifen

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

  1. 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

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    We found ourselves looking upon a familiar sight. We were home. How do you pick up the threads of an old life? How do you go on... when in your heart you begin to understand... there is no going back? There are somethings that time cannot mend... some hurts that go too deep... that have taken hold.  --  The Lord of the Rings: The Return of the King (Peter Jackson)
    1. Du wirst ein Muster erkennen

      tipp: es ist ein zahlensystem mit der basis 4 ;)

  2. @@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

    --
    Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
  3. 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

    --
    __________________________-
    Die versprechen ernsthaft werbefreien hosting?
  4. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. @@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

      --
      Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
    2. 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

      1. 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.

        [...]

        1. [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

          --
          Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
          selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
        2. @@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

          --
          Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
      2. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
    3. 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

      1. Vielen Dank für die bisherigen Tipps - werde das gleich mal ausprobieren und mich auch mal dem Thema Rekursion widmen...

        LG,
        sarah

      2. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. 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 ;)

  5. 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