Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Frage zu Post- und Preincrement (https://www.delphipraxis.net/105318-%5Bc-%5D-frage-zu-post-und-preincrement.html)

Newbie44 19. Dez 2007 18:53


[C++] Frage zu Post- und Preincrement
 
Hallo,

ich hab diese Beispiele neulich gefunden blicke aber nicht so ganz durch was diese genau machen.

Code:
a)   i=1;i = i+ ++i ; cout<<i<<endl;   //4
b)   i=1;i = i++ +i;  cout<<i<<endl;    //3
c)   i=1;i = i+ i++ ; cout<<i<<endl;   //3
d)   i=1;i = ++i + ++i;cout<<i<<endl;    //6
e)   i=1;i = ++i + i++;cout<<i<<endl;   //5
f)   i=1;i = i+++ ++i; cout<<i<<endl;    //5
g)   i=1;i += i+ ++i;  cout<<i<<endl;   //6
h)   i=1;i += i+++ i;  cout<<i<<endl;    //4
i)   i=1;i += ++i+ ++i; cout<<i<<endl;   //9
j)   i=1;i += ++i+ i++; cout<<i<<endl;    //7
k)   i=1;i += i+++ ++i; cout<<i<<endl;   //7
l)   i=1;i += i+++ i++; cout<<i<<endl;    //5
m)   i=1;i += i++ **j ; cout<<i<<endl;   //3
n)   i=1;i += ++i**j ; cout<<i<<endl;    //6
o)   i=1;i*= ++*j **j; cout<<i<<endl;    //8
p)   char x='d'+'A'-'a';cout<<x<<endl;   //D
in den kommentar stehen die ergebnisse.

das mit dem preincrement und einmal postincrement ist mir etwas rätselhaft.

könnte mir das bitte noch jemand erklären?

vielen dank im voraus

Die Muhkuh 19. Dez 2007 18:55

Re: [C++] Frage zu Post- und Preincrement
 
Machen wir es etwas einfacher:

Code:
int Zahl1 = 5;
int Zahl2;

Zahl2 = ++Zahl1;
// -> Zahl2 = 6;
// -> Zahl1 = 6;

Zahl1 = 5;

Zahl2 = Zahl1++;
// -> Zahl2 = 5;
// -> Zahl2 = 6;
Beim Preinkrement wird zuerst die Zahl erhöht und dann zugewiesen, beim Postinkrement wird die Zahl zuerst zugewiesen und dann erhöht.

DeddyH 19. Dez 2007 18:58

Re: [C++] Frage zu Post- und Preincrement
 
Jepp, das kann man auch wunderbar missbrauchen (da gab es doch mal einen Wettbewerb, wer den kürzesten unleserlichen Code schreiben kann).

Die Muhkuh 19. Dez 2007 19:00

Re: [C++] Frage zu Post- und Preincrement
 
Japp, man muss ja schon bei den Beispielen von Sebastian genau schauen (ich zumindest), damit man es richtig macht. :mrgreen:

DeddyH 19. Dez 2007 19:02

Re: [C++] Frage zu Post- und Preincrement
 
Ich hatte vor 4 Jahren mal einen 4-wöchigen Crashkurs in C, heute würde ich wohl komplett verzweifeln.

Newbie44 19. Dez 2007 19:03

Re: [C++] Frage zu Post- und Preincrement
 
ok dann nehmen wir mal das erste beispiel von A)

also am anfang ist i = 1. du hast ja gesagt das preincrement kommt erst, also heißt das ja i ist dann 2, und dann nochmal i dazuzählen das würde 4 ergeben.

hab ich das richtig verstanden?

wenn ich also solche anweisungen habe:

Code:
int i = 5
i = i+ ++i + i++
dann kommt immer zuerst das preinkrement also erst 5 + 1 wegen den ++i danach kommt i nochmal dazu also 12 und dann noch um eines erweitern also 13.

richtig so?

DeddyH 19. Dez 2007 19:06

Re: [C++] Frage zu Post- und Preincrement
 
Müssten das nicht 18 sein? 5 + 6 + 6 + 1

Newbie44 19. Dez 2007 19:09

Re: [C++] Frage zu Post- und Preincrement
 
oh heißt das also das das postincrement nach allen berechnungen kommt? also wenn ich schreibe:

Code:
int i = 4;
i = i+ i++;
das würde dann ja heißen 10 + 1 ?

DeddyH 19. Dez 2007 19:11

Re: [C++] Frage zu Post- und Preincrement
 
Ich komme da jetzt auf 9 :lol: . Das liegt aber daran, dass das Postincrement hier greift, da Du es ja derselben Variablen zuweist.

Die Muhkuh 19. Dez 2007 19:13

Re: [C++] Frage zu Post- und Preincrement
 
Ich würde auch 9 sagen.

Newbie44 19. Dez 2007 19:14

Re: [C++] Frage zu Post- und Preincrement
 
oh die 4 sollte eigentlich ne 5 sein, sorry dafür aber ja stimmt, also erst immer die berechnungen durchführen dann postinkrement, und als allererstes immer preinkrement, vor allen berechnungen also, ja?

Die Muhkuh 19. Dez 2007 19:15

Re: [C++] Frage zu Post- und Preincrement
 
ok, es kommt 8 raus :mrgreen:

Code:
public void init() {
    int i = 4;
    i = i + i++;
    System.out.println(i); // -> i = 8
  }
Das ist zwar in Java, aber wird in C auch so sein.

Mit i = 5 kommt 10 raus.

[edit] Ist ja eigentlich auch "logisch":

Code:
i = i + i++;
i = 4 + 4++;
i = 8;
Das heißt, es wird 4 + 4 gerechnet, danach i um 1 erhöht und dann das Ergebnis (4+4) i zugewiesen. :gruebel:

Newbie44 19. Dez 2007 19:18

Re: [C++] Frage zu Post- und Preincrement
 
also in c++ kommt dabei 9 raus hab es gerade probiert,

aber nochmal zu den aufgaben am anfang, die i hat es ganz schön in sich finde ich, da blicke ich sehr schwer durch wie das gehen soll

Code:
    int i = 4;
    i = i + i++;
    cout<<i;

Die Muhkuh 19. Dez 2007 19:20

Re: [C++] Frage zu Post- und Preincrement
 
Das heißt, dass

Code:
i = i + i++;
in C++ anders als in Java berechnet wird?!

DeddyH 19. Dez 2007 19:23

Re: [C++] Frage zu Post- und Preincrement
 
Dröseln wir das mal auf:
Code:
int i = 4;
i = i + i++;
So, also ergibt sich:
Code:
int i = 4;
i = i + i;
i++; //das Postincrement nicht vergessen
[edit]@Manuel: Ich habe hier leider kein Java mehr auf der Kiste (auch wieder Crashkurs :mrgreen: ), sonst könnte ich mal nachsehen. [/edit]

Newbie44 19. Dez 2007 19:24

Re: [C++] Frage zu Post- und Preincrement
 
Liste der Anhänge anzeigen (Anzahl: 1)
sieht zumindest so aus, das programm mal im anhang kompiliert

Die Muhkuh 19. Dez 2007 19:25

Re: [C++] Frage zu Post- und Preincrement
 
Ja, das ist soweit korrekt. Die Frage ist nur, warum berechnet Java das anders?

@ Deflef, ich tippe es nebenher in Java ein ;-)

Newbie44 19. Dez 2007 19:29

Re: [C++] Frage zu Post- und Preincrement
 
ok wenn man das ganze zerlegen kann, dann zerlege doch nochmal aufgabe i, die ist mir etwas ein rätsel wie das system dort funktioniert.

Die Muhkuh 19. Dez 2007 19:31

Re: [C++] Frage zu Post- und Preincrement
 
Würd ich ja gerne machen, nur Java spuckt mir 6 aus und C++ spuckt mir, wie im Beispiel, 9 aus.

DeddyH 19. Dez 2007 19:40

Re: [C++] Frage zu Post- und Preincrement
 
Hatte ich eben was von Verzweiflung gesagt? :mrgreen:

Khabarakh 19. Dez 2007 19:44

Re: [C++] Frage zu Post- und Preincrement
 
Zitat:

Zitat von Die Muhkuh
in C++ anders als in Java berechnet wird?!

Ganz einfach: In modernen, von vornherein durchdachten Sprachen wie C# und Java ist das Verhalten festgelegt. In C++ nicht.
Es macht keinen Sinn, in C++ darüber zu diskutieren oder gar daran zu denken, solch einen Code zu benutzen, da der Standard sich darüber ausschweigt und das Ganze zum russischen Roulette mutiert.
http://weblogs.asp.net/kennykerr/arc...d-C_2300_.aspx

Die Aufgaben am Anfang lassen sich demnach in einem einzigen Satz lösen: "Finger weg!" :stupid:

DeddyH 19. Dez 2007 19:47

Re: [C++] Frage zu Post- und Preincrement
 
Sehe ich auch so, ich muss ganz wild hin und her springen, um 9 herauszubekommen, das kann ja nicht Sinn der Sache sein.

Die Muhkuh 19. Dez 2007 19:50

Re: [C++] Frage zu Post- und Preincrement
 
Nunja, wenn man in C++ die Aufgabe aufspaltet:

Code:
++i // i =2
++i // i =3
i = i + i + i; // i = 3 + 3 + 3
Es ist schon "logisch", was passiert:

Code:
i = i + ++i + ++i;
Zuerst zwei mal inkrementieren (i = 3), dann 3 + 3 + 3 rechnen.

Newbie44 19. Dez 2007 20:00

Re: [C++] Frage zu Post- und Preincrement
 
ok wenn man es so zerlegt dann müsste j) ja auch so ähnlich gehen:
wenn man es aber so zerlegen möchte kommt man fast immer auf 5, irgendwie blick ich jetzt gar nicht mehr durch, wenn ich die j löse dann kommt ja zuerst ++i also dann ist i = 2, dann 2 + 2 + 1

mhmm echt seltsam

Die Muhkuh 19. Dez 2007 20:02

Re: [C++] Frage zu Post- und Preincrement
 
Nein, stimmt schon:

Code:
// Ausgangsberechnung:
i += ++i + ++i;

// Erstmal das += umstellen
i = i + ++i + ++i;

// jetzt i zweimal inkrementieren (dann ist i = 3)
i = i + i + i;
i = 3 + 3 + 3;
i = 9
sorry, das ist Aufgabe i...

Die Muhkuh 19. Dez 2007 20:04

Re: [C++] Frage zu Post- und Preincrement
 
Hier für j:

Code:
// Ausgangrechnung
i += ++i+ i++;

// Wieder das += umsetzen
i = i + ++i + i++;

// i inkrementieren (i = 2 jetzt)
i = i + i + i++;
// Postinkrement bleibt noch
i = 2 + 2 + 2++;
i = 6++;
i = 7;

Newbie44 19. Dez 2007 20:08

Re: [C++] Frage zu Post- und Preincrement
 
Achso ist das gemeint ok das ergibt sinn,

aber das mit den zeigern wird schwerer, es stand noch dsa dabei:
Code:
*j=&i;
i += ++i**j ;
Heißt das dann

nach dem ersten inkrement ist i = 2

also i = 2 + 2 + 2 (da ja j auf i zeigt)

oder ist das zu einfach gedacht?

das finde ich noch viel schwerer irgendwie, man kann diese aufgaben schon richtig fies stellen

Die Muhkuh 19. Dez 2007 20:14

Re: [C++] Frage zu Post- und Preincrement
 
Hmm, kann ich dir jetzt nicht helfen, würde es aber mal so tippen:

Code:
*j=&i;
i += ++i**j;

i = i + ++i **j;
i = 2 + 2 * 2;
i = 6
Was kommt den raus?

Khabarakh 19. Dez 2007 20:48

Re: [C++] Frage zu Post- und Preincrement
 
Zitat:

Zitat von Die Muhkuh
Was kommt den raus?

Schreibt der Standard doch eindeutig: gar nichts. Das Resultat ist nicht definiert. Das einzige, was du gerade untersuchst, sind die Wirren deines lokalen Compilers, jede andere Implementation hat das Recht, deine Berechnungen über den Haufen zu werfen. Von daher: sinnlos, auch nur darüber nachzudenken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz