Wie erstell ich eine *-Figuren in C?

Hallo zusammen,

ich möchte eine „Figur“ programmieren, damit sie genau so aussieht:

*
**
***
****
****
***
**
*

Die Lösung sieh wie folg aus:

void textGrafik() {
int anzahl = 7;

while (anzahl >= 0) {
int i = anzahl % 4;
if (anzahl > 3) {
i = 3 - i;
}

while (i >= 0) {
printf("*");
i = i - 1;
}

printf("\n");
anzahl = anzahl - 1;
}
}

Leider würde ich selbst nie auf den Code kommen…

Gibt es ein Schema nachdem man vor geht um das zu realisieren?

Oder kann mir einer Schritt-für-Schritt erklären, wie man auf den Code kommt.

Wie eine While-Schleife funktioniert, weiß ich prinzipiell schon. Nur in dem zusammenhang hold überhaupt nicht.

Wär super, wenn Ihr mir dabei helfen könntet.

Schönen Gruß
Benni

Howdy,

Die Lösung sieh wie folg aus:

Leider würde ich selbst nie auf den Code kommen…

na, der ist ja auch etwas von hinten durch’s Auge geschossen.

Man würde anfangen und das Problem unterteilen in die erste Hälfte der Schritte (wo die Anzahl der Sterne ansteigt) und die zweite Hälfte (wo es wieder weniger werden) und dann vielleicht initial auf so etwas kommen:

void printLevels(const size\_t depth)
{
 const size\_t half = depth/2;

 for (size\_t i = 0; i 

wobei dein Problem hier printLevels(8) wäre ...

Der nächste Schritt wäre dann, sofern möglich, die Berechnung von stars noch mathematisch zu optimieren.

Gruss
n.

Hier ein anderer Ansatz der nach rom fürt :smile:

/* JavaScript */
/* spielrunden , rauf und runter */
/* in JavaScript sind alle variablen mehr oder weniger global sichtbar */
var aktuell = 0;
var max = 4;
var steigung = +1;
/* ich arbeite mit einer steigung die bei max ihre richtung ändert . */
/* start und ende ist bei 1 stern , max sterne gibts 2 mal .
function neueRunde() {
/* akutell auf max prüfen */
if (aktuell == max ) {
/* wenn gleich max dann */
/* steigung negieren */
steigung *= -1;
} else {
/* wenn ungleich max dann */
if (steigung 1 ) {
/* steigung negative und */
/* aktuell noch nicht ende (1) dann */
/* addiere steigung zu aktuell */
aktuell += steigung;
}
if (steigung > 0 ) {
/* steigung positiv dann */
/* addiere steigung zu aktuell */
aktuell += steigung;
}
}
return aktuell;
}
while (aktuell != -1 ) {
/* solange kein ende holen wir uns eine neue runde */
aktuell = neueRunde();
}

Wie komm ich darauf .

Als erstes mal die Sachen die eh gebraucht werden.

aktuelle position
maximale position
wertsprung (steigung)

da ich keine schleifen benutzen wollte sondern einfach eine funktion
die ich immer wieder aufrufe und mir einfach die runde bez das ende zurück gibt,
entschied ich mich für einfache if verzweigung der verschiedenen fällt.
Solange also was steigt darf es nur bis zum maximum steigen .
solange was fällt darf es nciht unter 1 fallen .
sobald es fällt und schon 1 ist ist das ende erreicht .
das maximum muss 2 mal erreicht werden .

die while schleife wird solange ausgeführt wie aktuell noch nicht ende (-1) ist :smile:

alos dieser code ist auch schwer
geschrieben , sachen die keiner brauch
und rechnungen die etwas zu speziell sind
für so einen einfachen fall .

void textGrafik() {
/* anzahl gesammter runden */
int anzahl = 7;
/* wunderlich , muss ich selber vorher zählen wie viel es wird ?? */

while (anzahl >= 0) {
/* solange anzahl gleich 0 oder größer mach ma weiter hier */

/* das ist modul rechnung , würg . was halt übrig bleibt beim teiler von 4 */
int i = anzahl % 4;

/* wenn der fall eintritt das anzahl über der hälfte ist dann soll */
/* das mehr an wert von der hälfte abgezogen werden … */
/* ui ui ui , sei schlau bleib doof , */
/* dieser wert ist ja kaum auszurechnen (max/2) -1 */
if (anzahl > 3) {
i = 3 - i;
}

/* nun knüppeln wir noch die sternchen auf die ausgabe */
while (i >= 0) {
/* es werden solange sternchen gedruckt solange i noch nicht negativ ist */
printf("*");
i = i - 1;
}
/* nächste runde */
printf("\n");
anzahl = anzahl - 1;
}
}

hätte irgendwie ein max * 2 als anzahl gereicht , das modular ist unnötig ,
da man es nicht mit vielfachem zu tun hat würde eine einfache subtraktion reichen.

alles in allem also ein überfrachteter ansatz für eine viel einfachere aufgabe .

@Mod: off-topic
Hi,

Hier ein anderer Ansatz der nach rom fürt :smile:
/* JavaScript */

so mal nebenbei: wir sind hier im C/C++ Forum,
da ist Javascript off-topic.

Gruss
n.

ich hab nur dazu geschrieben das es javascript ist
die paar if dinger gehen genauso in c c++ vb und was du sonst noch so findest auf der welt .