Auf dem Kopf Stehendes Viereck



  • Hallo,
    ich bin relativ neu in C und ich habe folgendes Problem!:
    Ich will ein Viereck im Terminal machen was "auf dem Kopf" steht
    Das heißt ein Dreieck und ein Umgedrehtes Dreieck aufeinander

    Ich habe es mit Folgendem Quelltext versucht

    #include <stdio.h>
    int main() {
    
    	int hoehe;
    
    	printf("Gib die Höhe ein!: ");
    	scanf("%d", &hoehe);
    
    	int z_a, z_b, z_c;
    	int z_d, z_e, z_f;
    	//  Dreieck
    	for ( z_d = 1; z_d <= hoehe; z_d ++) // für jede zeile
    	{
    		for ( z_f = 1; z_f <= hoehe - z_d ; z_f ++) //z_d ist der aktuelle folgeschritt
    		{
    			printf(" ");
    		}
    
    		for ( z_e = 0; z_e <= 2*hoehe + (z_d*2); z_e ++)
    		{
    			printf("#");
    		}
    		printf("\n");
    
    	}
    	// Umgedrehtes Dreieck
    	for ( z_a = 1; z_a <= hoehe; z_a ++) // für jede zeile
    	{
    		for ( z_c = 1; z_c <= hoehe + z_a ; z_c ++) //z_a ist der aktuelle folgeschritt
    		{
    			printf(" ");
    		}
    
    		for ( z_b = 0; z_b <= 2*hoehe - (z_a*2); z_b ++)
    		{
    			printf("#");
    		}
    		printf("\n");
    
    	}
    }
    

    Irgendwie funktioniert es nicht und ich habe absulut gar keinen blassen schimmer wiso nicht
    Ich probiere es schon seit einiger Zeit aber es will einfach nicht Klappen
    raus kommt sowas:

    #############
       ###############
      #################
     ###################
    #####################
          #########
           #######
            #####
             ###
              #
    

    wäre echt nett wenn mir irgendjemand helfen könnte^^
    am besten gleich einen vollständigen quelltext 😋
    MFG


  • Mod

    In deiner Schreibweise:

    for ( z_d = hoehe; z_d >= 1; z_d --) // für jede zeile
        {
            for ( z_f = 1; z_f <= hoehe + z_d ; z_f ++) //z_d ist der aktuelle folgeschritt
            {
                printf(" ");
            }
    
            for ( z_e = 0; z_e <= 2*hoehe - (z_d*2); z_e ++)
            {
                printf("#");
            }
            printf("\n");
    
        }
    

    Aber deine Schreibweise ist, trotz der sehr lobenswerten Kommentare 👍 , sehr unübersichtlich 👎 . Wie soll irgendjemand sich erschließen, was z_a, z_b, z_c, z_d, z_e und z_f und der Unterschied zwischen diesen ist?

    Mach's doch hübsch übersichtlich so:

    #include <stdio.h>
    #include <assert.h>
    
    void print_line(unsigned line, unsigned max_height)
    {
      unsigned i;
      assert(line <= max_height);
      for (i = 0; i < max_height - line; ++i)
        putchar(' ');
      for (i = 0; i < 2*(line-1) + 1; ++i)
        putchar('#');
      putchar('\n');
    }
    
    void print_diamond(unsigned height)
    {
      unsigned line;
      for (line = 1; line < height; ++line)
        print_line(line, height);
      for (; line > 0; --line)
        print_line(line, height);
    }
    
    int main() 
    {
    
      unsigned int height;
    
      printf("Gib die Höhe ein!: ");
      scanf("%u", &height);
    
      print_diamond(height);
    }
    

    Da braucht man nicht einmal Kommentare, um dem Code halbwegs zu folgen.



  • vielen dank 😃 😃 😃



  • #define K 4
    
    int main()
    {
      int z,s;
      for( z=-K; z<=K; ++z,puts("") )
        for( s=-K; s<=K; ++s )
          putchar(" #"[s>=abs(z)-K && s<=K-abs(z)]);
      return 0;
    }
    


  • Danke!
    Falls es es iwen interessiert hier ist der vollständige Quelltext vom Viereck ^^

    #include <stdio.h>
    int main() {
    
    	int hoehe;
    
    	printf("Hallo! Gib den Durchmesser des Vierecks an ");
    	scanf("%d", &hoehe);
    	int z_a, z_b, z_c;
    	int z_d, z_e, z_f;
    
    	//  Dreieck
    	for ( z_d = hoehe; z_d >= 1; z_d --) // für jede zeile 
    	{ 
            	for ( z_f = 1; z_f <= hoehe + z_d ; z_f ++) //z_d ist der aktuelle folgeschritt 
            	{ 
    		printf("  "); 
    		} 
    
    		for ( z_e = 0; z_e <= 2*hoehe - (z_d*2); z_e ++) 
    		{ 
    			printf("##"); 
    		} 
    		printf("\n"); 
    	}
    
    	// Umgedrehtes Dreieck
    	for ( z_a = 1; z_a <= hoehe; z_a ++) // für jede zeile
    	{
    		for ( z_c = 1; z_c <= hoehe + z_a ; z_c ++) //z_a ist der aktuelle folgeschritt
    		{
    			printf("  ");
    		}
    
    		for ( z_b = 0; z_b <= 2*hoehe - (z_a*2); z_b ++)
    		{
    			printf("##");
    		}
    		printf("\n");
    
    	}
    }
    

Anmelden zum Antworten