![]() |
![]() |
|
|
|||||||
| Programmierung Rat & Tat für Programmierer |
![]() |
|
|
Themen-Optionen | Ansicht |
|
|
#11 |
|
Master
![]() Registriert seit: 16.11.2000
Beiträge: 530
|
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 ... |
|
|
|
|
|
#12 |
|
Elite
![]() Registriert seit: 07.02.2001
Beiträge: 1.441
|
ö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 |
|
|
|
|
|
#13 |
|
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
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. |
|
|
|
|
|
#14 |
|
Master
![]() Registriert seit: 16.11.2000
Beiträge: 530
|
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 |
|
|
|
|
|
#15 |
|
Elite
![]() Registriert seit: 07.02.2001
Beiträge: 1.441
|
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 |
|
|
|
|
|
#16 |
|
Master
![]() Registriert seit: 16.11.2000
Beiträge: 530
|
@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 |
|
|
|
|
|
#17 |
|
Master
![]() Registriert seit: 16.11.2000
Beiträge: 530
|
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 |
|
|
|
|
|
#18 |
|
Elite
![]() Registriert seit: 07.02.2001
Beiträge: 1.441
|
@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? |
|
|
|
|
|
#19 |
|
Master
![]() Registriert seit: 16.11.2000
Beiträge: 530
|
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 |
|
|
|
|
|
#20 |
|
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
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 ![]() |
|
|
|
![]() |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|