[c++] dezimal --> binär

Hi

1)Zuerst einmal: Du willst eine 4-Byte(32bit)-Variable umwandeln, behandelst sie aber wie 1Byte/8bit und gibst bei einem zu großen Wert (für die 1Byte-Variable) eine Fehlermeldung aus.
Willst du das so? Ich nehm mal an, das war so vorgegeben.

2) Was du ändern solltest, ist die "Nicht-definiert-Fehlermeldung" außerhalb/vor der Schleife zu machen.
Was bribt es, wenn du die Zahl gleich acht mal prüfst?

3) Include<cmath> brauchst du hier nicht, du verwendest ja keine einzige Funktion daraus.
Falls das im Grundgerüst so vorgegeben war, lass es halt stehen, sonst kannst du es entfernen

4) Die int a und int i, die du für die Schleifen verwendest, solltest du zuerst definieren

5) Wenn man sowas auf dem Papier umrechnet, würde man...
zuerst Zahl/2, der Rest davon ist die letzte Stelle der Binärzahl
wieder druch 2, Rest ist die vorletzte Stelle usw...
Es würde also helfen, wenn die Schleife von 7 bis 0 statt von 0 bis 7 geht.

6)...Du verwendest das Array in der Schleife ja gar nicht?

Ich schreibs einmal komplett um, mit den bisher genannten Punkten schon drin

C++:
#include <iostream> 

using namespace std;

int main(int argc, char* argv[])
{
    int x=34; //34 Dezimalzahl die umgerechnet werden soll

    //Das Array in das die einzelnen Bits geschrieben werden sollen.
    //Hinweis: speichert das niederwertigste Bit in feld[0] und das höchstwertige in feld[7]!
    int feld[8];
    int a,i;

    //Ihre Loesung
    if (x<0||x>255)
        cout << "nicht Definiert";
    else
    {
        for (i=7; i>=0; i--)
        {
            feld[i]=x%2;
            x/=2;
        }      
    }

    for(i=0;i<8;i++)
        cout << feld[i];
    return 0;
}

Gruß
 
Hallo,
danke schön für die schnelle Antwort, muss die Übungen nämlich sonntag abgeben (online) bin aber am we nicht da. Habe meinen Code entsprechend geändert und es funktioniert. das " #include <cmath> " brauch ich weil ich um die größte darstellbare Zahl zur Basis mit exponennt Stellen zu berechnen. Also das was in der ersten if Schleife steht denke ich.
Also danke nochmal.
Grußß Odin
 
Das 255 meinst du?
Kannst du aber auch mit C-Bordmitteln berechnen, ohne gleich eine ganze Funktion aufzufen
256 ist ja 2 hoch 8 (feld[8], und die Schleife ab 7=8-1 bis inklusive 0, die untere Schleife auch von 0 bis 8)
Für das if ist 255 dann (2^8)-1, und das lässt sich in C folgendermaßen schreiben:
(1<<8)-1
Das if lautet damit
if( x<0 || x > ((1<<8)-1) )
oder
if( x<0 || x >= (1<<8) )

Generell ist a<<b immer "a mal (2 hoch b)"
1<<8 ist also 1 mal 2^8, ist 256
Für dividiert gibts das auch noch, mit den Haken in die andere Richtung
Also a>>b immer "a dividiert durch (2 hoch b)"

Gruß
 
Danke für die schnelle Antwort, und ja das würde Sinn machen. Nur leider gehört es zu den Lösungsanforderungen der Augabe (die werden bewertet und bepunktet), das ich die Funktion float pow(basis, exponent) benutze. Sry hatte ich vorhin vergessen mit zu schreiben. Leider verstehe ich das mit der Funktion nicht so ganz, schonmal ganricht wie man die in das Progamm einbindet. Bei der Aufage steht noch dabei (ich glaube als Beispiel): x=27 entspricht float x=pow(2.0,7).
Nur wenn ich die Funktion in das Programm einbaue kommt immer ein fehler beim Kompeiliaren. Weist du, oder jemand anders wie die Funktion funktioniert und wie man die in das Programm einbaut? Also wie gesagt, das das die Obergrenze darstellt. Also denke ich mal das ich die Funktion anstatt dem x>255 schreiben soll.
Gruß
 
Wie kommst du denn auf so was? :suspekt:

Ja das hatte mich auch etwas verwundert, weil ich den Sinn dahinter nicht verstanden hatte. Das steht so als Hinweis auf dem Übungszettel drauf, der vom Prof erstellt worden ist :o ...
Vielen Dank für die hilfe, jetzt habe ich die Aufgabe doch Komplett hinbekommen (:

Die Fehlermeldung kam, weil ich die Funktion einfach nur Falsch aufgebaut hatte, was aber an den Verwirrnden angaben auf dem Übungszettel liegt.
 
das 1<<8 ist problematisch.
erst mal worum er sich da handelt:
also wir nehmen z.B die zahl 1
in binär ist das 00000001
mit dem << operator wird das blos alles nach links verschoben(nach rechts mit >>)
also 10000000=256
das problem ist folgendes wenn wir die zahl 5(binär 101)nehmen und dass dann mit dem >> opperator verschieben erhalten wir 10.
wenn wir das jetzt "rückgängig" machen wollen(mit >>)erhalten wir aber nicht 101 sondern 100 da nur eine 0 hinten ran gehängt wird und die rausgeschobene 1 wegfällt.

mann kann sich da einfach ne eigene funktion schreiben wie z.B:

double mein_pow(int basis, int exponent)
{
double ergebniss=1;
for(int i=0;i<exponent;i++)
{
ergebniss*=basis;
}
return ergebniss;
}
 
Die Funktion gibts schon...Auch mit double-Exponenten etc.
Und wegen dem 1<<8: Wäre ein Problem, wenn der Datentyp char wäre.
Ist hier aber ein int.

Also wozu die ganze Aufregung?
 
Zurück