mathematisches (Anfänger?)Problem mit C

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
-ulk

mathematisches (Anfänger?)Problem mit C

Beitrag von -ulk » So Nov 07, 2010 3:05 pm

Nachdem die Registrierung offenbar nicht funktioniert - ich bekomme nur Fehlermeldungen von wegen diese Domain wird von Spam-Bots malträriert :x - stelle ich meine kurze Frage eben hier... Ich hoffe das macht keine Umstände. :roll:

Ich bin absoluter C-Neuling und komme bei einer Übung zu Variablendeklaration usw einfach nicht weiter:

Code: Alles auswählen

int a=0, b=2, c=3, d=4;
a = ++b * d++ * ++c * (-1);           //Lösung: a=-48
Wenn ich das Programm compile und ausführen lasse spuckt es mir -48 aus.
Wenn ich es von Hand oder mit Taschenrechner rechne kommt aber -60 raus...

(2+1) * (4+1) * (3+1) * (-1) = (-60)

Habe das jetzt mehrfach durchgererchnet, trotzdem widersprechen sich Schulmathematik und Rechenmaschine :|
Setze ich die Klammern falsch oder was ist da los? (2*4*3*-1+3) gibt ja auch nicht (-48)...

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: mathematisches (Anfänger?)Problem mit C

Beitrag von +Fuss+ » So Nov 07, 2010 3:40 pm

-ulk hat geschrieben:Nachdem die Registrierung offenbar nicht funktioniert - ich bekomme nur Fehlermeldungen von wegen diese Domain wird von Spam-Bots malträriert :x - stelle ich meine kurze Frage eben hier... Ich hoffe das macht keine Umstände. :roll:
Xin wird sich bestimmt sofort darum kümmern, sonst dem einfach mal ne Mail schreiben...

Zu deinem Problem:

Code: Alles auswählen

* d++
Hier wird erst mit dem ersten Wert von d (4) gerechnet und nach dem multiplizieren d auf 5 gesetzt, wenn die '++' vor dem d wären, dann würde mit d = 5 multipliziert und es würde -60 rauskommen, bei d = 4 kommt allerdings -48 raus:

(2+1) * (4) * (3+1) * (-1) = (-48)

MfG Fuss

EDIT: Link zum Wiki-Artikel
http://proggen.org/doku.php?id=c:expr:incdec

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

Re: mathematisches (Anfänger?)Problem mit C

Beitrag von Xin » So Nov 07, 2010 3:54 pm

-ulk hat geschrieben:Nachdem die Registrierung offenbar nicht funktioniert - ich bekomme nur Fehlermeldungen von wegen diese Domain wird von Spam-Bots malträriert :x
Ich vermute Du hast eine yahoo oder gmail-Adresse, die wir aufgrund viele Spambots, die diese Domains benutzen, komplett abschalten müssen.

Wenn Du gerne dauerhaft am Geschehen teilnehmen möchtest, kann ich Dir Deine spezielle Adresse jedoch freischalten. Maile mir dafür bitte einfach an MeinUsernameHier at DieseDomain punkt org.
Ich würde diese Frage dann gerne auch ins C/C++ Board verschieben, denn hier gehört sie eigentlich nicht rein.
-ulk hat geschrieben: - stelle ich meine kurze Frage eben hier... Ich hoffe das macht keine Umstände. :roll:

Ich bin absoluter C-Neuling und komme bei einer Übung zu Variablendeklaration usw einfach nicht weiter:

Code: Alles auswählen

int a=0, b=2, c=3, d=4;
a = ++b * d++ * ++c * (-1);           //Lösung: a=-48
Wenn ich das Programm compile und ausführen lasse spuckt es mir -48 aus.
Wenn ich es von Hand oder mit Taschenrechner rechne kommt aber -60 raus...

(2+1) * (4+1) * (3+1) * (-1) = (-60)

Habe das jetzt mehrfach durchgererchnet, trotzdem widersprechen sich Schulmathematik und Rechenmaschine :|
Setze ich die Klammern falsch oder was ist da los? (2*4*3*-1+3) gibt ja auch nicht (-48)...
Okay, rechnen wir mal:
Da steht (2+1) * (4) * (3+1) * (-1)

3 * 4 * 4 * -1 macht bei mir -48.

Es bleibt bei 'd' bei 4, weil es d++ ist - erst rechnen, dann erhöhen.

Es ist ein Unterschied, ob Du ++x schreibst (erst erhöhen, dann verrechnen) oder x++ (erst verrechnen, am Schluss erhöhen).
Und vorsicht: Wenn Du eine Variable in einem Ausdruck mehrfach mit ++ oder -- veränderst, ist das Ergebnis undefiniert.
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.

-ulk

Re: mathematisches (Anfänger?)Problem mit C

Beitrag von -ulk » So Nov 07, 2010 5:28 pm

Alles klar, danke euch ;)


Xin, du hast Post. :)

Antworten