# Hilfe bei Tannenbäumchen malen ....



## michi1512 (21. Nov 2010)

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 (21. Nov 2010)

"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 (21. Nov 2010)

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 (21. Nov 2010)

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


----------



## michi1512 (21. Nov 2010)

naja besonders viel gibs dazu ja nich ^^
aber mit ner for schleife wärs am besten oder? ???:L


----------



## Final_Striker (21. Nov 2010)

michi1512 hat gesagt.:


> aber mit ner for schleife wärs am besten oder? ???:L



ja


----------



## Andi_CH (22. Nov 2010)

michi1512 hat gesagt.:


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



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!


```
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 (24. Nov 2010)

```
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


----------



## michi1512 (28. Nov 2010)

so jetz hab ichs endlich denke das müsste so stimmen ^^

```
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 (28. Nov 2010)

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


```
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 (29. Nov 2010)

Ach ich mag keine Weihnachtsbäume ohne Kerzen ;-)

```
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 (29. Nov 2010)

Meine LÖSUNG: 


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

Hier ein Weinachtsbaum gemalt in JAVA - Code TAG


----------



## michi1512 (29. Nov 2010)

ooooh wie hübsch ....
da kommt doch gleich weihnachtsstimmung auf  :toll:


----------



## Jango (30. Nov 2010)

vladimir hat gesagt.:


> Hier ein Weinachtsbaum gemalt in JAVA - Code TAG



Dann zeig mal den Code...


----------



## dehlen (30. Nov 2010)

Ja würde mich auch einmal interessieren =)


----------



## Andi_CH (1. Dez 2010)

Das hätte ich jetzt nicht gedacht, dass ihr das nicht schafft :lol:

```
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 (1. Dez 2010)

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


----------



## dehlen (1. Dez 2010)

Haha das ist wohl eine der leichteren Ausführungen  :toll:


----------

