<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=100271&amp;view=findpost&amp;p=759960</guid>
        <pubDate>Sun, 26 Jun 2005 21:10:03 +0000</pubDate>
        <title>Перевод чисел из десятичной</title>
        <link>https://forum.sources.ru/index.php?showtopic=100271&amp;view=findpost&amp;p=759960</link>
        <description><![CDATA[s-mike: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">{ Фунция представляет число Value в Base-ричной системе счисления,</div><div class="code_line">&nbsp;&nbsp;Base должно находиться в пределах [1..36] и представляется</div><div class="code_line">&nbsp;&nbsp;10-ю цифрами [0..9] и 26-ю буквами английского алфавита [&#39;A&#39;..&#39;Z&#39;] }</div><div class="code_line">function Dec2X(const Value, Base: Cardinal): string;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp;// Функция возвращает символ, соответствующий числу в N-ричной системе</div><div class="code_line">&nbsp;&nbsp;function GetChar(const N: Cardinal): Char;</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;if N &#60; 10 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// для систем счисления от 1 до 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Result := Char(N + Ord(&#39;0&#39;))</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// для систем счисления выше 10, но не больше 36 ([0..9] + [&#39;A&#39;..&#39;Z&#39;])</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Result := Char(N - 10 + Ord(&#39;A&#39;));</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;V, R: Cardinal;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result := &#39;&#39;;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;if Base &#60;= 1 then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;// числа можно и в системе, состоящей из одного символа, представлять ;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Base = 1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// реализуем это</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SetLength(Result, Value);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FillChar(Result[1], Value, Ord(&#39;0&#39;));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// а вот других систем счисления быть не может</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;raise EConvertError.Create(&#39;Основание системы счисления должно быть больше 0&#39;);</div><div class="code_line">&nbsp;&nbsp;end else</div><div class="code_line">&nbsp;&nbsp; &nbsp;// ограничиваем представление систем счисления 10-ю цифрами и 26-ю буквами</div><div class="code_line">&nbsp;&nbsp; &nbsp;// английского алфавита</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Base &#62; 10 + (Ord(&#39;Z&#39;) + 1) - Ord(&#39;A&#39;) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;raise EConvertError.Create(&#39;Основание системы счисления должно лежать в пределах от 1 до 36&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Выполняем преобразование в нужную систему виртуальным делением в столбик</div><div class="code_line">&nbsp;&nbsp;V := Value;</div><div class="code_line">&nbsp;&nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp;R := V mod Base;</div><div class="code_line">&nbsp;&nbsp; &nbsp;V := V div Base;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result := GetChar(R) + Result;</div><div class="code_line">&nbsp;&nbsp;until V &#60; 2; // 2 - минимальная база,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // то есть в любом случае когда-то &quot;V div Base&quot; будет равно 1</div><div class="code_line">&nbsp;&nbsp;if V &#60;&#62; 0 then Result := IntToStr(V) + Result;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<strong class='tag-b'>Автор:</strong> <a class='tag-url' href='http://forum.sources.ru/index.php?showuser=14776' target='_blank'>Smike</a>]]></description>
        <author>s-mike</author>
        <category>Hello, World&#33;</category>
      </item>
	
      </channel>
      </rss>
	