<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Dual zu dezimal - ich finde den fehler einfach nicht]]></title><description><![CDATA[<p>Hallo,</p>
<p>für ien Aufgabe soll ich ein Programm schreiben, das dual in dezimalzahl umrechnet. Soweit so gut. ich habe folgendes geschrieben. laufen tuts, nur rechnet es nicht richtig (ich weiß das die addition noch fehl). aber ich finde den fehler einfach nicht. kann mir jemand bitte einen hinweis geben? wäre super. vielen dank.</p>
<p>hier der Code:</p>
<pre><code>[code]
#include &lt;iostream&gt;
#include &lt;math.h&gt;

using namespace std;

int main()
{
    unsigned int wert;           //der eingegebene Wert
    unsigned int wertAnz = 0;    // Variable für die Stellenanzahl
    unsigned int wertZif = 0;    //Varibale für die Ziffern
    unsigned int stellen = 0;    //die anzahl der stellen
    unsigned int ziffer[16];     //die Ziffern
    unsigned int vergebnis = 0;
    unsigned int eergebnis = 0;

    cout &lt;&lt; &quot;eingabe: &quot;;
    cin &gt;&gt; wert;

    wertAnz = wert;
    wertZif = wert;

    //stellen ermitteln
    while(wertAnz &gt; 0)
     {
         wertAnz = wertAnz / 10;
         stellen++;
     }

    //wert in einzelne ziffern zerlegen und einzeln merken
    int positionZif;
    for (positionZif = 15; positionZif &gt;= 0; positionZif--)

    while (wertZif &gt; 0)
    {
        ziffer[positionZif] = wertZif % 10;
        positionZif--;
        wertZif = wertZif / 10;
    }

    //potenzen bilden
for (int index = 15; index &gt;= 0; index--)
while (stellen &gt; 0)
{

    vergebnis = ziffer[index] * pow(2,stellen);
    index--;
    stellen--;

//eergebnis = ziffer[1] + ziffer[2] + ziffer[3];

    cout &lt;&lt; vergebnis;
'\n';
//cout &lt;&lt; ziffer[index] &lt;&lt; endl;
}

    //cout &lt;&lt; &quot;Anzahl Stellen &quot; &lt;&lt; stellen &lt;&lt; endl;
    //cout &lt;&lt; &quot;Restwert Stellen &quot; &lt;&lt; wertAnz &lt;&lt; endl;
    //cout &lt;&lt; &quot;Eingabe Wert &quot; &lt;&lt; wert &lt;&lt; endl;
    //cout &lt;&lt; &quot;wertZif &quot; &lt;&lt; wertZif &lt;&lt; endl;

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/316073/dual-zu-dezimal-ich-finde-den-fehler-einfach-nicht</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 09:36:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316073.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Apr 2013 07:14:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 07:14:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>für ien Aufgabe soll ich ein Programm schreiben, das dual in dezimalzahl umrechnet. Soweit so gut. ich habe folgendes geschrieben. laufen tuts, nur rechnet es nicht richtig (ich weiß das die addition noch fehl). aber ich finde den fehler einfach nicht. kann mir jemand bitte einen hinweis geben? wäre super. vielen dank.</p>
<p>hier der Code:</p>
<pre><code>[code]
#include &lt;iostream&gt;
#include &lt;math.h&gt;

using namespace std;

int main()
{
    unsigned int wert;           //der eingegebene Wert
    unsigned int wertAnz = 0;    // Variable für die Stellenanzahl
    unsigned int wertZif = 0;    //Varibale für die Ziffern
    unsigned int stellen = 0;    //die anzahl der stellen
    unsigned int ziffer[16];     //die Ziffern
    unsigned int vergebnis = 0;
    unsigned int eergebnis = 0;

    cout &lt;&lt; &quot;eingabe: &quot;;
    cin &gt;&gt; wert;

    wertAnz = wert;
    wertZif = wert;

    //stellen ermitteln
    while(wertAnz &gt; 0)
     {
         wertAnz = wertAnz / 10;
         stellen++;
     }

    //wert in einzelne ziffern zerlegen und einzeln merken
    int positionZif;
    for (positionZif = 15; positionZif &gt;= 0; positionZif--)

    while (wertZif &gt; 0)
    {
        ziffer[positionZif] = wertZif % 10;
        positionZif--;
        wertZif = wertZif / 10;
    }

    //potenzen bilden
for (int index = 15; index &gt;= 0; index--)
while (stellen &gt; 0)
{

    vergebnis = ziffer[index] * pow(2,stellen);
    index--;
    stellen--;

//eergebnis = ziffer[1] + ziffer[2] + ziffer[3];

    cout &lt;&lt; vergebnis;
'\n';
//cout &lt;&lt; ziffer[index] &lt;&lt; endl;
}

    //cout &lt;&lt; &quot;Anzahl Stellen &quot; &lt;&lt; stellen &lt;&lt; endl;
    //cout &lt;&lt; &quot;Restwert Stellen &quot; &lt;&lt; wertAnz &lt;&lt; endl;
    //cout &lt;&lt; &quot;Eingabe Wert &quot; &lt;&lt; wert &lt;&lt; endl;
    //cout &lt;&lt; &quot;wertZif &quot; &lt;&lt; wertZif &lt;&lt; endl;

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317099</guid><dc:creator><![CDATA[bergemann9579]]></dc:creator><pubDate>Sun, 21 Apr 2013 07:14:44 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 08:38:27 GMT]]></title><description><![CDATA[<p>bergemann9579 schrieb:</p>
<blockquote>
<p>Hallo,<br />
für ien Aufgabe soll ich ein Programm schreiben, das dual in dezimalzahl umrechnet.</p>
</blockquote>
<p>Also zum Beispiel 1101(2) in 13(10)?<br />
Dann ist es eine unglückliche Wahl, einen int einzulesen, Damit liest Du ja schon die Eingabe &quot;1011&quot; dezimal ein und hast dann 1011(10) in der Hand.</p>
<p>bergemann9579 schrieb:</p>
<blockquote>
<p>Soweit so gut. ich habe folgendes geschrieben. laufen tuts, nur rechnet es nicht richtig (ich weiß das die addition noch fehl). aber ich finde den fehler einfach nicht. kann mir jemand bitte einen hinweis geben?</p>
</blockquote>
<p>Leider nicht, weil ich Deinen Code kein Bißchen nachvollziehen kann. Ich bin mal bei dem spaßigen Gedanken geblieben, die eingelesene Binärzahl in einem int zu lagern.</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;
int main()
{
    cout &lt;&lt; &quot;eingabe binaer: &quot;;
    unsigned int binaer;
    cin &gt;&gt; binaer;

    unsigned int dezimal=0;
    while(binaer&gt;0)
    {
        dezimal=dezimal*2+binaer%10;
        binaer/=10;
    }

    cout &lt;&lt; &quot;ausgabe dezimal: &quot;&lt;&lt;dezimal&lt;&lt;'\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317102</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 21 Apr 2013 08:38:27 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 12:52:10 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code>#include &lt;iostream&gt;

using namespace std;
int main()
{
    cout &lt;&lt; &quot;eingabe binaer: &quot;;
    unsigned int binaer;
    cin &gt;&gt; binaer;

    unsigned int dezimal=0;
    while(binaer&gt;0)
    {
        dezimal=dezimal*2+binaer%10;
        binaer/=10;
    }

    cout &lt;&lt; &quot;ausgabe dezimal: &quot;&lt;&lt;dezimal&lt;&lt;'\n';
}
</code></pre>
</blockquote>
<p>Bist Du sicher, dass die vom LSB aus analysierten Bits der Binärzahl nachher an der richtigen Stelle der Dezimalzahl ankommen? Versuche mal &quot;1000000&quot;... Überrrrraschung!<br />
Und was tut der Code, wenn man &quot;1234&quot; eingibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317154</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Sun, 21 Apr 2013 12:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 12:55:38 GMT]]></title><description><![CDATA[<p>minastaros schrieb:</p>
<blockquote>
<p>Und was tut der Code, wenn man &quot;1234&quot; eingibt?</p>
</blockquote>
<p>Das ist eines der Probleme, die volkard mit</p>
<p>volkard schrieb:</p>
<blockquote>
<p>Dann ist es eine unglückliche Wahl, einen int einzulesen,</p>
</blockquote>
<p>meinte. Das ist dem Threadersteller verschuldet. Eine bessere Wahl für den Datentyp einer Ziffernkette wäre eine Zeichenkette. Wenn man es übertrieben korrekt haben möchte, lässt man für die Ziffernkette sogar nur die zum System passenden Ziffernzeichen zu. Was jedoch nicht ganz wenig Arbeit wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317157</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 21 Apr 2013 12:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 13:07:44 GMT]]></title><description><![CDATA[<p>minastaros schrieb:</p>
<blockquote>
<p>Bist Du sicher, dass die vom LSB aus analysierten Bits der Binärzahl nachher an der richtigen Stelle der Dezimalzahl ankommen? Versuche mal &quot;1000000&quot;... Überrrrraschung!</p>
</blockquote>
<p>Upps. Sie kommen genau falschrum.<br />
Oki, mein Code war falsch.</p>
<p>Die Eingabe sollte mit string gemacht werden. Da kann man sich die Ausleserichtung aussuchen und das Problem ist weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317159</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 21 Apr 2013 13:07:44 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 18:09:48 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@Volkard</a>: die &quot;1234&quot; sollten nicht überheblich klingen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /> Mir war schon klar, dass Du auf <code>string</code> rauswolltest.</p>
<p>Geht prinzipiell zwar auch mit <code>unsigned int</code> , nur macht <code>cin</code> hier Probleme, sobald es über 10 Ziffern geht. Ich dachte an sowas:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdexcept&gt;

using namespace std;
int main()
{
    cout &lt;&lt; &quot;eingabe binaer: &quot;;
    unsigned int binaer;
    cin &gt;&gt; binaer;

    unsigned int dezimal=0;
    unsigned int faktor = 1;
    while( binaer&gt;0 )
    {
        if( faktor == 0 ) throw out_of_range( &quot;Binärzahl zu groß.&quot; );
        unsigned int bit = binaer % 10;
        if( bit &gt; 1 ) throw invalid_argument( &quot;Ziffer nicht 0 oder 1.&quot; );
        dezimal += bit * faktor;
        faktor &lt;&lt;= 1;
        binaer /= 10;
    }

    cout &lt;&lt; &quot;ausgabe dezimal: &quot;&lt;&lt;dezimal&lt;&lt;'\n';
}
</code></pre>
<p>Um noch etwas klugzuscheißen (und das war mit Sicherheit <em>nicht</em> die Lösung, an die der Aufgabensteller von seiner Didaktik her gedacht hatte), bin beim Stöbern über <code>bitset</code> gestolpert, das macht die Zeichenprüfung selbst:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;bitset&gt;
#include &lt;limits&gt;
#include &lt;stdexcept&gt;
using namespace std;

enum{ MAX_DIGITS = std::numeric_limits&lt;unsigned long&gt;::digits };

int main()
{
    cout &lt;&lt; &quot;eingabe binaer: &quot;;
    std::string binaer;
    cin &gt;&gt; binaer;
    if( binaer.length() &gt; MAX_DIGITS ) throw out_of_range( &quot;Binärzahl zu groß.&quot; );

    std::bitset&lt; MAX_DIGITS &gt; mybitset( binaer );
    unsigned long dezimal = mybitset.to_ulong();
    cout &lt;&lt; &quot;ausgabe dezimal: &quot;&lt;&lt;dezimal&lt;&lt;'\n';

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317260</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Sun, 21 Apr 2013 18:09:48 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 19:04:14 GMT]]></title><description><![CDATA[<p>minastaros schrieb:</p>
<blockquote>
<pre><code>enum{ MAX_DIGITS = std::numeric_limits&lt;unsigned long&gt;::digits };
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Wieso nicht <code>const unsigned long</code> ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317272</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 21 Apr 2013 19:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 19:20:03 GMT]]></title><description><![CDATA[<p>Rein intuitiv würde ich behaupten, dass es nichtmal erlaubt ist, dass die const- oder volatile-Modifikation eines Typen seine Größe ändert.<br />
Hat jemand Lust, im Standard nachzuschauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317276</guid><dc:creator><![CDATA[Sonnenabgewandtheit]]></dc:creator><pubDate>Sun, 21 Apr 2013 19:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 19:53:13 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>minastaros schrieb:</p>
<blockquote>
<pre><code>enum{ MAX_DIGITS = std::numeric_limits&lt;unsigned long&gt;::digits };
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Wieso nicht <code>const unsigned long</code> ??</p>
</blockquote>
<p>Bei <code>bitsets</code> geht das genauso, da hast Du recht. Allerdings würde ich dann <code>const size_t</code> nehmen, da Größe für <code>bitset</code> (auch wenn <code>digits</code> streng genommen vom Typ <code>int</code> ist).<br />
Das mit den enums ist ne Marotte von der Definition von Arrays, weil Konstanten da nicht gehen ( <code>int myArray[ einConst ]</code> ). Hab das gedanklich dahin übertragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317284</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Sun, 21 Apr 2013 19:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 20:02:21 GMT]]></title><description><![CDATA[<p>Vor C++11 ging das nicht.<br />
Nach C++11 gibts constexpr.<br />
Warum also enum?<br />
A) gibts constexpr.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> reicht const .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317290</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 21 Apr 2013 20:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 20:12:52 GMT]]></title><description><![CDATA[<p>minastaros schrieb:</p>
<blockquote>
<p>Das mit den enums ist ne Marotte von der Definition von Arrays, weil Konstanten da nicht gehen ( <code>int myArray[ einConst ]</code> ). Hab das gedanklich dahin übertragen.</p>
</blockquote>
<p>Um genau zu sein, früher gingt<br />
static const int size=100;<br />
nicht innerhalb einer Klasse, da nahm man den Umweg per enum.<br />
Jetzt geht es. Sogar schon lange. Hast evtl nur das static vergessen bei den letztenb Versuchen, eine Klassenkonstante zu häkeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317296</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 21 Apr 2013 20:12:52 GMT</pubDate></item><item><title><![CDATA[Reply to Dual zu dezimal - ich finde den fehler einfach nicht on Sun, 21 Apr 2013 20:32:52 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>[...]<br />
Warum also enum?<br />
A) gibts constexpr.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> reicht const .</p>
</blockquote>
<p>Wie gesagt, ich war gedanklich gerade bei den Arrays (und definitiv noch vor C++11). Klar geht das auch:</p>
<pre><code>const size_t MAX_DIGITS = std::numeric_limits&lt;unsigned long&gt;::digits;
</code></pre>
<p>volkard schrieb:</p>
<blockquote>
<p>[...]Jetzt geht es. Sogar schon lange. Hast evtl nur das static vergessen bei den letztenb Versuchen, eine Klassenkonstante zu häkeln.</p>
</blockquote>
<p>Tatsächlich ist es ewig her, dass ich Array in der Form <em>überhaupt</em> benutzt hab, und das war glaub ich ein C-Projekt und damals enums die Lösung. Trotzdem danke für die Details mit dem static const + Arrays, man lernt nie aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317301</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Sun, 21 Apr 2013 20:32:52 GMT</pubDate></item></channel></rss>