C Programmierung Schleifen hoch und runter zählen?
Hallo erstmal, ich bin ein Neuling in C und habe ein paar Übungsaufgaben auftreiben können. Nun komme ich bei Aufgabe 4 nicht weiter. Hab das Bild mal geposted. Icj vermute man braucht 2 For Schleifen die erst hoch zählen und dann wieder runter zählen oder? Aber irgendwie klappt das nicht so wie ich das in meinem Kopf möchte. Kann mir jemand helfen bei einem Lösungsansatz? Ich wäre wirklich dankbar. Gruß Olli

1 Antwort
Dein Ansatz ist aber gut. Möchtest du deinen Versuch mal hochladen? Einfach die Lösung hinzuschreiben wäre entwas langweilig.
Ein interessanter Ansatz ist auch: Mit nur einer Schleife von i = n-1 aus rückwärts bis i = -(n-1) zählen. Dann den Betrag von i als Anzahl der Leerzeichen verwenden und #Sterne = 2n - 2i -1. Hier z. B. etwas mit
for(; i > -n;) // oder
for(; abs(i) < abs(n);)
auftauchen. Dieser Ansatz scheint mir etwas günstiger als mehrere Schleifen, die im Grunde dasselbe tun.
Du musst natürlich zuerst sicher sein, dass die Funktion zum zeichnen einer Zeile funktioniert.
Hauptsache es funkitioniert ;).
Obwohl ich erst spät schreibe:
Wenn du input änderst könnte man davon später überrascht sein. Vielleicht lieber const int input und for(; i > -(input-1);).
Du benutzt z nicht?
Ich würde tatsächlich entweder die Anzahl der Sterne oder der Leerzeichen als Laufvariable verwenden, weil das besser verdeutlicht, was passiert. Wie die Laufvariable für Berechnungen genutzt wird ist beim lesen schwer zu durchschauen; und man hat 1 Variable mehr.
Ebenso ist die Ausgabe immer gleich lang (wenn man sich Leerzeichen auch an die rechte Seite denkt). Davon ausgehend die Anzahl des jeweilig anderen mit einer Formel zu berechnen macht auch etwas leichter. Dazu muss man sehen, dass man immer in ein Feld der breite 2n-1 schreibt. Deshalb muss immer 2n-1 = sterne + 2*leerzeichen (weil leerzeichen auf beide Seiten müssen).
Also ein Wert als Laufvariable und den anderen mit dieser Folmel. Beide zu inkrementieren ist aber natürlich effizienter!
An diesem Punkt sind die "Verbesserungen" wohl eher nur noch meine persönliche Ansicht. Viel weniger umständlich geht es nicht, denn die Aufgabe ist ja recht kompliziert ;).
Danke für die Antwort, ich konnte das ganze jetzt so lösen. Aber ich glaube ich habe das immer noch sehr umständlich ._.? Wenn du Verbesserung Vorschläge hast nehme ich die sehr gerne an.
Also in der ersten Zeile habe ich dem Compiler erst einmal gezeigt das weiter unten eine Funktion existiert. Dann kommt mein main und unten die Funktion.