zerou24
Goto Top

C++ Inkrement- und Dekrementoperator. Grundlagen Probleme

Hallo ich habe ein problem entweder ist es zu spät am abend oder ich bin blöd.. Ich lerne grade die "basics" von c++ durch ein Buch in dem Aufgaben gestellt werden. Aufgabe: "Welcher wert wird in den folgenden Zeilen ausgegeben" code:
//Fehlerkorrektur
#include <iostream>
using namespace std;
int main() {
	int ival1, ival2 = 2;
	float fval1 = 3.5f;
	ival1 = fval1;
	cout << ival1 << '\n';  
	cout << ival1 / ival2 << '\n';  
	cout << static_cast<int>(fval1 / ival2) << '\n';  
	cout << static_cast<float>(fval1 / ival2) << '\n';  
}
Ich verstehe das komplette Thema nicht kann mir das jemand nochmal anfängerfreundlich erklären? wieso kommt beim ersten 3 raus als ausgabe ?
probleme habe ich auch bei:
 int i = 1;
cout << i--  << '\n'  
cout  << ++i << '\n'  
cout << i++ << '\n'  
cout << ++i << '\n'  

Wieso kommt da überall eins und am ende 3 raus eig müsste es doch in der ersten zeile 1 sein in der zweiten 2 in der dritten 4 und in der vierten 5 wieso nun 1 1 1 3 ? bitte um hilfe bin am verzweifeln face-sad

Content-Key: 293001

Url: https://administrator.de/contentid/293001

Printed on: April 23, 2024 at 17:04 o'clock

Member: Pjordorf
Solution Pjordorf Jan 13, 2016, updated at Jan 14, 2016 at 13:04:09 (UTC)
Goto Top
Hallo,

Zitat von @Zerou24:
Ich lerne grade die "basics" von c++ durch ein Buch
Und hinten angefangen zu lesen weil die ersten Seiten sind doch nur was kiddies? Ein paar Kapitel übersprungen?

Wieso kommt da überall
Grundlagen face-smile Schau mal hier http://www.easy-coding.de/index.php/Thread/2268-i-und-i-Unterschied-lie ...

Gruß,
Peter
Member: BirdyB
BirdyB Jan 13, 2016 updated at 22:20:30 (UTC)
Goto Top
Zitat von @Zerou24:
Hi,
Hallo ich habe ein problem entweder ist es zu spät am abend oder ich bin blöd.. Ich lerne grade die "basics" von c++ durch ein Buch in dem Aufgaben gestellt werden. Aufgabe: "Welcher wert wird in den folgenden Zeilen ausgegeben" code:
//Fehlerkorrektur
> #include <iostream>
> using namespace std;
> int main() {
> 	int ival1, ival2 = 2;
> 	float fval1 = 3.5f;
> 	ival1 = fval1;
> 	cout << ival1 << '\n';  
> 	cout << ival1 / ival2 << '\n';  
> 	cout << static_cast<int>(fval1 / ival2) << '\n';  
> 	cout << static_cast<float>(fval1 / ival2) << '\n';  
> }
> 
Ich verstehe das komplette Thema nicht kann mir das jemand nochmal anfängerfreundlich erklären? wieso kommt beim ersten 3 raus als ausgabe ?
ival ist eine integer... Integer haben keine Nachkommastellen. Bei der Konvertierung von float nach integer (ival1 = fval1;) werden die Nachkommastellen entfernt.
probleme habe ich auch bei:
 int i = 1;
> cout << i--  << '\n'  
> cout  << ++i << '\n'  
> cout << i++ << '\n'  
> cout << ++i << '\n'  
> 
Wieso kommt da überall eins und am ende 3 raus eig müsste es doch in der ersten zeile 1 sein in der zweiten 2 in der dritten 4 und in der vierten 5 wieso nun 1 1 1 3 ? bitte um hilfe bin am verzweifeln face-sad

Das ist schon richtig so... es gibt Pre- und Postinkrement...
int i = 1;    //i ist 1
//i ist immer noch 1
cout << i--  << '\n' //i wird erst ausgegeben und dann um 1 verringert (Postinkrement)  
//i ist jetzt 0
cout  << ++i << '\n' //i wird erst um 1 erhöht und dann ausgegeben (Preinkrement)  
//i ist jetzt 1
cout << i++ << '\n' //i wird jetzt erst ausgegeben und dann um 1 erhöht (Postinkrement)  
//i ist jetzt 2
cout << ++i << '\n' // i wird erst um 1 erhöht und dann ausgegeben (Preinkrement)  
//i ist jetzt 3

Es macht eben einen Unterschied ob ++ oder -- vor oder nach dem i steht...

Beste Grüße


Berthold
Member: Zerou24
Zerou24 Jan 14, 2016 at 13:03:37 (UTC)
Goto Top
Dass es richtig ist weiß ich nur och verstehe das ergebnis nicht und wo liegt denn der unterschied bei i++ und ++i ?
Member: Zerou24
Zerou24 Jan 14, 2016 at 13:05:01 (UTC)
Goto Top
Nein nicht wirklich das ist fast noch der anfang nur diese "lernkontrolle" also explizit diese Aufgabe kriege ich nicht hin/verstehe das ergebnis nicht
Mitglied: 122990
122990 Jan 14, 2016 updated at 13:10:52 (UTC)
Goto Top
Moin
Zitat von @Zerou24:
Dass es richtig ist weiß ich nur och verstehe das ergebnis nicht und wo liegt denn der unterschied bei i++ und ++i ?

Das hat Berthold doch eigentlich schon eindeutig und eigentlich unmissverständlich geschrieben:
back-to-topPost-Inkrement: i++
Bedeutet das die Variable erst nach der Ausgabe hochgezählt wird, wenn man also i++ ausgibt wird der aktuelle Wert der Variablen ausgegeben und erst danach (Post) hochgezählt.
back-to-topPre-Inkrement: ++i
Genau das Gegenteil von Post-Inkrement, hier wird der Wert der Variablen vor der Ausgabe hochgezählt und sie dann ausgegeben.

Kann man hier schön nachlesen
https://de.wikipedia.org/wiki/Inkrement_und_Dekrement#Wertzuweisungszeit ...

Gruß grexit
Member: BirdyB
BirdyB Jan 14, 2016 at 15:47:07 (UTC)
Goto Top
Zitat von @Zerou24:

Dass es richtig ist weiß ich nur och verstehe das ergebnis nicht und wo liegt denn der unterschied bei i++ und ++i ?
Das habe ich dir doch oben in deinem Code kommentiert... Lesen würde helfen...
Member: Pjordorf
Pjordorf Jan 14, 2016 at 19:27:14 (UTC)
Goto Top
Hallo,

Zitat von @Zerou24:
nur och verstehe das ergebnis nicht
Nun, lesen musst du schon selbst. Das Verstehen dann auch. Da können wir schlecht helfen. Aber auch hier stand schön was der kleine aber doch vorhandene Unterschied ausmacht. C++ Inkrement- und Dekrementoperator. Grundlagen Probleme Du musst dir nur eine Methode erarbeiten die dein gelesenes in Wissen verwandelt - Üben üben üben üben. Der beste Rechner zum lernen besteht immer noch aus Papier und Bleistift und du spielst die CPU bzw. die APU..

Gruß,
Peter