GBE: Variable in bestimmter Form ausgeben

Hallo,
ich habe eine komplizierte Aufgabe von meinem Lehrer bekommen:

Erzeugen Sie mit nur einer for-Schleife und keiner Zweiten Variablen folgende Ausgabe:

01 - 02 - 03 - 04 - 05
06 - 07 - 08 - 09 - 10
11 - 12 - 13 - 14 - 15
16 - 17 - 18 - 19 - 20

Hier mein Anfang:

<?
for ($i = 1; $i <= 20; $i++)

{echo
 $i,"&nbsp;-&nbsp;";
 }
 echo "<br />";

?>
Für jede Idee bin ich sehr dankbar.

  1. Hi,

    for($i=1;$i<=20;$i++) {
        if($i!=1&&$i!=6&&$i!=11&&$i!=16) {
            echo '&nbsp;-&nbsp;';
            }
        if($i<10) {
            echo '0'.$i;
            } else {
            echo $i;
            }
        if($i==5||$i==10||$i==15||$i==20) {
            echo "<br>\n";
            }
        }

    also das funktioniert zumindest, ist nur eine for-Schleife und nur eine Variable, aber ist nicht wirklich schön...

    Da gibt's bestimmt noch bessere Möglihckeiten, das ist aber shcon einmal ein Anfang...

    auf welcher Schule macht man sowas wenn ich frage darf? würd au gern mal sowas in der schul machen...;-)

    schöne grüße buzz

    1. Hi,
      vielen vielen dank für die Antworten.
      Das lernt man an der ABTW Leipzig, gehört zur dpfa Gruppe.
      Leider haben wir nur 180 min PHP innerhalb von 2 Wochen. Das ist zu wenig, weil es erstens Spaß macht und zweitens kann man damit viel anfangen.
      Guten Rutsch ins neue Jahr euch Allen.

      1. echo $begrüßung;

        Leider haben wir nur 180 min PHP innerhalb von 2 Wochen. Das ist zu wenig, weil es erstens Spaß macht und zweitens kann man damit viel anfangen.

        Das ist, wie ich finde, eine ziemlich blauäugige Ausrede. Es ist gesetzlich nicht verboten, sich außerhalb von Bildungseinrichtungen und auf eigene Faust Wissen und Erfahrung anzueignen. :-) Zugegeben fällt das manch einem schwer, weil man dabei keinen roten Faden vorgegeben bekommt und selbst aktiv werden muss, sich Aufgaben auszudenken und Lösungswege zu suchen. Andererseits kann grade dieser nicht vorhandene Zwang zu einem intensiveren Erfolg führen, weil man sich auf das konzentrieren kann, was einem Spaß macht und davon ausgehend links und rechts vom Weg neue Ideen aufschnappen kann, als hastig zum Ende durchzulaufen oder durchgetrieben zu werden.

        echo "$verabschiedung $name";

        1. Leider werden uns nicht die Grundlagen beigebracht!
          Eine Programmiersprache kann man wie eine Fremdsprache lernen, also Vokabeln und Gramatik pauken. Aber ich kann nicht in PHP denken!
          Ich würde niemals versuchen eine Zahl durch eine andere zu teilen nur um einen Zeilenumbruch festzulegen.

          Kann man das ganze auch anders machen:
          Ein "leeres" Feld mit 5 mal 5 Fächern festlegen und dann die Werte eintragen lassen?
          Nur mal so als Überlegung.

          Gruß aus Leipzig

          PS: Wie klingt nur eine Hand die klatscht?

          1. n'abend,

            Eine Programmiersprache kann man wie eine Fremdsprache lernen, also Vokabeln und Gramatik pauken. Aber ich kann nicht in PHP denken!

            Syntax und Bezeichnungen irgendwelcher Dinge (Methoden, Ausdrücke, Operatoren, ...) sind beim Programmieren eher zweitrangig.
            Das Abstrahieren ist das, was vielen Leuten Probleme bereitet.

            Ich würde niemals versuchen eine Zahl durch eine andere zu teilen nur um einen Zeilenumbruch festzulegen.

            Sowas lernt man mit der Zeit... Man stolpert aus Versehen über sowas, schaut sich an, wie das funktioniert, warum es tut, was es tut, was bei rauskommt.. und schon hat man sich den Stolperstein gemerkt...

            PS: Wie klingt nur eine Hand die klatscht?

            Das kommt wohl auf das Gesicht an, in welchem die Hand landet.

            weiterhin schönen abend...

            --
            Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
            sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
          2. Hi,

            PS: Wie klingt nur eine Hand die klatscht?

            das kannst Du in diversen Theatern herausfinden. Da müssen Leute mit Glatzen in der ersten und Leute mit nur einem Arm in der zweiten Reihe sitzen, damit die auch mal klatschen können.

            Viele Grüße

            Jörg

          3. echo $begrüßung;

            Eine Programmiersprache kann man wie eine Fremdsprache lernen, also Vokabeln und Gramatik pauken. Aber ich kann nicht in PHP denken!

            Durch Pauken kann man eine Sprache technisch lernen, aber ein Schriftsteller ist man dadurch noch lange nicht. Dazu muss man eine gewisse Begabung mitbringen und sich die Feinheiten bei anderen abschauen oder selbst erfinden und schauen, wie sie bei anderen ankommen.

            Ich würde niemals versuchen eine Zahl durch eine andere zu teilen nur um einen Zeilenumbruch festzulegen.

            Die Kunst des Programmierens besteht darin, aus der gegebenen Aufgabenstellung die Regelmäßigkeiten und Abläufe zu erkennen und diese dann in Code zu fassen. In deinem Fall gilt es zu erkennen, dass nach jeder fünften Zahl ein Umbruch erfolgen soll. Wie erkennt man nun, ob eine Zahl eine fünfte Zahl ist oder nicht? Am einfachsten, indem man sich ihre Teilbarkeit durch 5 anschaut oder abzählt ("Eene meene muh und raus bist du.")

            Kann man das ganze auch anders machen:
            Ein "leeres" Feld mit 5 mal 5 Fächern festlegen und dann die Werte eintragen lassen?

            Auch da brauchst du ein Entscheidungskriterium, ob du beim 5. Fach angelangt bist und nun eine neue Reihe aufmachen musst oder noch nicht.

            Man kann es natürlich auch noch komplizierter machen. Man lege sich ein Feld mit den Werten von 1 bis 20 an (range()), schneide sich dann daraus Teile zu jeweils 5 Stücken (array_splice()), implodiere sie mit der Trennsequenz ' - ' zu einem String, und füge zwischen diese Strings ein <br> ein. Dabei hat man aber noch nicht die führenden Nullen berücksichtigt. Also müsste man entweder das mit range() erzeugte Array durchlaufen und die einstelligen Zahlen zu nullführenden Strings umwandeln oder statt range() die Werte zu Fuß erzeugen oder den implode-Teil umschreiben oder ... Dabei kommt aber wesentlich mehr Code zusammen als Des Martins Zweizeiler.

            echo "$verabschiedung $name";

    2. Hi,

      hier die schöne Variante:

      for($i=1;$i<=20;$i++) {
          if($i%5==0) {
              echo sprintf('%02d',$i).'<br>'."\n";
              } else {
              echo sprintf('%02d',$i).' - ';
              }
          }

      ich glaube jetzt, das ist so ziemlich die schönstes Lösun?
      Hat noch jeamdn en Verbesserungsvorschlag?

      schönen gruß
          buzz

      1. Hallo,

        for($i=1;$i<=20;$i++) {
            if($i%5==0) {
                echo sprintf('%02d',$i).'<br>'."\n";
                } else {
                echo sprintf('%02d',$i).' - ';
                }
            }

        Hat noch jeamdn en Verbesserungsvorschlag?

        Ja, hier bitte:

        for ($i=1; $i<=20; $i++)
             echo sprintf('%02d',$i) . ($i%5 ? '<br>' : ' - ');

        Noch weitere Angebote?
        Ciao,
         Martin

        --
        Ich bin im Prüfungsstress, ich darf Scheiße sagen.
          (Hopsel)
        1. echo $begrüßung;

          for ($i=1; $i<=20; $i++)
               echo sprintf('%02d',$i) . ($i%5 ? '<br>' : ' - ');

          Noch weitere Angebote?

          echo sprintf() lässt sich allgemein durch printf() zusammenfassen. Gut, in dem Fall müsste dann noch ein zweites echo mit dem bedingten Teil folgen oder der bedingte Teil innerhalb des printf an den Formatstring angefügt werden (was allerdings wegen gesteigerter Kompliziertheit/Unübersichtlichkeit Abzüge in der B-Note gibt).

          printf('%02d' . ($i % 5 ? ' - ' : '<br>'), $i);

          Außerdem war die Ausgabe-Logik von <br> und - vertauscht.

          Noch eine Klitzekleinigkeit: Möchte man mehrere Dinge mit echo ausgeben, kann man diese durch Komma statt Punkt getrennt dem echo übergeben. Die Ausdrücke werden dann sofort nach ihrer Berechnung ausgegeben ohne dass sie erst noch durch die Stringkonkatenation zu einem großen String zusammengebaut werden müssen, der nichts weiter als ausgegeben und danach verworfen wird.

          echo "$verabschiedung $name";

          1. printf('%02d' . ($i % 5 ? ' - ' : '<br>'), $i);

            ($i % 5 ? ' - ' : '<br>')

            hey,

            was ist das?
            wo gibt's da was drüber find ich interessant...

            mfg

            1. gudn tach!

              ($i % 5 ? ' - ' : '<br>')

              was ist das?

              % ist der modulo-operator (beachte: $x == true fuer $x>0 und 0 == false.)

              "cond ? then : else" ist der ternaere bedingungsoperator

              prost
              seth

              1. n'abend,

                (beachte: $x == true fuer $x>0 und 0 == false.)

                (automatische) Umwandlung nach boolean
                Typenvergleiche

                weiterhin schönen abend...

                --
                Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
                sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
              2. danke für den links was ist eiglt des double() ??

                habe ich das mit dem tenär richtig verstanden...
                ($i % 5 ? ' - ' : '<br>')
                in dem beispiel wird geprft, ob das vor dem ? null ist, wenn ja wird das hinter dem : angezeigt wenn nein das nach dem ?

                dann müsste folgendes

                (0 ? 'wird nie ausgegeben' : 'wird immer ausgegebn')

                immer 'wird immer ausgegebn' ausgeben oder?

                mfg

                1. n'abend,

                  ($i % 5 ? ' - ' : '<br>')
                  in dem beispiel wird geprft, ob das vor dem ? null ist, wenn ja wird das hinter dem : angezeigt wenn nein das nach dem ?

                  ausdruck() ? ausdruckIstWahr() : ausdruckIstNichtWahr();

                  entspricht:

                  if( ausdruck() )  
                    ausdruckIstWahr();  
                  else  
                    ausdruckIstNichtWahr();
                  

                  (0 ? 'wird nie ausgegeben' : 'wird immer ausgegebn')
                  immer 'wird immer ausgegebn' ausgeben oder?

                  korrekt

                  weiterhin schönen abend...

                  --
                  Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
                  sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
                  1. gibt es noch mehr solche operatoren?

                  2. hi,
                    dann ist dieser ausdruck nur eine abart der if-abfrage?
                    was ist dann der vorteil?
                    einfach nur, dass es für simpe if abfragen einfacher ist oder für längere nimmt man dann ne ganz normale if abfrage aber sont hats kei untershced oder?

                    achso und bei dieser form hat man auch nicht die mölichkeit eines elseif oder?

                    mfg

                    1. echo $begrüßung;

                      dann ist dieser ausdruck nur eine abart der if-abfrage?

                      Quasi. Genauer gesagt liefert er in Abhängigkeit der Bedingung einen von beiden Ausdrücken zurück, während ein if-Statement in Abhängigkeit der Bedingung den einen oder falls vorhanden anderen Code-Block ausführt.

                      was ist dann der vorteil?
                      einfach nur, dass es für simpe if abfragen einfacher ist oder für längere nimmt man dann ne ganz normale if abfrage aber sont hats kei untershced oder?

                      Möchte ich Code ausführen nehme ich if. Möchte ich bedingt das Ergebnis eines Ausdrucks haben, nehme ich den Trinitätsoperator.

                      achso und bei dieser form hat man auch nicht die mölichkeit eines elseif oder?

                      Doch. Man kann die Ausdrücke auch so gestalten, dass sie wiederum den Trinitätsoperator verwenden. Das wird dann aber auch schnell unübersichtlich.

                      echo "$verabschiedung $name";

                      1. Doch. Man kann die Ausdrücke auch so gestalten, dass sie wiederum den Trinitätsoperator verwenden. Das wird dann aber auch schnell unübersichtlich.

                        wie sieht das dann aus?

                        (bedingung ? wenn_erfüllt : wenn_nicht_erfüllt)
                        ist das "normale" if und else...

                        und mit elseif wie sähe das aus?

                        (bedingung1 ? wenn_1_erfüllt : bedingung2 ? wenn_2_erfüllt : wenn_1_2_nich_erfüllt)

                        so?

                        1. Moin!

                          Doch. Man kann die Ausdrücke auch so gestalten, dass sie wiederum den Trinitätsoperator verwenden. Das wird dann aber auch schnell unübersichtlich.

                          wie sieht das dann aus?

                          Der Trinitätsoperator ist am besten immer in eine Klammer gesetzt - das grenzt ihn gut gegen andere Bestandteile von Ausdrücken (z.B. Rechnungen oder Stringverkettungen) ab.

                          (bedingung ? wenn_erfüllt : wenn_nicht_erfüllt)
                          ist das "normale" if und else...

                          Und eine andere Form gibt es beim Ternären Operator auch nicht.

                          und mit elseif wie sähe das aus?

                          (bedingung1 ? wenn_1_erfüllt : bedingung2 ? wenn_2_erfüllt : wenn_1_2_nich_erfüllt)

                          so?

                          Nein.

                          Mal als anschauliches Beispiel die Mehrwertsteuerumstellung:
                          $mwst = (date('Y')>2006 ? 0.19 : 0.16);

                          Da definierst du sozusagen eine Funktion, die in Abhängigkeit von einer bedingung den einen oder den anderen Funktionswert zurückliefert - in diesem Fall konstante Werte.

                          Erweitern wir das Beispiel noch um eine Abfrage, ob der normale oder der ermäßigte Mehrwertsteuersatz zu zahlen ist:
                          $mwst = (ermaessigt($produkt)? 0.07 : 0.16 );

                          Die Funktion ermaessigt kriegt das Produkt und sagt (mit true oder false), ob der ermäßigte Steuersatz fällig wird. Der normale Steuersatz steht hier erstmal fix mit 16% drin.

                          Beides kombiniert:
                          $mwst = (ermaessigt($produkt)? 0.07 : (date('Y')>2006 ? 0.19 : 0.16) );

                          Würde sich der ermäßigte Steuersatz auch irgendwann ändern, könnte man natürlich statt der fixen 0.07 auch dort einen ternären Operator einpflanzen.

                          Aber wie erwähnt: Diese Verkettungen sind bei mehreren Ebenen irgendwann nicht mehr leicht durchschaubar, solch ein Code wird recht schnell unwartbar.

                          - Sven Rautenberg

                          --
                          "Love your nation - respect the others."
                          1. echo $begrüßung;

                            und mit elseif wie sähe das aus?
                            (bedingung1 ? wenn_1_erfüllt : bedingung2 ? wenn_2_erfüllt : wenn_1_2_nich_erfüllt)
                            so?

                            Nein.

                            Einspruch, Euer Ehren! Diese Notation ist syntaktisch in Ordnung. Solange die weitere Anwendung des ?: im else-Zweig des übergeordneten/vorangehenden ?: vorkommt ist ein Klammern nicht nötig.
                            Nichtsdestotrotz sind solche Schachtelmonster unschön, und es ist aus Gründen der Lesbarkeit empfehlenswert, auf sie zu verzichten.

                            echo "$verabschiedung $name";

                  3. Hi,

                    ausdruck() ? ausdruckIstWahr() : ausdruckIstNichtWahr();
                    entspricht

                    allenfalls annähernd

                    if( ausdruck() )

                    ausdruckIstWahr();
                    else
                      ausdruckIstNichtWahr();

                      
                    ersteres ist eine Expression, letzteres ein Statement.  
                    Ersteres kann also in einem Ausdruck als Teil vorkommen oder als rechte Seite einer Zuweisung, letzteres nicht.  
                      
                    a = (b > 0) ? b : -b;  
                    ist möglich.  
                      
                    a = if (a > 0) a else -a;  
                    ist nicht möglich.  
                      
                    cu,  
                    Andreas
                    
                    -- 
                    [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
                    [Schreinerei Waechter](http://www.schreinerei-waechter.de/)  
                    [O o ostern ...](http://ostereier.andreas-waechter.de/)  
                    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.  
                    
                    
            2. n'abend,

              ($i % 5 ? ' - ' : '<br>')
              was ist das?
              wo gibt's da was drüber find ich interessant...

              Modulo
              Trinitäts-Operator

              weiterhin schönen abend...

              --
              Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
              sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
          2. Hallo,

            echo sprintf() lässt sich allgemein durch printf() zusammenfassen. Gut, in dem Fall müsste dann noch ein zweites echo mit dem bedingten Teil folgen ...

            genau, und deshalb habe ich alles in eins zusammengefasst.

            printf('%02d' . ($i % 5 ? ' - ' : '<br>'), $i);
            Außerdem war die Ausgabe-Logik von <br> und - vertauscht.

            Damn, erwischt.
            Das liegt am Modulo-Operator. In Gedanken lese ich $i%5 nämlich, wenn ich nicht aufpasse, als "ist $i durch 5 teilbar?" und nicht als "Divisionsrest von $i/5". Dieser Fehler passiert mir immer wieder. Fällt aber meistens beim ersten Testen auf. ;-)

            Noch eine Klitzekleinigkeit: Möchte man mehrere Dinge mit echo ausgeben, kann man diese durch Komma statt Punkt getrennt dem echo übergeben. Die Ausdrücke werden dann sofort nach ihrer Berechnung ausgegeben ohne dass sie erst noch durch die Stringkonkatenation zu einem großen String zusammengebaut werden müssen, der nichts weiter als ausgegeben und danach verworfen wird.

            Sehr guter Einwand, danke. Mir war nicht klar, dass nach einem echo mehrere durch Komma getrennte Ausdrücke folgen können; ich bin immer nur von einem ausgegangen.

            Ciao,
             Martin

            --
            Wer im Glashaus sitzt, sollte sich nur im Dunkeln ausziehen.
  2. Hi,

    ich habe eine komplizierte Aufgabe von meinem Lehrer bekommen:

    ich find's eher trivial, aber dem Urteil liegt natürlich eine gewisse Erfahrung zugrunde. ;-)

    Erzeugen Sie mit nur einer for-Schleife und keiner Zweiten Variablen folgende Ausgabe:

    01 - 02 - 03 - 04 - 05
    06 - 07 - 08 - 09 - 10
    11 - 12 - 13 - 14 - 15
    16 - 17 - 18 - 19 - 20

    Mal aufmerksam und analytisch hinsehen:
     * Zahlen von 1 bis 20
     * Zahl immer zweistellig
     * dann eine Trennsequenz " - " oder eine neue Zeile

    Hier mein Anfang:

    <?

    Kritik: Gewöhne dir bitte die ausführliche Schreibweise <?php an. Die Kurzform, die du verwendest, ist je nach PHP-Konfiguration (Stichwort: short_open_tags) nicht überall vefügbar.

    for ($i = 1; $i <= 20; $i++)

    Klar, da gibt es nicht viel dran zu überlegen.

    {echo
    $i,"&nbsp;-&nbsp;";

    Die Ausgabe einer Zahl mit einer festen Stellenzahl und führender Null, wie hier in der Aufgabe, kann man entweder mit der Holzhammermethode machen (wenn kleiner 10, eine Null vorne dran ausgeben), oder elegant, indem man die Ausgabe mit printf() formatiert.
    Und dann kommt die Unterscheidung, ob die Trennsequenz " - " oder ein Zeilenumbruch folgen soll. Wovon ist das abhängig? Ich weiß nicht, wie es dir geht - aber für mich ist das offensichtlich: Immer wenn $i durch 5 teilbar ist, wird danach eine neue Zeile begonnen. Ob eine Zahl ohne Rest durch einen bestimmten Divisor teilbar ist, überprüft man am einfachsten mit dem Modulo-Operator. Der Rest ist eine einfache if-Abfrage (dass mir jetzt keiner was von einer if-Schleife faselt!), die entweder die Trennsequenz oder einen Zeilenumbruch ausgibt. Bedenke dabei, wenn die Ausgabe in HTML erfolgt, dass auch der Zeilenumbruch dem HTML-Kontext entspricht.

    Ich hoffe, das hilft dir etwas weiter.

    So long,
     Martin

    --
    Lieber eine Fliege im Porzellanladen
    als ein Elefant in der Suppe.
  3. Hallo GBE.

    ich habe eine komplizierte Aufgabe von meinem Lehrer bekommen:

    Erzeugen Sie mit nur einer for-Schleife und keiner Zweiten Variablen folgende Ausgabe:

    01 - 02 - 03 - 04 - 05
    06 - 07 - 08 - 09 - 10
    11 - 12 - 13 - 14 - 15
    16 - 17 - 18 - 19 - 20

    Hier mein Anfang:

    <?
    for ($i = 1; $i <= 20; $i++)

    {echo
    $i,"&nbsp;-&nbsp;";
    }
    echo "<br />";

    ?>

    Den Zeilenumbruch solltest du nur dann ausgeben, wenn der aktuelle Wert von $i (welchem du mit printf die führende Null voranstellen kannst) restlos durch 5 teilbar ist. (→ Modulo)

    Einen schönen Samstag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
  4. echo $begrüßung;

    Erzeugen Sie mit nur einer for-Schleife und keiner Zweiten Variablen folgende Ausgabe:

    01 - 02 - 03 - 04 - 05
    06 - 07 - 08 - 09 - 10
    11 - 12 - 13 - 14 - 15
    16 - 17 - 18 - 19 - 20

    Das Geheimnis liegt in der Anwendung des Modulo-Operators. Eine Division durch 5 ergibt nur bei den rechts stehenden Zahlen keinen Rest. Das kann man als Bedingung für das Einfügen des Umbruchs heranziehen. Die Entscheidung, führende Nullen einzufügen lässt sich ebenfalls mit einer Bedingung fällen. Man kann dazu aber auch Ausgabeformatierfunktionen wie (s)printf() verwenden.

    echo "$verabschiedung $name";

  5. n'abend,

    Erzeugen Sie mit nur einer for-Schleife und keiner Zweiten Variablen folgende Ausgabe:

    01 - 02 - 03 - 04 - 05
    06 - 07 - 08 - 09 - 10
    11 - 12 - 13 - 14 - 15
    16 - 17 - 18 - 19 - 20

    du suchst einen neuen Freund. Dein neuer Freund heißt Modulo. Dein Freund Modulo berechnet den Rest einer Ganzzahl-Division. So, wie man das zu Grundschulzeiten gelernt hat. »5 geteilt durch 2 gibt?« na ist doch klar! »2 Rest 1.« Wenn du also nach jedem 5. Element einen Zeilenumbruch haben willst, möchtest du deinen Counter / Index (Wie auch immer du diese Variable zu nennen pflegst) mit deinem neuen Freund "Modulo 5" bekannt machen. Gibt Modulo 0 aus, so ist dein Counter / Index durch 5 teilbar. Ist der Index durch 5 teilbar, ist er also ein Vielfaches von 5.

    Ausserdem möchtest du führende 0en für die Ausgabe haben. Dazu schaust du einfach, ob der Wert des Indexes kleiner als 10 ist, wenn, dann hängst du vorne einfach eine "0" an. Den Cast von Integer nach String macht php selbstverfreilich automagisch.

    Dein Code könnte also in etwa so ausschauen:

    <?php  
      
    $start = 1;  
    $end = 20;  
      
    for( $i = $start; $i <= $end; $i++ )  
    {  
      // Ausgabe des Trennzeichens  
      if( $i > $start )  
        echo '&nbsp;-&nbsp;';  
      
      // Ausgabe der Zahl, ggf. mit führender 0  
      echo ($i < 10)? ("0" . $i) : $i;  
      
      // Zeilenumbruch nach jedem 5. Element, aber nicht nach dem letzten Element  
      if( $i % 5 == 0 && $i < $end )  
        echo '<br />';  
      
    }  
     echo "<br />";  
      
    ?>
    

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. n'abend,

      vielleicht wäre das folgende etwas sinnvoller gewesen:

      <?php  
        
      $start = 1;  
      $end = 20;  
      $zahlenProZeile = 5;  
        
      for( $i = $start; $i <= $end; $i++ )  
      {  
        // Ausgabe des Trennzeichens, sofern nicht das erste Element der Zeile  
        if( $i > $start && ($i-1) % $zahlenProZeile != 0 )  
          echo '&nbsp;-&nbsp;';  
        
        // Ausgabe der Zahl, ggf. mit führender 0  
        echo ($i < 10)? ("0" . $i) : $i;  
        
        // Zeilenumbruch nach jedem 5. Element, aber nicht nach dem letzten Element  
        if( $i % $zahlenProZeile == 0 && $i < $end )  
          echo '<br />';  
        
      }  
      ?>
      

      weiterhin schönen abend...

      --
      Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
      sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  6. Moin!

    ich habe eine komplizierte Aufgabe von meinem Lehrer bekommen:

    Gar nicht kompliziert.

    Erzeugen Sie mit nur einer for-Schleife und keiner Zweiten Variablen folgende Ausgabe:

    Also haben folgende Elemente in der Lösung enthalten zu sein:
    1. Eine for-Schleife.
    2. Offenbar maximal nur eine Variable
    3. Ausgabe dieses Textmusters:

    01 - 02 - 03 - 04 - 05
    06 - 07 - 08 - 09 - 10
    11 - 12 - 13 - 14 - 15
    16 - 17 - 18 - 19 - 20

    Das ist doch ganz einfach:

      
    <?php  
      
    for (;;)  
    {  
      echo "01 - 02 - 03 - 04 - 05<br>06 - 07 - 08 - 09 - 10<br>11 - 12 - 13 - 14 - 15<br>16 - 17 - 18 - 19 - 20";  
      break;  
    }  
    ?>  
    
    

    Die leere runde Klammer beim FOR ist eine Endlosschleife, die erst verlassen wird, wenn innerhalb der Anweisungen auf ein break getroffen wird.

    Außerdem verwendet die Lösung gar keine Variable. Im Gegensatz zu allen anderen Lösungen ist sie daher die performanteste Lösung aller dir vorgeschlagenen Lösungen.

    Wenn du dich traust, mit dieser Lösung bei deinem Lehrer anzukommen, wird er vermutlich nicht begeistert sein, weil du seine Aufgabe gehackt hast. Er hat nämlich die Aufgabe unzureichend formuliert. Bzw. so formuliert, dass man sie unter Erfüllung aller Bedingungen auch extrem anders lösen kann.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hallo Sven.

      Erzeugen Sie mit nur einer for-Schleife und keiner Zweiten Variablen folgende Ausgabe:

      Also haben folgende Elemente in der Lösung enthalten zu sein:

      1. Eine for-Schleife.
      2. Offenbar maximal nur eine Variable
      3. Ausgabe dieses Textmusters:

      01 - 02 - 03 - 04 - 05
      06 - 07 - 08 - 09 - 10
      11 - 12 - 13 - 14 - 15
      16 - 17 - 18 - 19 - 20

      Das ist doch ganz einfach:

      <?php

      for (;;)
      {
        echo "01 - 02 - 03 - 04 - 05<br>06 - 07 - 08 - 09 - 10<br>11 - 12 - 13 - 14 - 15<br>16 - 17 - 18 - 19 - 20";
        break;
      }
      ?>

        
      YMMD!  
        
        
      Einen schönen Samstag noch.  
        
      Gruß, Mathias  
      
      -- 
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)  
        
      debian/rules
      
  7. for ($i = 1; $i <= 20; $i++)

    {echo
    $i,"&nbsp;-&nbsp;";
    }
    echo "<br />";

    Für jede Idee bin ich sehr dankbar.

    for ($i = 1; $i <= 20; $i=$i+5)
     {
     echo
      $i,"&nbsp;-&nbsp;".$i+1,"&nbsp;-&nbsp;".$i+2,"&nbsp;-&nbsp;".$i+3,"&nbsp;-&nbsp;".$i+4,"&nbsp;-&nbsp;";
     }
    echo "<br />";