<?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[Hexa Rechner]]></title><description><![CDATA[<pre><code class="language-cpp">void __fastcall TForm1::btnApplyClick(TObject *Sender)
{
     int eingabe = StrToInt(edDezi-&gt;Text);
     int rest;
     AnsiString result;
     while (eingabe &gt; 0)
     {
          rest = eingabe % 16;
          eingabe /= 16;
          switch (rest)
          {
               case 0: result = &quot;10&quot; + result;
                       break;
               case 15: result = &quot;F&quot; + result;
                       break;
               case 14: result = &quot;E&quot; + result;
                       break;
               case 13: result = &quot;D&quot; + result;
                       break;
               case 12: result = &quot;C&quot; + result;
                       break;
               case 11: result = &quot;B&quot; + result;
                       break;
               case 10: result = &quot;A&quot; + result;
                       break;
               default: result = IntToStr(rest) + result;
                         break;
          }
     }
     edHexa-&gt;Text = result;
}
</code></pre>
<p>Wie ist das möglich, dass er bei der Dezimaleingabe 16 immer 110 anzeigt??!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129770/hexa-rechner</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 21:52:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129770.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Dec 2005 14:44:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hexa Rechner on Fri, 16 Dec 2005 14:47:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void __fastcall TForm1::btnApplyClick(TObject *Sender)
{
     int eingabe = StrToInt(edDezi-&gt;Text);
     int rest;
     AnsiString result;
     while (eingabe &gt; 0)
     {
          rest = eingabe % 16;
          eingabe /= 16;
          switch (rest)
          {
               case 0: result = &quot;10&quot; + result;
                       break;
               case 15: result = &quot;F&quot; + result;
                       break;
               case 14: result = &quot;E&quot; + result;
                       break;
               case 13: result = &quot;D&quot; + result;
                       break;
               case 12: result = &quot;C&quot; + result;
                       break;
               case 11: result = &quot;B&quot; + result;
                       break;
               case 10: result = &quot;A&quot; + result;
                       break;
               default: result = IntToStr(rest) + result;
                         break;
          }
     }
     edHexa-&gt;Text = result;
}
</code></pre>
<p>Wie ist das möglich, dass er bei der Dezimaleingabe 16 immer 110 anzeigt??!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943583</guid><dc:creator><![CDATA[milo51]]></dc:creator><pubDate>Fri, 16 Dec 2005 14:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Fri, 16 Dec 2005 14:54:51 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=5" rel="nofollow">volkard</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=2" rel="nofollow">VCL/CLX (Borland C++ Builder)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/943594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943594</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 16 Dec 2005 14:54:51 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Fri, 16 Dec 2005 15:07:35 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie ist das möglich, dass er bei der Dezimaleingabe 16 immer 110 anzeigt??!</p>
</blockquote>
<p>Weil du das so programmiert hast. Einfach mal mitdebuggen und schauen was so passiert</p>
<p>Aber warum einfach, wenn es auch kompliziert geht:</p>
<p>String Hexzahl=IntToHex(Integer,Stellen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943608</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Fri, 16 Dec 2005 15:07:35 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Fri, 16 Dec 2005 15:09:19 GMT]]></title><description><![CDATA[<p>milo51 schrieb:</p>
<blockquote>
<p>Wie ist das möglich, dass er bei der Dezimaleingabe 16 immer 110 anzeigt??!</p>
</blockquote>
<p>Weil diese Zeilen</p>
<pre><code class="language-cpp">case 0: result = &quot;10&quot; + result;
            break;
</code></pre>
<p>in Deinem Code stehen. Lass sie einfach weg, dann sollte es func'en. Wenn Du Dich dann noch um den Wert '0' kümmerst, ist es wohl fehlerfrei.</p>
<p>:xmas2: Werner</p>
<p>PS.: die Verschiebeung in die Borland-Gruppe ist meines Erachtens unberechtigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943609</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 16 Dec 2005 15:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Fri, 16 Dec 2005 15:12:50 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/618">@christian</a> : milo soll sicher diesen Algo nachprogrammieren, nicht intere Funktionen benutzten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1923">@milo</a> : Wenn du deinen Algo so wenig wie möglich verändern willst, must du nur noch eine Bedingung einfügen :</p>
<pre><code class="language-cpp">...
  rest = eingabe % 16;
  eingabe /= 16;
  if ((eingabe == 1) &amp;&amp; (rest == 0)) eingabe = 0; // einfügen
  switch (rest)
...
</code></pre>
<p>/Edit : Werner hat die bessere Lösung</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943611</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 16 Dec 2005 15:12:50 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Fri, 16 Dec 2005 15:37:45 GMT]]></title><description><![CDATA[<p>Naja ok, es funktioniert jetzt, aber verstehen tu ich es nicht.</p>
<p>16 / 16, der Rest ist 0. Woher kommt diese 1 ?!</p>
<p>Und warum war das case 0 auch falsch?<br />
Für mich sieht es so aus, dass &quot;rest&quot; auf 0 überprüft wird und dann die Anweisungen ausgeführt werden...</p>
<p>PS: aaachsooooooooo Die switch-Anweisung wird noch ein 2. mal durchlaufen klar <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="😃"
    /> alles klar thx! <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>
<p>Aber ich hab eine bessere lösung<br />
Bei</p>
<pre><code class="language-cpp">case 0: result = &quot;0&quot; + result;
</code></pre>
<p>Einfach die 1 weglassen <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/943620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943620</guid><dc:creator><![CDATA[milo51]]></dc:creator><pubDate>Fri, 16 Dec 2005 15:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Sun, 18 Dec 2005 01:49:39 GMT]]></title><description><![CDATA[<p>also das ganze kommt mir irgendwie spanisch vor... ich will mal alles aufklären, weil mir das ganze hier nicht so aussieht, als hättest du es wirklich verstanden...</p>
<p>das ergebnis 110 kommt daher:<br />
16%16 = 0 daher eine 10 am ende (da du im falle einer 0 &quot;10&quot; anhängst)<br />
16/16 = 1 &gt; 0 daher noch ein durchlauf<br />
1%16 = 1 daher die vordere 1<br />
1/16 = 0 &lt;= 0 daher schleife zu ende</p>
<p>das Programm ist ausserdem recht umständlich gestrickt... wenn du sequentiell nummerierte zeichen einfügen willst (die bei 0 starten), kannst du die gleich aus nem array auslesen und brauchst kein umständliches switch konstrukt</p>
<p>das programm scheint mir sehr inkonsistent bzgl falschen eingaben... wenn du den String mittels ToIntDef(int def) umrechnen lässt, gibt die methode im fall von texteingaben def zurück, das kann man auf -1 setzen und bei eingabe &lt; 0 (also auch bei text in der eingabe) gibt der ne fehlermeldung aus und hört auf...</p>
<p>so würde ich das machen:</p>
<pre><code class="language-cpp">void __fastcall TForm1::btnApplyClick(TObject *Sender)
{
     char* Alphabet = &quot;0123456789ABCDEF&quot;;
     int basis = 16;

     int eingabe = edDezi-&gt;Text.ToIntDef(-1);
     AnsiString result;
     if(eingabe &lt; 0)
          {edHexa-&gt;Text = &quot;Fehler, nur positive ganze zahlen erlaubt&quot;;
          return;}

     if(eingabe == 0)
          result = &quot;0&quot;;
     else
          while (eingabe &gt; 0)
          {
               result = AnsiString(char(Alphabet[eingabe % basis])) + result;
               eingabe /= basis;
          }
     edHexa-&gt;Text = result;
}
</code></pre>
<p>hat den vorteil, dass du z.B. <strong>basis = 2;</strong> und <strong>Alphabet=&quot;01&quot;;</strong><br />
setzen kannst, dann rechnet es dir binärzahlen aus<br />
oder <strong>basis = 8;</strong> und <strong>Alphabet=&quot;01234567&quot;;</strong> dann rechnets die dezimalzahl in ne oktalzahl um...</p>
<p>interessanterweise kannstes für positive zahlen sogar dazu verwenden, <strong>int</strong>s in <strong>AnsiString</strong>s umzurechnen, wenn du <strong>basis=10;</strong> und <strong>Alphabet=&quot;0123456789&quot;;</strong> nimmst <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="🙂"
    /><br />
CU</p>
<p>AlgoMan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944631</guid><dc:creator><![CDATA[AlgorithMan]]></dc:creator><pubDate>Sun, 18 Dec 2005 01:49:39 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Sun, 18 Dec 2005 10:20:36 GMT]]></title><description><![CDATA[<p>AlgorithMan schrieb:</p>
<blockquote>
<p>das Programm ist ausserdem recht umständlich gestrickt...</p>
</blockquote>
<p>Aber deins nicht?</p>
<p>Schon die Tatsache das du ein char-Array nimmst und das via AnsiString-Konstruktor an result anhängst, ist nicht unbedingt die feine Art. Warum nicht direkt einen AnsiString nehmen? Hier mal mein Vorschlag:</p>
<pre><code class="language-cpp">// Dient zur Umwandlung einer Zahl in Dual, Oktal, Hex, was auch immer :)
AnsiString TForm1::dec2hex (size_t num, size_t base)
{
	if(num)
	{
		AnsiString hex (&quot;0123456789ABCDEF&quot;);
		return dec2hex (num/base, base) + hex[num % base];
	}
	return &quot;&quot;;
}

void __fastcall TForm1::btnApplyClick (TObject *Sender)
{
     edHexa-&gt;Text = dec2hex (edDezi-&gt;Text.ToIntDef (-1), 16);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/944693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944693</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Sun, 18 Dec 2005 10:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Sun, 18 Dec 2005 21:02:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1592">@PuppetMaster2K</a>:</p>
<p>char* ist keine Liste, daher ist der zugriff darauf deutlich schneller (konstante statt lineare laufzeit)</p>
<p>ich habe das auch schon rekursiv gemacht, will ihn aber nicht verwirren, da er offenbar unerfahren ist - daher sollte man ihn nicht unnötig mit rekursionen verwirren</p>
<p>ausserdem ist deine Lösung erbärmlich... da wirst du so einen spaß mit haufenweisen abstürzen haben...</p>
<ul>
<li>eingabe negativ oder enthält text: num % 16 &lt; 0 (mathematisch nicht, aber der operator gibt dir das zurück bei negativen zahlen) index out of range =&gt; absturz</li>
<li>du greifst auf index num%base zu... AnsiStrings beginnen aber bei 1, also WENN schon, dann num%base+1 sonst absturz sobald num%base mal 0 ist, was sehr wahrscheinlich mal passieren wird, wenn nämlich eine 0 im ergebnis vorkommt</li>
<li>aus dem gleichen grund werden die ergebnisse (falls das prog zufällig grad mal nicht abstürzt) falsch sein, da alle ziffern um eins zu niedrig sind</li>
<li>base &gt; 16 =&gt; dein alphabet reicht nicht, daher würde man es als AnsiString&amp; mit übergeben, da sonst index out of range =&gt; absturz (call by reference um RAM zu sparen)</li>
<li>ausserdem verschwendest du RAM und Laufzeit, da du in JEDEM rekursionsaufruf den AnsiString fürs alphabet erstellst und die rückgaben hin und her kopierst...</li>
<li>bei eingabe 0 wird es &quot;&quot; errechnen, was mein prog ebenfalls nicht tut</li>
</ul>
<p>also wenn du schon unbedingt angeben willst, dann gib den leuten, die hier hilfe suchen, wenigstens codes, die mehr zeilen als fehler haben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/945057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/945057</guid><dc:creator><![CDATA[AlgorithMan]]></dc:creator><pubDate>Sun, 18 Dec 2005 21:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Mon, 19 Dec 2005 08:54:53 GMT]]></title><description><![CDATA[<p>AlgorithMan schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1592">@PuppetMaster2K</a>:</p>
<p>char* ist keine Liste, daher ist der zugriff darauf deutlich schneller</p>
</blockquote>
<p>AnsiString ist auch keine Liste.</p>
<p>AlgorithMan schrieb:</p>
<blockquote>
<p>eingabe negativ oder enthält text: num % 16 &lt; 0 (mathematisch nicht, aber der operator gibt dir das zurück bei negativen zahlen) index out of range =&gt; absturz</p>
</blockquote>
<p>Das glaube ich nicht. size_t ist nichts weiter als ein unsigned int, das heißt bei negativen Zahlen wird das Maximum von size_t ausgegeben, welches eine positive Zahl ist. Generell kein Absturz. Allerdings triit dein genannter Fehler hier dennoch auf, weil ich den Index von AnsiString nicht berücksichtigt habe, was mein Fehler war.</p>
<p>AlgorithMan schrieb:</p>
<blockquote>
<p>du greifst auf index num%base zu... AnsiStrings beginnen aber bei 1, also WENN schon, dann num%base+1 sonst absturz sobald num%base mal 0 ist, was sehr wahrscheinlich mal passieren wird, wenn nämlich eine 0 im ergebnis vorkommt</p>
</blockquote>
<p>Stimmt, Index falsch. Mein Fehler.</p>
<p>AlgorithMan schrieb:</p>
<blockquote>
<p>aus dem gleichen grund werden die ergebnisse (falls das prog zufällig grad mal nicht abstürzt) falsch sein, da alle ziffern um eins zu niedrig sind</p>
</blockquote>
<p>Liegt am Index, s.o.</p>
<p>AlgorithMan schrieb:</p>
<blockquote>
<p>base &gt; 16 =&gt; dein alphabet reicht nicht, daher würde man es als AnsiString&amp; mit übergeben, da sonst index out of range =&gt; absturz (call by reference um RAM zu sparen)</p>
</blockquote>
<p>Hier hast du schon recht. Bei Basis 17 wäre der String zur kurz. Allerdings gehe ich nicht davon aus, das jemand ein neues Zahlensystem definiert und das mehr als 16 Zeichen nötig sind.</p>
<p>AlgorithMan schrieb:</p>
<blockquote>
<p>ausserdem verschwendest du RAM und Laufzeit, da du in JEDEM rekursionsaufruf den AnsiString fürs alphabet erstellst und die rückgaben hin und her kopierst...</p>
</blockquote>
<p>Das mag in deinen Augen vielleicht eine Katastrophe sein, aber ich bin der Ansicht, das das heute kaum noch ein Grund ist. Dein AnsiString(char(...)) Aufruf ist auch nicht unbedingt sehr performant, da hier ebenfalls für jede Ziffer ein AnsiString Konstruktor aufgerufen wird.</p>
<p>AlgorithMan schrieb:</p>
<blockquote>
<p>also wenn du schon unbedingt angeben willst, dann gib den leuten, die hier hilfe suchen, wenigstens codes, die mehr zeilen als fehler haben...</p>
</blockquote>
<p>Ich will hier nicht angeben. Das war nie meine Absicht. Ich habe lediglich geschrieben, was ich gedacht habe. :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/945311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/945311</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Mon, 19 Dec 2005 08:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Mon, 19 Dec 2005 18:32:21 GMT]]></title><description><![CDATA[<p>also mit dem zahlensystem mit mehr als 16 elementen... ich bin halt theoretischer informatiker, für mich muss es zumindest MÖGLICH sein...</p>
<p>mit dem function overhead (viele aufrufe - viel hin und her kopieren) ok, die rechner von heute sind schnell genug, das zu machen ohne dass man ne verzögerung merkt, aber man sollte doch auch <strong>grundsätzlich</strong> immer zusehen, RAM und Laufzeit zu sparen (wenn man dadurch nicht gerade den quellcode sehr ausdehnt und unlesbar macht) denn man hat ja nicht immer so simple linearzeit probleme. Wenn man zB exponentialzeit Algorithmen hat, können solche Stellen Laufzeit Unterschidede von Stunden bewirken, daher lieber von vorne herein daran gewöhnen, effizientente Programme zu schreiben...<br />
just my two cents...<br />
cya</p>
<p>AlgoMan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/945807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/945807</guid><dc:creator><![CDATA[AlgorithMan]]></dc:creator><pubDate>Mon, 19 Dec 2005 18:32:21 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Mon, 19 Dec 2005 19:18:23 GMT]]></title><description><![CDATA[<p>wenn du effizient sein und overhead sparen willst, solltest du grundsätzlich auf die vcl verzichten (dito für mfc) und dein code direkt schreiben unter der verwendung der std-lib, ausserdem gehören solche funktionen nicht in onclick-ereignisse. also wenn schon richtig, dann bitte auch so ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/945848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/945848</guid><dc:creator><![CDATA[Nörgler]]></dc:creator><pubDate>Mon, 19 Dec 2005 19:18:23 GMT</pubDate></item><item><title><![CDATA[Reply to Hexa Rechner on Tue, 20 Dec 2005 03:31:17 GMT]]></title><description><![CDATA[<p>Nörgler schrieb:</p>
<blockquote>
<p>wenn du effizient sein und overhead sparen willst, solltest du grundsätzlich auf die vcl verzichten (dito für mfc) und dein code direkt schreiben unter der verwendung der std-lib, ausserdem gehören solche funktionen nicht in onclick-ereignisse. also wenn schon richtig, dann bitte auch so ...</p>
</blockquote>
<p>wie gesagt bin ich theoretischer informatiker, plattformen jucken mich nicht, nur existenz von algorithmen und laufzeiten, daher arbeite ich meistens sogar (bis auf iostream zur ausgabe der ergebnisse) ganz ohne bibliotheken auf dos ebene. mit dem bcb arbeite ich nur, wenn ich mal n gui für irgendwas brauche (idR nur automatisierungs arbeiten ohne komplizierte algorithmen)</p>
<p>davon abgesehen sind wir hier im BCB/VCL Board, warum verlangst du nicht gleich, dass ich assembler benutze, wenn du schon unbedingt verlangen willst, dass ich ne andere Programmiersprache benutze als die, um die es in diesem Board geht?</p>
<p>ausserdem: warum postest du als &quot;unregistrierter&quot; benutzer? das kauf ich dir nicht ab, du hast nur nicht den schneid, hier mit deinem Nick zu deinen Worten zu stehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/946055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/946055</guid><dc:creator><![CDATA[AlgorithMan]]></dc:creator><pubDate>Tue, 20 Dec 2005 03:31:17 GMT</pubDate></item></channel></rss>