<?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[Frage zu Programmieraufgabe]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgende Programmieraufgabe zu lösen:</p>
<p>&quot;Implementieren sie einen Stack mit Hilfe eines dynamischen Array. Hierbei werden die Stackelemente in einem Array gespeichert.Jedes neue Stapelelement wird dabei als hinterstes Element in das Array eingefügt. Sollte durch eine push Operation die ursprüngliche Arragrösse überschritten werden, wird ein neues, doppelt so grosses Array erstellt, der ursprüngliche Inhalt hineinkopiert und das alte Array anschliessend gelöscht. Führen sie mit einem Zähler die aktuelle Anzahl Elemente mit. Zum Programmstart hat das dynamische Array die Gröse 2.&quot;</p>
<p>Nun habe ich leider das Problem, dass ich das Ziel dieser Aufgabe nicht ganz begreiffe? Ich habe einfach einmal ein Programm gemacht und wollte fragen, ob mein Programm die Anforderungen erfüllt?</p>
<p>Es wurde uns ein Framework vorgegeben:</p>
<pre><code class="language-cpp">[code]

#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

//Structs, Arrays und andere globale Variablen hier definieren.

void init() {
//TODO: Code hier einf�gen	
}

int pop(){
//TODO: Code hier einf�gen		
}

void push(int element){
//TODO: Code hier einf�gen		
}

int size() {
//TODO: Code hier einf�gen	
}

void clear() {
//TODO: Code hier einf�gen	
}

//Dieses Funktion implementiert eine Testumgebung f�r den Stack
void test() {
    cout &lt;&lt; &quot;The program has been startet without any arguments.&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;The program enters the stack test mode:&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;Enter one of the commands: push, pop, end&quot; &lt;&lt; endl;
    string command;
    do{
      cin &gt;&gt; command;
      if (command == &quot;pop&quot;){
        cout &lt;&lt; pop() &lt;&lt; endl;
      } else if (command == &quot;push&quot;){
        cout &lt;&lt; &quot;element?&quot;;
        int elementToPush;
        cin &gt;&gt; elementToPush;
        push(elementToPush);
      } else if(command == &quot;end&quot;){
      } else {cout &lt;&lt; &quot;command not recognised&quot;&lt;&lt; endl;};
    }while(command != &quot;end&quot;);
}

int main(int argc, char * argv[]){

  init();	
  test();
  clear();
  return 0;

}
</code></pre>
<p>Mein Programm schaut nun so aus:</p>
<pre><code class="language-cpp">[code]

#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

//******************************************************************************

struct dynamic_stapel{
      int groesse;
      int top_Element;
      }stapel = {2,0};

int anzahl_Elemente = 0;

int neudazu =0;

int *dynamic = new int[stapel.groesse];

//******************************************************************************

void init() {

     dynamic_stapel stapel = {2,0};	
}

//******************************************************************************

int pop(){

     anzahl_Elemente =  anzahl_Elemente -1;

}

//******************************************************************************

void push(int element){   

     if (anzahl_Elemente &gt; stapel.groesse){

           while (anzahl_Elemente &gt; stapel.groesse){
                 stapel.groesse = 2*(stapel.groesse);
                 }

           int copy[anzahl_Elemente];

           for (int i=0 ; i&lt;anzahl_Elemente ;i++){
               copy[i] = dynamic[i];
               }

           delete [] dynamic;

           dynamic[anzahl_Elemente];

           for (int i=0 ; i&lt;anzahl_Elemente ;i++){
               dynamic[i] = copy[i];
               }
           }

     for (int j= neudazu; j &lt; anzahl_Elemente ;j++){
           cout &lt;&lt; &quot;\n&quot;;
           cout &lt;&lt; &quot;Bitte geben sie Element &quot; &lt;&lt; j+1 &lt;&lt; &quot; ein \n&quot;;   
           cin &gt;&gt; dynamic[j];
           cout &lt;&lt; &quot;\n&quot;;
           }		
}

//******************************************************************************

int size() {

    anzahl_Elemente;	
}

//******************************************************************************

void clear() {

     delete [] dynamic;	
}

//******************************************************************************

//Dieses Funktion implementiert eine Testumgebung f?r den Stack
void test() {
    cout &lt;&lt; &quot;The program has been startet without any arguments.&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;The program enters the stack test mode:&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;Enter one of the commands: push, pop, end&quot; &lt;&lt; endl;
    string command;
    do{
      cin &gt;&gt; command;
      if (command == &quot;pop&quot;){
        cout &lt;&lt; pop() &lt;&lt; endl;
      } else if (command == &quot;push&quot;){
        cout &lt;&lt; &quot;element?\n&quot;;
        int elementToPush;
        cin &gt;&gt; elementToPush;
        anzahl_Elemente = anzahl_Elemente +  elementToPush;
        neudazu = anzahl_Elemente -  elementToPush;
        push(elementToPush);
        stapel.top_Element = dynamic[anzahl_Elemente];
      } else if(command == &quot;end&quot;){
      } else {cout &lt;&lt; &quot;command not recognised&quot;&lt;&lt; endl;};
    }while(command != &quot;end&quot;);
}

//******************************************************************************

int main(int argc, char * argv[]){

  init();	
  test();

  cout &lt;&lt; &quot;\n&quot;;

  cout &lt;&lt; &quot;Der Stapel besteht aus folgenden Elementen: &quot;;
  for (int i=0; i &lt; anzahl_Elemente ;i++){
      cout &lt;&lt; dynamic[i];
      }

  cout &lt;&lt; &quot;\n&quot;;

  cout &lt;&lt; &quot;Die Stapelgroesse betraegt: &quot; &lt;&lt; stapel.groesse;

  cout &lt;&lt; &quot;\n&quot;;

  cout &lt;&lt; &quot;Der Stapel besteht aus &quot; &lt;&lt; anzahl_Elemente &lt;&lt; &quot; Elementen.&quot;;

  cout &lt;&lt; &quot;\n&quot;;

  clear();

  cin.get();
  cin.get();
  return 0;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/295162/frage-zu-programmieraufgabe</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 12:47:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/295162.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Nov 2011 12:24:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 12:24:49 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgende Programmieraufgabe zu lösen:</p>
<p>&quot;Implementieren sie einen Stack mit Hilfe eines dynamischen Array. Hierbei werden die Stackelemente in einem Array gespeichert.Jedes neue Stapelelement wird dabei als hinterstes Element in das Array eingefügt. Sollte durch eine push Operation die ursprüngliche Arragrösse überschritten werden, wird ein neues, doppelt so grosses Array erstellt, der ursprüngliche Inhalt hineinkopiert und das alte Array anschliessend gelöscht. Führen sie mit einem Zähler die aktuelle Anzahl Elemente mit. Zum Programmstart hat das dynamische Array die Gröse 2.&quot;</p>
<p>Nun habe ich leider das Problem, dass ich das Ziel dieser Aufgabe nicht ganz begreiffe? Ich habe einfach einmal ein Programm gemacht und wollte fragen, ob mein Programm die Anforderungen erfüllt?</p>
<p>Es wurde uns ein Framework vorgegeben:</p>
<pre><code class="language-cpp">[code]

#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

//Structs, Arrays und andere globale Variablen hier definieren.

void init() {
//TODO: Code hier einf�gen	
}

int pop(){
//TODO: Code hier einf�gen		
}

void push(int element){
//TODO: Code hier einf�gen		
}

int size() {
//TODO: Code hier einf�gen	
}

void clear() {
//TODO: Code hier einf�gen	
}

//Dieses Funktion implementiert eine Testumgebung f�r den Stack
void test() {
    cout &lt;&lt; &quot;The program has been startet without any arguments.&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;The program enters the stack test mode:&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;Enter one of the commands: push, pop, end&quot; &lt;&lt; endl;
    string command;
    do{
      cin &gt;&gt; command;
      if (command == &quot;pop&quot;){
        cout &lt;&lt; pop() &lt;&lt; endl;
      } else if (command == &quot;push&quot;){
        cout &lt;&lt; &quot;element?&quot;;
        int elementToPush;
        cin &gt;&gt; elementToPush;
        push(elementToPush);
      } else if(command == &quot;end&quot;){
      } else {cout &lt;&lt; &quot;command not recognised&quot;&lt;&lt; endl;};
    }while(command != &quot;end&quot;);
}

int main(int argc, char * argv[]){

  init();	
  test();
  clear();
  return 0;

}
</code></pre>
<p>Mein Programm schaut nun so aus:</p>
<pre><code class="language-cpp">[code]

#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

//******************************************************************************

struct dynamic_stapel{
      int groesse;
      int top_Element;
      }stapel = {2,0};

int anzahl_Elemente = 0;

int neudazu =0;

int *dynamic = new int[stapel.groesse];

//******************************************************************************

void init() {

     dynamic_stapel stapel = {2,0};	
}

//******************************************************************************

int pop(){

     anzahl_Elemente =  anzahl_Elemente -1;

}

//******************************************************************************

void push(int element){   

     if (anzahl_Elemente &gt; stapel.groesse){

           while (anzahl_Elemente &gt; stapel.groesse){
                 stapel.groesse = 2*(stapel.groesse);
                 }

           int copy[anzahl_Elemente];

           for (int i=0 ; i&lt;anzahl_Elemente ;i++){
               copy[i] = dynamic[i];
               }

           delete [] dynamic;

           dynamic[anzahl_Elemente];

           for (int i=0 ; i&lt;anzahl_Elemente ;i++){
               dynamic[i] = copy[i];
               }
           }

     for (int j= neudazu; j &lt; anzahl_Elemente ;j++){
           cout &lt;&lt; &quot;\n&quot;;
           cout &lt;&lt; &quot;Bitte geben sie Element &quot; &lt;&lt; j+1 &lt;&lt; &quot; ein \n&quot;;   
           cin &gt;&gt; dynamic[j];
           cout &lt;&lt; &quot;\n&quot;;
           }		
}

//******************************************************************************

int size() {

    anzahl_Elemente;	
}

//******************************************************************************

void clear() {

     delete [] dynamic;	
}

//******************************************************************************

//Dieses Funktion implementiert eine Testumgebung f?r den Stack
void test() {
    cout &lt;&lt; &quot;The program has been startet without any arguments.&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;The program enters the stack test mode:&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;Enter one of the commands: push, pop, end&quot; &lt;&lt; endl;
    string command;
    do{
      cin &gt;&gt; command;
      if (command == &quot;pop&quot;){
        cout &lt;&lt; pop() &lt;&lt; endl;
      } else if (command == &quot;push&quot;){
        cout &lt;&lt; &quot;element?\n&quot;;
        int elementToPush;
        cin &gt;&gt; elementToPush;
        anzahl_Elemente = anzahl_Elemente +  elementToPush;
        neudazu = anzahl_Elemente -  elementToPush;
        push(elementToPush);
        stapel.top_Element = dynamic[anzahl_Elemente];
      } else if(command == &quot;end&quot;){
      } else {cout &lt;&lt; &quot;command not recognised&quot;&lt;&lt; endl;};
    }while(command != &quot;end&quot;);
}

//******************************************************************************

int main(int argc, char * argv[]){

  init();	
  test();

  cout &lt;&lt; &quot;\n&quot;;

  cout &lt;&lt; &quot;Der Stapel besteht aus folgenden Elementen: &quot;;
  for (int i=0; i &lt; anzahl_Elemente ;i++){
      cout &lt;&lt; dynamic[i];
      }

  cout &lt;&lt; &quot;\n&quot;;

  cout &lt;&lt; &quot;Die Stapelgroesse betraegt: &quot; &lt;&lt; stapel.groesse;

  cout &lt;&lt; &quot;\n&quot;;

  cout &lt;&lt; &quot;Der Stapel besteht aus &quot; &lt;&lt; anzahl_Elemente &lt;&lt; &quot; Elementen.&quot;;

  cout &lt;&lt; &quot;\n&quot;;

  clear();

  cin.get();
  cin.get();
  return 0;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2142111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142111</guid><dc:creator><![CDATA[tschabos]]></dc:creator><pubDate>Tue, 08 Nov 2011 12:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 12:35:56 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;stack&gt;
</code></pre>
<p>Fertig. Aufgabe gelöst.</p>
<p>Wenn du konkrete Fragen hättest, wird dir auch gerne geholfen, aber einfach nur 200 zeilen Code und &quot;guckt mal&quot; ist zu wenig um mehr zu erwarten, als dass ich mal versuche das Ding durch den Compiler zu jagen:</p>
<pre><code>stack.cpp: In function ‘void init()’:
stack.cpp:23: warning: unused variable ‘stapel’
stack.cpp: In function ‘int pop()’:
stack.cpp:32: warning: no return statement in function returning non-void
stack.cpp: In function ‘void push(int)’:
stack.cpp:44: warning: ISO C++ forbids variable length array ‘copy’
stack.cpp:52: warning: statement has no effect
stack.cpp: At global scope:
stack.cpp:36: warning: unused parameter ‘element’
stack.cpp: In function ‘int size()’:
stack.cpp:72: warning: statement has no effect
stack.cpp:73: warning: no return statement in function returning non-void
stack.cpp: At global scope:
stack.cpp:109: warning: unused parameter ‘argc’
stack.cpp:109: warning: unused parameter ‘argv’
</code></pre>
<p>Offensichtlich ist da ziemlich viel kaputt. Vielleicht solltest du erst einmal ein korrektes Programm schreiben, bevor du es uns bewerten lässt. Und benutze Compilerwarnungen. C++-Compiler sind sehr tolerant gegenüber ungewöhnlichen Programmiertechniken, da allgemein angenommen wird, dass der Programmierer Ahnung hat und weiß, was er tut. Bei Anfängern ist aber das Gegenteil der Fall und du solltest Warnungen wie Fehler behandeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142117</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 08 Nov 2011 12:35:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 12:50:50 GMT]]></title><description><![CDATA[<p>Bei mir hat der compiler keine Warnung angezeigt (devc++) sonst hätte ich natürlich alles überarbeitet, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142127</guid><dc:creator><![CDATA[tschabos]]></dc:creator><pubDate>Tue, 08 Nov 2011 12:50:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 12:54:36 GMT]]></title><description><![CDATA[<p>tschabos schrieb:</p>
<blockquote>
<p>Bei mir hat der compiler keine Warnung angezeigt (devc++) sonst hätte ich natürlich alles überarbeitet, danke.</p>
</blockquote>
<p>Du vergisst ein <code>return</code> in einer Funktion und der DevC++ gibt nicht mal eine Warnung raus? Wow, wechsle den Compiler wenn möglich. Oder hast du bewusst Warnungen abgestellt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142130</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 08 Nov 2011 12:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 12:56:33 GMT]]></title><description><![CDATA[<p>tschabos schrieb:</p>
<blockquote>
<p>Bei mir hat der compiler keine Warnung angezeigt (devc++) sonst hätte ich natürlich alles überarbeitet, danke.</p>
</blockquote>
<p>1. Dann lerne mit deiner IDE umzugehen. Das kann Dev-C++ sicher auch.<br />
2. Wenn kein kleines Wunder vorliegt, hast du vermutlich eine hoffnungslos veraltete Version von Dev-C++, da erst kürzlich nach vielen Jahren Pause etwas neues herauskam.<br />
Guckst du hier:<br />
<a href="http://www.c-plusplus.net/forum/263174" rel="nofollow">http://www.c-plusplus.net/forum/263174</a></p>
<p>_matze schrieb:</p>
<blockquote>
<p>Du vergisst ein <code>return</code> in einer Funktion und der DevC++ gibt nicht mal eine Warnung raus? Wow, wechsle den Compiler wenn möglich. Oder hast du bewusst Warnungen abgestellt?</p>
</blockquote>
<p>Das ist normal, da Dev-C++ auf dem GCC basiert, wo das eine Art &quot;Feature&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142132</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 08 Nov 2011 12:56:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 15:14:45 GMT]]></title><description><![CDATA[<p>So habe mir nochmals Mühe gegeben und das Programm neu geschrieben, jedoch stürzt mir das Programm beim Befehl &quot;end&quot; oder manchmal auch bei &quot;pop&quot; ab, ich seh aber einfach den Fehler nicht, kann mir jemand helfen?</p>
<p>gruss</p>
<pre><code class="language-cpp">[code]

#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

struct dynamic_stapel{ //Definiert ein Struct
      int groesse;
      int top_Element;
      }stapel = {0,0};

int *dynamic_array = new int[stapel.groesse]; //Dies ist das dynamsche Array

int counter =0; //Diese Variable zaehlt die Elemente mit (Groesse Stapel)

void init() { //inizialisiert den struct dynamic_stapel

    stapel.groesse = 2; 
    stapel.top_Element =0; 
}

int pop(){ // nimmt das oberste Element vom Stapel und loescht es, ebenfalls wird der Zeiger auf das Element darunter gerichtet

	if (counter &gt; 0){ // Wenn es mindestens 1 Element gibt

		counter = counter -1; // Elemente nehmen ab
		dynamic_array = dynamic_array -1; //Dann wird der zeiger auf das Array vor dem jetzigen gelegt dynamic_array[i-1]
	}

	return 0; //Soll zeigen, dass der Stapel um 1 Element abnimmt

}

void push(int element){ //legt ein neues Element oben auf den Stappel

     counter = counter + 1; // die Anzahl Elemente nehmen zu

	 if (counter &gt; stapel.groesse){ // Wenn es mehr Elemente gibt als das Array gross ist

		   int copy_array[counter]; //erstellt ein Zwischenspeicherarray

		   for (int i=0 ; i&lt;counter ;i++){ //Umkupieren der Elemente

			   copy_array[i] = dynamic_array[i];
		   }

		   delete [] dynamic_array; //dynamic array Elemente werden geloescht

		   while (counter &gt; stapel.groesse){ //Dann wird die Arraygroesse so lange verdoppelt, bis das Array groesser als die Anzahl Elemente ist.
                 stapel.groesse = 2*(stapel.groesse);
		   }

		   for (int i=0 ; i&lt;counter; i++){ //Nun werden die Copy Elemente wieder in das nun groessere Array kopiert

			   dynamic_array[i] = copy_array[i];
		   }

	 }

	 dynamic_array = dynamic_array +1; //Dynamic Array zeigt nun auf das naechste dynamic_array[i+1]
	 *dynamic_array = element; //Dem obersten Element wird der Wert von der Einageb &quot;element&quot; zugeordnet

}

int size() { //gibt die groesse des Stapels an

	return counter;

}

void clear() { //Loescht den ganzen Stapel

	delete [] dynamic_array;

}

//Dieses Funktion implementiert eine Testumgebung f�r den Stack
void test() {
    cout &lt;&lt; &quot;The program has been startet without any arguments.&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;The program enters the stack test mode:&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;Enter one of the commands: push, pop, end&quot; &lt;&lt; endl;
    string command;
    do{
      cin &gt;&gt; command;
      if (command == &quot;pop&quot;){
        cout &lt;&lt; pop() &lt;&lt; endl;
      } else if (command == &quot;push&quot;){
        cout &lt;&lt; &quot;element?&quot;;
        int elementToPush;
        cin &gt;&gt; elementToPush;
        push(elementToPush);
      } else if(command == &quot;end&quot;){
      } else {cout &lt;&lt; &quot;command not recognised&quot;&lt;&lt; endl;};
    }while(command != &quot;end&quot;);
}

int main(int argc, char * argv[]){

  init();   
  test();
  cout &lt;&lt; &quot;The stacksize is: &quot;; //Gibt die groesse vom Stapel aus
  cout &lt;&lt; counter;
  cout &lt;&lt; &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;The top element is: &quot;; //gibt das oberste Element aus

  clear();
  return 0;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2142181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142181</guid><dc:creator><![CDATA[tschabos]]></dc:creator><pubDate>Tue, 08 Nov 2011 15:14:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 15:38:48 GMT]]></title><description><![CDATA[<p>Fehlermeldung? Zeile?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142189</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 08 Nov 2011 15:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 15:51:15 GMT]]></title><description><![CDATA[<p>Du hast Speicher für 0 Elemente reserviert. Das geht schief, wenn du in irgendeiner Weise da drauf zugreifst.</p>
<p>Ehrlich gesagt: Dein Code ist ein Verbrechen gegen alle Prinzipien sauberer Programmierung und gegen C++. Derjenige der dir das so beigebracht hat, gehört erschossen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142196</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 08 Nov 2011 15:51:15 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 15:51:55 GMT]]></title><description><![CDATA[<p>Wenn du damit fertig bist, sollte das Ganze dann noch vernünftig implementiert werden, d.h.<br />
- ohne globale Variablen<br />
- mit C++-Headern (stdlib.h gehört nicht dazu)<br />
- ggf. mit einer Klasse statt haufenweise freien Funktionen zu den Variablen.</p>
<p>Wenn das, was du da als allererstes gepostet hast, tatsächlich Vorgabe eures Lehrers/Dozenten/Profs ist, hast du natürlich ein Problem - dann macht nämlich schon diese Vorgabe sauberen Code schwierig bis unmöglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142199</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 08 Nov 2011 15:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 16:07:12 GMT]]></title><description><![CDATA[<p>Hallo, das Skelett wurde uns vorgegeben, sprich wir sollen globale Variablen machen, stdlib.h wurde bereits von vornherein eingeführt ect...</p>
<p>Wegen dem reservierten Speicher: Ich dachte, wenn ich anschliessend inizialisiere, reserviert der mir auch mehr Platz?</p>
<p>Der Fehler ist folgender:</p>
<pre><code class="language-cpp">[code]
/***
*void operator delete() - delete a block in the debug heap
*
*Purpose:
*       Deletes any type of block.
*
*Entry:
*       void *pUserData - pointer to a (user portion) of memory block in the
*                         debug heap
*
*Return:
*       &lt;void&gt;
*
*******************************************************************************/

void operator delete(
        void *pUserData
        )
{
        _CrtMemBlockHeader * pHead;

        RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));

        if (pUserData == NULL)
            return;

        _mlock(_HEAP_LOCK);  /* block other threads */
        __TRY

            /* get a pointer to memory block header */
            pHead = pHdr(pUserData);

             /* verify block type */
            _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse));

            _free_dbg( pUserData, pHead-&gt;nBlockUse );

        __FINALLY
            _munlock(_HEAP_LOCK);  /* release other threads */
        __END_TRY_FINALLY

        return;
}

#endif  /* _DEBUG */
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2142211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142211</guid><dc:creator><![CDATA[tschabos]]></dc:creator><pubDate>Tue, 08 Nov 2011 16:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 16:14:36 GMT]]></title><description><![CDATA[<p>tschabos schrieb:</p>
<blockquote>
<p>Wegen dem reservierten Speicher: Ich dachte, wenn ich anschliessend inizialisiere, reserviert der mir auch mehr Platz?</p>
</blockquote>
<p>Falsch gedacht. Wenn du machst</p>
<pre><code class="language-cpp">int a = 1;
int b = a;
a = 5;
</code></pre>
<p>Dann ist b danach schließlich auch nicht 5. (Ich hoffe mal, dass du das auch so siehst)</p>
<p>Du musst also Nachreservieren und Umschichten, wenn du den Stapel vergrößern willst. Du begibst dich hier auf das sehr rutschige Feld der manuellen Speicherverwaltung (etwas, was man in C++ übrigens nie braucht, viel Spaß beim sinnlosen Lernen!), wo selbst geübte Programmierer schnell schwer zu findende und Fehler einbauen, die man zudem immer erst dann auffallen, wenn man das Programm jemandem vorführt (das einzig definierte an undefiniertem Verhalten <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2142218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142218</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 08 Nov 2011 16:14:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 16:28:17 GMT]]></title><description><![CDATA[<p>Die Vorgabe des Framewort ist, wie du ja nun mitbekommen hast, ziemlich Schwachsinnig. Ohne Verbrechen gegen saubere Programmierung ist da nichts zu implementieren (Zudem hat dies mit C++ eigentlich wenig zu tun, außer die Verwendung von cout und Co ist dies vom Aufbau her ein C-Programm; In C++ Programmiert man jedenfalls Anders).</p>
<p>Aber wenn man dieses Framework schon nutzen muss, so kann man dennoch wesentlich sauberer als dein Versuch vorgehen. Zudem ist mir vieles in deinem Programm völlig unverständlich.</p>
<p>Du benutzt einerseits ein Struct wo du Daten zu einem Stack hälst, aber den eigenen Stack und einen Zähler behandelst du davon unabhängig? Des weiteren solltest du dich auf deutsch oder englisch einigen, und nicht ein Mischmasch verwenden.</p>
<p>Ich würde dir vorschlagen dann wenigstens die Informationen zu dem Stapel auch komplett in der Struktur zu halten. Zudem solltest du nicht ständig den Zeiger mit dem du das Array verwaltest hin und her bewegen, sondern lieber einen separaten Zeiger (falls nötig) auf ein aktuelles Element verwalten.</p>
<p>Nach meiner Meinung benötigst du ohnehin weniger Variablen. Dazu aber eine die grundsätzliche Frage: Willst du den eigentlichen Stapel bei jedem push/pop komplett neu generieren, oder willst du nur bei einem push ihn bei Bedarf vergrößern?</p>
<p>Im letzteren Fall würde ich drei Werte halten:<br />
a) Den Zeiger auf das Array<br />
b) Die Größe (Wie groß ist das reservierte Array? Alternativ einen Zeiger auf das Letzte Element*)<br />
c) Die Position (Wo im Array befindet sich das &quot;oberste&quot; Element? Alternativ einen Zeiger auf das aktuelle Element*)<br />
* Ich wäre aber eher für den Zahlenwert, da dies unabhängiger von a ist.</p>
<p>(Im Ersteren Fall wäre Größe und Position immer identisch).</p>
<p>a Würde ich nur dann anfassen wenn du ein neues Array erzeugst.</p>
<p>Einen leeren Stack würde ich auch nicht durch new allozieren, sondern mit 0/NULL definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142222</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 08 Nov 2011 16:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 17:28:14 GMT]]></title><description><![CDATA[<p>Hallo, vielen Dank für die hilfreichen Antworten.</p>
<p>Ok, versuche einmal mehr in die Struktur zu nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142252</guid><dc:creator><![CDATA[tschabos]]></dc:creator><pubDate>Tue, 08 Nov 2011 17:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 18:35:30 GMT]]></title><description><![CDATA[<p>So, habe nun noch versucht die Zählervariable in die struct zu nehmen, dann habe ich noch eine Variable eliminiert. Ich weiss aber immer noch nicht richtig, wie ich das mit dem Pointerarray machen soll. Der Pointer muss ja immer auf das oberste Element zeigen, um es abzurufen. Daher sollte doch der Pointer auch verändert werden, wenn die Arraygrösse nicht ändert?<br />
Und wie würdet ihr das machen wegen der Arraygrösse mit dem Pointer?</p>
<pre><code class="language-cpp">[code]
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

//****************************************************************************************************************************************

struct stack{ //Definiert ein Struct
	int size_array; //Arraygroesse
	int position; //Stapelgroesse (pointer zeigt auf oberstes Element)
    }stack_define;

int *dynamic_array = new int[stack_define.size_array]; //Dies ist das dynamsche Array

//****************************************************************************************************************************************

void init() { //inizialisiert den struct dynamic_stapel

    stack_define.size_array = 2; 
    stack_define.position =0; 
}

//****************************************************************************************************************************************

int pop(){ // nimmt das oberste Element vom Stapel und loescht es, ebenfalls wird der Zeiger auf das Element darunter gerichtet
	if (stack_define.position &gt; 0){ // Wenn es mindestens 1 Element gibt
		stack_define.position = stack_define.position -1;// Elemente nehmen ab
		dynamic_array = dynamic_array -1;
	}
	return 0; //Soll zeigen, dass der Stapel um 1 Element abnimmt    
}

//****************************************************************************************************************************************

void push(int element){ //legt ein neues Element oben auf den Stappel
     stack_define.position = stack_define.position + 1; // die Anzahl Elemente nehmen zu

	 if (stack_define.position &gt; stack_define.size_array){ // Wenn es mehr Elemente gibt als das Array gross ist
		   int copy_array[stack_define.position]; //erstellt ein Zwischenspeicherarray
		   for (int i=0 ; i&lt;stack_define.position ;i++){ //Umkupieren der Elemente
			   copy_array[i] = dynamic_array[i];
		   }
		   delete [] dynamic_array; //dynamic array Elemente werden geloescht
		   while (stack_define.position &gt; stack_define.size_array){ //Dann wird die Arraygroesse so lange verdoppelt, bis das Array groesser als die Anzahl Elemente ist.
                 stack_define.size_array = 2*(stack_define.size_array);
		   }
		   for (int i=0 ; i&lt;stack_define.position; i++){ //Nun werden die Copy Elemente wieder in das nun groessere Array kopiert
			   dynamic_array[i] = copy_array[i];
		   }		
	 }
	 dynamic_array = dynamic_array +1;
	 *dynamic_array = element; //Dem obersten Element wird der Wert von der Einageb &quot;element&quot; zugeordnet      
}

//****************************************************************************************************************************************

int size() { //gibt die groesse des Stapels an	
	return stack_define.position; 
}

//****************************************************************************************************************************************

void clear() { //Loescht den ganzen Stapel
	delete [] dynamic_array;  
}

//****************************************************************************************************************************************

//Dieses Funktion implementiert eine Testumgebung f�r den Stack
void test() {
    cout &lt;&lt; &quot;The program has been startet without any arguments.&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;The program enters the stack test mode:&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;Enter one of the commands: push, pop, end&quot; &lt;&lt; endl;
    string command;
    do{
      cin &gt;&gt; command;
      if (command == &quot;pop&quot;){
        cout &lt;&lt; pop() &lt;&lt; endl;
      } else if (command == &quot;push&quot;){
        cout &lt;&lt; &quot;element?&quot;;
        int elementToPush;
        cin &gt;&gt; elementToPush;
        push(elementToPush);
      } else if(command == &quot;end&quot;){
      } else {cout &lt;&lt; &quot;command not recognised&quot;&lt;&lt; endl;};
    }while(command != &quot;end&quot;);
}

//****************************************************************************************************************************************

int main(int argc, char * argv[]){
  init();   
  test();
  cout &lt;&lt; &quot;The stacksize is: &quot;; //Gibt die groesse vom Stapel aus
  cout &lt;&lt; stack_define.position;
  cout &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;The top element is: &quot;; //gibt das oberste Element aus
  cout &lt;&lt; *dynamic_array;
  clear();  
  return 0;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2142285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142285</guid><dc:creator><![CDATA[tschabos]]></dc:creator><pubDate>Tue, 08 Nov 2011 18:35:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 19:03:04 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Du begibst dich hier auf das sehr rutschige Feld der manuellen Speicherverwaltung</p>
</blockquote>
<p>: richtig</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>etwas, was man in C++ übrigens nie braucht</p>
</blockquote>
<p>: falsch</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>wo selbst geübte Programmierer schnell schwer zu findende und Fehler einbauen</p>
</blockquote>
<p>: richtig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142300</guid><dc:creator><![CDATA[EOP]]></dc:creator><pubDate>Tue, 08 Nov 2011 19:03:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 20:32:42 GMT]]></title><description><![CDATA[<p>EOP schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Du begibst dich hier auf das sehr rutschige Feld der manuellen Speicherverwaltung</p>
</blockquote>
<p>: richtig</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>etwas, was man in C++ übrigens nie braucht</p>
</blockquote>
<p>: falsch</p>
</blockquote>
<p>Ja und nein...</p>
<p>Was man in C++ selten braucht, oder zumindest kapselt bzw. die Verwaltung abgibt (z.B. unique_ptr...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142342</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 08 Nov 2011 20:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Programmieraufgabe on Tue, 08 Nov 2011 21:21:44 GMT]]></title><description><![CDATA[<p>tschabos schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Kleinen Tip für den Anfang. Die einzige globale variable ist dabei stack.</p>
<pre><code class="language-cpp">#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

struct stackdata
{
  int * array;  // Das Array, das die Daten hält
  int size;     // Die Größe des Arrays
  int position; // Die aktuelle Position im Array
} stack;

void init()
{
  // Noch sind keine Daten vorhanden
  // (Wie du hier auf Größe 2 gekommen bist ist mir unklar)
  stack.array = NULL; // Initial noch kein Array, da Größe &lt; 1...
  stack.size = 0;
  stack.position = 0;
}

//...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2142367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142367</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 08 Nov 2011 21:21:44 GMT</pubDate></item></channel></rss>