<?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[(einfache) Iterator-Aufgabe hässlich gelöst?]]></title><description><![CDATA[<p>Hi!<br />
Hab mir ein Buch besorgt und bin dabei es seit einer Woche durchzuarbeiten.<br />
Im Buch werden zu jedem Kapitel Aufgaben gestellt leider aber keine Lösungen.<br />
Die Aufgabe lautet als erstes eine Reihe an eingegebenen integer Zahlen in einen vector zu schreiben. Dabei sollen dann jeweils zwei benachbarte Zahlenpaare zusammen addiert und ausgegeben werde. Falls eine ungerade Zahl an Eingaben getätigt wurde soll die letzte einfach ausgegeben werden.<br />
Dasselbe soll dann in der zweiten Aufgabe nochmals durchgeführt werden, nur dass die erste und die letzte Zahl addiert werden sollen. Hier soll hauptsächlich der []- index operator verwendet werden.</p>
<p>Bsp: Eingabe von 3 Zahlen: 4, 8, 12<br />
Ausgabe<br />
(1)<br />
4 + 8 = 12<br />
12</p>
<p>(2)<br />
4 + 12 = 16<br />
8</p>
<p>Im nächsten Kapitel aber wo eine kleine Einführung zu Iteratoren stattfindet ist eine weitere Aufgabe bei der ich die vector-Aufgabe neu schreiben soll und statt den index Iteratoren einsetzen soll.<br />
Ich habs hingekriegt nur finde ich dass ich es, besonders bei 2, zu umständlich gemacht hab. Geht es auch in 1. Schleife und eventuell nur mit 1. Zählvariable?</p>
<pre><code>void paarrechnen1()  
{
    vector&lt;int&gt; zahlen;  
    int eingabe;           
    while (cin &gt;&gt; eingabe)  
        zahlen.push_back(eingabe);

	for (vector&lt;int&gt;::const_iterator zähler = zahlen.begin(); zähler &lt; zahlen.end(); zähler+=2 )
    {                                                                          
		if (zähler == zahlen.end() - 1) {cout &lt;&lt; *zähler; break;}
        else 
				cout &lt;&lt; *zähler &lt;&lt; &quot; + &quot;;
			//wenn ich alles in 1 zeile schreibe, werden falsche zahlen ausgegeben, trenne ich sie in mehrere auf klappts. warum?
			cout &lt;&lt; * (++zähler) &lt;&lt; &quot; = &quot;;

			cout &lt;&lt; (*(--zähler) + *(++zähler)) &lt;&lt; endl;
			--zähler;

    }
}
</code></pre>
<pre><code>void paarrechnen2 ()
{  
    vector&lt;int&gt; zahlen;
    int eingabe;
    while (cin &gt;&gt; eingabe)
        zahlen.push_back(eingabe);

	if (zahlen.size() % 2 == 0)  //geht das herausfinden ob eine ungerade oder gerade eingabe getätigt wurde auch in 1 schleife?
	for (vector&lt;int&gt;::const_iterator count = zahlen.begin(), count_max = zahlen.begin() + zahlen.size(); count != zahlen.begin() + zahlen.size() / 2; count++ ) 
	{
		count_max--;
		cout &lt;&lt; *count &lt;&lt; &quot; + &quot; &lt;&lt; *count_max &lt;&lt; &quot; = &quot; &lt;&lt; *count + *count_max &lt;&lt; endl;	
	}

	else for (vector&lt;int&gt;::const_iterator count = zahlen.begin(), count_max = zahlen.begin() + zahlen.size(); count != zahlen.end(); count ++) 

	{
		count_max--;
		if (count == count_max) cout &lt;&lt; *count &lt;&lt; endl;
		else cout &lt;&lt; *count &lt;&lt; &quot; + &quot; &lt;&lt; *count_max &lt;&lt; &quot; = &quot; &lt;&lt; *count + *count_max &lt;&lt; endl;
	}	
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/312843/einfache-iterator-aufgabe-hässlich-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 12:53:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312843.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Jan 2013 15:20:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to (einfache) Iterator-Aufgabe hässlich gelöst? on Tue, 15 Jan 2013 15:36:33 GMT]]></title><description><![CDATA[<p>Hi!<br />
Hab mir ein Buch besorgt und bin dabei es seit einer Woche durchzuarbeiten.<br />
Im Buch werden zu jedem Kapitel Aufgaben gestellt leider aber keine Lösungen.<br />
Die Aufgabe lautet als erstes eine Reihe an eingegebenen integer Zahlen in einen vector zu schreiben. Dabei sollen dann jeweils zwei benachbarte Zahlenpaare zusammen addiert und ausgegeben werde. Falls eine ungerade Zahl an Eingaben getätigt wurde soll die letzte einfach ausgegeben werden.<br />
Dasselbe soll dann in der zweiten Aufgabe nochmals durchgeführt werden, nur dass die erste und die letzte Zahl addiert werden sollen. Hier soll hauptsächlich der []- index operator verwendet werden.</p>
<p>Bsp: Eingabe von 3 Zahlen: 4, 8, 12<br />
Ausgabe<br />
(1)<br />
4 + 8 = 12<br />
12</p>
<p>(2)<br />
4 + 12 = 16<br />
8</p>
<p>Im nächsten Kapitel aber wo eine kleine Einführung zu Iteratoren stattfindet ist eine weitere Aufgabe bei der ich die vector-Aufgabe neu schreiben soll und statt den index Iteratoren einsetzen soll.<br />
Ich habs hingekriegt nur finde ich dass ich es, besonders bei 2, zu umständlich gemacht hab. Geht es auch in 1. Schleife und eventuell nur mit 1. Zählvariable?</p>
<pre><code>void paarrechnen1()  
{
    vector&lt;int&gt; zahlen;  
    int eingabe;           
    while (cin &gt;&gt; eingabe)  
        zahlen.push_back(eingabe);

	for (vector&lt;int&gt;::const_iterator zähler = zahlen.begin(); zähler &lt; zahlen.end(); zähler+=2 )
    {                                                                          
		if (zähler == zahlen.end() - 1) {cout &lt;&lt; *zähler; break;}
        else 
				cout &lt;&lt; *zähler &lt;&lt; &quot; + &quot;;
			//wenn ich alles in 1 zeile schreibe, werden falsche zahlen ausgegeben, trenne ich sie in mehrere auf klappts. warum?
			cout &lt;&lt; * (++zähler) &lt;&lt; &quot; = &quot;;

			cout &lt;&lt; (*(--zähler) + *(++zähler)) &lt;&lt; endl;
			--zähler;

    }
}
</code></pre>
<pre><code>void paarrechnen2 ()
{  
    vector&lt;int&gt; zahlen;
    int eingabe;
    while (cin &gt;&gt; eingabe)
        zahlen.push_back(eingabe);

	if (zahlen.size() % 2 == 0)  //geht das herausfinden ob eine ungerade oder gerade eingabe getätigt wurde auch in 1 schleife?
	for (vector&lt;int&gt;::const_iterator count = zahlen.begin(), count_max = zahlen.begin() + zahlen.size(); count != zahlen.begin() + zahlen.size() / 2; count++ ) 
	{
		count_max--;
		cout &lt;&lt; *count &lt;&lt; &quot; + &quot; &lt;&lt; *count_max &lt;&lt; &quot; = &quot; &lt;&lt; *count + *count_max &lt;&lt; endl;	
	}

	else for (vector&lt;int&gt;::const_iterator count = zahlen.begin(), count_max = zahlen.begin() + zahlen.size(); count != zahlen.end(); count ++) 

	{
		count_max--;
		if (count == count_max) cout &lt;&lt; *count &lt;&lt; endl;
		else cout &lt;&lt; *count &lt;&lt; &quot; + &quot; &lt;&lt; *count_max &lt;&lt; &quot; = &quot; &lt;&lt; *count + *count_max &lt;&lt; endl;
	}	
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2289890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289890</guid><dc:creator><![CDATA[Dacen]]></dc:creator><pubDate>Tue, 15 Jan 2013 15:36:33 GMT</pubDate></item><item><title><![CDATA[Reply to (einfache) Iterator-Aufgabe hässlich gelöst? on Tue, 15 Jan 2013 17:59:09 GMT]]></title><description><![CDATA[<p>Zu dem ersten Programm:</p>
<pre><code>cout &lt;&lt; *zähler &lt;&lt; &quot;+&quot; &lt;&lt; *(zähler + 1) &lt;&lt; &quot;=&quot; &lt;&lt; *zahler + *(zähler + 1) &lt;&lt; endl;
</code></pre>
<p>Gewöhne dir bitte die Umlaute ab, die meisten Compiler haben damit Probleme!<br />
Das else kannst du übrigens weglassen.</p>
<p>Zu dem zweiten Programm:</p>
<pre><code>auto start = zahlen.cbegin(); // const_iterator
auto end = zahlen.crbegin();  // const_reverse_iterator 
for (; start != zahlen.begin() + zahlen.size() / 2; ++start, ++end)
     cout &lt;&lt; *start &lt;&lt; &quot;+&quot; &lt;&lt; *end &lt;&lt; &quot;=&quot; &lt;&lt; *start + *end &lt;&lt; endl;
if (zahlen.size() % 2 != 0)
     cout &lt;&lt; *start &lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2289901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289901</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 15 Jan 2013 17:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to (einfache) Iterator-Aufgabe hässlich gelöst? on Tue, 15 Jan 2013 16:00:01 GMT]]></title><description><![CDATA[<p>Eingabe, Ausgabe und Berechnung trennen!</p>
<p>Sonst so: Wie veraendert sich die Ausgabe bei Aufgabe 1., wenn du bei einer ungeraden Anzahl einfach eine 0 zusaetzlich anhaengst? Jetzt hast du immer nur eine gerade Anzahl von Elementen im Vektor und brauchst weniger ifs. Sofern nur deren Summe ausgegeben werden soll. Gut, der Trick funktioniert bei Aufgabe 2 nichtmehr.</p>
<p>Do not do this:</p>
<pre><code class="language-cpp">cout &lt;&lt; (*(--zähler) + *(++zähler)) &lt;&lt; endl;
</code></pre>
<p>Zu Aufgabe 2: Wenn der Indexoperator verwendet werden soll, warum verwendest du ihn nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2289905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289905</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Jan 2013 16:00:01 GMT</pubDate></item><item><title><![CDATA[Reply to (einfache) Iterator-Aufgabe hässlich gelöst? on Tue, 15 Jan 2013 17:02:34 GMT]]></title><description><![CDATA[<p>Wow, dass die 2.Schleife so einfach gehen kann gut zu wissen danke.<br />
Ich glaube bei Aufgabe 1 meinst du</p>
<pre><code>cout &lt;&lt; *zähler &lt;&lt; &quot;+&quot; &lt;&lt; *(zähler + 1) &lt;&lt; &quot;=&quot; &lt;&lt; *zähler + *(zähler + 1);
</code></pre>
<p>Ich versteh ja, dass bei mir die zähler erhöhe und so eben nicht, aber wieso funktionieren meine 3 cout Zeilen (ich weiß so soll man das nicht machen), wenn ich sie aber nur in 1 cout zeile schreibe, dann erst wird die Ausgabe falsch? Ist es wegen der Position des ++? Ich will es nur verstehen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@knivil</a><br />
Uhh das mit dem 0 dranhängen ist auch eine gute Idee, muss ich mir merken!<br />
Ich spiel gerne mit den Aufgaben herum um zu wissen, was ich alles mit den in den Kapitel besprochenen Themen machen kann und weil ich nicht immer alles wegkommentieren will klatsch ich mehr oder weniger alles zusammen, es ist nur zu Lernzwecken :D!</p>
<p>Nein das mit den Indexoperatoren habe ich in der Aufgabe davor schon gemacht. In dieser sollte ich dasselbe machen nur sie einfach durch Iteratoren ersetzen einfach um ein bisschen vertraut damit zu werden und fand meine Lösung irgendwie blöd oder überhaupt Iteratoren, wenn es mit dem index so einfach geht. Anscheinend kommt in den späteren Kapiteln noch was lol.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2289961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289961</guid><dc:creator><![CDATA[Dacen]]></dc:creator><pubDate>Tue, 15 Jan 2013 17:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to (einfache) Iterator-Aufgabe hässlich gelöst? on Tue, 15 Jan 2013 18:04:22 GMT]]></title><description><![CDATA[<p>Ja, ich meinte natürlich das, was du geschrieben hast.<br />
Das mit dem ++/-- weiß ich auch nicht so genau.<br />
Und wenn du eh mit Iteratoren herumspielst, versuche doch mal, ein Iteratorenpaar an die Funktion zu übergeben.<br />
Das erste gibt den Anfang der Seqeunz an, mit der das gemacht werden soll, der zweite das Ende.<br />
Dann trennst du auch die Eingabe vom eigentlichen Algorithmus und bist flexibler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2289991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289991</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 15 Jan 2013 18:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to (einfache) Iterator-Aufgabe hässlich gelöst? on Wed, 16 Jan 2013 09:01:57 GMT]]></title><description><![CDATA[<p>Dacen schrieb:</p>
<blockquote>
<p>[...] wieso funktionieren meine 3 cout Zeilen (ich weiß so soll man das nicht machen), wenn ich sie aber nur in 1 cout zeile schreibe, dann erst wird die Ausgabe falsch?<br />
Ist es wegen der Position des ++? Ich will es nur verstehen.</p>
</blockquote>
<p>Dacen schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cout &lt;&lt; *zähler &lt;&lt; &quot; + &quot;;
// wenn ich alles in 1 zeile schreibe, werden falsche zahlen ausgegeben,
// trenne ich sie in mehrere auf klappts. warum?
cout &lt;&lt; * (++zähler) &lt;&lt; &quot; = &quot;;
           
cout &lt;&lt; (*(--zähler) + *(++zähler)) &lt;&lt; endl;
</code></pre>
</blockquote>
<p>Also alles in einer Zeile:</p>
<pre><code class="language-cpp">cout &lt;&lt; *zaehler &lt;&lt; &quot; + &quot; &lt;&lt; *(++zaehler) &lt;&lt; &quot; = &quot; &lt;&lt; (*(--zaehler) + *(++zaehler)) &lt;&lt; endl;
</code></pre>
<p>Das Problem ist, dass dieser Ausdruck mehrere Nebenenffekte auf <code>zaehler</code> hat (mehrere Prefix-In-, bzw. Prefix-Dekrementierungen).<br />
Grundsätzlich ist die Reihenfolge der Auswertung der verschiedenen Operanden eines Ausdrucks nicht definiert (&quot;unsequenced&quot;, s. C++11 1.9/15)<br />
Und mehrere Nebeneffekte auf denselben Skalar in nicht definierter Reihenfolge resultieren in &quot;undefined Behaviour&quot; (ebd.)</p>
<p>Dacen schrieb:</p>
<blockquote>
<p>Hab mir ein Buch besorgt und bin dabei es seit einer Woche durchzuarbeiten.<br />
Im Buch werden zu jedem Kapitel Aufgaben gestellt leider aber keine Lösungen.</p>
</blockquote>
<p>Welches Buch ist das?<br />
Dein Stil nach einer Woche C++ lässt mich vermuten, dass an dieser Stelle ruhig ein wenig Werbung für das gute Stück gemacht werden könnte...</p>
<p>Als Ergänzung zu Deinem Buch kannst Du Dir <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf" rel="nofollow">hier</a> noch den aktuellen C++ Standard runterladen, als unverzichtbare Referenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290160</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 16 Jan 2013 09:01:57 GMT</pubDate></item><item><title><![CDATA[Reply to (einfache) Iterator-Aufgabe hässlich gelöst? on Wed, 16 Jan 2013 16:12:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a> Hmm, werd ich mal ausprobieren. Wie gesagt ich wollte halt einfach nur den Hauptteil bzw. die Schleife hinkriegen und hab jetzt Ausgabe usw. eher nebensätzlich gesehen.</p>
<p>Das Buch, das ich gerade lese ist der C++ Primer, vierte Auflage(in Englisch). Ich hab die Empfehlung für dieses Buch eigentlich aus diesem Forum her, also eigentlich muss ich Euch danken :). Mir gefällt es dass so vieles erklärt wird, was z.B. bei Tuts nur kurz angeschnitten wird oder mir gesagt wird ich solls einfach &quot;kopieren&quot;, ist zwar toll dass es dann klappt aber ich wills auch verstehen. Bin grade mal auf Seite 97, freue mich schon auf die restlichen 800 :D.</p>
<p>Und danke das mit dem undefined behaviour verstehe ich, diese 3 Zeilen sind aus dem verzweifelten Versuch entstanden durch rumspielen am Code die Lösung zu kriegen, haha. Als ich die mir angeschaut hatte dachte ich mir schon, dass es einfach nur grausam ausschaut. Zur Referenz gleich mal ein bookmark gemacht, wird als Ergänzung und Vertiefung bestimmt hilfreich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290322</guid><dc:creator><![CDATA[Dacen]]></dc:creator><pubDate>Wed, 16 Jan 2013 16:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to (einfache) Iterator-Aufgabe hässlich gelöst? on Wed, 16 Jan 2013 16:30:22 GMT]]></title><description><![CDATA[<p>Nach dieser Methode arbeiten auch die Algorithmen der Standardbibliothek. (Iterator start, Iterator end, ... Iterator ist ein Template)<br />
Auch ein Lesezeichen wert ist auf jeden Fall, die <a href="http://www.cplusplus.com/reference/" rel="nofollow">Referenz der Standardbibliothek</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290334</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 16 Jan 2013 16:30:22 GMT</pubDate></item></channel></rss>