Перевод чисел с одной системы счисления в другую

  • Автор теми yan
  • Дата створення

yan

ЧуВаЧеК
люди помогите мне у мену тут есть код програмы перевода
на javascript
ПЛЗ обьясните мене алгоритм етой задачи а то я в ней не Б ни М
<HTML>
<HEAD>
<SCRIPT language="JavaScript">
function Param(obj)
{
for(var i in obj)
{
var str="Param. ";
str+=i+"="+obj+" ";
alert(str);
}
};
function perevod(f)
{
var Num1=f.number.value; var Num2=f.select1.selectedIndex+2; var Num3=f.select2.selectedIndex+2 ;
var str = String(f.number.value);
var Digit="0123456789ABCDEF";
for (var i=0;i<str.length;i++)
if(isNaN(parseInt(str.substr(i,1),Num2)))
{
alert("Ошибка ввода! Символ '" + str.substr(i,1) + "' в позиции " + (i+1) + " недопустим.");
return;
}
var n=parseInt(str,Num2);
if(isNaN(n)) return;
var result = "";
for(var a=0; n>0;a++)
{
var ind=n%Num3;
result=Digit.substr(ind,1) + result;
n=(n-n%Num3)/Num3;
};
alert ( "Ответ : " + result);
};
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<FORM>
<CENTER>Исходное число:
<BR><INPUT type=text maxlength=16 name=number >
<P>
Из
<SELECT name=select1>
<OPTION value=2>2x
<OPTION value=3>3x
<OPTION value=4>4x
<OPTION value=5>5x
<OPTION value=6>6x
<OPTION value=7>7x
<OPTION value=8>8x
<OPTION value=9>9x
<OPTION value=10>10x
<OPTION value=11>11x
<OPTION value=12>12x
<OPTION value=13>13x
<OPTION value=14>14x
<OPTION value=15>15x
<OPTION value=16>16x
</SELECT>
<INPUT type="button" value="Перевод" onClick="perevod(this.form)">
в
<SELECT name=select2>
<OPTION value=2>2x
<OPTION value=3>3x
<OPTION value=4>4x
<OPTION value=5>5x
<OPTION value=6>6x
<OPTION value=7>7x
<OPTION value=8>8x
<OPTION value=9>9x
<OPTION value=10>10x
<OPTION value=11>11x
<OPTION value=12>12x
<OPTION value=13>13x
<OPTION value=14>14x
<OPTION value=15>15x
<OPTION value=16>16x
</SELECT>
</CENTER>
</BODY>
</HTML>
 

yan

ЧуВаЧеК
Можете также ето изобразить на PHP или в Turbo Pascal но лутше канешно алгоритм розкажите.

Хто сможеет допишите ето чтоб делало перевод как можно в большой системе счисления доходя до 128х и больше.
 

UFO.cz

Far away from home
Перепишу на PHP за 25 баксов. Разжую алгоритм за 50 баксов.
 

quant

yeah
для начала нужно входное число перевести в десятичное
если число не в десятичной системе, то его следует в неё перевести - берёшь и для каждого множишь его на систему вычисления входного числа в степени увеличивающейся с 0 с права на лево, то есть число 1431 с пятеричной переводится так a 1*(5^3) + 4*(5^2) + 3*(5^1) + 1*(5^0) (a^b - a в степени b)
дальше выделяешь цифры с лева на право остачей от деления, тоесть получаешь остачу от деления входного числа на систему исчисления и делаешь перевод этого результата в символ своей системы исчисления и лепишь его слева от результата
потом делаешь целочисленное деление этого входного числа на систему исчисления, результат - входному числу
и так пока во входном числе не останется нуль
я покажу алгоритм до системы исчисления 16, там надеюсь будет ясно и для 128 напишешь сам - просто я представляю как будут выглядеть первые 40 символов '0'..'9', 'a'..'z' но вот дальше...
вот код на c++ думаю зная javascript можно как-то разобраться тут, здесь задаётся число в 10 системе, in - число для перевода, ss - конечная система исчисления
Код:
string convert (int in, int ss) {
   if ( (ss <= 1) && (ss > 16) ) return string (""); // на ss == 1 было бы зацыкливание, а на ss == 0 ошибка деления на 0
   char imagine[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
   string result;
   while (in > 0) {
      result = imagine [in % ss] + result;
      in /= ss;
   };
   return result;
};
 

yan

ЧуВаЧеК
для начала нужно входное число перевести в десятичное
если число не в десятичной системе, то его следует в неё перевести - берёшь и для каждого множишь его на систему вычисления входного числа в степени увеличивающейся с 0 с права на лево, то есть число 1431 с пятеричной переводится так a 1*(5^3) + 4*(5^2) + 3*(5^1) + 1*(5^0) (a^b - a в степени b)
дальше выделяешь цифры с лева на право остачей от деления, тоесть получаешь остачу от деления входного числа на систему исчисления и делаешь перевод этого результата в символ своей системы исчисления и лепишь его слева от результата
потом делаешь целочисленное деление этого входного числа на систему исчисления, результат - входному числу
и так пока во входном числе не останется нуль
я покажу алгоритм до системы исчисления 16, там надеюсь будет ясно и для 128 напишешь сам - просто я представляю как будут выглядеть первые 40 символов '0'..'9', 'a'..'z' но вот дальше...
вот код на c++ думаю зная javascript можно как-то разобраться тут, здесь задаётся число в 10 системе, in - число для перевода, ss - конечная система исчисления
Код:
string convert (int in, int ss) {
   if ( (ss <= 1) && (ss > 16) ) return string (""); // на ss == 1 было бы зацыкливание, а на ss == 0 ошибка деления на 0
   char imagine[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
   string result;
   while (in > 0) {
      result = imagine [in % ss] + result;
      in /= ss;
   };
   return result;
};
Хоть один нормальный человек ато все бабки давай и все))
СПС те большое.
 

UFO.cz

Far away from home
Один нормальный на трёх ненормальных... Куда катится эта страна?
 

Skel

42
схемотехника рулит, на ней все разжуют и покажут =0
 
Зверху