voldemort Geschrieben 4. September 2009 Geschrieben 4. September 2009 hallo zusammen, wir haben gestern im unterricht angefangen mit for schleifen in c zu programmieren. einige übungen mit berechnungen waren in so weit kein problem. nun haben wir für zu hause noch aufgaben aufbekommen bei denen ich nun nicht wirklich weiter weiß. es gibt zwei aufgaben in denen wir folgende muster am bildschirm ausgeben sollen x xx xxx xxxx xxxxx xxxxxx xxxxxxx xxxxxxxx x xx xxxx xxxxxx xxxxxxxxx xxxxxxxxxxx ich hätte bitte nun gerne keine kompletten codes, sondern tipps zum lösungsweg. das problem hab ich aber nur damit was ich in der for-schleife eingeben soll. vielleicht denke ich einfach nur zu kompliziert und die lösung ist einfach. ein danke im vorraus voldemort Zitieren
flashpixx Geschrieben 4. September 2009 Geschrieben 4. September 2009 Mal so der Hinweis: Du hast 1 bis x Pyramiden (nach jeder fertigen Pyramide eine Leerzeile), in jeder Pyramide 1 bis y Zeilen und in jeder Zeile 1 bis z Zeichen HTH Zitieren
voldemort Geschrieben 4. September 2009 Autor Geschrieben 4. September 2009 vielen dank für die antwort. ich konnte nun nachvollziehen was du meinst, aber weiß nun nicht wie ich das umsetzen soll. ich muss es ja so programmieren das das programm mit einem x beginnt und den rest ja durch berechnung und schleife bis zu einem gewissen punkt bringt. zur veranschaulichung mal eine übung die wir im unterricht programmiert haben: int j; j = 1; for (i=0; j<=550; i=i+1 ,j=i+j) { printf ("%d ",j); } damit wurde der zahlenwert 1 2 (1+1) 4 (2+2) 7 (4+3) 11 (7+4) ausgegeben. um ein x hinbekommen müsste ich ja nun statt int char benutzen,oder? oder muss ich hier nun doch irgendwie mit beides programmieren,da ich bzw die schleife die anzahl der x'e +1 pro zeile berechnen muss voldemort Zitieren
Gast Geschrieben 4. September 2009 Geschrieben 4. September 2009 Nur als Tipp, du kannst auch mehrere For-Schleifen verschachteln. Zitieren
voldemort Geschrieben 4. September 2009 Autor Geschrieben 4. September 2009 (bearbeitet) was bedeutet verschachteln und macht das dann hier sinn? wie ihr bestimmt merkt bin ich anfänger und befinde mich grad im ersten semester. also alles neuland für mich ich bin nun mal so weit char a, b; a='x' , b=1; for(a='x';b<=???;......); anregungen? Bearbeitet 4. September 2009 von voldemort Zitieren
flashpixx Geschrieben 4. September 2009 Geschrieben 4. September 2009 wie ihr bestimmt merkt bin ich anfänger und befinde mich grad im ersten semester. Da Du studierst, solltest Du schon etwas mehr können, als nur eine For-Schleife. Von Dir wird in der Aufgabe verlangt, dass Du einen Transfer leisten sollst. Im Grunde habe ich Dir schon einen fast fertigen Algorithmus geliefert. Zitieren
voldemort Geschrieben 4. September 2009 Autor Geschrieben 4. September 2009 sorry, wenn du da was falsch verstanden hast, aber ich bin auf der schule für technik im ersten semester. wie gesagt, ich fang grad bei null an und wir haben gestern das erste mal mit for schleifen programmiert. genau genommen war es die dritte unterrichtsstunde. Zitieren
voldemort Geschrieben 4. September 2009 Autor Geschrieben 4. September 2009 also so weit bin ich schon mal char a, b, c; a= 'X'; b= 'X'; c= 'X'; for (a='X';b>='X'; b=c+a) { printf ("%c"\n,; } es wird mir ein X angezeigt. was müsste nun unter "b >="stehen damit mir XXXXXXXXX als letzte zeile angezeigt wird. ich hab es nun mal versucht mit 'x''x''X''X''X''X'' und 'XXXXX' hat jemand tipps? Zitieren
flashpixx Geschrieben 4. September 2009 Geschrieben 4. September 2009 Du hast schon mal den Wikipedia Artikel über For-Schleifen gelesen? Und Du kennst den Unterschied zwischen arithmetischen Operationen und String- bzw Char-Operationen? Zitieren
voldemort Geschrieben 4. September 2009 Autor Geschrieben 4. September 2009 den artikel über for-schleifen hab ich grad nochmal durchgelesen, aber den unterschied zwischen arithmetischen operationen und string- bzw char-operationen kenn ich (noch) nicht. muss ich mich mal auf die suche machen. aber ich glaube der char befehl ist eh komplett fehll am platz da ich ja rechnen möchte. da eher doch int. ich dachte ich könnte die x'e im for befehl wiederholen, aber das ist ja wohl ein böser fehler, da man das ja im eigentlichen programm macht. richtig? Zitieren
flashpixx Geschrieben 4. September 2009 Geschrieben 4. September 2009 aber ich glaube der char befehl ist eh komplett fehll am platz da ich ja rechnen möchte. da eher doch int. ich dachte ich könnte die x'e im for befehl wiederholen, aber das ist ja wohl ein böser fehler, da man das ja im eigentlichen programm macht. Du kommst auf den richtigen Weg. For-Schleifen werden auch "Zählschleifen" genannt und dann lies doch nochmal mein erstes Posting (#2) und das erste von Myschkin (#4) Zitieren
voldemort Geschrieben 4. September 2009 Autor Geschrieben 4. September 2009 nun mal ein neuer lösungsansatz. hab es mal mit einer einfachen schleife versucht, da ich es mit den verschachtelten schleifen mal nachlesen muss: int a,b; b=1; for (a=1;b<=8; a=a+1, b=b+a) { printf ("X"); } schaut schon mal besser aus, aber funktioniert nur leider überhaupt nicht. schade Zitieren
voldemort Geschrieben 5. September 2009 Autor Geschrieben 5. September 2009 mal noch ein neuer lösungsansatz, der mir nun acht mal das x anzeigt int a,b; for (a=1;a<=8; a=a+1) { printf ("X"); } ist das so weit schon mal ok, oder bin ich auf den falschen weg? Zitieren
oxygen Geschrieben 5. September 2009 Geschrieben 5. September 2009 Also, ich misch mich hier auch mal ein. Musste auch kurz überlegen, wie sowas ging, hatten das glaub aber auch schonmal und es fiel mir deshalb schnell ein. Was ich dir sage, basiert auf c++-Wissen, deshalb kann sein, dass kleinigkeiten anders sind, ist aber hauptsächlich nur die Syntax. Du musst mindestens 2 for-Schleifen verschachteln, das bedeutet, du rufst in der einen Schleife die andere auf. for(...;...;...) { for(...;...;...) { } } Damit kannst du jetzt 2 Aktionen so oft hintereinander ausführen, wie du sie brauchst. In deinem Fall wäre das mit der einen Schleife die Zeilen, mit der anderen Schleife die Zeichen auszufüren, um das muster zu bekommen, musst du halt mit Variablen arbeiten, die du hochzählst. Zitieren
voldemort Geschrieben 5. September 2009 Autor Geschrieben 5. September 2009 hallo und danke, mit der verschachtelten for-schleife bin ich grad am experimentieren. das scheint ne tolle aufgabe zu sein, weil man uns nicht gesagt hatte wie man nun die zeilen angibt. ich bin in der lage ein x, oder 8 x in einer reihe anzugeben bring es aber nicht fertig das er mir mein muster errechnet. hier mein jetziger code: int a,b; for (a=1;a<=8; a=a+1) { for (b=0;b<=a;b=a+; } { printf ("X"); } printf ("\n"); sind nun beide schleifen schrott, oder ist eine ok? wieso muss ich nun hinter der zweiten for schleife ein semik. setzen? ohne startet das programm nicht grüße Zitieren
chooter696 Geschrieben 5. September 2009 Geschrieben 5. September 2009 int a,b; for (a=1;a<=8; a=a+1) { for (b=0;b<=a;b=a+; } { printf ("X"); } printf ("\n");[/code] das is net wirklich richtig. [code] for (a=1;a<=8; a=a+1) { for (b=0;b<=a;b=a+ { printf ("X"); } printf ("\n"); } das was du mit dem semikoln meinst ist weil du es falsch verschachtelt hast. ein Semikolon beendet immer eine anweisung deshalb geht es mit. Ein Tipp von mir. Gewöhn dir am besten von anfang an einen sauberen Quellcode an. Das heist nicht Bei Schleifen alles gerade untereinander Sondern mit z.b. Tab´s zu arbeiten. Hilft später ungemein und umso früher man damit anfängt umso einfacher ist es. Zitieren
voldemort Geschrieben 5. September 2009 Autor Geschrieben 5. September 2009 danke, werde versuchen deinen rat zukünftig folge zu leisten nachdem das semikolon weg ist hab ich nun 8 reihen und in jede reihe sind zwei x, aber das habt ihr wohl schon anhand des codes erahnt was mich nun interessiert: wie und woher weiß ich in welcher schleife ich zeile und anzahl mache? for (initialisierung;logische abfrage;zähler erhöhen bzw erniedrigen) über google hab ich nun leider nichts erklärendes darüber gefunden Zitieren
voldemort Geschrieben 5. September 2009 Autor Geschrieben 5. September 2009 so, ich glaube es ist vollbracht int a, b; for (a=1;a<=8; a=a+1) { for (b=1;b<=a;b=1+ { printf ("X"); } printf ("\n"); } [/PHP] nur leider hab ich nun den kompletten überblick verloren was ich da gemacht habe und warum es so funktioniert. kann mir das evtl einer bitte so erklären das ich es verstehe? Zitieren
flashpixx Geschrieben 5. September 2009 Geschrieben 5. September 2009 Ich verkürze es Dir noch einmal und benenne es etwas um: for (unsigned int zeile=0; zeile < 8; ++zeile) { for (unsigned int zeichen=0; zeichen < zeile+1; ++zeichen) printf ("X"); printf ("\n"); } Zitieren
voldemort Geschrieben 5. September 2009 Autor Geschrieben 5. September 2009 was bedeutet denn das unsigned int? wir haben den begriff noch nicht gehabt und ins deutsche würde das ja in etwa nicht unterzeichnete ganze zahl heißen. hast du nun mit absicht ein paar werte verändert und warum steht bei dir dann ++zeile bzw ++zeichen? Zitieren
oxygen Geschrieben 5. September 2009 Geschrieben 5. September 2009 (bearbeitet) also was ich als erstes sehe, ist, dass du deine geschweiften Klammern nicht ganz korrekt gesetzt hast. Sollte eher so aussehen. int a,b; for (a=1;a<=8; a=a+1) { for (b=0;b<=a;b=a+; { printf ("X"); } printf ("\n"); } [/code] Kann natürlich auch sein, dass du dich verschrieben hast, falls dus abgetippt hast. Der Grund dafür, dass du nicht das Muster hin bekommst, liegt an deinen Parametern: 1. solltest du in der inneren Schleife entweder b=1 setzen oder b<<a als zweiten Eintrag 2. musst du b unabhängig von a hochzählen, denn, nehmen wir an, a=5, hast du im ersten durchlauf b=0, dann wird a Addiert, also hast du b=5, er macht noch einen Stern und steigt dann aus, weil dann b=10 wird und 10>5 ist. EDIT: war wohl etwas langsam, naja, hast noch ne andere Erklärung ++ bedeutet um 1 hochzählen. Bearbeitet 5. September 2009 von oxygen Zitieren
flashpixx Geschrieben 5. September 2009 Geschrieben 5. September 2009 was bedeutet denn das unsigned int? [...] hast du nun mit absicht ein paar werte verändert und warum steht bei dir dann ++zeile bzw ++zeichen? Es bringt hier nicht, wenn Du wenn man Dir jeden Befehl sprichwörtlich auseinander nehmen muss. Du solltest Dir entsprechende C/C++ Lektüre besorgen und parallel zum Unterricht verwenden. Du musst eben einmal überlegen was eine Schleife macht und was passiert, wenn man diese schachtelt. Dein Problem als C++ Code: #include <iostream> int main ( int argc, char *argv[] ) { for (unsigned int pyramiden=0; pyramiden < 2; ++pyramiden) { for (unsigned int zeile=0; zeile < 8; ++zeile) { for (unsigned int zeichen=0; zeichen < zeile+1; ++zeichen) std::cout << "X"; std::cout << std::endl; } std::cout << std::endl; } return 0; } Zitieren
voldemort Geschrieben 5. September 2009 Autor Geschrieben 5. September 2009 ich weiß ja nun nicht ob das was von bedeutung hat, aber wir sollen erst mal nur mit c programmieren. später dann gehen wir erst ins c++. vielleicht kommen hier nun ein paar sachen durcheinander. auf die idee mit den lektüren bin ich auch schon gekommen und hatte mir gestern zwei bestellt. nur das problem ist,daß wir mit dem programmieren sollen was wir kennengelernt haben und deswegen bin ich hier und da mit neuen begriffen wahrscheinllich ein bisschen überfordert, aber vielleicht kann es auch sein das sie aus dem c++ bereich kommen. Zitieren
flashpixx Geschrieben 5. September 2009 Geschrieben 5. September 2009 nur das problem ist,daß wir mit dem programmieren sollen was wir kennengelernt haben und deswegen bin ich hier und da mit neuen begriffen wahrscheinllich ein bisschen überfordert, aber vielleicht kann es auch sein das sie aus dem c++ bereich kommen. weder "unsigned" noch der "++" Operator sind C++. Wobei "std::" schon C++ ist. Aber es sollte kein Problem sein, die Ausgabe auch nach C zu portieren Zitieren
voldemort Geschrieben 5. September 2009 Autor Geschrieben 5. September 2009 also ich versuch mal zusammen zu fassen: a=1 ist mein startwert, a=a+1 wird so oft wiederholt bis meine 8 zeilen vorhanden sind und überprüft wird dies durch a<8 b=1 ist mein erstes x, b=1+b fügt pro zeile ein x dazu bis b<a also 8 zeilen erreicht sind richtig? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.