C Programmierung Schleifen hoch und runter zählen?

Aufgabe 4 - (programmieren, C (Programmiersprache))

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.


RayYago 
Fragesteller
 18.02.2017, 19:53

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.

void zeile(int blanks, int sterne);


int main()
{
int input = 0,
i = 0,
z = 0,
cache = 0,
blanks = 1,
sterne = -1; //in i speicher ich nochmal den Input um in in For zu benutzen // sterne hat -1 weil ich im ersten durchlauf sterne +2 setze damit ich immer ein Sterne habe am Anfang

printf("Input....");
scanf("%d",&input);

i = input;
input = input - 1;

for(; i > -input;i--)
{
if(i <= 0)
{
blanks = cache + 1;
cache++;
sterne = sterne - 2;
}
else
{
blanks = i - 1;
sterne = sterne + 2;
}

zeile(blanks,sterne);

}

}
void zeile(int blanks, int sterne)

{
for(; blanks > 0;blanks--)
{
printf(".");
}

for(;sterne > 0;sterne--)
{
printf("*");
}

printf("\n");
}
0
Lolligerhans  19.02.2017, 03:08
@RayYago

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 ;).

0