C Programmierung Tannenbaum?
Hallo Leute.
Ich habe gleich 2 Fragen. Ich muss ein Programm auf C schreiben, welche eine variable Baumhöhe und Stammbreite mit gleichbleibender Stammhöhe von 3 * ausgibt. Zb Stammbreite = 3 und Baumhöhe = 7. Hab es soweit geschafft dass er die Höhe vom Baum und den Stamm korrekt ausgibt. Aber ich benötige noch die Breite des Baumes welche gleich groß ist wie di Baumbreite. Dann ist da noch das Problem dass das ganze zentriert sein soll.
Habe es probiert die Ausgabe (* ) mit char = *; und %0Xc auszugeben wobei x die Baumhöhe darstellen soll. Also:
- Wie schaffe ich es dass sich die Baumhöhe pro Zeile um +2 ändert, sodass um 2 mal mehr printf ausgeführt wird.
- Wie schaffe ich es die Zahl vorrauszusetzen dass das ganze variabel je nach baumhöhe zentriert wird
Ps. Ich darf für die Schleifen nur For-Schleifen verwenden, nicht While
Danke im Vorraus
Problem 1 gelöst :)
2 Antworten
So ganz klar ist mir noch nicht, was du vorhast, ich versuche trotzdem.
Frage 1: Vermutlich möchtest du erreichen, dass deine For-Schleife mehrmals, unterschiedlich lang, durchlaufen wird. So etwas geht beispielsweise so:
int j=1;
int b;
char s[] = ".............................";
for(b=1;b<7; b++){
for( a=1; a < j; a++) {
//setze an a-ter Stelle ein "*" ein
printf(" %s\n", s);
}
//weitere Anweisungen
j++;//erhöht die Lauflänge der inneren Schleife um 1
}
Zu Frage 2: Vielleicht kannst du zunächst einen halben Baum schreiben (etwa nur die rechte Hälfte) und hast dann eine Idee, wie du die andere Hälfte hinbekommst.
Vielen vielen Dank, aber ich habe Frage 1 bereits gelöst :)
Frage 2:
Normalerweise wird es dann linksbündig ausgegeben ich möchte es aber zentriert haben, sodass es sich mit der Breite des Baumes ausgeht. Normalerweise löst man es so dass man eine gewisse Anzahl an Zeichen vorausgesetzt wird Zb. printf("%05c",zeichen); dann werden 5 Zeichen vorausgestzt sodass wenn das Wort welches in der Variable gespeichert wird nur 3 zeichen hat werden davor 2 Leerzeichen platziert. Und diese Voraussetzung sollte immer so groß wie die höhe des Baumes sein.
Ich kannte bis jetzt diese Möglichkeit mit "%05c" noch nicht, und weiß nicht auf Anhieb, wie man da am geschicktesten per Programmanweisung die 5 in eine andere Ganzzahl ändert... :-|
Mein Vorgehen daher: eine Füllzeichenkette in der benötigten (vorher errechneten) Maximallänge zu erstellen und dann indexweise zu überschreiben, da wo der Baum ist. Dann am schnellsten - wenn ihr es benutzen dürft - um die Zeile wieder in die ursprüngliche Füllzeichenkette zurückzuändern, mit strcpy siehe hier.
Mein Ansatz "rechte Hälfte" zielt darauf ab, dass man die rechte Hälfte zuerst generiert, und die Hälfte zeilenweise rückwärts davorsetzt.