Schleife soll vorwärts und rückwärts laufen

15/11/2008 - 17:56 von Roland Damm | Report spam
Moin.

Wie formuliert man eine solche Aufgabe elegant:

Bei folgendem:

for (i=0; i<10; i++)
for (j=0; j<10; j++)
irgendwas;

ist ja klar, was es tut. Nun soll aber dieses Irgendwas mal in
der einen, mal in der umgekehrten Reihenfolge durchlaufen
werden, mal sollen die Schleifen vorwàrts, mal rückwàrts zàhlen.
In alle 4 Kombinationen. Also es nachdem obiges ausgeführt
wurde, als nàchstes folgendes ausgeführt werden:

for (i=9; i>=0; i--)
for (j=0; j<10; j++)
irgendwas;

Gibt es einen eleganten Trick, das irgendwie in eine
Schleifenkonstruktion zu verpacken oder muss man diesen Block
wirklich 4 mal hinschreiben (inclusive dem 'irgendwas', welches
etwas lànglich ist.)?

Sowas wie:
if (Bedingung==1)
{ for (..vorwàrts..) }
else
{ for (...rückwàrts..)}
{
Schleifeninhalt;
} // Schleifenende

geht ja wohl nicht:-)

CU Rollo
 

Lesen sie die antworten

#1 Thomas Rachel
15/11/2008 - 18:44 | Warnen spam
Roland Damm schrieb:

Gibt es einen eleganten Trick, das irgendwie in eine
Schleifenkonstruktion zu verpacken oder muss man diesen Block
wirklich 4 mal hinschreiben (inclusive dem 'irgendwas', welches
etwas lànglich ist.)?



Das "irgendwas" ließe sich ja in eine Funktion verpacken.

Aber mir fàllt da folgendes ein:



int main()
{
signed char i,j;
signed char di,dj;
for (i=0,di=+1;i>=0;i += di) {
dj=+1;
for (j=0,dj=+1;j>=0;j += dj) {
printf("%d %d",i,j);
if (dj > 0 && j == 9) {
dj = -dj;
}
}
if (di > 0 && i == 9) {
di=-di;
}
}
}


Da bin ich mir allerdings nicht sicher, ob das tut, was Du willst.

Evtl. könnte aber folgendes die Lösung sein:

int main()
{
char values[][2] = {
{0,+1},
{9,-1},
};
signed char i,j,v;
signed char di,dj;
for (v=0; v<4; v++) {
i=values[v/2][0];
di=values[v/2][1];
for (;i>=0 && i<10;i += di) {
j=values[v%2][0];
dj=values[v%2][1];
for (;j>=0 && j < 10;j += dj) {
printf("%d %d",i,j);
}
}
}
}

HTH,

Thomas

Ähnliche fragen