<?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[Wahrheitstafel, Code unschön]]></title><description><![CDATA[<p>Hallo!<br />
Ich möchte eine Wahrheitstafel auf der Konsole ausgeben.<br />
Dazu habe ich zwei Schleifen die jede Variablenbelegung durchgehen sollen.</p>
<pre><code class="language-cpp">typedef std::map&lt;char, bool&gt; mapTyp;
</code></pre>
<p>Variablen ist eine obige map, in der jede, in einer bel. Formel vorkommenden, Variable gespeichert wird.</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; pow(2, Variablen.size()); i++)
    {
        mapTyp::iterator iter = Variablen.begin();
        for(int k = 1; iter != Variablen.end(); iter++)
        {
            if((i%static_cast&lt;int&gt;(pow(2, Variablen.size()-k)))==0)
            {
                iter-&gt;second=!(iter-&gt;second);
            }
            k++;
        }
    }
</code></pre>
<p>(Funktioniert!)<br />
Aber:<br />
Hier gefällt mir nicht, dass ich innerhalb der zweiten for-Schleife zwei versch. Variablen brauche (k und iter). Iter wird außerhalb der Schleife nämlich eigentlich auch nicht benötigt.</p>
<p>Wie kann man das jetzt schöner machen?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/283036/wahrheitstafel-code-unschön</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 20:08:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/283036.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Mar 2011 17:19:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wahrheitstafel, Code unschön on Thu, 03 Mar 2011 17:19:24 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich möchte eine Wahrheitstafel auf der Konsole ausgeben.<br />
Dazu habe ich zwei Schleifen die jede Variablenbelegung durchgehen sollen.</p>
<pre><code class="language-cpp">typedef std::map&lt;char, bool&gt; mapTyp;
</code></pre>
<p>Variablen ist eine obige map, in der jede, in einer bel. Formel vorkommenden, Variable gespeichert wird.</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; pow(2, Variablen.size()); i++)
    {
        mapTyp::iterator iter = Variablen.begin();
        for(int k = 1; iter != Variablen.end(); iter++)
        {
            if((i%static_cast&lt;int&gt;(pow(2, Variablen.size()-k)))==0)
            {
                iter-&gt;second=!(iter-&gt;second);
            }
            k++;
        }
    }
</code></pre>
<p>(Funktioniert!)<br />
Aber:<br />
Hier gefällt mir nicht, dass ich innerhalb der zweiten for-Schleife zwei versch. Variablen brauche (k und iter). Iter wird außerhalb der Schleife nämlich eigentlich auch nicht benötigt.</p>
<p>Wie kann man das jetzt schöner machen?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029351</guid><dc:creator><![CDATA[jknfdfds]]></dc:creator><pubDate>Thu, 03 Mar 2011 17:19:24 GMT</pubDate></item><item><title><![CDATA[Reply to Wahrheitstafel, Code unschön on Thu, 03 Mar 2011 18:25:21 GMT]]></title><description><![CDATA[<p>k lässt sich aus dem Iterator (k=iter-1) berechnen. Kannste natürlich machen, um die Variable zu sparen, aber ob das nun leichter zu lesen ist, ist wohl Geschmackssache.</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; pow(2, Variablen.size()); i++)
    {
        for(mapTyp::iterator iter = Variablen.begin(); iter != Variablen.end(); iter++)
        {
            if((i%static_cast&lt;int&gt;(pow(2, Variablen.end() - iter - 1))==0)
            {
                iter-&gt;second=!(iter-&gt;second);
            }
        }
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2029367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029367</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Thu, 03 Mar 2011 18:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wahrheitstafel, Code unschön on Thu, 03 Mar 2011 18:32:46 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Danke für die Antwort.</p>
<p>Leider funktioniert das nicht, Meldung:</p>
<pre><code>error: no match for ‘operator-’ in ‘Wahrheitstafel::Variablen.std::map&lt;_Key, _Tp, _Compare, _Alloc&gt;::end [with _Key = char, _Tp = bool,
 _Compare = std::less&lt;char&gt;, _Alloc = std::allocator&lt;std::pair&lt;const char, bool&gt; &gt;]() - iter’|
</code></pre>
<pre><code class="language-cpp">(Variablen.end() - iter - 1)
</code></pre>
<p>ist aber doch auch ein Iterator und keine Zahl, oder?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2029372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029372</guid><dc:creator><![CDATA[jknfdfds]]></dc:creator><pubDate>Thu, 03 Mar 2011 18:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wahrheitstafel, Code unschön on Thu, 03 Mar 2011 18:52:04 GMT]]></title><description><![CDATA[<p>Ah, sorry, das geht natürlich nur mit RandomAccessIteratoren (wie z.B. beim vector). Bei der Map hat man ja aber nurn nen BidirectionalIterator, womit so eine Arithmetik nicht geht.</p>
<p>Es geht also:</p>
<pre><code class="language-cpp">std::map&lt;int,int&gt;::iterator i;
i++;
</code></pre>
<p>und das auch:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt;::iterator i;
i+=1234;
</code></pre>
<p>aber das geht nicht:</p>
<pre><code class="language-cpp">std::map&lt;int,int&gt;::iterator i;
i+=1234;
</code></pre>
<p>Dann fällt mir jetzt auch nicht ein, wie du dein k loswirst.</p>
<p>Ein std::vector&lt;std::pair&lt;char, bool&gt; &gt; ist wohl keine Option, oder? Dann würde das hier nämlich gehen. <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="😉"
    /></p>
<pre><code class="language-cpp">typedef std::vector&lt;std::pair&lt;char, bool&gt; &gt; mapTyp;
    mapTyp Variablen;
    for(int i = 0; i &lt; pow(2, Variablen.size()); i++)
    {
        mapTyp::iterator iter = Variablen.begin();
        for(int k = 1; iter != Variablen.end(); iter++)
        {
        	if((i%static_cast&lt;int&gt;(pow(2, Variablen.end() - iter - 1)))==0)
            {
                iter-&gt;second=!(iter-&gt;second);
            }
            k++;
        }
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2029377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029377</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Thu, 03 Mar 2011 18:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wahrheitstafel, Code unschön on Thu, 03 Mar 2011 19:40:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">assert(Variablen.size() &gt; 0);
for(int i = 0; i &lt; (1 &lt;&lt; Variablen.size()); i++)
{
    mapTyp::iterator iter;
    for(iter = Variablen.begin(); iter-&gt;second; ++iter)
    {
        iter-&gt;second = false;            
    }
    iter-&gt;second = true;

    print(Variablen);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2029402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2029402</guid><dc:creator><![CDATA[life]]></dc:creator><pubDate>Thu, 03 Mar 2011 19:40:12 GMT</pubDate></item></channel></rss>