В данная программа должна реализовать алгоритмы перевода числа из 10сс в 16сс. При вводе чисел меньше 16 всё верно, однако от 17 и дальше программа игнорирует целые числа. Я предполагаю, что это из-за того что строки не складываются(полученная после первого условия). Как можно исправить данную программу.
<html>
<head>
<meta charset="UTF-8">
<title>Перевод в СС</title>
</head>
<style>
#Input { position: fixed; margin-left: -500px; margin-top: 30px; }
#Button { margin-top: 100px; margin-left: 20px; height: 30px; }
</style>
<body>
<p><input type="text" id="vvod">
<p><input type = "button" id="but" onclick="change1()" value = "Перевод в 16 СС" >
<input type="text" id="vivod1">
<script type='text/javascript'>
function change1()
{
var v = document.getElementById('vvod').value;
var k = document.getElementById('vivod1');
var p = "";
var r = 0;
var znak = " ";
var s= "p";
if(v<0)
{
znak="-";
v=Math.abs(v);
}
do{
r = v % 16;
if (r < 10)
{
p = String.fromCharCode('0'.charCodeAt(0) + r) + p;
}
else
{
p = String.fromCharCode('A'.charCodeAt(0) - 10 + r)+ p;
}
v = v / 16;
} while(v = 0);
k.value=znak+p;
}
</script>
</body>
</html>
во-первых, это не сравнение, а присвоение переменной v значения ноль
а во-вторых, цикл нужно продолжать пока v не равно нулю.
и деление лучше заменить на целочисленное деление
v = Math.floor(v / 16);
при получении значения v лучше его переводить в числовой вид. для этого можно просто добавить знак “+” перед строчкой, где берётся значение из текстового поля:
var v = +document.getElementById('vvod').value;
ну и вызывает вопросы такой сложный способ преобразования кода символа в его шестнадцатеричное представление. Нет, способ безусловно рабочий, но сложный, я бы через строчку с перечислением символов.
в сухом остатке
function change1()
{
const Alphabet='0123456789ABCDEF';
var v = +document.getElementById('vvod').value;
var k = document.getElementById('vivod1');
var result = "";
var znak = " ";
if(v<0){
znak="-";
v=Math.abs(v);
}
do{
var r = v % 16;
result = Alphabet.charAt(r) + result;
v = Math.floor(v / 16);
} while(v > 0);
k.value=znak+result;
}