WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 03.01.2002, 16:01   #11
Belgarath
Master
 
Registriert seit: 16.11.2000
Beiträge: 530


Standard

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
...
Belgarath ist offline   Mit Zitat antworten
Alt 03.01.2002, 16:02   #12
artemisia
Elite
 
Registriert seit: 07.02.2001
Beiträge: 1.441


Standard

ö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
artemisia ist offline   Mit Zitat antworten
Alt 03.01.2002, 16:04   #13
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

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.
kikakater ist offline   Mit Zitat antworten
Alt 03.01.2002, 16:08   #14
Belgarath
Master
 
Registriert seit: 16.11.2000
Beiträge: 530


Standard

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
Belgarath ist offline   Mit Zitat antworten
Alt 03.01.2002, 16:09   #15
artemisia
Elite
 
Registriert seit: 07.02.2001
Beiträge: 1.441


Standard

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
artemisia ist offline   Mit Zitat antworten
Alt 03.01.2002, 16:11   #16
Belgarath
Master
 
Registriert seit: 16.11.2000
Beiträge: 530


Standard

@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 ist offline   Mit Zitat antworten
Alt 03.01.2002, 16:16   #17
Belgarath
Master
 
Registriert seit: 16.11.2000
Beiträge: 530


Standard

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
Belgarath ist offline   Mit Zitat antworten
Alt 03.01.2002, 16:47   #18
artemisia
Elite
 
Registriert seit: 07.02.2001
Beiträge: 1.441


Standard

@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?
artemisia ist offline   Mit Zitat antworten
Alt 03.01.2002, 17:27   #19
Belgarath
Master
 
Registriert seit: 16.11.2000
Beiträge: 530


Standard

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
Belgarath ist offline   Mit Zitat antworten
Alt 03.01.2002, 17:56   #20
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

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
kikakater ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:43 Uhr.


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