<?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[Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray]]></title><description><![CDATA[<p>Hallo liebe Fangemeinde...</p>
<p>ich habe folgendes Problem. Ich habe ein Programm geschrieben, welches den Quicksort teste soll! Dabei erstelle ich Zufallswerte die ich in eine datei schreibe und dann in ein array kopiere. Allerdings klappt das schreiben ins Array nicht die Funktion &quot;datei_einlesen(_range, _file, &amp;a);&quot; bricht bei mir ab, nachdem es 50 Werte eingelesen hat! Ich weiß leider net woran der Fehler liegt!<br />
Könntet mir jemanden weiter helfen? Habe ich was generell falsch gemacht?<br />
Ich möchte gern bis zu 1.000.000 Werte sortieren können!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &quot;Random.h&quot;
#include &quot;time.h&quot;

using namespace std;

void createRandomNumbers(long range, char *file){
	Random rand = Random(range);

	try{
		ofstream str_csv(file);

		for(long i = 0; i &lt; range; i++){
			str_csv &lt;&lt; rand.give() &lt;&lt; '\n';
		}

		str_csv.close();
	}
	catch(const char *errorMsg){
		cerr &lt;&lt; errorMsg &lt;&lt; endl;
	}
}

// datei einlesen und in feld abspeichern
void datei_einlesen(long range, char *file, long *a[])
{

	long _count = 0;
		try{
			ifstream str_csv(file);

			while(!str_csv.eof()){
				string line;

				getline(str_csv, line, '\n');
				a[_count] = new long(atoi(line.c_str()));
				 cout&lt;&lt;_count&lt;&lt;endl;
                _count++;
			}

			str_csv.close();
		}
		catch(const char *errorMsg){
			cout &lt;&lt; &quot;ERROR&quot; &lt;&lt; endl;
		}

}

//feld in datei schreiben
void datei_schreiben(long range, long a[])
{
	try{
			ofstream str_csv(&quot;ausgabe.csv&quot;);

			for(long i = 0; i &lt; range; i++){
				str_csv &lt;&lt; a[i] &lt;&lt; '\n';
			}

			str_csv.close();
		}
		catch(const char *errorMsg){
			cerr &lt;&lt; errorMsg &lt;&lt; endl;
		}

}

void quickSort(long *a,long left, long right ,long variante)
{

	long version = 2;

    if (left &lt; right)
    {
        long pivot = a[right];

        if(version==1){
            long pivot = a[(right+left)/2];
        }

        if(version==2){
            long pivot = a[left];

            if(a[right]&gt;pivot){
                pivot = a[right];
            }

            if(a[(right+left)/2]&gt;pivot){
                pivot = a[(right+left)/2];
            }
        }

	        long l = left;
	        long r = right;

	        do
	        {
	            while (a[l] &lt; pivot) l++;
	            while (a[r] &gt; pivot) r--;

	            if (l &lt;= r)
	            {
	                long swap = a[l];
	                a[l] = a[r];
	                a[r] = swap;
	                l++;
	                r--;
	            }
	        }
	        while (l &lt;= r);

	        quickSort(a,left, r, version);
	        quickSort(a,l, right, version);
        }

}

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

	long _range  = 100000;

	clock_t start = clock();
	char *_file(&quot;daten.csv&quot;);
	long *a;
	a=new long[_range];
	cout&lt;&lt;&quot;test&quot;&lt;&lt;endl;

	long left = 0;
	long right = _range;
	long *templiste;
	templiste=new long[_range];

	createRandomNumbers(_range, _file);
        datei_einlesen(_range, _file, &amp;a);

	 for(long i=0; i&lt;_range; i++)
	    {
	        templiste[i]=a[i];
	    }

    delete [] a;
	quickSort(templiste,left, right, 1);

	datei_schreiben(_range, templiste);
	delete [] templiste;

	clock_t end = clock();

    time_t time = ((start)*1000)/CLOCKS_PER_SEC;
    time_t time2 = ((end)*1000)/CLOCKS_PER_SEC;
    cout &lt;&lt; &quot;Start &quot; &lt;&lt; time &lt;&lt; &quot;ms&quot; &lt;&lt;endl;
    cout &lt;&lt; &quot;End &quot; &lt;&lt; time2 &lt;&lt; &quot;ms&quot; &lt;&lt;endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/296020/quicksorttest-fehler-beim-einlesen-der-werte-in-ein-pointerarray</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 05:11:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296020.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Nov 2011 13:35:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 13:36:32 GMT]]></title><description><![CDATA[<p>Hallo liebe Fangemeinde...</p>
<p>ich habe folgendes Problem. Ich habe ein Programm geschrieben, welches den Quicksort teste soll! Dabei erstelle ich Zufallswerte die ich in eine datei schreibe und dann in ein array kopiere. Allerdings klappt das schreiben ins Array nicht die Funktion &quot;datei_einlesen(_range, _file, &amp;a);&quot; bricht bei mir ab, nachdem es 50 Werte eingelesen hat! Ich weiß leider net woran der Fehler liegt!<br />
Könntet mir jemanden weiter helfen? Habe ich was generell falsch gemacht?<br />
Ich möchte gern bis zu 1.000.000 Werte sortieren können!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &quot;Random.h&quot;
#include &quot;time.h&quot;

using namespace std;

void createRandomNumbers(long range, char *file){
	Random rand = Random(range);

	try{
		ofstream str_csv(file);

		for(long i = 0; i &lt; range; i++){
			str_csv &lt;&lt; rand.give() &lt;&lt; '\n';
		}

		str_csv.close();
	}
	catch(const char *errorMsg){
		cerr &lt;&lt; errorMsg &lt;&lt; endl;
	}
}

// datei einlesen und in feld abspeichern
void datei_einlesen(long range, char *file, long *a[])
{

	long _count = 0;
		try{
			ifstream str_csv(file);

			while(!str_csv.eof()){
				string line;

				getline(str_csv, line, '\n');
				a[_count] = new long(atoi(line.c_str()));
				 cout&lt;&lt;_count&lt;&lt;endl;
                _count++;
			}

			str_csv.close();
		}
		catch(const char *errorMsg){
			cout &lt;&lt; &quot;ERROR&quot; &lt;&lt; endl;
		}

}

//feld in datei schreiben
void datei_schreiben(long range, long a[])
{
	try{
			ofstream str_csv(&quot;ausgabe.csv&quot;);

			for(long i = 0; i &lt; range; i++){
				str_csv &lt;&lt; a[i] &lt;&lt; '\n';
			}

			str_csv.close();
		}
		catch(const char *errorMsg){
			cerr &lt;&lt; errorMsg &lt;&lt; endl;
		}

}

void quickSort(long *a,long left, long right ,long variante)
{

	long version = 2;

    if (left &lt; right)
    {
        long pivot = a[right];

        if(version==1){
            long pivot = a[(right+left)/2];
        }

        if(version==2){
            long pivot = a[left];

            if(a[right]&gt;pivot){
                pivot = a[right];
            }

            if(a[(right+left)/2]&gt;pivot){
                pivot = a[(right+left)/2];
            }
        }

	        long l = left;
	        long r = right;

	        do
	        {
	            while (a[l] &lt; pivot) l++;
	            while (a[r] &gt; pivot) r--;

	            if (l &lt;= r)
	            {
	                long swap = a[l];
	                a[l] = a[r];
	                a[r] = swap;
	                l++;
	                r--;
	            }
	        }
	        while (l &lt;= r);

	        quickSort(a,left, r, version);
	        quickSort(a,l, right, version);
        }

}

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

	long _range  = 100000;

	clock_t start = clock();
	char *_file(&quot;daten.csv&quot;);
	long *a;
	a=new long[_range];
	cout&lt;&lt;&quot;test&quot;&lt;&lt;endl;

	long left = 0;
	long right = _range;
	long *templiste;
	templiste=new long[_range];

	createRandomNumbers(_range, _file);
        datei_einlesen(_range, _file, &amp;a);

	 for(long i=0; i&lt;_range; i++)
	    {
	        templiste[i]=a[i];
	    }

    delete [] a;
	quickSort(templiste,left, right, 1);

	datei_schreiben(_range, templiste);
	delete [] templiste;

	clock_t end = clock();

    time_t time = ((start)*1000)/CLOCKS_PER_SEC;
    time_t time2 = ((end)*1000)/CLOCKS_PER_SEC;
    cout &lt;&lt; &quot;Start &quot; &lt;&lt; time &lt;&lt; &quot;ms&quot; &lt;&lt;endl;
    cout &lt;&lt; &quot;End &quot; &lt;&lt; time2 &lt;&lt; &quot;ms&quot; &lt;&lt;endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2149150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149150</guid><dc:creator><![CDATA[barakneldur]]></dc:creator><pubDate>Sat, 26 Nov 2011 13:36:32 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 13:51:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// datei einlesen und in feld abspeichern
void datei_einlesen(long range, char *file, long *a[])
{
    long _count = 0;
        try{
            ifstream str_csv(file);

            while(!str_csv.eof()){
                string line;

                getline(str_csv, line, '\n');
                a[_count] = new long(atoi(line.c_str()));
                 cout&lt;&lt;_count&lt;&lt;endl;
                _count++;
            }
            str_csv.close();
        }
        catch(const char *errorMsg){
            cout &lt;&lt; &quot;ERROR&quot; &lt;&lt; endl;
        }
}
</code></pre>
<p>Hab die Funktion mal kurz überflogen. Das ist mir aufgefallen:</p>
<ul>
<li>Es sollte const char* file heißen, und nicht char *file.</li>
<li>Wieso machst du try-catch?</li>
<li>while(!str_csv.eof(); was machst du, wenn beim Lesen ein Fehler auftritt? Nimm str_csv.fail().</li>
<li>Wieso verwendest du new?</li>
<li>str_csv.close(); das brauchst du nicht zu schreiben, da es beim Verlassen des Scopes automatisch gemacht wird.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2149156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149156</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 26 Nov 2011 13:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 14:01:49 GMT]]></title><description><![CDATA[<p>du mischt C mit C++<br />
nimm statt char* lieber std::string, statt long* a = new long[...] lieber std::vector&lt;long&gt;, statt atoi lieber std::stringstream</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149169</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 26 Nov 2011 14:01:49 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 14:06:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// datei einlesen und in feld abspeichern
void datei_einlesen(long range, const char* file, long *a[])
{

    long _count = 0;

    ifstream str_csv(file);

    while (!str_csv.fail())
    {
        string line;
        cout&lt;&lt;&quot;test123&quot;&lt;&lt;endl;

        getline(str_csv, line, '\n');
        *a[_count] = (atoi(line.c_str()));
        cout&lt;&lt;_count&lt;&lt;&quot; &quot;&lt;&lt; *a[_count] &lt;&lt;endl;
        _count++;
    }
}
</code></pre>
<p>Ich habe den Code entsprechend deiner Tipps angepasst... Zum New muss ich sagen, dass dich das verwendet habe um den Speicher zu reservieren.. lasse ich das weg so wie hier... bekomme ich nur maximal 3 Werte eingelesen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149171</guid><dc:creator><![CDATA[barakneldur]]></dc:creator><pubDate>Sat, 26 Nov 2011 14:06:54 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 14:09:18 GMT]]></title><description><![CDATA[<p>Wozu schreibst du überhaupt in eine Datei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149173</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 26 Nov 2011 14:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 14:10:48 GMT]]></title><description><![CDATA[<p>Weil mein Prof das so gerne möchte <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/2149174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149174</guid><dc:creator><![CDATA[barakneldur]]></dc:creator><pubDate>Sat, 26 Nov 2011 14:10:48 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 14:25:18 GMT]]></title><description><![CDATA[<p>barakneldur schrieb:</p>
<blockquote>
<p>Dabei erstelle ich Zufallswerte die ich in eine datei schreibe und dann in ein array kopiere.</p>
</blockquote>
<p>Ok, also deine Datei sieht dann z.B. so aus, oder?</p>
<pre><code>6
2
456
90
45
</code></pre>
<p>Dann machst du das Ganze z.B. so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
using namespace std;

void datei_einlesen(const string&amp; file, vector&lt;int&gt;&amp; data)
{
    ifstream str_csv( file.c_str() );

    if(!str_csv)
    {
        cerr &lt;&lt; &quot;Fehler beim Oeffnen der Datei&quot;;
        return;
    }

    for(int value; str_csv &gt;&gt; value; data.push_back(value));
}

int main()
{
    vector&lt;int&gt; data;

    datei_einlesen(&quot;daten.csv&quot;,data);

    // Nun hast du all deine Zufallszahlen im Vector stehen.
}
</code></pre>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wozu schreibst du überhaupt in eine Datei?</p>
</blockquote>
<p>Zur Übung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149186</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 26 Nov 2011 14:25:18 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 14:27:55 GMT]]></title><description><![CDATA[<p>meh</p>
<pre><code class="language-cpp">std::vector&lt;long&gt; gimme_random_numers(std::size_t range)
{
	Random rnd(range);
	std::vector&lt;long&gt; result;

	while(range--)
		result.push_back(rnd.give());

	return result;
}

bool write_numbers(char const* filename, std::vector&lt;long&gt; const&amp; numbers)
{
	std::ofstream out(filename);

        for(std::size_t i = 0; i &lt; numbers.size(); ++i)
        	out &lt;&lt; numbers[i] &lt;&lt; '\n';

	return out;
}

bool read_numbers(char const* filename, std::vector&lt;long&gt;&amp; numbers)
{
	std::ifstream in(filename);

	for(long l; in &gt;&gt; l;)
		numbers.push_back(l);

	return in;
}
</code></pre>
<p>Was mich interessieren würde: Kannst du mal Random.h posten? Den hast du doch bestimmt auch von deinem Prof, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149187</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 26 Nov 2011 14:27:55 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 14:29:55 GMT]]></title><description><![CDATA[<p>barakneldur schrieb:</p>
<blockquote>
<p>Weil mein Prof das so gerne möchte <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>
</blockquote>
<p>Achso, heißt das, du musst <code>char*</code> und <code>new</code> verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149189</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 26 Nov 2011 14:29:55 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 14:52:58 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>barakneldur schrieb:</p>
<blockquote>
<p>Weil mein Prof das so gerne möchte <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>
</blockquote>
<p>Achso, heißt das, du musst <code>char*</code> und <code>new</code> verwenden?</p>
</blockquote>
<p>ne er möchte nur das wir die Daten in Datei unsortiert schreiben und die sortierten wieder in ne Datei schreiben!</p>
<p>hier noch ma die random.h</p>
<pre><code class="language-cpp">#pragma once
#include &lt;string&gt;
using namespace std;

class Random  {
protected:
	int max_range;
private:
	short fill_bits;
	int fill_mask;
public:
	Random(int max_range);
	~Random();
	int give();
};
</code></pre>
<p>Schon mal vielen Dank für die Hilfe....</p>
<p>An einen Vector-Container hatte ich auch scho gedacht!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149202</guid><dc:creator><![CDATA[barakneldur]]></dc:creator><pubDate>Sat, 26 Nov 2011 14:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to Quicksorttest: Fehler beim einlesen der Werte in ein Pointerarray on Sat, 26 Nov 2011 16:26:54 GMT]]></title><description><![CDATA[<p>So habe es nun mit einem Vector hinbekommen! Vielen Dank für die Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149243</guid><dc:creator><![CDATA[barakneldur]]></dc:creator><pubDate>Sat, 26 Nov 2011 16:26:54 GMT</pubDate></item></channel></rss>