C++ Umwandlung Dualsystem in Dezimalsystem
-
Hallo zusammen,
habe angefangen Programmiersprachen zu lernen, leider bin ich noch nicht so weit und stehe vor einem Problem.Ich möchte mit Hilfe von C++ eine 8 Bit Dualzahl in eine Dezimalzahl umwandeln lassen. Habe folgenden Quellcode geschrieben doch irgendwas passt nicht und ich komme nicht darauf.
Wäre super wenn mir jemand weiterhelfen könnte.
Quellcode:
/* Dualzahl in Dezimalzahl*/
#include <iostream>
#include <math.h>using namespace std;
int main()
{
int ergebnis = 0;
int zahl[8];
int n=0;for (int stelle = 0; stelle <=7; stelle ++)
zahl[stelle] = 0;for (int stelle = 0; stelle <=7; stelle ++)
{
cout << "Bitte geben Sie das " << stelle + 1 << " von 8 Bits (von links beginnend) der Dualzahl ein: ";
cin >> zahl[stelle];
}for (int stelle = 7; stelle >=0; stelle --)
for (int n = 0; n <= 7; n ++)
ergebnis = ergebnis + zahl[stelle] * pow(2,n);cout << "Die Dezimalzahl lautet: " << ergebnis;
return 0;
}Bin gespannt auf Eure Hilfe, danke.
Gruß Scriptlaie
-
Was genau passt denn nicht? Stimmt die Ausgabe nicht? Beschwert sich dein Compiler?
-
sorry hab ich vergessen dazu zu schreiben.
Die Ausgabe ergibt entweder 0 oder 255 egal welche Dualzahl ich eingebe.
Das noch Abfragen fehlen die sicher stellen ob auch nur 1 oder 0 eingegeben wurde fehlt noch, weil ich erst mal das Grundgerüst haben möchte.
-
Hier der Quelltext formatiert:
/* Dualzahl in Dezimalzahl*/ #include <iostream> #include <math.h> // warum nicht cmath? using namespace std; int main() { int ergebnis = 0; int zahl[8]; int n=0; for (int stelle = 0; stelle <=7; stelle ++) zahl[stelle] = 0; for (int stelle = 0; stelle <=7; stelle ++) { cout << "Bitte geben Sie das " << stelle + 1 << " von 8 Bits (von links beginnend) der Dualzahl ein: "; cin >> zahl[stelle]; } for (int stelle = 7; stelle >=0; stelle --) for (int n = 0; n <= 7; n ++) // hier noch mal int n? ergebnis = ergebnis + zahl[stelle] * pow(2,n); cout << "Die Dezimalzahl lautet: " << ergebnis; return 0; }Die Kommentare sind eher im Bereich der Warnungen anzusiedeln.
Nix getestet.
Aber mehrfachint stelle ...fördert nicht gerade die Übersichtlichkeit

MfG f.-th.
-
Das ist ja super von Euch.
Habe das nun auf cmath geändert, spielt jedoch keine Rolle oder? Hatte irgendwie math.h im Kopf.
Wie kann ich es verhindern das ich
int stelle...so oft schreibe???
Mit dem Kommentar
for (int n = 0; n <= 7; n ++) // hier noch mal int n?meinst du das ich int n = 0 zweimal habe? Habe es oben entfernt, jetzt bringt jedoch der Compiler Fehler Overload.
Denke es liegt an der pow() Funktion aber weiß nicht wie ich das ändern sollte/ könnte.
-
Keine Ahnung was du mit deinem Compiler anstellst und welchen du nutzt.
#include <iostream> #include <cmath> // c++ Header in C++ QuelltextIch denke mal das hast du missverstanden

Im formatierten Quelltext siehst du ja die Zeilennummern

Den Ausgabefehler baust du dir in Zeile 24 + 25

Nimm mal Papier und Schreiber und versuche nach zu vollziehen was du machst und vergleiche das mit dem was du gern hättest.
MfG f.-th.
-
Vielen Dank für deine Hilfe f.-th.!!!!
Habe es geschafft.
Mal schauen wann ich wieder mal etwas brauche.
Gruß
-
C++ ist übrigens keine Scriptsprache, falls du das nicht weißt.
-
Hier nochmal ne Variante, weil mir gerad langweilig ist

#include <iostream> #include <string> int DualString2Int(std::string p_sDual) { int iReturn=0; for(size_t s=0;s<p_sDual.substr(0, 32).length();s++) { iReturn = (iReturn << 1); iReturn|= p_sDual[s]=='1'?1:0; } return iReturn; } int main() { std::string InputData; std::cout<<"Geben Sie eine maximal 32-stellige Zahl auf Basis 2 ein \noder q um das Programm zu beenden: "; while(std::getline(std::cin, InputData)) { if(Data=="q")break; std::cout<<"\nDezimalzahl: "<<DualString2Int(InputData)<<"\n\nZahl auf Basis 2 [q zum Beenden]: "; } }