Δημοσιεύτηκε: 17 Ιουν 2011, 00:51
Του 'ριξα μόλις μια ματιά, τη λύση για τα "απομεινάρια" στην έχω ήδη αναλύσει σε αυτό εδώ το post: viewtopic.php?p=192059#p192059 (και η υλοποίησή του είναι στον κώδικά μου
)
Τώρα σχετικά με το κρασάρισμα στις διαιρέσεις, εγώ την είχα κάνει την... λαλακία! Αντικατέστησε το case της διαίρεσης στον κώδικά μου με το παρακάτω:
Το πρόβλημα ήταν τα castings που έκανα από double σε int στο modulo (υπόλοιπο). Εφόσον έχουμε να κάνουμε με doubles το σωστό είναι να χρησιμοποιήσουμε την στάνταρ συνάρτηση της <math.h>:
ΥΓ. Διόρθωσέ το αν θες και στον κώδικά μου στο 1ο post
Τώρα σχετικά με το κρασάρισμα στις διαιρέσεις, εγώ την είχα κάνει την... λαλακία! Αντικατέστησε το case της διαίρεσης στον κώδικά μου με το παρακάτω:
- Κώδικας: Επιλογή όλων
case '4': // 4. DIVISION
case '/':
{ double intpart;
puts("\nDivision\n--------");
num_askuser("Divident: ", &x, MAXSLEN_LINEBUF);
do { // demand non-zero value
num_askuser("Divisor : ", &y, MAXSLEN_LINEBUF);
if ( y == 0.0 )
puts("*** error: divisor cannot be 0");
} while (y == 0.0);
printf ("--------\nRESULT: %g / %g = %g (quotient = %g, remainder = %g)\n",
x, y, x/y, trunc(x/y), y * modf(x/y, &intpart) );
}
break;
Το πρόβλημα ήταν τα castings που έκανα από double σε int στο modulo (υπόλοιπο). Εφόσον έχουμε να κάνουμε με doubles το σωστό είναι να χρησιμοποιήσουμε την στάνταρ συνάρτηση της <math.h>:
- Κώδικας: Επιλογή όλων
double modf ( double x, double * intpart );
ΥΓ. Διόρθωσέ το αν θες και στον κώδικά μου στο 1ο post
UnKnown96 έγραψε:
[snip]
Όσο για τα υπόλοιπα σου 'ρχετε καμία λύση;