brauche hilfe beim kleinem prog???



  • hi leutz
    hab folgender frage muss für die schule so ein progi schreiben!
    Version 1
    Schreiben Sie ein Programm, welches den folgenden "Tannenbaum" auf dem Bildschirm ausgibt:

    ***
    *****
    *******
    *********
    *

    Version 2 (schon deutlich schwieriger!)
    Versuchen Sie, die Ausgabe von tree1.c durch Einsatz von Schleifen so allgemein zu programmieren, dass die "Baumhöhe" height vom Benutzer vorgegeben werden kann.
    Eine Schleife kann z.B. auf folgende Weise aufgebaut werden:

    for (i = 1; i <= height; i++)
    {
    /* Schleifenkoerper */
    }
    Gibt der Benutzer (vor Eintritt in die Schleife) z.B. den Wert height = 8 ein, dann wird die Schleife auch 8-mal ausgeführt. Beim ersten Durchlauf hat i den Wert 1, beim 2. Durchlauf den Wert 2 usw. und beim letzten Durchlauf den Wert 8. Machen Sie sich klar, dass Sie für den i-ten Schleifendurchlauf zuerst
    blanks = height - i

    Leerzeichen ' ' und danach

    stars = 2 * i - 1

    Sternchen '*' ausgeben müssen. Dazu können Sie weitere (verschachtelte) Schleifen einsetzen.

    Der Baumstumpf wird getrennt (nach Verlassen der Schleife) ausgegeben. Die entsprechende Ausgabezeile ist mit der Ausgabe der Baumspitze (i = 1) identisch.

    Ein-/Ausgabe-Beispiel (Eingabe kursiv dargestellt):
    Baumhoehe: 8

    ***
    *****
    *******
    *********
    ***********
    *************
    ***************
    *

    so ein bäumchen muss ausgegeben werden
    hab folgende schleife

    for (i = 1;i<4;i++)
    {
    star=2i-1;
    star="
    ";
    printf("\n",star);
    }

    klapt aber nicht was mache ich falsch??
    muss eigendlich so ein baum raus kommen oder nicht?
    *
    **
    ***
    ****
    brauche bloss bis zum diesem baum dann mach ich schon selber!
    thx



  • hihi, das is ja ne tolle aufgabe, hätte ich auch gern gehabt!

    #include <stdio.h>
    
    int main()
    {
    	int h,i=0,j=1,k;
    
    printf("Höhe: ");
    scanf("%d", &h);
    
    for (;i<h;i++) {
      for (k=0;k<j;k++) {
        printf("*");
      }
     printf("\n");
     j+=2;
    }
    printf("*\n");
    return 0;
    }
    


  • hi
    und was bedeutet
    j+=2;



  • hi
    eigendlich muss es so ein bämchen sein:

    *
           ***
          *****
         *******
        *********
       ***********
      *************
     ***************          
            *
    


  • und bitte so simple wie möglich!
    damit ich es auch nachvollziehen kann!
    thx



  • kann man das nicht einfach mit 2 schleifen machen eine macht leer zeichen und die zweite sternchen?



  • John Doh schrieb:

    hi
    und was bedeutet
    j+=2;

    Andere (schneller ausgeführte) Schreibweise für j = j + 2;



  • int main(){
    	int i,j,x=8;
    	for(i=0;i<x;++i){
    		printf("%*c*",x-i,' ');
    		for(j=0;j<i;++j)
    			printf("**");
    		printf("\n");
    	}
    	printf("%*c*",x,' ');
    }
    

    wenn mans dirty proggt könnte man einen schönen einzeiler draus machen 😃



  • Hepi schrieb:

    Andere (schneller ausgeführte) Schreibweise für j = j + 2;

    Das "schneller" gilt aber nur für C++ und nicht-built-in Typen. Ausserdem hängt es dann immer noch von der Implementierung des Operators ab. Da in C keine Operatorüberladung möglich ist, kann man diese auch nur auf built-in Typen anwenden, und der Compiler sollte dann durch Optimierung gleichen Code generieren.



  • hi noch mal
    was bedeutet dann "%*c*" umd warum ist das dirty programieren?
    ich habs folgendes zusammen gebastelt aber es leuft nicht was ist da falsch kann mir jemand helfen??
    thx

    #include <stdio.h>
    
    int main()
    {
    
       int h,i,j=1,k,u,l;
    
       printf("Wie hoch:");
       scanf("%d",&h);
    
    	   for(i=0;i<h;i++)
           {
    		   for(u=0;u<l;l++)
    
    		   {
    			   printf("p");
    		   }
    		   l=h-1;
    
    		  for(k=0;k<j;k++)
    		   {
    			   printf("*");
    		   }
    		       printf("\n");
    
    			   j=j+2;
    	   }
       return 0;
    }
    


  • hi noch mal
    was bedeutet dann "%*c*" umd warum ist das dirty programieren?
    ich habs folgendes zusammen gebastelt aber es leuft nicht was ist da falsch kann mir jemand helfen??
    thx

    #include <stdio.h>
    
    int main()
    {
    
       int h,i,j=1,k,u,l;
    
       printf("Wie hoch:");
       scanf("%d",&h);
    
    	   for(i=0;i<h;i++)
           {
    		   for(u=0;u<l;l++)
    
    		   {
    			   printf("p");
    		   }
    		   l=h-1;
    
    		  for(k=0;k<j;k++)
    		   {
    			   printf("*");
    		   }
    		       printf("\n");
    
    			   j=j+2;
    	   }
       return 0;
    }
    


  • Was deinen Code angeht, das erste, was mir auffällt, ist, dass du l nicht initialisierst, bevor du es benutzt, und diese Schleife

    for(u=0;u<l;l++)
    

    macht auch bei initialisiertem l nicht wirklich Sinn. Ich nehme an, dass du vor der Schleife l = h - 1 setzen und l bei jedem Schleifendurchlauf um eins erniedrigen wolltest, oder etwas in der Art.

    Was %*c angeht,

    printf("%*c", 10, 'a');
    

    gibt 9 Leerzeichen und ein a auf dem Bildschirm aus. Der * im Formatstring ist ein Platzhalter für eine Zahl (wie z.B. in "%5c"), nur dass printf sich die Zahl selbst aus dem entsprechenden Parameter holt. Was bei Windalf dreckig ist, ist höchstens, dass er das %*c im Formatstring mit einem space parametrisiert. Ich hätte es ähnlich angefangen, nämlich so:

    #include <stdio.h>
    
    int main(void) {
      int h, i, j;
    
      printf("Höhe eingeben: ");
      fflush(stdout);
    
      scanf("%d", &h);
    
      for(i = 0; i < h; ++i) {
        printf("%*c", h - i, '*');
        for(j = 0; j < i; ++j)
          printf("**");
        putchar('\n');
      }
      printf("%*c\n", h, '*');
    
      return 0;
    }
    


  • @John Doh...
    ich meinte man könnte das besonders schön dirty proggen indem man einen einzeiler draus machst...
    wenn du nen programm brauchst das das mit weniger als 70 ascii-zeichen schaft tippe ich mal ist Oxdeadbeef dein mann 😉



  • ok danke leute ihr habt mir sehr geholfen ich kenn mich in diesen sachen nicht sehr gut aus aber ezt werde ich es für mein studium brauche ich glaub ich werde noch ein paar mal eure hilfe benötigen 🙂
    thx an alle


Anmelden zum Antworten