<?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[Überlegungshilfe benötigt]]></title><description><![CDATA[<p>Hi Zusammen</p>
<p>Ich habe eine Funktion für mein Programm zu schreiben, bei der überprüft werden muss, ob ein erhaltener Wert zwischen einem minWert und einem maxWertliegt.</p>
<p>Das Problem ist nur, dass kein eindeutiger Wert sondern vielmehr ein Wertbereich erhalten wird.</p>
<p>Ich bekomme von einem Gerät eine Delay Angabe (ns). Die Besteht aus einer Zahl oder einem Buchstaben. Jede Zahl und jeder Buchstabe definiert einen Wertbereich:</p>
<p>0 = 0 - 488 (ns)<br />
1 = 489 - 976 (ns)<br />
2 = 977 - 1464 (ns)<br />
3 = 1465 - 1952 (ns)<br />
4 = 1953 - 2440 (ns)<br />
5 = 2441 - 2928 (ns)<br />
6 = 2929 - 3416 (ns)<br />
7 = 3417 - 3904 (ns)<br />
8 = 3905 - 4394 (ns)<br />
9 = 4395 - 4882 (ns)<br />
A = 4883 - 5371 (ns)<br />
B = 5372 - 5859 (ns)<br />
C = 5860 - 6347 (ns)<br />
D = 6348 - 6836 (ns)<br />
E = 6834 - 7324 (ns)<br />
F = 7325 - byte Missed (unendlich)</p>
<p>Mein Problem ist nun, dass ich nicht darauf komme, wie ich überprüfe ob 0-9 und a-f zwischen dem minWert und dem MaxWert liegt.</p>
<p>Ich hoffe ihr könnt mir ein paar Denkhilfen geben.</p>
<p>Vielen Dank <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/topic/278112/überlegungshilfe-benötigt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 13:47:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278112.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Nov 2010 12:39:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Tue, 30 Nov 2010 12:39:45 GMT]]></title><description><![CDATA[<p>Hi Zusammen</p>
<p>Ich habe eine Funktion für mein Programm zu schreiben, bei der überprüft werden muss, ob ein erhaltener Wert zwischen einem minWert und einem maxWertliegt.</p>
<p>Das Problem ist nur, dass kein eindeutiger Wert sondern vielmehr ein Wertbereich erhalten wird.</p>
<p>Ich bekomme von einem Gerät eine Delay Angabe (ns). Die Besteht aus einer Zahl oder einem Buchstaben. Jede Zahl und jeder Buchstabe definiert einen Wertbereich:</p>
<p>0 = 0 - 488 (ns)<br />
1 = 489 - 976 (ns)<br />
2 = 977 - 1464 (ns)<br />
3 = 1465 - 1952 (ns)<br />
4 = 1953 - 2440 (ns)<br />
5 = 2441 - 2928 (ns)<br />
6 = 2929 - 3416 (ns)<br />
7 = 3417 - 3904 (ns)<br />
8 = 3905 - 4394 (ns)<br />
9 = 4395 - 4882 (ns)<br />
A = 4883 - 5371 (ns)<br />
B = 5372 - 5859 (ns)<br />
C = 5860 - 6347 (ns)<br />
D = 6348 - 6836 (ns)<br />
E = 6834 - 7324 (ns)<br />
F = 7325 - byte Missed (unendlich)</p>
<p>Mein Problem ist nun, dass ich nicht darauf komme, wie ich überprüfe ob 0-9 und a-f zwischen dem minWert und dem MaxWert liegt.</p>
<p>Ich hoffe ihr könnt mir ein paar Denkhilfen geben.</p>
<p>Vielen Dank <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/1987987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987987</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Tue, 30 Nov 2010 12:39:45 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Tue, 30 Nov 2010 12:58:06 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Warum mappst du nicht einfach dein Minima und Maxima auf den entsprechenden Wert?</p>
<pre><code>min = 1000 --&gt; 977  &lt; 1000 &lt; 1464 --&gt; 2
max = 3000 --&gt; 2929 &lt; 1000 &lt; 3416 --&gt; 6
</code></pre>
<p>Du musst jetzt nur noch schauen, ob dein Wert im Bereich 2 bis 6 liegt. Genauer wirst du das so nicht hinbekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987994</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Tue, 30 Nov 2010 12:58:06 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Tue, 30 Nov 2010 13:02:38 GMT]]></title><description><![CDATA[<p>Du brauchst doch nur mit dem jeweiligen kleinsten und größten Wert des Wertbereiches vergleichen.</p>
<p>Also bei 0 -&gt; 0 und 488. Was dazwischen liegt ist doch egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987995</guid><dc:creator><![CDATA[EEK@work]]></dc:creator><pubDate>Tue, 30 Nov 2010 13:02:38 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Tue, 30 Nov 2010 14:55:01 GMT]]></title><description><![CDATA[<p>Also ich hab mich für eine Variante entschieden:</p>
<p>Ich werde ein 2dimensionales Array erstellen, mit 2 Spalten (für upperBound und lowerBound des Werbereichs) und 16 Zeilen für die 16 möglichen Werbereiche.</p>
<p>nun habe ich leider keine Ahnung wie man so einem 2D-Array Werte zuweist.</p>
<pre><code class="language-cpp">const unsigned int lookUpTable [2][16] = {
						0,    488;
						489,    976;
						977,   1464;
						1465,   1952;
						1953,   2440;
						2441,   2928;	   
						2929,   3416;
						3417,   3904;
						3905,   4394;
						4395,   4882;
						4883,   5371;
						5372,   5859;
						5860,   6347;
						6348,   6836;
						6834,   7324;
						7325,  60000;
						};
</code></pre>
<p>Danach werde ich überprüfen</p>
<p>Die Chars 0-9 und A-F, die ich vom gerät bekomme wandle ich in einen unsigned int counter(0-15) um.<br />
Danach will ich die lowerBound und upperBound aus dem Array generieren.</p>
<pre><code class="language-cpp">lowerBound = lookUpTable[0][counter];
upperBound = lookUpTable[1][counter];
</code></pre>
<p>Dann müsste ich doch nur noch überprüfen ob mein minWert und maxWert in den Werbereich der lookUpTable passt.</p>
<pre><code class="language-cpp">if (
      (lowerBound &gt; minArg)
      &amp;&amp;			
      (upperBound &lt; maxArg)
   )
{
   return true;
};

else
{
   return false;
};
</code></pre>
<p>Ist jetzt alles nur pseudoCode. Aber meint ihr mein vorhaben könnte klappen?<br />
Und wie erstelle ich das 2D-Array lookUpTable? Die MSDN sagt mir nichts dazu, was ich verstehen würde-.- .</p>
<p>Ich hoffe ihr könnt mir nocheinmal etwas weiter helfen. Das Projekt sollte bis morgen grösstenteils laufen.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988057</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Tue, 30 Nov 2010 14:55:01 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Tue, 30 Nov 2010 15:05:26 GMT]]></title><description><![CDATA[<p>So kann man das mit dem Array machen:</p>
<p>int Array[2][3] = { {1, 2, 3}, {4, 5, 6} };<br />
oder<br />
int Array[][] = { {1, 2, 3}, {4, 5, 6} };</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988062</guid><dc:creator><![CDATA[muli]]></dc:creator><pubDate>Tue, 30 Nov 2010 15:05:26 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Tue, 30 Nov 2010 15:06:20 GMT]]></title><description><![CDATA[<p>Hast du die Wertebereiche denn schon bei programmstart?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988064</guid><dc:creator><![CDATA[muli]]></dc:creator><pubDate>Tue, 30 Nov 2010 15:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Tue, 30 Nov 2010 15:18:37 GMT]]></title><description><![CDATA[<p>muli schrieb:</p>
<blockquote>
<p>So kann man das mit dem Array machen:</p>
<p>int Array[2][3] = { {1, 2, 3}, {4, 5, 6} };<br />
oder<br />
int Array[][] = { {1, 2, 3}, {4, 5, 6} };</p>
</blockquote>
<p>Danke!</p>
<p>muli schrieb:</p>
<blockquote>
<p>Hast du die Wertebereiche denn schon bei programmstart?</p>
</blockquote>
<p>Ja, die Wertbereiche, die im Array stehen habe ich von Programmstart an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988067</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Tue, 30 Nov 2010 15:18:37 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Wed, 01 Dec 2010 08:23:02 GMT]]></title><description><![CDATA[<p>Danke für die Hilfe. Habs geschafft:</p>
<pre><code class="language-cpp">bool CTransitObserver::IsDelayErrorDetected(int *minDelay, int *maxDelay, char *counterValue)
		{
			const unsigned int lookUpTable [2][16] =
								{
									{0, 489, 977, 1465, 1953, 2441, 2929, 3417, 3905, 4395, 4883, 5372, 5860, 6348, 6834, 7325},
									{488 ,976 ,1464 ,1952 ,2440 ,2928 , 3416 ,3904 ,4394 ,4882 ,5371 ,5859 ,6347 ,6836 ,7324 ,60000}
								};

			unsigned int counter;			
/*
			for (unsigned int i = 0; i &lt; 2; i++)
			{
				for (unsigned int j = 0; j &lt; 16; j++)
				{
					printf(&quot;lookUpTable[%d][%d] = %d\n&quot;, i, j, lookUpTable[i][j]);
				}
			}
*/
			if( *counterValue == 'A')
			{
				counter = 10;
			}

			else if( *counterValue == 'B')
			{
				counter = 11;
			}

			else if( *counterValue == 'C')
			{
				counter = 12;
			}

			else if( *counterValue == 'D')
			{
				counter = 13;
			}

			else if( *counterValue == 'E')
			{
				counter = 14;
			}

			else if( *counterValue == 'F')
			{
				counter = 15;
			}

			else
			{
				counter = atoi(counterValue);
			};

          int lowerBound = lookUpTable[0][counter];
		  int upperBound = lookUpTable[1][counter];

		   if ( (lowerBound &gt;= *minDelay) &amp;&amp; (upperBound &lt;= *maxDelay) )        

		   {
		     return false;
		   }

		   else
		   {
			   return true;
		   };

		}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1988335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988335</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Wed, 01 Dec 2010 08:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Wed, 01 Dec 2010 09:02:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int hexCharToInt(char c)
{
	stringstream str;
	str &lt;&lt; hex &lt;&lt; c;
	int i;
	str &gt;&gt; i;
	return i;

	// kürzer, schneller, aber verlässt sich auf ASCII
	// return c &gt;= 'A' ? c + 10 - 'A' : c - '0';
}

bool CTransitObserver::IsDelayErrorDetected(int minDelay, int maxDelay, char counterValue)	// Warum Zeiger?
{
	assert(minDelay &lt;= maxDelay);

	const int lookupTable [2][16] = {
		{  0, 489,  977, 1465, 1953, 2441, 2929, 3417, 3905, 4395, 4883, 5372, 5860, 6348, 6834,  7325},
		{488, 976, 1464, 1952, 2440, 2928, 3416, 3904, 4394, 4882, 5371, 5859, 6347, 6836, 7324, 60000}
    };

	int pos = hexCharToInt(counterValue);
	return maxDelay &gt; lookupTable[1][pos] || lookupTable[0][pos] &gt; minDelay;	// dein if am Ende ist ziemlich redundant
}
</code></pre>
<p>Edit: Bedingung umgekehrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988353</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 01 Dec 2010 09:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Wed, 01 Dec 2010 08:58:36 GMT]]></title><description><![CDATA[<p><code>switch</code> kennst du aber?</p>
<p>Auch kann man die Umwandlung wesentlich kürzer lösen:</p>
<pre><code class="language-cpp">int GetCounterValue(char counterValue)
{
    if (counterValue &gt;= '0' &amp;&amp; counterValue &lt;= '9')
        return counterValue - '0';
    counterValue |= 0x20; // toLower
    if (counterValue &gt;= 'a' &amp;&amp; counterValue &lt;= 'f')
        return counterValue - 'a' + 10;
    throw (&quot;unsupported counter value&quot;);
    return -1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1988354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988354</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Wed, 01 Dec 2010 08:58:36 GMT</pubDate></item><item><title><![CDATA[Reply to Überlegungshilfe benötigt on Wed, 01 Dec 2010 09:06:24 GMT]]></title><description><![CDATA[<p>Schade das deine Werte nicht regelmässiger liegen:</p>
<pre><code>min		newMin		max		newMax
		   -oldMin				 -oldMax
   0				    488		
 489		[b]489[/b]		 976		488
 977		488		1464		488
1465		488		1952		488
1953		488		2440		488
2441		488		2928		488
2929		488		3416		488
3417		488		3904		488
3905		488		4394		[b]490[/b]
4395		[b]490[/b]		4882		488
4883		488		5371		[b]489[/b]
5372		[b]489[/b]		5859		488
5860		488		6347		488
6348		488		6836		[b]489[/b]
6834		[b]486[/b]		7324		488
7325		[b]491[/b]
</code></pre>
<pre><code class="language-cpp">bool CTransitObserver::IsDelayErrorDetected(int *minDelay, int *maxDelay, char *counterValue)  //  wofür alles als pointer? Ein pointer ist meist genauso groß (evtl größer) 
                                                                                               //  wie ein int, sicher größer wie ein char - du sparst also nix. 
                                                                                               //  Da du nix änderst kannste auch über const nachdenken...
        {
            const unsigned int lookUpTable [2][16] =
                                {
                                    {0, 489, 977, 1465, 1953, 2441, 2929, 3417, 3905, 4395, 4883, 5372, 5860, 6348, 6834, 7325},
                                    {488 ,976 ,1464 ,1952 ,2440 ,2928 , 3416 ,3904 ,4394 ,4882 ,5371 ,5859 ,6347 ,6836 ,7324 ,60000}
                                };

            unsigned int counter;           

            if(0) {} // zu einrückungszwecken :D
            else if( *counterValue == 'A')            {                counter = 10;            }
            else if( *counterValue == 'B')            {                counter = 11;            }
            else if( *counterValue == 'C')            {                counter = 12;            }
            else if( *counterValue == 'D')            {                counter = 13;            }
            else if( *counterValue == 'E')            {                counter = 14;            }
            else if( *counterValue == 'F')            {                counter = 15;            }
            else                                      {                counter = atoi(counterValue);            }; // unnötig, s.u. // atoi s.u. 

            // warum nicht:
            switch (*counterValue) 
            {
              case 'a': // statt toUpper, wenn immer ein Großbuchstabe kommt, egal
              case 'A': counter=10; break;
              case 'b':
              case 'B': counter=11; break;
              case 'c':
              case 'C': counter=12; break;
              case 'd':
              case 'D': counter=13; break;
              case 'e':
              case 'E': counter=14; break;
              case 'f':
              case 'F': counter=15; break;
              default : counter= *countervalue - '0'; // ziehe ASCII Wert von '0' von deinem char ab -&gt; zufällig genau der Zahlenwert den du suchst
            }

            int lowerBound = lookUpTable[0][counter];
            int upperBound = lookUpTable[1][counter];
/*         
           if ( (lowerBound &gt;= *minDelay) &amp;&amp; (upperBound &lt;= *maxDelay) )                    
           {
             return false;
           }
           else
           {
               return true;
           }; // das hier ist unnötig, da es eine (wegoptimierte) leere Anweisung bedeutet, die ganze else ist so unnötig, mE geschickter wäre s.u.
*/
           if ( (lowerBound &lt; *minDelay) &amp;&amp; (upperBound &gt; *maxDelay) )                    
           {
             return true;
           }

           return false; // so hat die Methode IMMER einen Rückkehrwert 'shudder' und das ist evtl eine Warnung weniger.
        }
</code></pre>
<p>statt atoi: kann exceptions werfen, guck mal <a href="http://www.c-plusplus.net/forum/39488" rel="nofollow">FAQ C++ Einmal Zahl nach String und zurück</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988355</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Wed, 01 Dec 2010 09:06:24 GMT</pubDate></item></channel></rss>