Einen Baum mit Sternchen "malen"



  • Hey Leute,
    ich habe inzwischen einige Aufgaben lösen können, inzwischen bin ich wieder über einen Stolperstein gestolpert und kann das Problem nicht erkennen. Die Aufgabe lautet zunächst:

    Schreiben Sie ein Konsolenprogramm welches einen Weihnachtsbaum ausgibt.
    Vor der Ausgabe soll noch die Höhe des Weihnachtsbaum abgefragt werden.

    Konsolenausgabe:
          *
         ***
        *****
         ***
        *****
       *******
        *****
       *******
      *********
         ###
    

    Ich habe die Aufgabe etwas simplifiziert (normalerweise wäre eine Eingabe von mindestens 3 vorausgesetzt und die Eingabe hätte die Anzahl an Zeilen ergeben). Ich dagegen habe für Eingabe = Anzahl Zeilen * 3 definiert.

    Mein Problem ist, dass jede zweite Zeile nach der ersten Zeile, dieselbe Anzahl an Sternen und Leerzeichen ausgibt. Ich habe mir die Schleifenwerte ausgeben lassen und dabei ist i immer von 0 zu 2 und wieder zurück gesprungen. Normalerweise würde ich erwarten dass i einmal bis 2 durchläuft und dabei die unterschiedliche Ausgabe von Leerzeichen und Sternen ergibt. Im Schleifengang eine Ebene weiter außen, wird dann einmal die Sterne um 2 reduziert und um ein Leerzeichen erweitert, sodass alle 3 Zeilen der Baum ein bisschen schlanker wird bevor er wieder anwächst.

    Speziell in meinem Code, was ist passiert, dass jede 2. Zeile identisch ist?

    Achja den Stamm mach ich noch wenn ich die Krone fertig habe 🙂

    #include <stdio.h>
    #include <stdlib.h>
    #define TREE_PART (3)
    drawPart (int heightTree);
    /*
     * 
     */
    int main(int argc, char** argv) {
    
        int heightTree;
    
        printf ("Let's print a tree!\n"
                "How big shall it be?\n");
        scanf ("%d", &heightTree);
    
        drawPart (heightTree);
    
        return (EXIT_SUCCESS);
    }
    drawPart (int heightTree){
        int counter = 3;
        int drawLine = heightTree * TREE_PART;              //TREE_PART = 3    
        int drawStar = 1;
        int drawSpace = drawLine - heightTree + 1;                             
        int f = 0;
        while( f < drawLine){                                                            
            for(int i = 0; i<3; i++){                                                               
                int k = drawSpace;                                                            
                while (k > 0){
                    printf(" ");
                    k--;                                                        
                }
                for (int j = 0; j < drawStar; j++){                            
                    printf("*"); 
                }
                drawStar = drawStar + 2;                                       
                drawSpace--;                                                   
                i++;
                printf ("\n");
    
            }
            f++;
            drawStar = drawStar - 2;
            drawSpace++;
        }
    }
    


  • Was macht das i++ in Zeile 37?



  • Das i++ soll dafür sorgen, dass es die eine while und for Schleife 3 mal ausführt bevor es die "i-schleife" verlässt.



  • C_Newbe schrieb:

    Das i++ soll dafür sorgen, dass es die eine while und for Schleife 3 mal ausführt bevor es die "i-schleife" verlässt.

    Bitte was? Das musst du mir genauer erklären.



  • C_Newbe schrieb:

    Das i++ soll dafür sorgen, dass es die eine while und for Schleife 3 mal ausführt bevor es die "i-schleife" verlässt.

    Ist dafür nicht das i++ beim for zuständig?

    Und dann überleg mal, welche Werte drawStar und drawSpace am Ende der for(i )-Schleife haben.



  • oh gott, so ein peinlicher Fehler, ich habe es einfach nicht gesehen. Danke! Ich probiere dann gleich weiter, wenn ich Rückfragen habe melde ich mich nochmal 🙂

    Falls es jemanden im Nachhinein interessieren sollte poste ich hier noch meine Lösung

    /*
     * 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)
     */
    
    /* 
     * File:   main.c
     * Author: Epi
     *
     * Created on 12. Mai 2016, 13:04
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #define TREE_PART (3)
    void drawPart (int heightTree);
    void drawWood (int heightTree);
    
    int main(int argc, char** argv) {
    
        int heightTree;
        printf ("Let's print a tree!\n"
                "How big shall it be?\n");
        scanf ("%d", &heightTree);
    
        drawPart (heightTree);
    
        drawWood (heightTree);
    
        return (EXIT_SUCCESS);
    }
    void drawPart (int heightTree){
        int drawLine = heightTree * TREE_PART;              //TREE_PART = 3    
        int drawStar = 1;
        int drawSpace = drawLine - heightTree;                             
        int f = 0;
        while( f < heightTree){                                                            
            for(int i = 0; i<3; i++){                                                               
                int k = drawSpace;                                                          
                while (k > 0){
                    printf(" ");
                    k--;                                                       
                }
                for (int j = 0; j < drawStar; j++){                            
                    printf("*");                                               
                }
                drawStar = drawStar + 2;                                       
                drawSpace--;                                                   
                printf ("\n");
    
            }
            f++;
            drawStar = drawStar - 2;
            drawSpace++;
        }
    }
    void drawWood (int heightTree){
    
        for (int j = 0; j<heightTree+1; j++){
        printf (" ");
            }
        for (int k = 0; k<(heightTree*2)-1; k++){
        printf ("#");
        }
    
    }
    

Log in to reply