Autor Beitrag
123thomas
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 21.12.12 18:39 
Hallo

Ich bin C# Anfänger doch ich hoffe mir wird geholfen.

Ich hab schon alles versucht was in meiner Macht steht und schon mehr als 1 Tag dran rumprobiert. Ihr seit meine letzte Hoffnung.

Ich soll für die Schule ein Tannebaum programmieren. Mit der Console. Dies habe ich auch geschafft. Dann soll man die Größe eingeben können. Das habe ich auch geschafft. Nur habe ich ein Problem mit dem Stamm der ist wenn ich die Größe ändere nicht mehr mittig unter den Baum. Obwohl ich dafür eigentlich eine Formel genommen habe die sich der größe anpassen müsste.

Als letztes war noch die Aufgabe den Baum in der X und Y achse versetzen zu können.

Frage: Wie bekomme ich das hin das der Stamm immer schön mittig unter dem Baum kommt?


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Tannebaum
{
    class Program
    {
        static void Main(string[] args)
        {
            int größe=5;
            int Dreieckvorne = 0;
            int Dreieckhinten = 0;
            int Stamm = 0;
            int Cursorpositionx = 10;
            int Cursorpositiony = 2;

            
            //Baum Anfang
            Console.SetCursorPosition(Cursorpositionx, Cursorpositiony);
            Console.ForegroundColor = ConsoleColor.Green;
            //Baum Spitze
            for (int j = 0; j < größe; j++)
            {
                Console.Write(" ");

            }
            Console.Write("x");
            Console.WriteLine();
            //Baum Körper
            for (int k = 1; k < größe; k++)
            {
                Console.SetCursorPosition(Cursorpositionx, k + Cursorpositiony);
                Dreieckvorne = k;
                for (int j = Dreieckvorne; j < größe; j++)
                {
                    Console.Write(" ");
                    
                }

                Console.Write("x");
                Dreieckhinten = Dreieckhinten + 3;
                for (int j = k; j < Dreieckhinten; j++)
                {
                    Console.Write("x");

                }

                Console.WriteLine("");

            }
            //Baum Ende    
            //Stamm Anfang
            Console.ForegroundColor = ConsoleColor.DarkRed;

           //Überprüfen ob die zahl gerade um besser rechnen zu können.
            if (größe % 2 == 1)
            {
                Stamm = größe + 1;
            }
            else
            {
                Stamm = größe;
            }

            

            for (int i = 0; i < Stamm /3; i++)
            {
                Console.SetCursorPosition(Cursorpositionx + Stamm - Stamm / 4, Dreieckvorne + 1 + i + Cursorpositiony);

                for (int j = 1; j < Stamm / 2 +1; j++)
                {
                    Console.Write("x");

                }   
                Console.WriteLine();
            }  
            //Stamm Ende
                Console.ReadLine();
        
        }
    }
}


MfG Thomas
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 21.12.12 21:25 
Hallo Thomas :welcome:

ich mußte ersteinmal deinen Code selber ausführen, um zu sehen, was genau passiert.
Welchen Wert soll denn deine Variable Stamm bezeichnen?
Du benötigst doch 2 Werte (für die X-Achse): Mittelpunkt und Breite (des Stammes).
Am besten du erzeugst dir dafür eigene Variablen und schreibst dann die Schleife entsprechend dafür:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
int stammMittelpunkt = ...; // <-- hier deine Formeln einsetzen
int stammBreite = ...; // <-- dito
int stammHoehe = ...; // <-- hierfür am besten auch eine eigene Variable benutzen
for (int i = 0; i < stammHoehe; i++)
{
    int stammX = stammMittelpunkt - stammBreite / 2;
    int stammY = größe + i + 1;
    Console.SetCursorPosition(Cursorpositionx + stammX, Cursorpositiony + stammY);

    for (int j = 0; j < stammBreite; j++)
    {
         Console.Write("x");

    }   
    Console.WriteLine();
}

Der Vorteil dieser (benannten) Variablen ist, daß du (bzw. jemand anderes) auch später mal den Code verstehst, anstatt einfach irgendwelche Formeln zu sehen.

Für diesen Beitrag haben gedankt: 123thomas
123thomas Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 22.12.12 12:52 
Dankeschön.

Es ist so einfach, wieso komm ich da nicht drauf.

Aufjedenfall danke.