Seite 1 von 2
Iteration
Verfasst: So Nov 06, 2016 7:16 pm
von gamma
Ich hab eine Frage zum erstellen einer Laufvariable mit Hilfe einer for Schleife:
Ich möchte das z von 0 bis 4 durchgezählt wird. In einer Schritten ist das auch kein Problem allerdings möchte ich jetzt das z von 0 bis 4 in 0,05er Schritten geht. Ich habe also geschrieben:
Code: Alles auswählen
for(double z{0};z<=z_1;z+0.05){
int z_0(z);
cout<<z_0<<endl;
}
z_1 habe ich vorher schon den Wert 4 zugeschrieben. Es lässt sich zwar kompilieren aber wenn ich es ausführen möchte bekomme ich nur Nuller zurück und das Programm hört auch nicht auf. Kann mir bitte wer erklären wo hier mein Denkfehler liegt?
Re: Iteration
Verfasst: So Nov 06, 2016 10:12 pm
von Xin
z+0.05 ist 0.05.
Aber das ändert z ja nichts.
Wenn Du z ändern möchtest sollte da eine Zuweisung stehen

Re: Iteration
Verfasst: So Nov 06, 2016 10:30 pm
von Necip
z = z + 3
ist was Xin meint
Du kannst auch schreiben z += 3
und wenn du nur um eins hochzählen willst, schreibe: z++ oder ++z
wobei ++z schneller ist als z++,
da ++z den Variableninhalt hochzählt,
wogegen z++ zunächst den Inhalt der Variable herausliest (bei Strukturen sogar eine Kopie erst anfertigt) und dann den Inhalt hochzählt und wieder zurückschreibt.... soweit ich das verstanden habe.
Womit ich, alter Dinosauerier, mich nicht anfreunden kann, ist die Initialisierung mit den geschweiften Klammern.
Ich würde Dir, bei aller Freundschaft, empfehlen, dass Du dich an den Standard C++ hälst, wie sie in den Anfängen der Sprache definiert war, sonst tust Du Dir schwer bestehende Programme zu verstehen, die zum grösten Teil noch auf diese Weise geschrieben sind!
Re: Iteration
Verfasst: Mo Nov 07, 2016 12:17 am
von Xin
Necip hat geschrieben:Ich würde Dir, bei aller Freundschaft, empfehlen, dass Du dich an den Standard C++ hälst, wie sie in den Anfängen der Sprache definiert war, sonst tust Du Dir schwer bestehende Programme zu verstehen, die zum grösten Teil noch auf diese Weise geschrieben sind!
Der Standard ist heute anders als damals, das muss man nicht mögen, aber die geschweiften Klammern sind korrekt, sie entsprechen dem aktuellen Standard und daher nicht zu bemängeln.
Re: Iteration
Verfasst: Mo Nov 07, 2016 9:44 am
von gamma
Danke für die Hilfe. Leider funktioniert das ganze trotzdem noch nicht ganz. Wenn ich z jetzt einen Wert zuweise, also mit z=z+0.05 dann bekomme ich in der Konsole nur viele 0,1,2 und 3er zurück. Kann es sein das mir die Konsole nicht die Kommastellen anzeigt?
P:S: Die Initialisierung mit den geschweiften Klammern ist leider verpflichten für die Vo aber ich werd mir merken das es auch anders geht!
Re: Iteration
Verfasst: Mo Nov 07, 2016 11:21 am
von Xin
gamma hat geschrieben:Danke für die Hilfe. Leider funktioniert das ganze trotzdem noch nicht ganz. Wenn ich z jetzt einen Wert zuweise, also mit z=z+0.05 dann bekomme ich in der Konsole nur viele 0,1,2 und 3er zurück. Kann es sein das mir die Konsole nicht die Kommastellen anzeigt?
Du gibst nicht (double) z aus, sondern (int) z_0. Ein integer ("zählbarer") Wert hat keine Nachkommastellen. Initialisierst Du ihn mit einem Fließkommawert, werden die Nachkommastellen abgeschnitten.
gamma hat geschrieben:P:S: Die Initialisierung mit den geschweiften Klammern ist leider verpflichten für die Vo aber ich werd mir merken das es auch anders geht!
Ich denke, es gibt gute Gründe Konstruktoren mit runden Klammern zu rufen.
Grundsätzlich geschweifte Klammern zu nutzen erscheint mir also auch nicht der Weisheit letzter Schluss.
Als "Dinosaurier" finde ich es ebenfalls als leserlicher einzelne Wert mit dem =-Operator zu initialisieren, wohlwissend, dass es hier eine semantische Besonderheit zieht, die aus dem Zuweisungsoperator einen Initialisierungs-Operator macht, also eben nicht MeinTyp::operator =() aufruft, obwohl da doch = geschrieben wurde. Das ist sinnvoll durchdacht, aber etwas wirr, wenn man C++ gerade lernt.
Überall da, wo es mehrere Möglichkeiten gibt, wird es auch Diskussionsbedarf geben, welche Möglichkeit man wo einsetzt. Und sich erstmal auf die geschweiften Klammern zu konzentrieren ist sicherlich nicht die dümmste Möglichkeit eine Vorauswahl zu treffen.
Re: Iteration
Verfasst: Mo Nov 07, 2016 3:41 pm
von gamma
Aja stimmt das hab ich vollkommen übersehen. Danke jetzt klappt es!
Re: Iteration
Verfasst: Mo Nov 07, 2016 6:53 pm
von Necip
@gamma, es ist wichtig, dass Du dir die Fehlermeldungen und Warnungen genau anschaust. Der compiler hat in der Richtung sicher was gehustet!
Das tool CppCheck geht übrigens darüber hinaus und prüft weitaus mehr als der compiler das tut. Ich habe Tonnen von bugs damit entdeckt!
Re: Iteration
Verfasst: Mo Nov 07, 2016 9:26 pm
von gamma
Ja nur leider tue ich mir noch etwas schwer mit den Fehlermeldungen.
Das tool CppCheck geht übrigens darüber hinaus und prüft weitaus mehr als der compiler das tut. Ich habe Tonnen von bugs damit entdeckt!
Danke für den Tipp ich hab es mir gerade hinunter geladen.
Ich hab allerdings eine Frage zu einem anderen Thema und wollte die hier gleich stellen:
Kann mir jemand den Unterschied zwischen Modulen und einer Header Datei erklären?
Re: Iteration
Verfasst: Di Nov 08, 2016 12:32 am
von Xin
Module gibt es in C++ nicht.
Von daher wäre erstmal interessant, was Du unter Modul genannt bekommen hast.
Da könnte ich mir Librarys bzw. Shared Objects vorstellen, aber das nennt man halt nicht Modul.