<?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[Beucherverwaltung -&amp;gt; sollte ich Pointer verwenden ?]]></title><description><![CDATA[<p>Servs zusammen,</p>
<p>ich sitze grade vor dieser Aufgabe:</p>
<blockquote>
<p>Schreiben Sie ein Programm, das zu der Datenstruktur Buch mit Preis, Autor und<br />
Seitenzahl folgendes Menü anbietet:<br />
0 - Ende des Programms,<br />
1 - Einlesen eines Buches,<br />
2 - Ausgabe aller Bücher,<br />
3 - Durchschnittspreis ermitteln<br />
4 ? Ausgabe von 5 Bücher die dem Durchschnittspreis am nächsten liegen.<br />
Zu den Punkten des Menüs (außer 'Ende') sind jeweils Funktionen zu definieren und<br />
aufzurufen!</p>
</blockquote>
<p>Ich wuerde für das Buch ne ne structur schreiben und diese dann in einem Array ablegen. Auch mit dem Rest sollte ich kaum Schwierigkeiten bekommen, meine Frage ist nur ob ich in dieser Aufgabe Zeiger benutzen soll oder ob ich auch ohne auskomme ?<br />
Das Einsatzgebiet von Zeigern will ich irgendwie nicht begreifen, ich habs zwar schon in einigen Buechern nachgelesen [C++ Das Grundlagenbuch, C++ Objektorientierte Programmierung von Anfang an, C++ die Referent] aber irgendwie hab ich den Sinn darin noch nicht ganz verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
<p>Über Antworten bin ich wie immer dankbar <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>
<p>Xecutor</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/73358/beucherverwaltung-gt-sollte-ich-pointer-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 15:32:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/73358.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 May 2004 10:07:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Beucherverwaltung -&amp;gt; sollte ich Pointer verwenden ? on Sun, 09 May 2004 10:07:22 GMT]]></title><description><![CDATA[<p>Servs zusammen,</p>
<p>ich sitze grade vor dieser Aufgabe:</p>
<blockquote>
<p>Schreiben Sie ein Programm, das zu der Datenstruktur Buch mit Preis, Autor und<br />
Seitenzahl folgendes Menü anbietet:<br />
0 - Ende des Programms,<br />
1 - Einlesen eines Buches,<br />
2 - Ausgabe aller Bücher,<br />
3 - Durchschnittspreis ermitteln<br />
4 ? Ausgabe von 5 Bücher die dem Durchschnittspreis am nächsten liegen.<br />
Zu den Punkten des Menüs (außer 'Ende') sind jeweils Funktionen zu definieren und<br />
aufzurufen!</p>
</blockquote>
<p>Ich wuerde für das Buch ne ne structur schreiben und diese dann in einem Array ablegen. Auch mit dem Rest sollte ich kaum Schwierigkeiten bekommen, meine Frage ist nur ob ich in dieser Aufgabe Zeiger benutzen soll oder ob ich auch ohne auskomme ?<br />
Das Einsatzgebiet von Zeigern will ich irgendwie nicht begreifen, ich habs zwar schon in einigen Buechern nachgelesen [C++ Das Grundlagenbuch, C++ Objektorientierte Programmierung von Anfang an, C++ die Referent] aber irgendwie hab ich den Sinn darin noch nicht ganz verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
<p>Über Antworten bin ich wie immer dankbar <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>
<p>Xecutor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/516924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/516924</guid><dc:creator><![CDATA[Xecutor]]></dc:creator><pubDate>Sun, 09 May 2004 10:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Beucherverwaltung -&amp;gt; sollte ich Pointer verwenden ? on Sun, 09 May 2004 10:27:10 GMT]]></title><description><![CDATA[<p>Wenn du die Wahl hast, dann mach es so:<br />
-Erstelle eine Struktur, oder Klasse mit Zugriffsfunktionen für die Bücher<br />
-Speicher die in einem Vector, da musst du dir um die Größe keine Sorgen machen<br />
-Erstelle die Funktionen und speicher in einem Vector/Array die Funktionspointer,<br />
mache alle Funktionen nach diesem Schema: void Funktionsname (void); ,dann sieht<br />
der Funktionszeiger so aus: void (*fpointer)(void);<br />
-Lies die Eingabe ein und verwende die Zahl als Index für dein Array, so wird<br />
automatisch die passende Funktion aufgerufen, vllt. noch ne überprüfung ob die<br />
Zahl auch nicht zu groß oder zu klein ist.</p>
<p>So würde ich das hier lösen, groß was mit OOP (z.B. MVC Pattern) wäre hier definitiv<br />
übertrieben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/516934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/516934</guid><dc:creator><![CDATA[SirLant]]></dc:creator><pubDate>Sun, 09 May 2004 10:27:10 GMT</pubDate></item><item><title><![CDATA[Reply to Beucherverwaltung -&amp;gt; sollte ich Pointer verwenden ? on Sun, 09 May 2004 12:59:26 GMT]]></title><description><![CDATA[<p>Wie du schon sagtest, OOP wäre für die Aufgabe nen Overkill <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="😉"
    /><br />
Vorgabe war auch keine Klassen zu verwenden, deswegen auch struct.<br />
Bin bis jetzt ganz gut voran gekommen, nur die Aufgabe:<br />
- Ermitteln von 5 Buechern, die dem Durchschnittspreis an nähsten liegen<br />
bringt mich etwas ins grübbeln.</p>
<p>Mein momentaner Source:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

typedef struct
{
	char autor[25];
	int seitenzahl;
	double preis;

}Buch;

int auswahl = 0;
int aktuelleAnzahl = 0;
int maxAnzahl = 100;

Buch *buecherListe = new Buch[maxAnzahl];

void buchEinlesen(void);
void ausgabeAllerBuecher(void);
double durchschnittspreis(void);
void ds_5_buchausgabe(void);

int main()
{
	cout &lt;&lt; &quot;***-- Buchverwaltung --***&quot;;
	//--- Menuefuehrung ---

	do 
	{
		cout &lt;&lt; &quot;\n\n\nWaehlen Sie eine Funktion : &quot; &lt;&lt; endl;
		cout &lt;&lt; &quot;\n0 um das Prgramm zu beenden &quot;&lt;&lt; endl;
		cout &lt;&lt; &quot;1 fuer das Einlesen eines Buches &quot;&lt;&lt; endl;
		cout &lt;&lt; &quot;2 fuer die Ausgabe aller Buecher &quot;&lt;&lt; endl;
		cout &lt;&lt; &quot;3 fuer die Ermittlung des Durchschnittspreis &quot;&lt;&lt; endl;
		cout &lt;&lt; &quot;4 fuer die Ermittlung der 5 Durchschnittsbuecher &quot;&lt;&lt; endl;
		cin  &gt;&gt; auswahl;

		if(auswahl == 1)
		{
			int count = 0;
			cout &lt;&lt; &quot;\n\nWieviel Buecher möchten Sie einlesen?  &quot;;
			cin &gt;&gt; count;
			for(int i = 0; i &lt; count; i++)
				buchEinlesen();
		}

		if(auswahl == 2)
		{
			ausgabeAllerBuecher();
		}

		if(auswahl == 3)
		{
			durchschnittspreis();
		}

	}
	while (auswahl != 0);

return 0;

}

void buchEinlesen(void)	
{		
	cout &lt;&lt; &quot;\n\nGeben Sie bitte einen Buchtitel an: &quot;;
	cin &gt;&gt; buecherListe[aktuelleAnzahl].autor;
	cout &lt;&lt; &quot;Geben Sie bitte den Preis in Euro an: &quot;;
	cin &gt;&gt; buecherListe[aktuelleAnzahl].preis;
	cout &lt;&lt; &quot;Geben Sie bitte die Seitenanzahl an: &quot;;
	cin &gt;&gt; buecherListe[aktuelleAnzahl].seitenzahl;

	aktuelleAnzahl++;
}

void ausgabeAllerBuecher(void)
{
	for (int i = 0; i &lt; aktuelleAnzahl; i++)
	{
		cout &lt;&lt; &quot;\n\n Buch-Nr.: &quot; &lt;&lt; i+1 &lt;&lt; endl;
		cout &lt;&lt; &quot;Name des Autors: &quot; &lt;&lt; buecherListe[i].autor &lt;&lt; endl;
		cout &lt;&lt; &quot;Seitenanzahl   : &quot; &lt;&lt; buecherListe[i].seitenzahl &lt;&lt; endl;
		cout &lt;&lt; &quot;Preis          : &quot; &lt;&lt; buecherListe[i].preis &lt;&lt; endl;
	}
}

double durchschnittspreis(void)
{
	double gesamtpreis = 0;
	for (int i = 0; i &lt; aktuelleAnzahl; i++)
	{
		gesamtpreis += buecherListe[i].preis;
	}
	double durchschnpreis = gesamtpreis / aktuelleAnzahl;
	cout.precision(4);
	cout &lt;&lt; &quot;\n\nDurchschnittspreis aller Buecher betraegt: &quot; &lt;&lt; durchschnpreis	&lt;&lt; &quot; Euro&quot; &lt;&lt; endl;
	return durchschnpreis;
}

void ds_5_buchausgabe(void)
{
	double ds_preis = durchschnittspreis();
}
</code></pre>
<p>Bei der Ausgabe der 5 Buecher würde ich so vorgehen:<br />
- Ich erstell mir ein neues Array, dann ziehe ich die Preise der einzelnen Buecher vom Durchschnittspreis ab.[Negativ-Differenzen multipliziere ich mit -1 bzw. nehme den Betrag von] Diese Differenzen bzw. die Buecher schreibe ich in das neue Array rein. Jetzt muesste ich ja Wert für Wert des neuen Arrays vergleichen und schauen welche die kleinsten 5 sind.</p>
<p>Mir kommt allerdings meine Denkweise etwas umständlich vor, kann man das einfacher lösen ?</p>
<p>Xecutor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/517006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/517006</guid><dc:creator><![CDATA[Xecutor]]></dc:creator><pubDate>Sun, 09 May 2004 12:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Beucherverwaltung -&amp;gt; sollte ich Pointer verwenden ? on Sun, 09 May 2004 13:34:43 GMT]]></title><description><![CDATA[<p>Ich würde es so machen:</p>
<pre><code class="language-cpp">double best_books[5];

double dpreis = 12.0; //nur nen Beispielpreis

for (int i = 0; i &lt; alleBuecher; i++)
{
    for (int j = 0; j &lt; 5; j++)
    {
        if (abs (buecher[i] - dpreis) &lt; best_books[j])
            best_books[j] = buecher[i];
    }
}
</code></pre>
<p>Ob der Code so stimmt kann ich nicht sagen, aber ich würde einfach den Absolutwert<br />
der Differenz des Buches mit den aktuell niedrigsten 5Büchern vergleichen und ggf.<br />
austauschen.<br />
Ob das so die beste Lösung ist bezweifel ich ist immerhin ne O(n²) Laufzeit,<br />
besser wäre es vllt. für jedes Buch die Differenz zum dpreis zu berechnen und<br />
diese sortiert zu speichern, wäre die Laufzeit des Sortieralgos sowie das<br />
Berechnen des dpreises für jedes Element (O(n) + laufzeit des Sortieralgos)</p>
<p>Edit:<br />
*grml* schon 2mal zu früh abgeschickt</p>
<p>Edit:</p>
<p>Hier mal nen Bsp. Code</p>
<pre><code class="language-cpp">// Dpreise berechnen O(n)
double dpreise[maxAnzahl];
for (int i = 0; i &lt; maxAnzahl; i++)
    dpreise[i] = std::abs (buecherListe[i]-&gt;preis - dpreis);

// Sortieren
std::sort (dpreise[0], dpreise[100]);

// Die ersten 5 sind jetzt die mit den besten Durchschnittspreisen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/517024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/517024</guid><dc:creator><![CDATA[SirLant]]></dc:creator><pubDate>Sun, 09 May 2004 13:34:43 GMT</pubDate></item></channel></rss>