<?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[Seiten berechnen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich bastle schon Tage an einem Problem herum und komme einfach nicht weiter. Ich rufe Datensätze ab, die ich dann in einer Tabelle in der GUI darstelle. Die Datensätze sind in Seiten und Sätzen abzurufen, pro Seite aber max. 100 Sätze. Wenn ich zum Beispiel 200 Sätze haben möchte, muss ich 2 Seiten mit jeweils 100 Sätzen abrufen, oder bei 350 Sätzen: 4 Seiten, ersten drei Seiten je 100 Sätze und die 4. Seite 50 Sätze.</p>
<p>Alle bereits abgerufenen Sätze werden zusammengezählt und als startIndex beim Abrufen übergeben, inkl. der Anzahl an Sätzen die der User bei einem Abruf in der GUI-Tabelle haben will. Wenn er jetzt das erste Mal 200 Sätze Daten abrufen möchte, ist startIndex = 1 und count = 200, beim zweiten Abruf ist startIndex = 201 und dann 401, 601, 801 usw. count bleibt ja 200.</p>
<p>Wie teile ich das nun in die Seiten und Sätze ein bzw. wie berechne ich das? Er muss beim 2. Abrufen ja dann auch bei Seite 3 starten und beim 3. Abrufen bei Seite 5 usw.!</p>
<p>Hier mal der Code:</p>
<pre><code class="language-cpp">void Class::list(const int startIndex, const int vCount) {
    int total = 0;
    int start = 0;
    int count = vCount;
    int limit = vCount;
    int divisor = vCount;

    if (vCount &gt; 100) {
        divisor = 100;
        limit = 100;
    }

    total = ceil((double)(startIndex + vCount) / divisor);
    start = startIndex / divisor;

    for (int i = 0; i &lt; total; i++) {
        if (i &lt; start || limit == 0) {
            continue;
        }

        cout &lt;&lt; &quot;page:&quot; &lt;&lt; i + 1 &lt;&lt; &quot;limit:&quot; &lt;&lt; limit;

        if (vCount &gt; 100) {
            count -= limit;

            if (count &lt;= 100) {
                limit = count;
            }
        }
    }
}
</code></pre>
<p>Funktioniert leider nicht richtig, manchmal werden zu viele Seiten abgerufen (dann hat die letzte Seite limit=0)! Je nach vCount Wert!</p>
<p>Kann mir da jemand helfen?</p>
<p>Danke und Gruß<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292760/seiten-berechnen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 17:15:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292760.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Sep 2011 09:44:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 09:44:35 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich bastle schon Tage an einem Problem herum und komme einfach nicht weiter. Ich rufe Datensätze ab, die ich dann in einer Tabelle in der GUI darstelle. Die Datensätze sind in Seiten und Sätzen abzurufen, pro Seite aber max. 100 Sätze. Wenn ich zum Beispiel 200 Sätze haben möchte, muss ich 2 Seiten mit jeweils 100 Sätzen abrufen, oder bei 350 Sätzen: 4 Seiten, ersten drei Seiten je 100 Sätze und die 4. Seite 50 Sätze.</p>
<p>Alle bereits abgerufenen Sätze werden zusammengezählt und als startIndex beim Abrufen übergeben, inkl. der Anzahl an Sätzen die der User bei einem Abruf in der GUI-Tabelle haben will. Wenn er jetzt das erste Mal 200 Sätze Daten abrufen möchte, ist startIndex = 1 und count = 200, beim zweiten Abruf ist startIndex = 201 und dann 401, 601, 801 usw. count bleibt ja 200.</p>
<p>Wie teile ich das nun in die Seiten und Sätze ein bzw. wie berechne ich das? Er muss beim 2. Abrufen ja dann auch bei Seite 3 starten und beim 3. Abrufen bei Seite 5 usw.!</p>
<p>Hier mal der Code:</p>
<pre><code class="language-cpp">void Class::list(const int startIndex, const int vCount) {
    int total = 0;
    int start = 0;
    int count = vCount;
    int limit = vCount;
    int divisor = vCount;

    if (vCount &gt; 100) {
        divisor = 100;
        limit = 100;
    }

    total = ceil((double)(startIndex + vCount) / divisor);
    start = startIndex / divisor;

    for (int i = 0; i &lt; total; i++) {
        if (i &lt; start || limit == 0) {
            continue;
        }

        cout &lt;&lt; &quot;page:&quot; &lt;&lt; i + 1 &lt;&lt; &quot;limit:&quot; &lt;&lt; limit;

        if (vCount &gt; 100) {
            count -= limit;

            if (count &lt;= 100) {
                limit = count;
            }
        }
    }
}
</code></pre>
<p>Funktioniert leider nicht richtig, manchmal werden zu viele Seiten abgerufen (dann hat die letzte Seite limit=0)! Je nach vCount Wert!</p>
<p>Kann mir da jemand helfen?</p>
<p>Danke und Gruß<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120387</guid><dc:creator><![CDATA[realdarkman71]]></dc:creator><pubDate>Sat, 17 Sep 2011 09:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 10:24:53 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie teile ich das nun in die Seiten und Sätze ein bzw. wie berechne ich das? Er muss beim 2. Abrufen ja dann auch bei Seite 3 starten und beim 3. Abrufen bei Seite 5 usw.!</p>
</blockquote>
<p>Also</p>
<p>Aufruf*2-1</p>
<p>z.B.: Ist es der dritte Aufruf, dann ist es 3*2-1=5 und Seite 5;</p>
<p>Also irgw.</p>
<pre><code class="language-cpp">(startIndex % vCount +1)*2-1
</code></pre>
<p>müsste dann die Seite ergeben.</p>
<p>z.B.:Startindex = 201, count 200 (zweiter Aufruf, 200 Sätze)</p>
<pre><code class="language-cpp">(201 % 200 +1)*2 -1 = 3
</code></pre>
<p>P.S.: Das limit 0 ist, könnte an Zeile 24 liegen. Wenn count und limit gleich sind (also wenn in Z. 8 vCount kleiner gleich 100 ist und somit beide unverändert bleiben), ist count 0 und folglich (Z. 27) auch limit. In Zeile 17 entsteht dann eine Schleife, die bis zum Ende der in Z. 16 platzierten ausharrt.</p>
<p>Edit: bin mir da aber nich' sicher ... ist nur eine Idee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120391</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 17 Sep 2011 10:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 11:03:46 GMT]]></title><description><![CDATA[<p>Wie meinst Du das mit</p>
<pre><code class="language-cpp">(startIndex % vCount +1)*2-1
</code></pre>
<p>?</p>
<p>...in welche Zeile soll das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120410</guid><dc:creator><![CDATA[realdarkman71]]></dc:creator><pubDate>Sat, 17 Sep 2011 11:03:46 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 11:23:40 GMT]]></title><description><![CDATA[<p>realdarkman71 schrieb:</p>
<blockquote>
<p>Wie meinst Du das mit</p>
<pre><code class="language-cpp">(startIndex % vCount +1)*2-1
</code></pre>
<p>?</p>
<p>...in welche Zeile soll das?</p>
</blockquote>
<p>Nein, das war nur ein Vorschlag wie du die Seite herausfinden kannst.<br />
Wo und wie du es einsetzen willst, das ist ganz dir überlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120419</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 17 Sep 2011 11:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 11:32:22 GMT]]></title><description><![CDATA[<p>Welche Seite herausfinden? start? Der Code ergibt bei mir immer 3, egal wie hoch startIndex und vCount sind!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120420</guid><dc:creator><![CDATA[realdarkman71]]></dc:creator><pubDate>Sat, 17 Sep 2011 11:32:22 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 11:41:26 GMT]]></title><description><![CDATA[<p>realdarkman71 schrieb:</p>
<blockquote>
<p>Wenn er jetzt das erste Mal 200 Sätze Daten abrufen möchte, ist startIndex = 1 und count = 200, beim zweiten Abruf ist startIndex = 201 und dann 401, 601, 801 usw. count bleibt ja 200.</p>
</blockquote>
<p>Warum fängt der startIndex nicht bei 0 an?</p>
<p>Was willst du jetzt herausfinden, die Seitenzahl?</p>
<p>Und wie verhält das sich, wenn ich erst 350 Sätze abrufe (3,5 Seiten). Kommen die Sätze des nächsten Abrufs dann auf die nächste Seite oder wird die halbe Seite erst noch vollgepackt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120424</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Sat, 17 Sep 2011 11:41:26 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 11:44:21 GMT]]></title><description><![CDATA[<p>realdarkman71 schrieb:</p>
<blockquote>
<p>Welche Seite herausfinden? start? Der Code ergibt bei mir immer 3, egal wie hoch startIndex und vCount sind!?</p>
</blockquote>
<p>Ou sorry, ich meinte startIndex / Count!</p>
<pre><code class="language-cpp">(startIndex / vCount +1)*2-1
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2120426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120426</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 17 Sep 2011 11:44:21 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 12:06:06 GMT]]></title><description><![CDATA[<p>fdfdg schrieb:</p>
<blockquote>
<p>Warum fängt der startIndex nicht bei 0 an?</p>
</blockquote>
<p>Ich habe noch eine andere Routine, die braucht immer als startIndex die 1 und ich wollte das das gleich bleibt!</p>
<p>fdfdg schrieb:</p>
<blockquote>
<p>Was willst du jetzt herausfinden, die Seitenzahl?</p>
<p>Und wie verhält das sich, wenn ich erst 350 Sätze abrufe (3,5 Seiten). Kommen die Sätze des nächsten Abrufs dann auf die nächste Seite oder wird die halbe Seite erst noch vollgepackt?</p>
</blockquote>
<p>Das muss dann so aussehen:</p>
<p>Erster Aufruf (startIndex=1, vCount=350):</p>
<p>page: 1 limit: 100<br />
page: 2 limit: 100<br />
page: 3 limit: 100<br />
page: 4 limit: 50</p>
<p>Zweiter Aufruf (startIndex=351, vCount=350):</p>
<p>page: 5 limit: 100<br />
page: 6 limit: 100<br />
page: 7 limit: 100<br />
page: 8 limit: 50</p>
<p>Dritter Aufruf (startIndex=701, vCount=350):</p>
<p>page: 9 limit: 100<br />
page: 10 limit: 100<br />
page: 11 limit: 100<br />
page: 12 limit: 50</p>
<p>usw.</p>
<p>Die Routine soll das alles berechnen und die Daten entsprechend abrufen! Funktioniert ja auch soweit, nur manchmal ruft die Routine noch eine zusätzliche Seite mit limit:0 ab ... und dann stimmt das mit den nächsten Seiten beim darauf folgenden Aufruf nicht mehr!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120429</guid><dc:creator><![CDATA[realdarkman71]]></dc:creator><pubDate>Sat, 17 Sep 2011 12:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 13:08:40 GMT]]></title><description><![CDATA[<p>Also dann</p>
<pre><code class="language-cpp">inline void list(const int vCount) {

    int count=vCount;
    short limit;
    static int startIndex(1);

    while((startIndex-1)%100 != 0)
        ++startIndex;

    for(;count&gt;0;count-=100){

        limit=(count&gt;=100)?100:counter;
        std::cout&lt;&lt;&quot;page: &quot;&lt;&lt;startIndex/100+1&lt;&lt;&quot;   limit: &quot;&lt;&lt;limit&lt;&lt;std::endl;
        startIndex+=100;
    }
}
</code></pre>
<p>Oder wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120441</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 17 Sep 2011 13:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 13:00:47 GMT]]></title><description><![CDATA[<p>Hm, einfach so?: <a href="http://ideone.com/PFq5W" rel="nofollow">(Ausgabe)</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Class {
	static const int ELEMS_PER_PAGE = 100;

	public:
		Class() : startIndex(1), page(1) {
		}

		void list( int count ) {
			std::cout &lt;&lt; &quot;list: startIndex=&quot; &lt;&lt; startIndex &lt;&lt; &quot;, page=&quot; &lt;&lt; page &lt;&lt; &quot;, count=&quot; &lt;&lt; count &lt;&lt; &quot;\n&quot;;

			while ( count &gt; 0 ) {
				int elems = std::min( count, ELEMS_PER_PAGE );
				count -= elems;

				// elems Elemente auf Seite page ab Index startIndex
				std::cout &lt;&lt; &quot;page: &quot; &lt;&lt; page &lt;&lt; &quot; limit: &quot; &lt;&lt; elems &lt;&lt; &quot;\n&quot;;

				startIndex += elems;
				++page;
			}
		}

	private:
		int startIndex;
		int page;
};

int main() {
	Class cl;
	cl.list( 350 );
	cl.list( 330 );
	cl.list( 350 );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2120443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120443</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Sat, 17 Sep 2011 13:00:47 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 13:38:09 GMT]]></title><description><![CDATA[<p>Ja genau so, nur ohne private Variablen (wie page und startIndex), das sollte alles in dieser einen Routine ablaufen:</p>
<pre><code class="language-cpp">void Class::list(const int startIndex, const int vCount)
</code></pre>
<p>...und <strong>Class</strong> ist nur ein Platzhalter!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120453</guid><dc:creator><![CDATA[realdarkman71]]></dc:creator><pubDate>Sat, 17 Sep 2011 13:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 13:56:44 GMT]]></title><description><![CDATA[<p>realdarkman71 schrieb:</p>
<blockquote>
<p>Ja genau so, nur ohne private Variablen (wie page und startIndex), das sollte alles in dieser einen Routine ablaufen</p>
</blockquote>
<p>Das kann doch gar nicht funktionieren. Start-Index wolltest du ja ursprünglich als Parameter übergeben, das passt dann dafür.</p>
<p>Die aktuelle Seite kannst du dir aber nicht errechnen, wenn du nur den Start-Index hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120454</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Sat, 17 Sep 2011 13:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 14:04:11 GMT]]></title><description><![CDATA[<p>Ist mir auch gerade klar geworden, habe <strong>page</strong> jetzt als private implementiert!</p>
<p>Habe es mit vielen Werten für <strong>vCount</strong> probiert, Ergebnis war immer korrekt ... die Routine sollte jetzt funktionieren wie sie soll!</p>
<p>Vielen Dank für Eure Hilfe!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120455</guid><dc:creator><![CDATA[realdarkman71]]></dc:creator><pubDate>Sat, 17 Sep 2011 14:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to Seiten berechnen on Sat, 17 Sep 2011 15:31:57 GMT]]></title><description><![CDATA[<p>Und mach die Parameter nicht const. Das ist 1.) ein Implementierungsdetail und 2.) Verwirrt nur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120480</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 17 Sep 2011 15:31:57 GMT</pubDate></item></channel></rss>