Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Informatik in der Schule » Wo liegt der Fehler???? » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 4 Beiträge
CombatWombat

NixJava hat schon recht. Das liegt an der nicht exakten Darstellung.

Zwei Tipps für die Zukunft.

1. Bei der Fehlersuche debuggen, dabei ist sogenanntes printf debugging das einfachste.
Hierbei gibst du einfach bei jedem Schritt die Werte über printf aus, in diesem fall dann einfach mit printf("%f", restX) und guckst was bei rauskommt. Dabei siehst du, dass auch wenn du 0 erwarten würdest manchmal 0.00000001 oder ähnliches als Ergebnis herauskommt. Die andere Variante ist ein Debugger, bei C der GDB.

2. Du wiederholst hier 3x die gleichen Schritte, das Programm wäre schöner und besser lesbar, wenn du ne Schleife nutzen würdest.

Zur Lösung deines Problems:

#include <stdio.h>
int main(){
double k1, k2, summe, rest, rest1, rest2, rest3, rest4;
printf("Bitte geben Sie eine Zahl ein: ");
scanf("%lf", &k1);
printf("Bitte geben Sie noch eine Zahl ein: ");
scanf("%lf", &k2);
summe = k1 + k2;
rest = summe - (int)summe;

if(rest <= 0.0000001){
printf("Die Summe ist %.0f\n", summe);
}else{
rest1 = rest*10;
rest2 = rest1 - (int)rest1;
if(rest2 <= 0.0000001){
printf("Die Summe ist %.1f\n", summe);
}else{
rest3 = rest2 * 10;
rest4 = rest3 - (int)rest3;
if(rest4 <= 0.0000001){
printf("Die Summe ist %.2f\n", summe);
}else{
printf("Die Summe ist %.3f\n", summe);
}
}
}
return 0;
}
Butterblume

Ich soll nur float, double oder int benutzen.

Das Problem liegt an einem Fehler im Algorithmus...ich kann ihn nur nicht finden unglücklich
NixJava

Das scheint ein Problem der Floating-Point-Arithmetik zu sein. Die Gleitkommaeinheit (FPU) kann manche Gleitkommazahlen (wie beispielsweise 0.1) nicht exakt darstellen. Man glaubt, eine Variable f enthalte nach einigen Rechnungen den exakten Wert 1.0, aber in Wirklichkeit ist es 0.999irgendwas. Somit ist dann auch (int)f = 0 und nicht 1.

Zitat:
Wenn es eine Nachkommastelle gibt, dann soll die Summe eben mit einer Nachkommastelle ausgegeben werden usw...bis zur 3. Nachkommastelle! Alle sonstigen Zahlen dann eben nur noch mit 3 Nachkommastellen.

Schau dir mal den Platzhalter %g an.
Butterblume Wo liegt der Fehler????

Ich habe ein Programm geschrieben in C.

Es soll zwei (vorher vom Nutzer eingegebene) Kommazahlen addieren.

Der Witz bzw. das Problem ist, wenn die Summe eine ganze Zahl ist, soll es "ohne"

Nachkommastellen ausgegeben werden, zB 1.23 + 3.77 = 5.

Wenn es eine Nachkommastelle gibt, dann soll die Summe eben mit einer Nachkommastelle ausgegeben werden usw...bis zur 3. Nachkommastelle! Alle sonstigen Zahlen dann eben nur noch mit 3 Nachkommastellen.

Das Programm sieht so aus:

#include <stdio.h>
int main(){
double k1, k2, summe, rest, rest1, rest2, rest3, rest4;
printf(Bitte geben Sie eine Zahl ein: ");
scanf("%lf", &k1);
printf(Bitte geben Sie noch eine Zahl ein: ");
scanf("%lf", &k2);
summe = k1 + k2;
rest = summe - (int)summe;

if(rest ==0){
printf("Die Summe ist %.0f\n", summe);
}else{
rest1 = rest*10;
rest2 = rest1 - (int)rest1;
if(rest2 ==0){
printf("Die Summe ist %.1f\n", summe);
}else{
rest3 = rest2 * 10;
rest4 = rest3 - (int)rest3;
if(rest4 ==0){
printf("Die Summe ist %.2f\n", summe);
}else{
printf("Die Summe ist %.3f\n", summe);
}
}
}
return 0;
}

Aus einem mir nicht erkennbaren Grund gibt das Programm immer - egal was ich eingebe - eine Zahl mit 3 Nachkommastellen aus!

ich bin verzweifelt unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich unglücklich