Pyramidenförmige Ausgabe - Ich schaff es einfach nicht :(

Tuts4you

Erfahrenes Mitglied
Hallo :)
Ich bräuchte wieder mal eure hilfe!

PHP:
package praktikum.ab4;
import esop.simpleIO.*;
    
public class aufgabe3b {

    public static void main( String args[] ){
    
        int zeilen;
        
        Out.println("Zeilen?");
        zeilen = In.readInt();
        
        for (int i=1; i<=zeilen; i++){
            for (int j=0; j<i; j++){
                Out.print(i);
            }
            Out.println("");
        }
        Out.println("");
    }
}
dann sieht die ausgabe bei 4 Zeilen so aus:
1
22
333
4444

Jetzt kommt das Problem - das ganze soll aber auch zentriert, also in Pryamidenform, ausgegeben werden --> und das raff ich einfach nicht:

...1
..22
.333
4444

Wie kann ich das lösen? Natürlich ohne (.)

Danke für eure Hilfe!

Michael :p
 
Hi.

Dir jetzt einfach so die Lösung zu verraten wäre natürlich zu einfach. Aber überleg dir doch mal wieviel Leerzeichen du in jeder Zeile vor die Elemente schreiben mußt. Kleiner Tipp: die Anzahl der Leerzeichen ist umgekehrt proportional zu der Anzahl der Elemente in jeder Zeile.

Schreib dir am besten einfach für ein paar Zeilen hin wieviel Leerzeichen und wieviel Elemente du hast. Dann versuch daraus eine Formel abzuleiten.

Gruß
 
danke für die schnelle Antwort! :)

Annahme: ich hab 4 Zeilen...

dann bräuchte ich beim ersten 3 Leerzeichen
beim zweiten 2 Lz
und beim dritten 1 Lz

oder?
aber wie bauch ich das in meine Schleifen ein? zusätzlich eine neue?

lg Michael
 
Also ich würde anders vorgehen.
die Länge der größten auszugebenen Zeile ist doch ziemlich bekannt, oder?
jede weitere Zeile ist der Zeichenlänge kurz vor der Ausgabe auch bekannt.
nun muss man nur noch ungefär sich erinnern wie man Texte zentral schreibt. In den Zeiten, wo man noch mit Schreibmaschienen handtierte wußte man das ;-)
* sei mal die zu zentrlisiernede Zeile, + die größte


Code:
**********            (10 Zeichen)
++++++++++++++++++++   (20 Zeichen)

man würde jetzt doch erwaten dass die kleinere Zeile um 5 nach rechts gerückt würde.

Code:
     **********       (10Zeichen)
++++++++++++++++++++  (20 Zeichen)

-----          -----   (5+10+5 = 20)

also erscheint mir da eine formel vielleicht ganz passend zu funktionieren

(Zeichenanzahl(kleinere Zeile) - Zeichenanzahl(längste-Zeile)) / 2

probiere mal aus ob es auch mit anderen Anzahlen geht

Takidoso
 
mhm, danke für deine Hilfe --> aber irgendwie raff ich das noch immer nicht!
Bei mir sieht das jetzt folgendermaßen aus:

PHP:
package praktikum.ab4;
import esop.simpleIO.*;
   

public class aufgabe3b {

    public static void main( String args[] ){
    
        int zeilen;
        
        Out.println("Zeilen?");
        zeilen = In.readInt();
        
        for (int i=1; i<=zeilen; i++){
            for (int k=(zeilen-i)/2; k>=0; k--){
                Out.print(".");
            }
            for (int j=0; j<i; j++){
                
                Out.print(i);
            }
            Out.println("");
        }
        Out.println("");
    }
}

Die Ausgabe bei "4" Zeilen so:

PHP:
Zeilen?
4
..1
..22
.333
.4444

und das haut noch immer nicht hin! :(
 
ich die Lösung *juhu*

PHP:
package praktikum.ab4;
import esop.simpleIO.*;
   

public class aufgabe3b {

    public static void main( String args[] ){
    
        int zeilen;
        
        Out.println("Zeilen?");
        zeilen = In.readInt();
        
        for (int i=1; i<=zeilen; i++){
            for (int k=(zeilen-i); k>=0; k--){
                Out.print(" ");
            }
            for (int j=0; j<i; j++){
                
                Out.print(i+" ");
            }
            Out.println("");
        }
        Out.println("");
    }
}

Bei 4 sieht das dann so aus:
PHP:
Zeilen?
4
    1 
   2 2 
  3 3 3 
 4 4 4 4

danke für Eure Hilfe! Michael :p
 
Zurück