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


Anmelden zum Antworten