Kleines Problem
-
Hallo,
lerne C erst seit wenigen Tagen, daher habe ich hierzu mal eine Frage:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main () { srand (time(NULL)); int zufallszahl = rand ()%100; printf("\nZufallszahl: %i\n",zufallszahl); printf("\nWurzel der Zufallszahl: %f,-%f\n",sqrt(zufallszahl),sqrt(zufallszahl)); if (sqrt(zufallszahl) % 2 == 0) { printf("Die Wurzel ist teilbar durch 2.\n"); } else if (sqrt(zufallszahl) % 3 == 0) { printf("Die Wurzel ist teilbar durch 3.\n"); } else { printf("Die Wurzel ist nicht durch 2 oder 3 teilbar.\n"); } return 0; }
Wenn ich den Code kompilieren möchte, bekomme ich in der if und else if Zeile einen Fehler angezeigt: invalid operands to binary % (have 'double' and 'int')
Wie kann ich die vorher errechnete Quadratwurzel so übernehmen, dass dieser Fehler nicht auftritt?
MfG
-
Hi,
nachdem der Modulo-Operator nur fuer ganze Zahlen definiert ist, musst du die double Zahl casten:
if ( ((int) sqrt(zufallszahl)) % 2 == 0) {
Das (int) schneidet von der nachfolgenden Zahl, alle Stellen hinter dem Komma weg (ist also kein echtes Runden). Willste du runden, musst du vorher noch 0.5 addieren.
Mfg
DerBaer
-
Danke sehr, kannst du mir vllt. noch sagen an welcher Stelle ich die 0.5 hinzuaddieren müsste?
-
-Maniax- schrieb:
Danke sehr, kannst du mir vllt. noch sagen an welcher Stelle ich die 0.5 hinzuaddieren müsste?
Nachdem du die Wurzel berechnet hast, und bevor du nach int castest:
if ( ((int) (sqrt(zufallszahl) + 0.5)) % 2 == 0) {
um das ganze etwas lesbarer zu machen:
double wurzel = sqrt(zufallszahl); double increasedWurzel = wurzel + 0.5; int gerundet = (int) increasedWurzel; if (gerundet % 2 == 0) {
-
Okay, habs hinbekommen, danke!
MfG
-
Du kannst dir auch mal die
fmod()
Funktion ansehen: http://www.cplusplus.com/reference/clibrary/cmath/fmod/Die Berechnung erfolgt da mit Fließkommazahlen: http://www.c-plusplus.net/forum/294677