Hilfe bei Tannenbäumchen malen ....

michi1512

Mitglied
hallo leute,

ich hab hier ne aufgabe bei der ich nich weiterkomme
kann mir da jemand helfen? Die aufgabe lautet so:

Zeichnen Sie auf der Konsole einen Tannenbaum mit variabler Größe. Hier z. B. für die Größe 3:
/\ <- 2 Leerzeichen + / + \
/ \ <- 1 Leerzeichen + / + 2 Leerzeichen + \
/ \ <- / + 4 Leerzeichen + \
|| <- 2 Leerzeichen + | + |

Hinweis: Um Backslash ausgeben zu können, muss ein weiterer Backslash davor geschrieben werden: System.out.println(„\\“)

Erinnerung: Ausgabe ohne Umbruch: System.out.print(„“);

- Legen Sie eine Variable fest, welche die Größe des Tannenbaums bestimmt.
- Verwenden Sie Schleifen um die Zeichen und Zeilen nacheinander auszugeben.
- Verwenden Sie Abfragen um das richtige Zeichen an der passenden Stelle auszugeben.
- Testen Sie Ihre Ausgabe für verschiedene Größen (z.B. außer 3 noch für 2 und 5).

wie soll man das denn mit schleifen machen ?
wäre cool wenn mir da hemand helfen könnte
lg ;)
 

madboy

Top Contributor
"Male" einen Tannenbaum mit einem Editor (Notepad o.ä.). Überlege dir bei jedem Schritt, den du machst, was und warum du das tust. Wann tippst du ein Leerzeichen? Wann einen Backslash? ...

Wenn du gründlich überlegst, wirst du eine Regelmäßigkeit feststellen. Hast du die Regelmäßigkeit verstanden, hast du schon die Begründung für die Schleife und musst das "nur noch" umsetzen :)
 

michi1512

Mitglied
hi danke für deine antwort =)

also die regelmäßigkeit is ja zb bei den ersten leerzeichen - es sind immer um 1 wenieger als die größe des tannenbaums, also bei 3 fängts mit 2 leerzeichen an, bei 5 mit 4 leerzeichen. Bei jeder Zeile verringert sich die Anzahl dann um 1. Bei den mittleren Leerzeichen vergrößert sich die Anzahl der Leerzeichen mit jeder Zeile um 2.
Aber wie setzte ich das als Code um ?

Muss ich für Anzahl der Leerzeichen auch eine Variable anlegen, für die ich dann zb Anzahl=Anzahl-1 festlege? ???:L :bahnhof:
 

madboy

Top Contributor
Such mal hier im Forum nach "Tannenbaum", da gibt's schon recht viele Threads dazu.
Die Regelmäßigkeit hast du ja schon schön beschrieben, das liest sich schon fast wie Pseudocode :)
 

Andi_CH

Top Contributor
hi danke für deine antwort =)

also die Regelmäßigkeit ist ja z.B. bei den ersten Leerzeichen - es sind immer um 1 weniger als die größe des Tannenbaums, also bei 3 fängt es mit 2 Leerzeichen an, bei 5 mit 4 Leerzeichen. Bei jeder Zeile verringert sich die Anzahl dann um 1. Bei den mittleren Leerzeichen vergrößert sich die Anzahl der Leerzeichen mit jeder Zeile um 2.
Aber wie setzte ich das als Code um ?

Muss ich für Anzahl der Leerzeichen auch eine Variable anlegen, für die ich dann zb Anzahl=Anzahl-1 festlege? ???:L :bahnhof:

Ich weiss nicht was du musst - du kannst die jedes mal berechnen oder abspeichern

Ich habe dir eine mögliche Lösung aufgeschrieben (nein logischerweise nicht in Java, denn genau das sollst du ja üben!)

Mach jetzt mal etwas Code, poste diesen und dann sehen wir weiter!

Java:
int ersteLeerzeichen = groesse -1;
int mittlereLeerzeichen = 0;
for(i=1 bis grösse) { // solltest du schon selbst schaffen ;-)
- zeichne erste Leerzeichen // hm - vielleicht auch mit einem forloop?
- zeichne /
- zeichne mittlere Leerzeichen //hmm vielleicht mit einem .... tja :-) 
- zeichne \
- ersteLeerzeichen um 1 verkleinern
- mittlereLeerzeichen um 2 vergrössern
}
 

Twilight

Mitglied
Java:
private static int HOEHE_DES_TANNENBAUMS;
//zeichne die erste Zeile, scheint mir eine kleine ausnahme zu sein :)

for(){ // für HOEHE_DES_TANNENBAUMS-1 Leerzeichen schreiben, dann die Spitze

}

for(){ // jetzt hier für den Rest des Tannenbaumes: von 1 bis HOEHE_DES_TANNENBAUMS, zähler = i;
for(){// zähler = j, es wir von 0 bis HOEHE_DES_TANNENBAUMS-i gezählt, dann "/"
for(){ // zähler = k, von 0 bis 2*i Leerzeichen schreiben
}
// jetzt schreibt man das "\"
}
}
und zum schluss noch:
for(){ zähler = i; von 0 bis HOEHE_DES_TANNENBAUMS-1, leerzeichen schreiben
}
und jetzt nur noch "||" ausgeben.

ungetestet und rein mal aus dem Kopf geschrieben, hoffentlich hilft es dir und hoffentlich ist es korrekt :p
 

michi1512

Mitglied
so jetz hab ichs endlich denke das müsste so stimmen ^^
Java:
DataInputStream dat = new DataInputStream(System.in);
		int x=0,z=1,y=0,a=0; //x: Größe, z: Zeile, p: Parameter1, a: Parameter2
		
		System.out.println("Bitte Größe des Tannenbaums eingeben:");
		try{ x = Integer.parseInt(dat.readLine()); }catch(Exception e){}
		
		int i = x;
		

		
		for (; x>0; x--)
		{
			int b=a;
			while (y < x-1)
			{
				System.out.print(" ");
				y= y+1;
			}
			
			System.out.print("/");
			
			while (b != 0)
			{
				System.out.print(" ");
				b=b-1;
			}
			
			System.out.println("\\");
			
			z = z+1;
			a = a+2;
			y = 0;
		}
		
		while (y < i-1)
		{
			System.out.print(" ");
			y= y+1;
		}
		
		System.out.print("||");

danke für eure hilfe =)
 

dehlen

Bekanntes Mitglied
Als Lösungsalternative gefältt dir vielleicht auch noch diese Lösung:
Finde es ist ein schöner Baum geworden... gerade zur Weihnachtszeit :D

Java:
public class Tanne
 {
 	public static void main (String[]args)
 	{
 		int aZ,aS,heighTree,heighBark,widthBark,h,h2,h3,aSbackup;
 		aZ=4;
 		aS=9;
 		heighTree=7;
 		heighBark=2;
 		widthBark=3;
 		h=1;
 		h2=1;
 		h3=1;
 		aSbackup=aS;
 		
 		while(h<aZ){
 			System.out.println();
 			h=h+1;
 		}
 		h=1;									//in die Zeilen Rücken
 		
 		while(h<aS){
 			System.out.print(" ");
 			h=h+1;
 		}
 		
 		h=1;
 		while((heighTree-heighBark)>=h2){
 			
 			while(h<=h3){ 						//* Zeichnen
 				System.out.print("*");
 				h=h+1;	
 				
 			}
 			System.out.println();
 			h=1;
 			aS=aS-1;
 			
 			if(h2!=heighTree-heighBark){
 			while(h<aS){		 			//Abstand von links wird immer um 1 weniger
 				System.out.print(" ");
 				h=h+1;
 			}
 			}
 			
 			h2=h2+1;
 			h3=h3+2;
 			h=1;
 		}
 		
 		h=1;
 		h2=1;
 		h3=1;
 		
 		while(h<=heighBark){
 			while(h2<=aSbackup-2){
 				System.out.print(" ");			//Anfang vom Stamm berechnen und einrücken 
 				h2=h2+1;
 			}
 			while(h3<=widthBark){
 				System.out.print("*");			//Stamm zeichnen
 				h3=h3+1;
 			}
 			System.out.println();
 			h=h+1;
 			h2=1;
 			h3=1;

 		}
 	}
 }
 

Andi_CH

Top Contributor
Ach ich mag keine Weihnachtsbäume ohne Kerzen ;-)
Java:
package com.javaforum;

public class Tanne
{
	public static void main (String[]args)
	{
		int aZ,aS,heighTree,heighBark,widthBark,h,h2,h3,aSbackup;
		aZ=4;
		aS=9;
		heighTree=7;
		heighBark=2;
		widthBark=3;
		h=1;
		h2=1;
		h3=1;
		aSbackup=aS;

		while(h<aZ){
			System.out.println();
			h=h+1;
		}
		h=1;                                    //in die Zeilen Rücken

		while(h<aS){
			System.out.print(" ");
			h=h+1;
		}

		h=1;
		while((heighTree-heighBark)>=h2){

			while(h<=h3){                       //* Zeichnen
				System.out.print("*");
				h=h+1;  
			}
			if ((heighTree-heighBark)>h2)
				System.out.println("Î");
			else
				System.out.println();
			h=1;
			aS=aS-1;

			if(h2!=heighTree-heighBark){
				while(h<aS){                    //Abstand von links wird immer um 1 weniger
					System.out.print(" ");
					h=h+1;
				}
			}

			h2=h2+1;
			h3=h3+2;
			h=1;
		}

		h=1;
		h2=1;
		h3=1;

		while(h<=heighBark){
			while(h2<=aSbackup-2){
				System.out.print(" ");          //Anfang vom Stamm berechnen und einrücken 
				h2=h2+1;
			}
			while(h3<=widthBark){
				System.out.print("*");          //Stamm zeichnen
				h3=h3+1;
			}
			System.out.println();
			h=h+1;
			h2=1;
			h3=1;

		}
	}
}
 

vladimir

Aktives Mitglied
Meine LÖSUNG: :)

Java:
Weinachtsbaum!!!      *            *
            /\                    *                 *
           /  \             *               *
           /  \          *        *    *       *
          /    \     *          *          *        *
         /_    _\         *              __%__
         /      \                       |__|__|         f
        /        \     ___%___        __|__|__|_______|
       /__________\   |   |   |      @              |
           |  |       |___|___|       @@@@@@@@@@@@@@@

Hier ein Weinachtsbaum gemalt in JAVA - Code TAG
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Das hätte ich jetzt nicht gedacht, dass ihr das nicht schafft :lol:
Java:
public class MostComplicatedXMasTree {

	public static void main(String[] args) {
		System.out.println("Weinachtsbaum!!!      *            *");
		System.out.println("            /\\                    *                 *");
		System.out.println("           /  \\             *               *");
		System.out.println("           /  \\          *        *    *       *");
		System.out.println("          /    \\     *          *          *        *");
		System.out.println("         /_    _\\         *              __%__");
		System.out.println("         /      \\                       |__|__|         f");
		System.out.println("        /        \\     ___%___        __|__|__|_______|");
		System.out.println("       /__________\\   |   |   |      @              |");
		System.out.println("           |  |       |___|___|       @@@@@@@@@@@@@@@");
	}
}
 

vladimir

Aktives Mitglied
Andi ich glaube nicht, dass der Prof oder Lehrer von Michi sich über so eine Lösung freuen wird! :lol:
Ich alledings schon! :D
 
Zuletzt bearbeitet:

Neue Themen


Oben