invalid operands of types double and int to binary operator% (Zeile 34)



  • [code]/*  ################################################
    
                SMMrd Klaus Werner
    
    ################################################# */
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    
    {
        double dualzahl=0;
        double array[8];
        int raus=0;
    
        cout<<"Geben Sie bitte die Dualzahl ein (max. 8 Bit gross): \n";
        do{
            cin>>dualzahl;
                if((cin.fail()==false)&&(dualzahl<=11111111)&&(dualzahl>=0))
                {
                    for(int i=0;i<8;i++)
                        {array[i]=0;}
    
                    for(int i=0;i<8;i++)
                        if(dualzahl==((1)||(0)))
                            {
                            array[i]=double(dualzahl%10);
                            dualzahl=dualzahl/10;
                            raus=1;  //Schleifenausgang -  integer "raus" mit 1 deklarieren
                            }
                        else raus=0;
    
                }
    
                else
                     {
                     cout<<"Bitte nur mit 1en und 0en Ihre Dualzahl mit der groesse eines double deklarieren: \n";
                     cin.clear(); //Löschen des Puffers bzw der Eingabe
                     cin.ignore(BUFSIZ, '\n');
                     }
          }while(!(cin.fail()==false) && !(dualzahl<=11111111) && !(dualzahl>=0) && (raus==0));
    
    	return 0;
    
    }
    [/code]
    

    Mein Ziel ist es Dualzahlen in Dezimalzahlen umzuwandeln.

    Leider habe ich da ein kleines Problem...

    Mit dem Modulo-Operator.

    Habt ihr Lösungsvorschläge?

    P.s. Nach der do-while Schleife wird natürlich ein array dürchlaufen, mithilfe einer for-schleife die mit *2 hochzählt, der alle Zahlen zusammen zählt und die Dezimalzahl ausgibt.



  • Den richtigen Code posten: reduziertes compilierbares Beispiel

    Der Modulo operator ist nur auf Ganzzahlen anwendbar (alles andere wäre recht komisch). Warum benutzt du eigentlich doubles?



  • Der Integerwert geht nur bis ca 50.000, wie soll ich denn eine 11Mio. 111 thausend 111 aufnehmen?

    Oder ist da ein Gedankenfehler?



  • Wie währst mit 'nem string ?

    #include <string>
    #include <iostream>
    
    int main()
    {
    	std::string binary_number;
    
    	std::cout << "Please enter a binary number: ";
    	std::cin >> binary_number;
    
    	unsigned long pos = 1;
    	unsigned long decimal_number = 0;
    	bool error = false;
    
    	for( std::string::reverse_iterator i = binary_number.rbegin(); i != binary_number.rend(); ++i, pos = pos * 2 ) {
    
    		if( *i == '1' ) {
    
    			decimal_number += pos;
    
    		} else if ( *i == '0' ) {
    
    			continue;
    
    		} else {
    
    			error = true;
    			std::cerr << "'" << *i << "' is not a binary digit!\n";
    			break;
    		}
    	}
    
    	if( !error ) {
    		std::cout << binary_number << "b = " << decimal_number << "d\n";
    	}
    }
    


  • /*  ################################################
    
                SMMrd Klaus Werner
    
    ################################################# */
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    
    {
        double dualzahl=0;
        double array[8];
        int raus=0;
    
        cout<<"Geben Sie bitte die Dualzahl ein (max. 8 Bit gross): \n";
        do{
            cin>>dualzahl;
                if((cin.fail()==false)&&(dualzahl<=11111111)&&(dualzahl>=0))
                {
                    for(int i=0;i<8;i++)
                        {array[i]=0;}
    
                    for(int i=0;i<8;i++)
                        if(dualzahl==((1)||(0)))
                            {
                            array[i]=double(dualzahl%10);
                            dualzahl=dualzahl/10;
                            raus=1;  //Schleifenausgang -  integer "raus" mit 1 deklarieren
                            }
                        else raus=0;
    
                }
    
                else
                     {
                     cout<<"Bitte nur mit 1en und 0en Ihre Dualzahl mit der groesse eines double deklarieren: \n";
                     cin.clear(); //Löschen des Puffers bzw der Eingabe
                     cin.ignore(BUFSIZ, '\n');
                     }
          }while(!(cin.fail()==false) && !(dualzahl<=11111111) && !(dualzahl>=0) && (raus==0));
    
          double array_ergebnis=0; //Initialisierung
    
          for(int f=0;f<=256;f*2)
            {
                int i=0;
    
                if(f==0)
                {
                    array_ergebnis=array[i];
                    f=+1;
                }
               else
               {
                    array_ergebnis=+array[i];
                    i++;
               }
            }
    
          cout<<"Die Dezimalzahl ist: "; cout<<array_ergebnis;
    
    	return 0;
    
    }
    


  • Ich fang erst mein fernstudium in programmierung an, da bin ich leider noch nicht so fit wie du.

    aber sieht schön kompakt aus der sourcecode.



  • Wieso postest denn den Murks nochmal? Und für C und C++ bitte [cpp] -Tags



  • werkla4 schrieb:

    Der Integerwert geht nur bis ca 50.000, wie soll ich denn eine 11Mio. 111 thausend 111 aufnehmen?

    Oder ist da ein Gedankenfehler?

    Die Größe eines Integers ist Systemabhängig, aber weit mehr als 50k. Double ist eine Gleitkommazahl nach der ANSI/IEEE Std 754-1985-Spezifikation (Kommazahl).

    Edit: Wirf mal einen Blick auf die C++-Typen



  • Cyres schrieb:

    Die Größe eines Integers ist Systemabhängig, aber weit mehr als 50k.

    Der Maximalwert von int ist mindestens 32767.



  • Bashar schrieb:

    Cyres schrieb:

    Die Größe eines Integers ist Systemabhängig, aber weit mehr als 50k.

    Der Maximalwert von int ist mindestens 32767.

    Hab ich vorhin auch bemerkt, als ich die Liste rausgesucht habe, aber vergessen es oben zu korrigieren 🤡


Anmelden zum Antworten