% (Teilrest) funktioniert nicht mit double oder float ???



  • Ich habe eine Lösung für dich. (Deine Lösungsgedanken waren schon O.K.)Meine Lösung ist bestimmt noch nicht optimal.
    Ausserdem bin ich im Forum hier noch recht neu, falls Code nicht rüberkommt. schicke einfach Mail an Erat0s@aol.com.
    zahl muss long sein, da für dezimalbruch (float, double) Ganzzahldivision nicht definiert ist, Aufruf des Hauptprogrammes (main( ) )im Hauptprogramm bringt nichts. Die Transformierung der Ziffern über 10 stehen bei dir hinter cout und sind damit wirkungslos...

    #include<iostream.h>
    
    main()
    {
    
        long  zahl;
        int syst; 
        int loes;
        char loesout[30];
        int laenge;
        int i; 
        i   =29;
        laenge=0;
    
        cout << "Bitte geben Sie eine Zahl ein:"; 
        cin >> zahl;
    
        do
        {
        	cout << "In welches Zahlensystem (max. 37) soll die Zahl gewandelt werden:";
        	cin >> syst;
        }while( syst>37);
    
        while(zahl>0)
        { 
            loes= (zahl%syst); 
    	zahl= zahl/syst;
    
    	switch(loes)
    	{ 
    	    case 0: loesout[i] ='0'; break;
           	    case 1: loesout[i]= '1'; break; 
                case 2: loesout[i]= '2'; break; 
                case 3: loesout[i]= '3'; break; 
                case 4: loesout[i]= '4'; break; 
                case 5: loesout[i]= '5'; break; 
                case 6: loesout[i]= '6'; break; 
                case 7: loesout[i]= '7'; break; 
                case 8: loesout[i]= '8'; break; 
                case 9: loesout[i]= '9'; break; 
                case 10: loesout[i] = 'A'; break; 
                case 11: loesout[i] = 'B'; break; 
                case 12: loesout[i] = 'C'; break; 
                case 13: loesout[i] = 'D'; break; 
                case 14: loesout[i] = 'E'; break; 
                case 15: loesout[i] = 'F'; break; 
                case 16: loesout[i] = 'G'; break; 
                case 17: loesout[i] = 'H'; break; 
                case 18: loesout[i] = 'I'; break; 
                case 19: loesout[i] = 'J'; break; 
                case 20: loesout[i] = 'K'; break; 
    
                default: cout<<"Fehler in Zeichen" << i<< endl;break; 
    	}
    	i--;
            laenge++;
    
        }
    	cout<< "Die Zahl im "<<syst<<"er System ist:" ;
        for(i=30-laenge;i<30;i++)
        {
    		cout<< loesout[i];
    	}
        cout << endl;
        return(0); 
    }
    

    Bei mir klappt es mit der datei. Wenn Probleme, sende einfach mail an obige Adresse

    Peter

    edit: code-tags eingefügt.



  • So heute c++ Klausur geschrieben und mal gleich meinen Prof darauf angehauenwie ich das Problem den lösen kann. Er schlug vor durch schriftliches Teilen den Teilrest zu ermitteln.

    Ein Studienkollege meinte durch das Hornerschema das Problem zu lösen.

    Ich werde versuchen es erst mal auf diesen Grundlagen zu probieren.

    @ peter55
    danke für deine mühe jedoch läuft das Programm nicht im gewünschten Wertebereich. Es sorgt bei mir nur dafür das die werte der Eingabezahl mit in die zahl des Wertesystems übernommen werden.



  • Optimizer schrieb:

    SirLant schrieb:

    Ein unsigned long int ist so groß wie ein signed int64 , jedenfalsl der positive Ast.
    Das Vorzeichen könntest du ja extra speichern.

    Das halte ich für ein Gerücht. Bei mir ist ein long 32 Bit.

    Hier gelten analoge Beziehungen für char (8 bit).

    unsigned char: -2^7 <= bla < 2^7
    signed char: 0 <= bla < 2^8

    Also gilt für den 32- bit- Datentyp:

    unsigned blubb: -2^31 <= bla < 2^31
    signed blubb: 0 <= bla < 2^32



  • Also eigentlich geht es schon mal damit los, dass die Datentypen in C++ schon mal überhaupt keine feste Größe haben. 🙄
    Aber wenn du willst, können wir von einem 32-Bit System ausgehen. 😃



  • Hallo cjmischka,

    bisst Du noch an Lösung interessiert, oder hat sich das Problem erledigt?

    peter


Anmelden zum Antworten