#1 11. September 2005 Seht euch das mal an! Code: #include <iostream> //include des iostream #include <conio.h> // für den Befehl getch (); #include <iomanip> using namespace std; // is eig. klar ^^ int main () { int zahl1,zahl2,zahl3,zahl4; zahl1=3*2; //1 [B]zahl2=zahl3=zahl1*2;[/B] //2 [B]zahl3=zahl3*2;[/B] //3 zahl4=zahl3/4; //4 zahl1=zahl2*zahl4+zahl3; //5 cout << "Das Ergebnis lautet : " << zahl1 << endl; getch (); // damit das Fenster offen bleibt return 0; // für die Ausgabe } Seht euch die beiden fettgedruckten sachen an!!! Einmal ist Zahl3 12 und einmal 24??? HÄ? (EDIT by DrScream: Das naechstemal einen Passenderen Titel waehlen....) + Multi-Zitat Zitieren
#2 11. September 2005 RE: Mathematisch totaler Unfug??? Ehm, ja.. wo ist denn das Problem genau? So sollte es doch sein, oder etwa nicht? Wenn zahl1 2 * 3, also 6, ist. Dann ist doch auch das doppelte 12, das jeweils an zahl2 und zahl3 zugewiesen wird. In der nächsten Zeile wird nun mit 12 weitergerechnet, bei zahl3. Dieses wird wiederum mit 2 multipliziert, das 24 gibt und anschließend an zahl3 wieder zugewiesen wird. Du könntest dies auch so schreiben: Code: zahl3 *= 2; Es kommt auf's Selbe hinaus. Doch: Was ist jetzt dein Problem? Es ist doch so völlig korrekt, oder übersehe ich irgendwas? + Multi-Zitat Zitieren
#3 11. September 2005 Du hast Recht. In der Programmiersprache ist es vollkommen korrekt. Aber Mathematisch gesehen nicht! Setzten wir für Zahl1 a und zahl2 b.... dann kommt das hier: a=2*3=6 b=c=6*2=12 daraus folgt: b=12 c=12 aber warum dann das? c=c*2 ??? schlecht möglich Denn ein Apfel kann man auch nicht einfach verdoppeln und dann ist er noch das gleiche wie vorher... und noch mehr: dann müsste b eigentlich heißen b=c=24=1*2 geht aber net denn dann müsste a=12 sein! und wenn c nun wieder mal zwei genommen wird sind wir bei 48! dann fängt wieder alles von vorne an!!! + Multi-Zitat Zitieren
#4 11. September 2005 Dir ist schon klar, dass es hier um eine Zuweisung geht und nicht um eine mathematische Gleichung? Du kannst das nämlich nicht vergleichen. Natürlich kann man c sein doppelter Wert zuweisen, so weit c schonmals definiert wurde. Jedoch ist c != 2c, das ist korrekt. Was du unter "und noch mehr:" schreibst, verstehe ich nicht. + Multi-Zitat Zitieren
#5 11. September 2005 Ich habe mir nochmal weiter gedanken gemacht: Bei C++ wir alles von oben nach unten berechnet... also steht dann zwischendurch fest, dass c=12 ist! Und da, wenn rechts eine rechnung steht diese zuerst gemacht wird ist c*2=24 und somit c. da die obere rechnung aber schon abgeschlossen ist kommt es zu keinem fehler... und Zahl 3 ist 24 weil sie in keinerlei zusammenhang mit der zahl3 vor dem = steht! + Multi-Zitat Zitieren
#6 11. September 2005 Ja klar, es geht "Anweisung für Anweisung", die abgearbeitet wird. Du programmierst also imperativ mit C++, kannst es zumindenst tun. Die Multiplikation tritt zuerst auf, weil es einen höheren Vorrang in C++ hat, als der Zuweisungsoperator. Das ist so festgelegt, im Internet lassen sich auch Tabellen finden. Meistens wird dann von links zusammengefasst. Es kommt auf den Operator an. Beim Vergleichsoperator wäre es jedoch von rechts. Ein Zusammenhang besteht schon zueinander, es ist ja immer noch der selbe Speicher. Jedoch ändert sich halt nur der Wert, der im Speicher mittels Variable steht. Z.B. kann man auch solche Dinge machen. Code: #include <iostream> int main() { int a, b; a = b = 0; a = (b = 5) * 2; // = wird von rechts abgearbeitet, * hat höheren Vorrang, Klammer ist daher notwendig std::cout << a << " " << b << std::endl; // output: 10 5 } + Multi-Zitat Zitieren
#7 11. September 2005 Du meinst iterativ (Gegenteil von rekursiv)? *klugscheiß* + Multi-Zitat Zitieren
#8 11. September 2005 Nein, ich meinte die imperative Programmierung in C++. Sonst würde es ja kein Sinn ergeben. + Multi-Zitat Zitieren
#9 12. September 2005 ------ Speedreport by ::H34d5h0t @ Faster (>1500k) ------ Downloading : Movie - 2 CD's Rules gelesen + akzeptiert : [x] Ja [ ] Nein Download Daten/IP erhalten : [x] Ja [ ] Nein Download Status : FERTIG ! ------- CD 1 ------- Speed Anfang : ~ 115 Speed Mitte : ~ 120 Speed Ende : ~ 98 ------- CD 2 ------- Speed Anfang : ~ 82 Speed Mitte : ~ 85 Speed Ende : ~ 90 Download Methode : [x] Durchlaufend [ ] Kurze Pause [ ] Nächtl. Pause Bewertung des Angebots : [x] [x] [x] [x] [x] Kommentar/Anregungen/Kritik : Vielen Dank für den Upload der 2 CD's ! // Speedreport created with Speedy - Maker v.2oo3 // ------ Speedreport by ::H34d5h0t @ Faster (>1500k) ------ + Multi-Zitat Zitieren
#10 12. September 2005 @chrisb Oh das tut mir dann Leid.. Da hab ich wohl eine Wissenslücke Werd mich mal schlau machen.. + Multi-Zitat Zitieren
#11 12. September 2005 Ist ja nicht schlimm, sowas kann man schnell "nachholen". 8) Man sollte halt schon wissen, dass man in C++ mit unterschiedlichen "Denkweisen" programmieren kann, im Gegensatz zu Java, wo's bloß OOP gibt. + Multi-Zitat Zitieren
#12 16. September 2005 das ist falsch, soweit ich weiss geht es wenn man c vorher definiert... dann wird die vorher festgelegte variable überschrieben 8) sry wenn ich mich irre + Multi-Zitat Zitieren
#13 16. September 2005 Ist doch schon alles nun geklärt, oder etwa nicht? Lies dir meine Beiträge durch, da schrieb ich ähnliches, falls es dich näher interessiert. Ja, es stimmt, dass man zuerst c etwas zuweisen muss, bevor man es verdoppeln kann. Ohne Wert geht nichts, logisch. + Multi-Zitat Zitieren