Probleme bei der Umrechnung
-
Hallo,
ich bin neu hier im Forum und mache ein Studium zum Informatiker. Dort behandel ich gerade C++. So weit verstehe ich alles nur habe ich ein Problem.
Ich soll ein Programm erstellen der Dualzahlen in ein Dezimalsystem umrechnet.
Habe schon ein Programm angefangen zu schreiben aber leider kommt nicht das raus was ich eigentlich haben muss.
der Quelltext sieht folgendermassen aus:
**#include <iostream>
using namespace std;
int main()
{
cout << "Umrechnen von Dualsystem in Dezimalsystem" << endl;
cout << '\n';
int zahl, zahl1, zahl2, zahl3, zahl4, zahl5, zahl6, zahl7;//den Wert einlesen
cout << "Geben Sie einen Dualwert ein: " << endl;
cin >> zahl; zahl1; zahl2; zahl3; zahl4; zahl5; zahl6; zahl7;//die erste Berechnung
int zwischenergb, zwischenergb1, zwischenergb2, zwischenergb3, zwischenergb4, zwischenergb5, zwischenergb6, zwischenergb7;
zwischenergb = (zahl+(27));
zwischenergb1 = (zahl1+(26));
zwischenergb2 = (zahl2+(25));
zwischenergb3 = (zahl3+(24));
zwischenergb4 = (zahl4+(23));
zwischenergb5 = (zahl5+(22));
zwischenergb6 = (zahl6+(21));
zwischenergb7 = (zahl7+(20));//die Ausgabe
int ergebnis = zwischenergb+zwischenergb1+zwischenergb2+zwischenergb3+zwischenergb4+zwischenergb5+zwischenergb6+zwischenergb7;
ergebnis = zwischenergb+zwischenergb1+zwischenergb2+zwischenergb3+zwischenergb4+zwischenergb5+zwischenergb6+zwischenergb7;
cout << ergebnis << endl;
return 0;
}**Ich weiß leider nicht wo direkt mein Fehler liegt.
Kann mir da jemand helfen?
Ich habe schon mit google gearbeitet aber nichts finden können.danke
-
chaosboy86 schrieb:
Hallo,
ich bin neu hier im Forum und mache ein Studium zum Informatiker. Dort behandel ich gerade C++. So weit verstehe ich alles nur habe ich ein Problem.
Ich soll ein Programm erstellen der Dualzahlen in ein Dezimalsystem umrechnet.
Habe schon ein Programm angefangen zu schreiben aber leider kommt nicht das raus was ich eigentlich haben muss.
der Quelltext sieht folgendermassen aus:
**#include <iostream>
using namespace std;
int main()
{
cout << "Umrechnen von Dualsystem in Dezimalsystem" << endl;
cout << '\n';
int zahl, zahl1, zahl2, zahl3, zahl4, zahl5, zahl6, zahl7;//den Wert einlesen
cout << "Geben Sie einen Dualwert ein: " << endl;
cin >> zahl; zahl1; zahl2; zahl3; zahl4; zahl5; zahl6; zahl7;//die erste Berechnung
int zwischenergb, zwischenergb1, zwischenergb2, zwischenergb3, zwischenergb4, zwischenergb5, zwischenergb6, zwischenergb7;
zwischenergb = (zahl+(27));
zwischenergb1 = (zahl1+(26));
zwischenergb2 = (zahl2+(25));
zwischenergb3 = (zahl3+(24));
zwischenergb4 = (zahl4+(23));
zwischenergb5 = (zahl5+(22));
zwischenergb6 = (zahl6+(21));
zwischenergb7 = (zahl7+(20));//die Ausgabe
int ergebnis = zwischenergb+zwischenergb1+zwischenergb2+zwischenergb3+zwischenergb4+zwischenergb5+zwischenergb6+zwischenergb7;
ergebnis = zwischenergb+zwischenergb1+zwischenergb2+zwischenergb3+zwischenergb4+zwischenergb5+zwischenergb6+zwischenergb7;
cout << ergebnis << endl;
return 0;
}**Ich weiß leider nicht wo direkt mein Fehler liegt.
Kann mir da jemand helfen?
Ich habe schon mit google gearbeitet aber nichts finden können.danke
Benutz doch einfach eine Schleife:
#include <iostream> #include <complex> int main() { char const input[] = {"1001"};//Die Dual-Zahl (9)[t]2[/t] unsigned long long a(0);//Das Ergebnis for(size_t ct(0);ct < input.length();++ct)///Ein Zähler, der als Index des Strings dient a += (input[ct] - '0') * std::pow(2, ct); //Addiere die Zweier-Potenzen zum "Ergebnis" std::cout << a << '\n'; }Geparst wird unter der Annahme, dass die (Edit:) Bit-Reihenfolge Links->Rechts ist.
-
mh ok aber belasse ich dann mein quelltext und füge das mit ein oder wie muss ich das machen???
geht es nicht irgentwie einfacher da ich noch Anfänger bin....
Ich bedanke mich aber trotzdem bei dir....
-
chaosboy86 schrieb:
mh ok aber belasse ich dann mein quelltext und füge das mit ein oder wie muss ich das machen???
Junge, bist du doof oder was? Verstehen was ich da gecodet habe, dass sollst du. Ich mach doch nicht deine Hausaufgaben. So lernste doch nix.
-
Oder sogar ohne pow
a = 2 * a + (input[ct] - '0');
-
schuldigung aber man muss nicht gleich unfreundlich werden....
-
@chaosboy86
Du musst zahl*27 rechnen ( mal und hoch, nicht plus und mal)
Der Button für Programmcode ist nicht B sondern C/C++@Hacker
Du berechnest die Zahl falschrum. Das fällt bei der 9 aber nicht auf.
Auf das pow kann man auch verzichten.
Dann sieht die Schleife so aus:for(size_t ct(0);ct < input.length();++ct) a = (input[ct] - '0') + a * 2;
-
@Dirk lasse ich dann die Klammern weg und wie schreibt man das hoch? z.b. so "^"?
-
chaosboy86 schrieb:
@Dirk lasse ich dann die Klammern weg und wie schreibt man das hoch? z.b. so "^"?
Nein. Das ist der bitweise XOR-Operator.
DirkB schrieb:
@Hacker
Du berechnest die Zahl falschrum. Das fällt bei der 9 aber nicht auf.Nein. Ich berechne mit einer anderen Bit-Reihenfolge.
chaosboy86 schrieb:
schuldigung aber man muss nicht gleich unfreundlich werden....
Tut mir Leid

Aber wenn du den Code so übernimmst und nix lernst, werd ich immer ganz böse
@volkard: Der ist nice, den kannt' ich noch nicht.
Aber noch besser wäre doch shiften!!
for(size_t ct(0);ct < input.length();++ct) a += (input[ct] - '0') * (1 << ct);
-
@hacker aber wie gebe ich denn sonst bei c++ 2hoch7 ein?
-
chaosboy86 schrieb:
@hacker aber wie gebe ich denn sonst bei c++ 2hoch7 ein?
Bei speziell Zweierpotenzen gibt es mehrere Wege:
1 << Exponent std::pow(2, Exponent);@volkard: Deine Version ist eig. falsch, nicht?
Denn:2[h]5[/h] != 2 * 5 + 1
-
@Hacker: Nein, es muss 1 << Exponent heißen, nicht 1 >> Exponent.
-
Hacker schrieb:
@volkard: Deine Version ist eig. falsch, nicht?
Denn:2[h]5[/h] != 2 * 5 + 1http://ideone.com/LR1ZZ
http://de.wikipedia.org/wiki/Horner-Schema
-
pyhax schrieb:
@Hacker: Nein, es muss 1 << Exponent heißen, nicht 1 >> Exponent.
Oh ja, editiert

@volkard: Ah, ich hab da
+=und nicht=gelesen, dachte du hast "meine" Version leicht verändert.
-
danke an alle aber ich glaube ich stelle mich einfach zu blöd an....
-
Hacker schrieb:
Bei speziell Zweierpotenzen gibt es mehrere Wege:
1 >> Exponent std::pow(2, Exponent);... wie so oft ein Level an Falschheit/Unsinnigkeit das schon körperlich weh tut.
-
Siehe Beitrag von pyhax
-
std::pow() zum Berechnen einer Integer Zweierpotenz? Geht's noch?
-
-
Wie können ja mischen.
a += *ch - '0' + a;(Leider total unleserlich.)
Ach, wenn schon Unfug, dann richtig.a +=+ a +*+ ch +~+ '0' -~- 0;;
-
hustbaer schrieb:
Hacker schrieb:
Bei speziell Zweierpotenzen gibt es mehrere Wege:
1 >> Exponent std::pow(2, Exponent);... wie so oft ein Level an Falschheit/Unsinnigkeit das schon körperlich weh tut.
- Siehe Beitrag von pyhax
Ja, Flüchtigkeitsfehler. Passiert dir nie, was?
- std::pow() zum Berechnen einer Integer Zweierpotenz? Geht's noch?
Ja? Denn ein Weg ist es immmer noch (auch wenn ein vergleichsweise ineffizienter).
@volkard: Ja, das ist der schnellste.
-
@volkard: Fehlt bei dem ersten nicht ein * 2 ?
-
pyhax schrieb:
@volkard: Fehlt bei dem ersten nicht ein * 2 ?
Nein. Statt a=a*2 ist es ja jetzt ein a+=a