WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   c - mathlib (http://www.wcm.at/forum/showthread.php?t=41494)

Belgarath 03.01.2002 15:01

ok, erste for-schleife war ein blindgänger *schämundindieeckeverkriech* (obwohl ich mir einbilde, daß der C-Compiler auf der Micro-VAX in den späten 80ern genau dieses Verhalten gezeigt hat ... läßt sich jetzt natürlich besonders gut und leicht beweisen *g*), aber die 2. müßte stimmen, da dort von links nach rechts abgearbeitet wird, gelle ;)

lg
Belgarath

P.S.: bei der 2. Schleife wären dann natürlich die Ausgabe-Werte anders:
1 4
2 9
...

artemisia 03.01.2002 15:02

öhm ....

du .... hab gerad deinen vorschlag ausprobiert:


hab folgende ausgabe (natürlich ohne dots):

2....0
3....1
4....4
5....9
....

99.....9409
100....9604
101....9801

mh ... also ich mein, meine gefällt mir besser ;-)

greetz
artemisias

kikakater 03.01.2002 15:04

Die zweite for-Schleife enthält einen typischen Anfängerfehler, sonic hat recht, daß das Array unterdimensioniert ist.

Das sind zwei Feststellungen:
1. ein Anfängerfehler ---> [++i], hochzählen der Variable i um 1 vor dem Verwenden von i
2. INSOFERN: Array unterdimensioniert

Punkt 2 soll lediglich ausdrücken, daß, wer so "programmiert", sich nicht wundern braucht.


Fehler: for(i=0; i<100; printf("%d\t%d\n", i, iwerte[++i]));

Korrekt: for(i=0; i<100; i++) printf("%d\t%d\n", i, iwerte[i]);

Eine Schleife besteht nicht zu unrecht aus Initialisierungsteil,
Abbruchbedingung und Increment/Decrement.

Wer eine SCHLEIFENVARIABLE mitten in einer Schleife hochzählt, erzeugt damit einen Mischmasch aus Durchlauf n und Durchlauf n + 1.

Belgarath 03.01.2002 15:08

ok, ich werd daheim meinen kobel damit füttern, daß ich nicht blind herumtasten muß ... allerdings: wenn i mit 0 initialisiert wird, dürfte in der 2. Schleife die Ausgabe nicht mit
2 ... 0
beginnen ... außer der Compiler arbeitet alles von rechts ab, was aber imho nicht korrekt wäre, da hier ja keine Zuweisung erfolgt.

Wie gesagt, ich werde es daheim ausprobieren ... *ascheaufmeinhaupt*

lg
Belgarath

artemisia 03.01.2002 15:09

mh .... mag ja gar nix mehr schreiben ... sonst kommst heut nimma mehr aus der *schämeecke ;-)

auch deine zweite forschleife hat nen leichten bug ...weil hier nämlich von rechts nach links ausgewertet wird.

korrekt müsste es heißen (und ist damit zugegebenermaßen einfacher als meine):


for ( i = 0; i < 100; printf( "%d\t%d\n", i, iwerte[i++] ) )

und dann funzt es auch mit der schleife *smile

greetz
artemisia

Belgarath 03.01.2002 15:11

@kikakater:

wenn wir schon um des kaisers neue kleider streiten wollen *gg*:

wenn ich 100 werte erzeugen und in einem array ablegen will und mir dazu ein array mit 100 elementen anlege, habe ich genau richtig dimensioniert!

wenn ich dann allerdings mit falschen indizes arbeite, fliege ich irgendwann auf die schnauze ...

lg
Belgarath

Belgarath 03.01.2002 15:16

allerdings gebe ich dir mit der (korrekten) trennung in initialisierung, abbruchbedingung, incr/decr _und_ eigentlich zu wiederholenden statement-teil recht. aber c läßt nun mal so einige schweinereien zu *fg*

lg
Belgarath

artemisia 03.01.2002 15:47

@kikakater

mh ... es ist mir im prinzip schnurz, was die lehrbücher erzählen ...

ich bin im mom am testen, was frau in forschleifen alles anstellen kann und in welcher reihenfolge der compiler das auswertet.
.... und wie du siehst (oder vielleicht auch nicht ;-) ) gibt es immer interessante seiteneffekte *ggg

c ist eben doch der geländewagen ....

greetz
artemisias

btw: ich finde, es gibt nichts faderes, als sich immer nur an vorgaben zu orientieren ... wo bleibt die progressivität?

Belgarath 03.01.2002 16:27

ist eine gute lesbarkeit und leichte verständlichkeit auch nach mehr als 1 Woche Abstand zum eigenen Machwerk nicht progressiv *scnr*? Aber das Compilerverhalten (von rechts auflösen) ist schon recht heftig, und bei solchen Konstruktionen ist das nicht mehr trivial lesbar, selbst wenn man's weiß!

lg
Belgarath

kikakater 03.01.2002 16:56

for ( i = 0; i < 100; printf( "%d\t%d\n", i, iwerte[i++] ) )

Was soll das ?

.) Da fehlt das Semikolon am Schluß, Nummer 1.
.) Zweitens: i wird mit 0 ausgegeben, richtig wäre i + 1, iwerte[i] und
.) Drittens: i sollte und MUSS im Increment/Decrement Teil verändert werden, alles andere als das, ist ein Programmierfehler, es ist so, Ende der Diskussion, nichts für ungut.

for(i = 0; i < 100; i++)
printf("%d\t%d\n", i + 1, iwerte[i]);

Bis zum nächsten Lapsus, linken mit der Mathematik Bibliothek ist auch klar :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag