Christbaum



  • void main (void)
    int ein;
    int i;
    {
    ein=5;
    for(i=1;i=ein
    printf("%d",i);
    getch();
    }
    

    So gehört es natürlich. Jetzt hab ich mich auch angemeldet 🙂

    Gruß Robert





  • void baum(int pos, int stop){
       int i;
       for(i=0; i<stop/2-pos; i++)
           printf(" ");
       for(i=0; i<pos; i++)
           printf("*");
       printf("*");
       for(i=0; i<pos; i++)
           printf("*");
       printf("\n");
       if(pos<stop)
           baum(pos+1,stop);
       if(pos==0) {
           for(i=0; i<stop/2-pos; i++)
              printf(" ");
           printf("*");
       }
    }
    
    int main() {
       baum(0,10);
       return 0;
    }
    

    Nur verwenden, wenns funktioniert und verstanden wurde. :xmas1:



  • Hi

    Ich hab mal was geschrieben

    #include <stdio.h>
    #include <conio.h>
    
    void main (void)
    
    {
    int a;
    int b;
    int c;
    int hoehe;
    
    hoehe=10;
    
           for(a=1;a<=(hoehe*2);a+=2)
    	{
    	for(c=1;c<=a;c++)
    		{       
    		printf("*");
    		}
                 printf("\n");
    	}
    getch();
    }
    

    Die Breite ist nun 2 mal so groß wie die Höhe.

    Nur wie sollen die Leerzeichen kommen. Sie sollen von oben nach unten weniger werden.

    so?

    for(b=hoehe;b<=0;b--)
            printf(" ");
    

    Das geht aber so nicht.

    Hat wer eine Idee=

    Danke im voraus;)

    Gruß Robert



  • versuch's mal mit:

    for(b=hoehe-a/2;b>0;--b) printf(" ");
    

    (schließlich hängt die Anzahl der LEerzeichen davon ab, in welcher Zeile du stehst)



  • Hi @ all

    Ich hab das ganze gestern noch geschrieben und es funktioniert und ich bin tottal happy 🙂

    /*Christbaum - For
    Robert Schilling
    23.12.2005*/
    
    #include <stdio.h>
    #include <conio.h>
    
    void main (void)
    
    {
    	int a,b,c;
    	int hoehe,sth,le,st;
    	char s[100];
    
    	do
    	{
    		printf("\nGeben Sie bitte die Hoehe ein [max 40]:  ");
    			gets(s);
    			sscanf(s,"%d",&hoehe);
    
    			if (0>=hoehe|hoehe>=40)
    				printf("Sie haben eine inkorrekte Eingabe gemacht\n");
    	}
    		while (0>=hoehe|hoehe>=40);
    
    	        for(a=1;a<=hoehe*2;a+=2)
    		{
    			for(b=hoehe-a/2;b>0;--b) 
    			{
    				printf(" ");
    			}
    			for(c=1;c<=a;c++)
    			{       
    				printf("*");
    			}
    			printf("\n");
    		}
    
    	for(sth=1;sth<=hoehe/3;sth++)
    		{
    
    		for(le=1;le<=hoehe-(hoehe/4);le++)
    			printf(" ");
    
    		for(st=1;st<=hoehe/2;st++)
    			printf("*");
    		printf("\n");
    	}
    
    printf("\n\nHappy X-Mas\n\n");
    
    getch();	
    }
    

    Gibts da noch Verbesserungen ???

    Happy X-Mas

    Gruß Robert



  • printf(" ") -> putchar(' ')

    printf("yadda\n") -> puts("yadda")

    getch() -> getchar()

    gets(s) -> fgets(s, laenge von s in bytes, stdin);

    | ist ein bitoperator. fuer logik nimm ||

    mehr leerzeichen in den befehlen verwenden: eins nach jedem komma und semikolon (aber nicht davor), je eins vor und nach einem gleichheitszeichen. keines vor einer schliessenden klammer und keines nach einer oeffnenden klammer, dafuer aber ein leerzeichen vor einer oeffnenden klammer und eines nach einer schliessenden klammer.
    liest sich besser.

    es heisst int main. am ende bitte auch ein return 0 oder wonach dir der sinn steht.

    saubere einrueckung: dein do-while ist deformiert, die beiden verschachtelten for loops danach sind eine ebene zu weit eingerueckt, bei deinem letzten for-loop ist die oeffnende blockklammer eine ebene zu weit drin.



  • Danke 👍

    Wie kann ich ungegrade Zahlen filtern?

    zb so

    if (hoehe="gerade")
    for...
    else
    for...

    Danke im Voraus

    Gruß Robert



  • es heißt

    if(hoehe=="gerade")
    

    Gerade/Ungerade lässt sich wunderbar mit modulo-rechnung filtern (zeichen 😵

    es berechnet den rest

    5 % 2 = 1
    6 % 2 = 0
    16 % 5 = 1

    von der art her ganz logisch, du musst

    hoehe % 2
    

    rechnen.

    was was ist solltest du ganz leicht kapieren (es können nur 1 und 0 entstehen)



  • Danke das geht super 👍 👍



  • Achja: IMMER int main() schreiben! ALles andere ist Bullshit!



  • Und warum 😕



  • ItsNotYou schrieb:

    es heißt

    if(hoehe=="gerade")
    

    nicht, wenn du stringinhalte vergleichen willst. ein pointervergleich mit einem stringliteral ist falsch, da sinnlos.

    es heisst int main und fertig! so stehts im standard, so wirds gemacht. grund: ein programm hat einen rueckgabewert, der den erfolg/misserfolg des programmes angibt. deswegen return 0;, wenn alles gut gelaufen ist.



  • Danke 👍 :xmas1:



  • c.rackwitz schrieb:

    ItsNotYou schrieb:

    es heißt

    if(hoehe=="gerade")
    

    nicht, wenn du stringinhalte vergleichen willst. ein pointervergleich mit einem stringliteral ist falsch, da sinnlos.

    es heisst int main und fertig! so stehts im standard, so wirds gemacht. grund: ein programm hat einen rueckgabewert, der den erfolg/misserfolg des programmes angibt. deswegen return 0;, wenn alles gut gelaufen ist.

    ich habe nur noch mal das if([...]) aufgenommen und das mit dem == klargestellt, das war kein bezug auf "gerade"...



  • nichtsdestotrotz sind diese beiden varianten korrekt aber zweifelhaften sinnes:

    if (foo = "bar")...
    if (foo == "bar")...
    

    laesst sich so schreiben:

    foo = "bar"; // da das if immer true sein wird. ein string liegt schliesslich nicht an adresse null
    if (!strcmp(foo, "bar"))... // wenn man c strings vergleichen will
    

    wollt ich nur der vollstaendigkeit halber losgeworden sein.


Anmelden zum Antworten