C# :: Aufgabe #15

6 Lösungen Lösungen öffentlich

Ausgabe Weihnachtsbaum

Anfänger - C# von Gustl - 07.12.2012 um 18:44 Uhr
Schreiben Sie ein Konsolenprogramm welches einen Weihnachtsbaum ausgibt.
Vor der Ausgabe soll noch die Höhe des Weihnachtsbaum abgefragt werden. (MIN 3)
Der Weihnachtsbaum soll bei einer Höheneingabe von 10 folgendermaßen aussehen:

Konsolenausgabe:

      *
***
*****
***
*****
*******
*****
*******
*********
###


Die Schwierigkeit besteht in den Stufenabschnitten der Tanne. Die Zeile die die meisten Sterne enthält sollte natürlich dann auch die letzte sein, also muss das Programm vielleicht bei einer zu großen Höheneingabe das Zeichnen der Sterne abbrechen und dann den Stamm ausgeben. (So wie bei diesem Beispiel, angegeben ist 10 aber der Baum hat nur 10 Reihen, ohne Baumstamm)

Lösungen:

vote_ok
von pocki (4190 Punkte) - 18.12.2012 um 19:15 Uhr
Hier ist meine Lösung.

Da ich mit der letzten Zeile der Beschreibung nichts anfangen konnte, wird bei mir der Baum immer in vielfaches von 3 Reihen plus Stamm ausgegeben.
Bsp: bei 11 = 9 Reihen '*' plus 2 Reihen Stamm, bei 10 = wie oben 9 Reihen '*' plus 1 Stamm, bei 9 = 9 Reihen '*' plus 1 Stamm.

Außerdem kann ein Baum mit 100 Zeilen ohne Probleme ausgegeben werden, da automatisch der Baum nach rechts rückt.

Quellcode ausblenden C#-Code
using System;

namespace UE15
{
	internal class Program
	{
		private static void Main(string[] args)
		{
			int reihen = 10;

			//Maximale Anzahl der Sterne/Reihe im Baum
			int max_zeichen = 3 + 2*reihen/3;

			int count = 1;
			for (int i = 0; i < reihen/3; i++)
			{
				for (int j = 0; j < 3; j++)
				{
					//Eine Sternzeile erstellen
					string sternzeile = InTheMiddle(string.Empty.PadRight(count, '*'), max_zeichen);
					Console.WriteLine(sternzeile);
					count += 2;
				}
				count -= 4;
			}

			//Baumstamm hat mindestens eine Höhe von 1
			int stammhoehe = reihen%3 == 0 ? 1 : reihen%3;

			for (int i = 0; i < stammhoehe; i++)
			{
				Console.WriteLine(InTheMiddle("###", max_zeichen));
			}
			Console.ReadKey();
		}

		/// <summary>
		/// Der übergebene string wird in die Mitte der Zeile geschoben.
		/// </summary>
		/// <param name="input">Zeileninhalt</param>
		/// <param name="rowlength">Zeilenlänge</param>
		/// <returns></returns>
		private static string InTheMiddle(string input, int rowlength)
		{
			int length = input.Length;
			int padding = (rowlength - length)/2 + 1;

			return input.PadLeft(padding + length, ' ');
		}
	}
}
vote_ok
von wladi-g (1310 Punkte) - 03.06.2014 um 15:39 Uhr
Quellcode ausblenden C#-Code
using System;

namespace Weihnachtsbaum
{
    class Program
    {
        static void Main(string[] args)
        {
            int hoehe = 0;
            int l = 0;
            do
            {
                Console.Write("Geben Sie eine Höhe für den Baum ein( >3 ): ");
            }
            while (!int.TryParse(Console.ReadLine(),out hoehe) && hoehe > 2);

            l = hoehe;
            for (int i = 1; i < ((int)hoehe / 3.0) * 2; i += 2)
            {
                for (int j = i; j <= i + 4; j += 2)
                {
                    for (int m = l; m > 0; m--)
                        Console.Write(" ");
                    for (int k = 0; k < j; k++)
                        Console.Write("*");
                    l -= 1;
                    Console.WriteLine();
                }
                l += 2;
            }

            for (int i = 0; i < hoehe % 3; i++)
            {
                for (int j = 0; j < hoehe - 1; j++)
                    Console.Write(" ");
                Console.WriteLine("###");
            }
        }
    }
}
vote_ok
von Neicul (120 Punkte) - 27.06.2014 um 14:43 Uhr
Verlangt zwar eine Eingabe an Ebenen und nicht Zeilen, aber Im Endeffekt finde ich das sogar intuitiver.

Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Tanne
{
    class Functions
    {
        int height;

        public void Run()
        {
            AskHeight();
            BuildTree();
            Console.Read();
        }

        private void AskHeight()
        {
            Console.Write("Please enter the number of levels of the tree: ");

            string line = Console.ReadLine();

            int value;
            if (int.TryParse(line, out value))
            {
                if (value > 0)
                {
                    height = value;
                }
                else
                {
                    height = 1;
                }
            }
            else
            {
                Console.WriteLine("Please enter an integer.\n");
                AskHeight();
            }
        }

        private void BuildTree()
        {
            for (int i = 0; i < height; i++)
            {
                BuildLevel(i);
            }

            BuildTrunk();
        }

        private void BuildLevel(int i)
        {
            int countOfSpaces = 1 + height - i;

            string temp = "";

            
            for (int x = 0; x < 3; x++)
            {

                temp += new String(' ', countOfSpaces);
                temp += new String('*', x * 2 + i * 2 + 1);
                
                Console.WriteLine(temp);

                temp = "";
                countOfSpaces--;
            }
        }

        private void BuildTrunk()
        {
            int countOfSpaces = height;
            string trunk = new String(' ', countOfSpaces);
            trunk += "###";

            Console.WriteLine(trunk);
        }
    }
}
vote_ok
von kjaenke (1140 Punkte) - 10.10.2017 um 11:00 Uhr
Quellcode ausblenden C#-Code
using System;

namespace Exercise_15
{
    using System.Threading;

    public static class Program
    {
        private static void Main()
        {
            Console.WriteLine("Geben Sie die Anzahl der Zeilen für den Weihnachtsbaum ein.");
            int lines = int.Parse(Console.ReadLine()) - 1;

            int counter = 1;

            for (int i = 0; i < lines / 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                   BuildRow(counter+(j*2)); 
                }
                counter += 2;
            }

            WriteCenter("###");
            Thread.Sleep(100000000);

        }

        private static void WriteCenter(string text)
        {
            Console.SetCursorPosition(Console.WindowWidth / 2 - text.Length / 2, Console.CursorTop);
            Console.WriteLine(text);
        }

        private static void BuildRow(int number)
        {
            var result = string.Empty;

            for (var i = 0; i < number; i++)
            {
                result += '+';
            }

            WriteCenter(result);
        }
    }
}
vote_ok
von stbehl (1640 Punkte) - 02.02.2018 um 14:17 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TrainYourProgrammer15
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Geben Sie die höhe des Weihnachtsbaumes ein:");
            int hoehe = Convert.ToInt16(Console.ReadLine());
            if (hoehe < 3)
            {
                Console.WriteLine("Es sind nur Zahlen ab 3 erlaubt. Das Programm wird beendet.");
            }
            else
            {
                int hoeheZwei = hoehe;
                for (int i = 1; i < hoehe/3*2; i += 2)
                {
                    for (int k = i; k<= i+4; k+=2)
                    {
                        for (int m = hoehe; m > 0; m--)
                        {
                            Console.Write(" ");
                        }
                        for(int n = 0; n < k; n++)
                        {
                            Console.Write("*");
                        }
                        hoeheZwei -= 1;
                        Console.WriteLine();     
                    }
                    hoeheZwei += 2;
                }
                for (int i = 0; i<hoehe%3; i++)
                {
                    for (int k = 0; k < hoehe - 1; k++)
                    {
                        Console.Write(" ");
                    }
                    Console.WriteLine("###");
                }
            }
            Console.ReadKey();
        }
    }
}
vote_ok
von stcalvin (970 Punkte) - 02.02.2018 um 14:18 Uhr
Quellcode ausblenden C#-Code
 static void Aufgabe_15()
        {
            double groeße;
            int anzahlSterne = 1, anzahlLeer, leerFuerEnde = 0;
            
            Console.WriteLine("Wie groß soll der Baum sein?");
            groeße = Convert.ToDouble(Console.ReadLine());

            anzahlLeer = Convert.ToInt16(groeße * 3);

            string stern = new string('*', anzahlSterne);
            string leer = new String(' ', anzahlLeer);

            for (int row = 1; row <= groeße; row++)
            {
                stern = new string('*', anzahlSterne);
                leer = new String(' ', anzahlLeer);

                
                if (row % 3 == 0)
                {
                    anzahlSterne -= 2;
                    anzahlLeer++;
                }
                else
                {
                    anzahlSterne += 2;
                    anzahlLeer--;
                }

                if (row == 2)
                {
                    leerFuerEnde = anzahlLeer;
                }

                Console.WriteLine(leer + stern + "                 " + row);
            }

            leer = new String(' ', leerFuerEnde + 1);
            Console.WriteLine(leer + "###");
        }