<?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[zeiger übergabe und daten zugriff]]></title><description><![CDATA[<p>hallo ich habe bitte eine frage:<br />
diese funktion gehört zu klasse gaus_legendre.cpp</p>
<pre><code class="language-cpp">void gauss_legendre_tbl(int n, double* x, double* w, double eps)
{
	double x0,  x1,  dx;	/* Abscissas */
	double w0,  w1,  dw;	/* Weights */
	double P0, P_1, P_2;	/* Legendre polynomial values */
	double dpdx;			/* Legendre polynomial derivative */
	int i, j, k, m;			/* Iterators */
	double t0, t1, t2, t3;

	m = (n+1)&gt;&gt;1;

	t0 = (1.0-(1.0-1.0/(double)n)/(8.0*(double)n*(double)n));
	t1 = 1.0/(4.0*(double)n+2.0);

	for (i = 1; i &lt;= m; i++)
	{
		/* Find i-th root of Legendre polynomial */

		/* Initial guess */
		x0 = cos(PI*(double)((i&lt;&lt;2)-1)*t1)*t0;

		/* Newton iterations, at least one */
		j = 0;
		dx = dw = DBL_MAX;
		do 
		{
			/* Compute Legendre polynomial value at x0 */
			P_1 = 1.0;
			P0  = x0;
#if 0
			/* Simple, not optimized version */
			for (k = 2; k &lt;= n; k++)
			{
				P_2 = P_1;
				P_1 = P0;
				t2 = x0*P_1;
				t3 = (double)(k-1)/(double)k;

				P0 = t2 + t3*(t2 - P_2);
			}
#else
			/* Optimized version using lookup tables */
			if (n&lt;1024)
			{
				/* Use fast algorithm for small n*/
				for (k = 2; k &lt;= n; k++)
				{
					P_2 = P_1;
					P_1 = P0;
					t2  = x0*P_1;

					P0 = t2 + ltbl[k]*(t2 - P_2);

				}

			}else{

				/* Use general algorithm for other n */
				for (k = 2; k &lt; 1024; k++)
				{
					P_2 = P_1;
					P_1 = P0;
					t2  = x0*P_1;

					P0 = t2 + ltbl[k]*(t2 - P_2);
				}

				for (k = 1024; k &lt;= n; k++)
				{
					P_2 = P_1;
					P_1 = P0;
					t2 = x0*P_1;
					t3 = (double)(k-1)/(double)k;

					P0 = t2 + t3*(t2 - P_2);
				}
			}
#endif
			/* Compute Legendre polynomial derivative at x0 */
			dpdx = ((x0*P0-P_1)*(double)n)/(x0*x0-1.0);

			/* Newton step */
			x1 = x0-P0/dpdx;

			/* Weight computing */
			w1 = 2.0/((1.0-x1*x1)*dpdx*dpdx);

			/* Compute weight w0 on first iteration, needed for dw */
			if (j==0) w0 = 2.0/((1.0-x0*x0)*dpdx*dpdx);

			dx = x0-x1;
			dw = w0-w1;

			x0 = x1;
			w0 = w1;
			j++;
		} while((FABS(dx)&gt;eps || FABS(dw)&gt;eps) &amp;&amp; j&lt;100);

		x[(m-1)-(i-1)] = x1;
		w[(m-1)-(i-1)] = w1;
	}

	return;
}
</code></pre>
<p>die hat unten zwei arrays X[] und w[] wo rauf ich von den main zugreifen will</p>
<p>wie definiere ich die zwei array in den main die ich an der funktion übergebe<br />
und wie kann ich die zwei arrays in den main ausgeben<br />
(das problem da ich ein zeiger übergebe und die große des array nicht kenne)</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;math.h&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &quot;gauss_legendre.h&quot;
using namespace std;

#ifndef PI
	#define PI 3.1415926535897932384626433832795028841971693993751
#endif
int main()
{

return 0;
}
</code></pre>
<p>vielen danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296978/zeiger-übergabe-und-daten-zugriff</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 16:16:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296978.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Dec 2011 12:19:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 12:19:32 GMT]]></title><description><![CDATA[<p>hallo ich habe bitte eine frage:<br />
diese funktion gehört zu klasse gaus_legendre.cpp</p>
<pre><code class="language-cpp">void gauss_legendre_tbl(int n, double* x, double* w, double eps)
{
	double x0,  x1,  dx;	/* Abscissas */
	double w0,  w1,  dw;	/* Weights */
	double P0, P_1, P_2;	/* Legendre polynomial values */
	double dpdx;			/* Legendre polynomial derivative */
	int i, j, k, m;			/* Iterators */
	double t0, t1, t2, t3;

	m = (n+1)&gt;&gt;1;

	t0 = (1.0-(1.0-1.0/(double)n)/(8.0*(double)n*(double)n));
	t1 = 1.0/(4.0*(double)n+2.0);

	for (i = 1; i &lt;= m; i++)
	{
		/* Find i-th root of Legendre polynomial */

		/* Initial guess */
		x0 = cos(PI*(double)((i&lt;&lt;2)-1)*t1)*t0;

		/* Newton iterations, at least one */
		j = 0;
		dx = dw = DBL_MAX;
		do 
		{
			/* Compute Legendre polynomial value at x0 */
			P_1 = 1.0;
			P0  = x0;
#if 0
			/* Simple, not optimized version */
			for (k = 2; k &lt;= n; k++)
			{
				P_2 = P_1;
				P_1 = P0;
				t2 = x0*P_1;
				t3 = (double)(k-1)/(double)k;

				P0 = t2 + t3*(t2 - P_2);
			}
#else
			/* Optimized version using lookup tables */
			if (n&lt;1024)
			{
				/* Use fast algorithm for small n*/
				for (k = 2; k &lt;= n; k++)
				{
					P_2 = P_1;
					P_1 = P0;
					t2  = x0*P_1;

					P0 = t2 + ltbl[k]*(t2 - P_2);

				}

			}else{

				/* Use general algorithm for other n */
				for (k = 2; k &lt; 1024; k++)
				{
					P_2 = P_1;
					P_1 = P0;
					t2  = x0*P_1;

					P0 = t2 + ltbl[k]*(t2 - P_2);
				}

				for (k = 1024; k &lt;= n; k++)
				{
					P_2 = P_1;
					P_1 = P0;
					t2 = x0*P_1;
					t3 = (double)(k-1)/(double)k;

					P0 = t2 + t3*(t2 - P_2);
				}
			}
#endif
			/* Compute Legendre polynomial derivative at x0 */
			dpdx = ((x0*P0-P_1)*(double)n)/(x0*x0-1.0);

			/* Newton step */
			x1 = x0-P0/dpdx;

			/* Weight computing */
			w1 = 2.0/((1.0-x1*x1)*dpdx*dpdx);

			/* Compute weight w0 on first iteration, needed for dw */
			if (j==0) w0 = 2.0/((1.0-x0*x0)*dpdx*dpdx);

			dx = x0-x1;
			dw = w0-w1;

			x0 = x1;
			w0 = w1;
			j++;
		} while((FABS(dx)&gt;eps || FABS(dw)&gt;eps) &amp;&amp; j&lt;100);

		x[(m-1)-(i-1)] = x1;
		w[(m-1)-(i-1)] = w1;
	}

	return;
}
</code></pre>
<p>die hat unten zwei arrays X[] und w[] wo rauf ich von den main zugreifen will</p>
<p>wie definiere ich die zwei array in den main die ich an der funktion übergebe<br />
und wie kann ich die zwei arrays in den main ausgeben<br />
(das problem da ich ein zeiger übergebe und die große des array nicht kenne)</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;math.h&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &quot;gauss_legendre.h&quot;
using namespace std;

#ifndef PI
	#define PI 3.1415926535897932384626433832795028841971693993751
#endif
int main()
{

return 0;
}
</code></pre>
<p>vielen danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157645</guid><dc:creator><![CDATA[swiden]]></dc:creator><pubDate>Fri, 16 Dec 2011 12:19:32 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 12:32:40 GMT]]></title><description><![CDATA[<p>tja, wenn nicht sowas wie std::vector oder std::array verwendest gar nicht. es sei denn du gibst einen parameter mit der die grösse angibt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157654</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 16 Dec 2011 12:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 12:39:46 GMT]]></title><description><![CDATA[<p>Viel besser. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Aber immer noch kein C++, ist eher eine C Frage. Das einzige was da dran C++ ist, ist dass du aus unerfindlichen Gründen zwei Header aus C++ und eine using Directive benutzt hast, die du allesamt nirgendwo benutzt.</p>
<blockquote>
<p>diese funktion gehört zu klasse gaus_legendre.cpp</p>
</blockquote>
<p>Drücke dich korrekt aus. Das ist garantiert keine Klasse. Meinst du eventuell die Worte Quelldatei oder Bibliothek?</p>
<blockquote>
<p>die hat unten zwei arrays X[] und w[] wo rauf ich von den main zugreifen will</p>
</blockquote>
<p>Drücke dich korrekt aus. Die Funktion hat zwei Übergabeparameter vom Typ double*. Auf die kannst du von außen gar nicht zugreifen, denen kannst du bloß was übergeben, wenn du willst.</p>
<blockquote>
<p>wie definiere ich die zwei array in den main die ich an der funktion übergebe</p>
</blockquote>
<p>Entweder definierst du ein Array a la <code>double array[5];</code> oder benutzt einen vector, falls du doch C++ machst. Falls du C machst und die Arrays sehr groß sind (Megabytes und größer), solltest du eventuell malloc benutzen.</p>
<blockquote>
<p>und wie kann ich die zwei arrays in den main ausgeben</p>
</blockquote>
<p>Drüber iterieren, ausgeben.</p>
<blockquote>
<p>(das problem da ich ein zeiger übergebe und die große des array nicht kenne)</p>
</blockquote>
<p>Dafür wird wohl das n gut sein. Das ist ein typisches Interface für C Funktionen: Der Benutzer stellt den Speicherplatz und übergibt dann den Speicherplatz und die Größe an die Funktion, diese füllt den Speicherplatz mit den Ergebnissen (oder nutzt die Werte die schon drinstehen). Das heißt, die Größe muss in der main bekannt sein, denn dort leben auch die Arrays. Das sollte aber auch dokumentiert sein, wie man die Funktion benutzt.</p>
<p>P.S.: Der Code der Funktion sieht übrigens nicht sehr vertrauenserweckend aus. Viel &quot;Magie&quot;, wo der Programmierer wohl mal gesehen hat, wie man manche Sachen richtig macht, aber nicht verstanden hat. Nicht direkt falsch, aber man erkennt, dass das tiefere Sprachverständnis fehlt. Numerische Integrationsbibliotheken gibt es haufenweise und viele sind sicherlich besser. Guck dir zum Beispiel mal die GSL an (gibt aber auch andere), die ist wesentlich professioneller und auf vielen Plattformen zum wissenschaftlichen Rechnen schon vorhanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157655</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 16 Dec 2011 12:39:46 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 12:51:30 GMT]]></title><description><![CDATA[<p>wenn ich im main</p>
<pre><code class="language-cpp">int main{
        int n = 10;//eingabe parameter
	int s = 10;// um zu testen ob der zugriff geht setze ich die array große auf 10
	double *px ;
	px = new double[s] ;
	double *w = new double[];
	double eps = 1e-10;
	cout&lt;&lt;&quot;test&quot;&lt;&lt;endl;
	gauss_legendre_tbl(n,px,w,eps);// funktion aufruf

	 for ( int i = 0; i &lt; s; i++)
   {
     cout &lt;&lt; &quot;  &quot; &lt;&lt; px[i] &lt;&lt; endl;
   }
return 0;
</code></pre>
<p>ich kann auf die daten zugreifen aber das problem ich habe hier die große Auf<br />
s =10 gesetzt.<br />
da ich vorher nicht weiß wie große mein array ist weiße ich nicht wie ich drauf zugreife<br />
vielen danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157664</guid><dc:creator><![CDATA[swiden]]></dc:creator><pubDate>Fri, 16 Dec 2011 12:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 12:58:53 GMT]]></title><description><![CDATA[<p>swiden schrieb:</p>
<blockquote>
<p><strong>D</strong>a ich vorher nicht weiß wie groß mein <strong>A</strong>rray ist weiß ich nicht wie ich drauf zugreife</p>
</blockquote>
<p>Ja.. hä? Wie könntest du auch nicht wissen wie groß das Array ist, du legst es doch selbst an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157669</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 16 Dec 2011 12:58:53 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 13:04:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">double *w = new double[];
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Welcher Compiler frisst das?</p>
<p>Und wenn du C++ machen willst, dann nimm vector, kein new[]! Du hättest dir nämlich in deinem Programm prompt ein Speicherloch gemacht, wenn es denn überhaupt funktionieren würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157671</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 16 Dec 2011 13:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 13:08:15 GMT]]></title><description><![CDATA[<p>ja ich lege es selbst an aber<br />
einzeiger auf diese array übergebe ich an der funktion gauss_legendre<br />
die funktion rechnet (die null stellen von der polynome )und speicher sie im<br />
x[(m-1)-(i-1)] = x1; da ich vorher nicht weiss wie viele nullstellen das polynome hat kann ich die große des array nicht festlegen :</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157673</guid><dc:creator><![CDATA[swiden]]></dc:creator><pubDate>Fri, 16 Dec 2011 13:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 13:13:37 GMT]]></title><description><![CDATA[<p>n scheint jedenfalls Einfluss darauf zu haben, eventuell soll das ja zeigen wie viel Platz hinter dem Pointer ist? Trotzdem würde das natürlich nur vor Überläufen schützen.</p>
<p>Ist die Funktion eigentlich von dir, oder ist die aus irgendeiner Bibliothek? Falls sie nämlich von dir ist, solltest du sie einfach mit std::vector umschreiben, dann wird das alles trivial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157677</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 16 Dec 2011 13:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 15:09:41 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#if 0
//....
#else
//...
#endif
</code></pre>
<p>Was soll das bringen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157759</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Fri, 16 Dec 2011 15:09:41 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger übergabe und daten zugriff on Fri, 16 Dec 2011 15:14:33 GMT]]></title><description><![CDATA[<p>pyhax schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#if 0
//....
#else
//...
#endif
</code></pre>
<p>Was soll das bringen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Eine Art Debugcode. Der Autor möchte zeigen, wie es früher war, bevor er es optimiert hat. Da sich C-Kommentare nicht schachteln lassen und C++-Kommentare für jede Zeile nervig sind (und in C89 ganz streng genommen auch nicht vorhanden sind, ist das eine effektive Art, schachtelbare Kommentare in C umzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157761</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 16 Dec 2011 15:14:33 GMT</pubDate></item></channel></rss>