Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Schreibe ein Programm, das "2+2=5" ausgibt!
Dirk Offline
Software Archäologe

Beiträge: 12.854
Registriert seit: Jul 2008
Beitrag #11
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
Mathematika soll sich doch verrechnen, wozu also selber was verbocken?

28.10.2014 20:46
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DosAmp Offline
είσαι καλαμάρι τώρα

Beiträge: 11.953
Registriert seit: Jul 2008
Beitrag #12
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
Dieses Programm gibt alles mögliche außer dem richtigen Ergebnis aus.
Code:
#include <stdio.h>

int main(void) {

  int numbers[6];
  numbers[0] = 0;
  int i = 0;

  while (i < 6) {
    /* um eins erhöhen und in den Nachfolger schreiben */
    numbers[++i] = numbers[i] + 1;
  }

  printf("2 + 2 = %d\n", numbers[2 + 2]);

  return 0;
}

ты ребенок сейчас
28.10.2014 21:24
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.813
Registriert seit: Jul 2008
Beitrag #13
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
(28.10.2014 21:24)DosAmp schrieb:  (20:35:21) DosAmp: (ich hab ehrlich gerade keinen plan, woran es liegt, dass mein c-programm uninitialisierten speicher liest und verarbeitet)
Das Problem hier ist, dass die Evaluationsreihenfolge von "numbers[++i] = numbers[i]" nicht definiert ist. Der Assignment-Operator ( = ) in C ist kein Sequence-Point (+ übrigens auch nicht), das heisst der C-Compiler darf selber entschieden, welchen Ausdruck er wann evaluiert. Gleiches Phänomen wie thosch97 sein zweites Beispiel.

Es wird also von deinem Compiler folgendes ausgeführt. Andere Compiler können das anders interpretieren.
Code:
while (i < 6) {
    /* um eins erhöhen und in den Nachfolger schreiben */
    int tmp = ++i;
    numbers[tmp] = numbers[i] + 1;
  }
Nachtrag: Ausserdem macht das hier nen Zugriff auf numbers[6], also ausserhalb des Arrays, was auch böse ist.
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2014 22:14 von gandro.)
28.10.2014 21:41
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.813
Registriert seit: Jul 2008
Beitrag #14
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
Wenn wir schon bei obskurem C sind (gibt nicht 5, aber auch nicht 4).

Code:
#include <stdio.h>

int main() {
    printf("2 + 2 = %d\n", (2,0 + 2,0));
    return 0;
}

Nachtrag: %f → %d
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2014 22:40 von gandro.)
28.10.2014 22:29
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #15
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
2,0 statt 2.0 klingt ja schon beim lesen nach lustigen Fehlern
28.10.2014 22:30
Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.813
Registriert seit: Jul 2008
Beitrag #16
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
(28.10.2014 22:30)mrshadowtux schrieb:  2,0 statt 2.0 klingt ja schon beim lesen nach lustigen Fehlern
Ist ein komplett standardkonformes C-Programm :P
28.10.2014 22:31
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 12.022
Registriert seit: Jul 2008
Beitrag #17
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
Der Komma-Operator ist halt einer der hirnverbrannteren Teile des C-Standards.
28.10.2014 22:33
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #18
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
Wie wirkt sich in dem Fall denn son , aus?

Öh..
[Bild: f7edb8834a82781787fb9fceb7ec91dd.png]
28.10.2014 22:33
Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.813
Registriert seit: Jul 2008
Beitrag #19
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
(28.10.2014 22:33)mrshadowtux schrieb:  Wie wirkt sich in dem Fall denn son , aus?
Ein Ausdruck "x,y" berechnet zuerst x, verwirft das Resultat; berechnet dann y und gibt das zurück.

printf("%d\n", (1+1, 2+2, 3+3)) berechnet zuerst 1+1, dann 2+2, dann 3+3 und übergibt dann 6 (=3+3) dem printf.

(2,0 + 2,0) berechnet also zuerst 2, dann 2+0, dann 0 und verwendet 0 für die Ausgabe.

Nachtrag. Zu den Warnungen, stimmt, doch nicht ganz standard-konform weil ich einen Integer als Float ausgebe.
Korrekterweise müsste man printf("%f", (float) (2,0 + 2,0)) oder printf("%d", (2,0 + 2,0)) schreiben. Da 0 aber auch 0.0 in Float ist, funktioniert es.
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2014 22:39 von gandro.)
28.10.2014 22:37
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DosAmp Offline
είσαι καλαμάρι τώρα

Beiträge: 11.953
Registriert seit: Jul 2008
Beitrag #20
RE: Schreibe ein Programm, das "2+2=5" ausgibt!
(28.10.2014 22:33)mrshadowtux schrieb:  Wie wirkt sich in dem Fall denn son , aus?
  1. "2" wird evaluiert und weggeschmissen.
  2. "0 + 2" wird evaluiert und weggeschmissen.
  3. "0" wird evaluiert und zurückgegeben. Zufälligerweise passt ein 32-Bit-Integer von der Größe her zu einem Float einfacher Genauigkeit (bzw. haben 0 und 0.0f dieselbe Repräsentation), weswegen printf keinen groben Unfug baut.

ты ребенок сейчас
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2014 22:39 von DosAmp.)
28.10.2014 22:37
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste