Mathematisches Problem

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Spend, 11. September 2005 .

Schlagworte:
  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....)
     
  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?
     
  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!!!
     
  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.
     
  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!
     
  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
    }
    
     
  7. 11. September 2005
    Du meinst iterativ (Gegenteil von rekursiv)? *klugscheiß*
     
  8. 11. September 2005
    Nein, ich meinte die imperative Programmierung in C++. Sonst würde es ja kein Sinn ergeben.
     
  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) ------
     
  10. 12. September 2005
    @chrisb Oh das tut mir dann Leid.. Da hab ich wohl eine Wissenslücke
    Werd mich mal schlau machen..
     
  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.
     
  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
     
  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.
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.