Senior Member
Täglich verrückt!
Registriert seit: 29.01.03
Style: Roter Spinat
Alter: 38
Geschlecht:
♂
Beiträge: 11.522
IRC Zeilen: 181310
Quizrunden gewonnen: 76
☆
☆
☆
☆
☆
★
★
★
★
★
★
So, hier gib es ja wahrscheinlich sehr viele C Programmierer *hust*, darum hier
mal ein lustiges Rätsel. Heute Morgen meldete sich ein Kollege bei mir mit
einem simplen C Programm, was offensichtlich falsch rechnet.
Die Lösung ist recht einfach, aber im ersten Moment guckt man mal doof. Wer
nicht so fit in Mathe ist und den Fehler nicht sofort findet: Die 5er Reihe ist falsch.
(Evtl. tritt das Problem auch nicht mit allen Compilern auf, in dem Fall war es gcc)
Viel Spaß. Wer das Problem löst kriegt nen neuen Usertitel
mal ein lustiges Rätsel. Heute Morgen meldete sich ein Kollege bei mir mit
einem simplen C Programm, was offensichtlich falsch rechnet.
Code:
#include <stdio.h> //#include <math.h> int main() { int iBas = 0, iPo = 0; int erg; do { iPo=1; iBas = iBas + 1; printf("\n%d: ", iBas); do { erg = pow(iBas,iPo); printf(" %d (%d^%d)", erg,iBas,iPo); //printf(" %d ",erg); iPo = iPo + 1; } while( iPo != 4 ); } while( iBas != 7 ); erg=pow(5,2); //printf("\n\n%d ", iPo); printf("\n\n%d ", erg); return 0; }
nicht so fit in Mathe ist und den Fehler nicht sofort findet: Die 5er Reihe ist falsch.
(Evtl. tritt das Problem auch nicht mit allen Compilern auf, in dem Fall war es gcc)
Viel Spaß. Wer das Problem löst kriegt nen neuen Usertitel
Big Daddy
Registriert seit: 02.02.03
Style: Zahls Bastelecke
Alter: 37
Geschlecht:
♂
Beiträge: 4.974
IRC Zeilen: 10670
Quizrunden gewonnen: 3
☆
☆
☆
☆
☆
★
★
★
Das liegt an den Castings. pow ist mehrfach überladen. Es gibt aber keine pow Funktion, die zwei Integer übernimmt. Aus dem Grund immer geeignet casten.
Aber hier sieht man mal wie stark der Visual C++ Compiler ist (Joa, ich liebe die M$ IDE ), der hat mich deinen Code erst gar nicht kompilieren lassen
Ach und jetzt verpass mir mal nen neuen Benutzertitel
Aber hier sieht man mal wie stark der Visual C++ Compiler ist (Joa, ich liebe die M$ IDE ), der hat mich deinen Code erst gar nicht kompilieren lassen
Code:
#include <stdio.h> #include <math.h> int main() { int iBas = 0, iPo = 0; int erg; do { iPo=1; iBas = iBas + 1; printf("\n%d: ", iBas); do { erg = (int)pow((double)iBas,(double)iPo); printf(" %d (%d^%d)", erg,iBas,iPo); //printf(" %d ",erg); iPo = iPo + 1; }while( iPo != 4 ); } while( iBas != 7 ); erg=(int)pow((double)5,(double)2); //printf("\n\n%d ", iPo); printf("\n\n%d ", erg); return 0; }
Ach und jetzt verpass mir mal nen neuen Benutzertitel
Senior Member
Täglich verrückt!
Registriert seit: 29.01.03
Style: Roter Spinat
Alter: 38
Geschlecht:
♂
Beiträge: 11.522
IRC Zeilen: 181310
Quizrunden gewonnen: 76
☆
☆
☆
☆
☆
★
★
★
★
★
★
Minus 10 Punkte für Blue. Das ist C und MSVC++ ist kein richtiger C Compiler
Unter gcc löst das ganze das Problem übrigens nicht.
EDIT: So sieht die Ausgabe vom obigen Programm mit gcc aus:
Unter gcc löst das ganze das Problem übrigens nicht.
EDIT: So sieht die Ausgabe vom obigen Programm mit gcc aus:
1: [ 1 ( 1 ^ 1 )][ 1 ( 1 ^ 2 )][ 1 ( 1 ^ 3 )]
2: [ 2 ( 2 ^ 1 )][ 4 ( 2 ^ 2 )][ 8 ( 2 ^ 3 )]
3: [ 3 ( 3 ^ 1 )][ 9 ( 3 ^ 2 )][ 27 ( 3 ^ 3 )]
4: [ 4 ( 4 ^ 1 )][ 16 ( 4 ^ 2 )][ 64 ( 4 ^ 3 )]
5: [ 5 ( 5 ^ 1 )][ 24 ( 5 ^ 2 )][ 124 ( 5 ^ 3 )]
6: [ 6 ( 6 ^ 1 )][ 36 ( 6 ^ 2 )][ 216 ( 6 ^ 3 )]
2: [ 2 ( 2 ^ 1 )][ 4 ( 2 ^ 2 )][ 8 ( 2 ^ 3 )]
3: [ 3 ( 3 ^ 1 )][ 9 ( 3 ^ 2 )][ 27 ( 3 ^ 3 )]
4: [ 4 ( 4 ^ 1 )][ 16 ( 4 ^ 2 )][ 64 ( 4 ^ 3 )]
5: [ 5 ( 5 ^ 1 )][ 24 ( 5 ^ 2 )][ 124 ( 5 ^ 3 )]
6: [ 6 ( 6 ^ 1 )][ 36 ( 6 ^ 2 )][ 216 ( 6 ^ 3 )]
Senior Member
Täglich verrückt!
Registriert seit: 12.05.06
Style: Impact Blue
Alter: 34
Geschlecht:
♂
Beiträge: 2.224
IRC Zeilen: 10557
Quizrunden gewonnen: 5
☆
☆
☆
keine ahnung...kann nur Java und n bissle TurboPascal
Big Daddy
Registriert seit: 02.02.03
Style: Zahls Bastelecke
Alter: 37
Geschlecht:
♂
Beiträge: 4.974
IRC Zeilen: 10670
Quizrunden gewonnen: 3
☆
☆
☆
☆
☆
★
★
★
Zitat von ultimo
⇨
keine ahnung...kann nur Java und n bissle TurboPascal
Zitat von irc
<Zahl>aber ums kurz zu machen
<Zahl>es liegt schon an den datentypen
<Zahl>nur
<blue>hrough ..
* blue hatte recht
<Zahl>es liegt schon an den datentypen
<Zahl>nur
<blue>hrough ..
* blue hatte recht
Registered Users
Registriert seit: 04.09.06
Style: Retro
Alter: 34
Geschlecht:
♂
Beiträge: 1.366
IRC Zeilen: 0
☆
☆
☆
☆
☆
★
Hm, ich hab so garkeine Ahnung von dem was ihr da schreibt aber 5^2 is nich 24 und 5^3 auch nich 124... :-/
Core Member
Täglich verrückt!
Registriert seit: 29.03.02
Style: Roter Spinat
Beiträge: 5.780
IRC Zeilen: 179396
Quizrunden gewonnen: 136
☆
☆
☆
☆
☆
★
★
★
LDP:
/me prepares SilberEisen to be shown on rotten.com
Zitat von .Zahl
[...]mit einem simplen C Programm, was offensichtlich falsch rechnet.[...]
Registered Users
Registriert seit: 04.09.06
Style: Retro
Alter: 34
Geschlecht:
♂
Beiträge: 1.366
IRC Zeilen: 0
☆
☆
☆
☆
☆
★
Hehe, gut ich geh mich vergraben
omg gut ich sollte vielleicht doch wenigstens versuchen mir so Sachen mal durchzulesen bevor ich antworte aber gut....
omg gut ich sollte vielleicht doch wenigstens versuchen mir so Sachen mal durchzulesen bevor ich antworte aber gut....
B.O.F.H.
Wie hast du es übersetzt?
bringt die richtigen Ergebnisse
Blues Code ist irgendwie eigenartig das er aus aus dem pow, was im Prototyp ja ein double ist, ein int machen will, die Eingabewerte aber extra nochmal als double deklariert, strange
Egal ob ich in die cmath (für C++) oder math.h (für C) kucke, es sind immer double wert:
Egal, warum gibt euer Compiler falsche werte aus?
Code:
gcc -lm -o zahl zahl1.c
Code:
1: 1 (1^1) 1 (1^2) 1 (1^3) 2: 2 (2^1) 4 (2^2) 8 (2^3) 3: 3 (3^1) 9 (3^2) 27 (3^3) 4: 4 (4^1) 16 (4^2) 64 (4^3) 5: 5 (5^1) 25 (5^2) 125 (5^3) 6: 6 (6^1) 36 (6^2) 216 (6^3) 7: 7 (7^1) 49 (7^2) 343 (7^3)
Egal ob ich in die cmath (für C++) oder math.h (für C) kucke, es sind immer double wert:
Code:
double pow(double x, double y) __THROW __attribute__((__const__));
Big Daddy
Registriert seit: 02.02.03
Style: Zahls Bastelecke
Alter: 37
Geschlecht:
♂
Beiträge: 4.974
IRC Zeilen: 10670
Quizrunden gewonnen: 3
☆
☆
☆
☆
☆
★
★
★
Zitat von Lord_Pinhead
⇨
Blues Code ist irgendwie eigenartig das er aus aus dem pow, was im Prototyp ja ein double ist, ein int machen will, die Eingabewerte aber extra nochmal als double deklariert, strange
Egal ob ich in die cmath (für C++) oder math.h (für C) kucke, es sind immer double wert:
Egal, warum gibt euer Compiler falsche werte aus?
Egal ob ich in die cmath (für C++) oder math.h (für C) kucke, es sind immer double wert:
Code:
double pow(double x, double y) __THROW __attribute__((__const__));
Nicht eigenartig sondern pingelig
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Forumregeln |
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:37:15 Uhr.