Iteration

Schnelle objektorientierte, kompilierende Programmiersprache.
gamma
Beiträge: 33
Registriert: Sa Aug 20, 2016 11:30 am

Iteration

Beitrag von gamma » So Nov 06, 2016 7:16 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Iteration

Beitrag von Xin » So Nov 06, 2016 10:12 pm

z+0.05 ist 0.05.
Aber das ändert z ja nichts.

Wenn Du z ändern möchtest sollte da eine Zuweisung stehen :)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Iteration

Beitrag von Necip » So Nov 06, 2016 10:30 pm

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!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Iteration

Beitrag von Xin » Mo Nov 07, 2016 12:17 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

gamma
Beiträge: 33
Registriert: Sa Aug 20, 2016 11:30 am

Re: Iteration

Beitrag von gamma » Mo Nov 07, 2016 9:44 am

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!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Iteration

Beitrag von Xin » Mo Nov 07, 2016 11:21 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

gamma
Beiträge: 33
Registriert: Sa Aug 20, 2016 11:30 am

Re: Iteration

Beitrag von gamma » Mo Nov 07, 2016 3:41 pm

Aja stimmt das hab ich vollkommen übersehen. Danke jetzt klappt es!

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Iteration

Beitrag von Necip » Mo Nov 07, 2016 6:53 pm

@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!

gamma
Beiträge: 33
Registriert: Sa Aug 20, 2016 11:30 am

Re: Iteration

Beitrag von gamma » Mo Nov 07, 2016 9:26 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Iteration

Beitrag von Xin » Di Nov 08, 2016 12:32 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten