Christbaum
-
Hi @ all
Ich hab ein kleines C Problem
Ich hab als Aufgabe bekommen einen Christbaum aus Sternchen zu programmieren. Es soll ein Win32 Konsolenprogramm sein
Er soll ungefähr so aussehen:
***
*****
*******
*********
***Man kann es ja einfach machen und nur printf() schreiben.
So hat sollen wir es nicht machen hat er gesagt.
Wir sollen die Höhe des Baumes am Anfang eingeben
Ich hab mir schon überlegt man könnte es irgendwie mit einer for Schleife machen oder??
Die Schleife muss bei jeder Wiederholung 2 * dazu tun und ein " " (Leerzeichen) entfernen.
Da hab ich aber nicht den Durchblick.
Könnte mir jemand das erklären?
Danke im Voraus
Gruß Robert
-
So sollte er aussehen
* *** ***** ******* ********* ***
Die Höhe soll am Anfang des Programms eingegeben werden
Danke im voraus
Gruß Robert
-
Ich hab mir schon überlegt man könnte es irgendwie mit einer for Schleife machen oder??
Ja. Aus der Höhe deines Christbaums ergibt sich auhc die Breite. Also kannst du in einer for-Schleife von 1 bis Höhe durchwandern und jeweils eine Zeile ausgeben. Zuerst (Breite-Zählvariable)/2 Leerzeichen, dann Zählvariable Sternchen.
Am Ende dann ncoh einen Stumpf passend zeichnen :xmas1:
MfG SideWinder
-
ohh, guck mal,
wenn der Baum 5 Zeichen hoch ist, dann hat er an oberster
Stelle 4 Leerzeichen 1 Sternchen und 4 Leerzeichen.
Also könnte man aus der Höhe, dann die Leerzeichen berechnen,
die dann vor und nach dem Stern eingefügt werden.Also exakt hoehe-1 Leerzeichen, dann 1 Stern und wieder hoehe-1 Leerzeichen.
Dann pro weiterer Zeile einfach 2 Leerzeichen weg und 2 Sternchen
dazu.
Dafür gibt es bestimmt ein paar Standard-Funktionen in C.
Das ganze wiederholt man je nach Hoehe und am Ende noch den
Baumstamm unten dran.
Fertig.Gruß,
DCOhhhhhh... Zu spät!!!!
-
HI
Ich kenn mich leier noch nicht so gut in C aus.
void main (void) int ein; int i; { ein=5 for(i=1;i=ein printf("%d",i); getch(); }
Nur wie das mit der for Schleife genau geht kapier ich nicht ganz
Kann mir wer das erklären?
Danke im voraus
Gruß Robert
-
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
-
http://www.pronix.de/pronix-4.html
wuerde dir gut tun
-
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 = 1von 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"...