Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   нужна помощь в доработке программы.. (https://javascript.ru/forum/misc/72886-nuzhna-pomoshh-v-dorabotke-programmy.html)

Vados73 04.03.2018 20:29

нужна помощь в доработке программы..
 
..это моя первая программа на JS. Программа предназначена для перевода десятичных чисел в двоичные. Проблема возникает при вводе 0, 1, а также необходимо заполнять массив нолями чтобы данные выводились в формате хххх (четыре цифры), например: десятичная двойка должна выводиться в формате 0010. Заранее благодарю за помощь.
//Программа для перевода десятичных чисел в двоичные.. (с)
var number = prompt('Введите любое целое десятичное число:', ''); //Вводим любое целое десятичное число

var residue = number; //переменная для записи остатка от деления в массив
var quotient = number; //переменная для записи частного от деления на 2

var result = []; //создаем пустой массив для записи результата вычисления
    //if (quotient == 1) { //если введенное число равно 1
        //document.write('1') //выводим 1
    //} else { //..иначе
        do { //цикл вычисления двоичного числа    
            quotient /= 2;
            quotient = (Math.floor(quotient));
            residue = quotient;
            residue %= 2;
            result.push(residue); //записываем результат целочисленного деления в конец массива
        } while (quotient !== 1);
    //}
result.reverse();
    if (number %2 == 0) {
        result.push('0')    
    } else {
        result.push('1')
    }
//result.length;
//document.write(result.length)

a = result.join('');
document.write(a)

рони 04.03.2018 21:45

Программа для перевода десятичных чисел в двоичные..
 
Vados73,
<script>
function fn(number) {
    var result = [];
    while (number) {
        result.push(number % 2);
        number = Math.floor(number / 2);
    }
    result.reverse();
    result = "0000" + result.join("");
    result = result.slice(-4);
    return result;
}
for (var i = 0; i < 16; i++) {
    document.write(i + " => " + fn(i) + "<br>");
};

  </script>

j0hnik 04.03.2018 22:43

alert(20 .toString(2));

рони 04.03.2018 22:51

j0hnik,
:lol:

j0hnik 04.03.2018 22:53

рони,
:-?

рони 04.03.2018 22:57

j0hnik,
всё нормально, не переживай. :)

j0hnik 04.03.2018 22:58

что смешного? парню проще будет понять такую конструкцию

j0hnik 04.03.2018 23:04

если ему нужно таблицу вывести можно так же сделать

<script>
for(var i = 0; i<100; i++) document.write(i+'=>'+ i .toString(2)+'<br>');
</script>

рони 04.03.2018 23:14

j0hnik,
Цитата:

Сообщение от Vados73
var residue = number; //переменная для записи остатка от деления в массив05var quotient = number; //переменная для записи частного от деления на 2

(вангую) информатика, развитие навыка преобразования алгортима вычисления в код.

j0hnik 05.03.2018 02:41

в образовательных учреждениях мотивировать умеют (писать какую нибудь ерунду, которая итак уже есть)

Vados73 05.03.2018 05:34

Цитата:

Сообщение от рони (Сообщение 479792)
j0hnik,

(вангую) информатика, развитие навыка преобразования алгортима вычисления в код.

))) ошибаетесь, профессор... с JS столкнулся впервые, решил специализацию поменять (в данный момент работаю в сфере весьма далекой от программирования и информатики), изучение начал по книге Д.Фленагана.. возможно где-то и есть подобные программы, но я хотел написать её сам, вышло наверное коряво, но прошу не судить строго, это моя первая ))

laimas 05.03.2018 05:44

Цитата:

Сообщение от j0hnik
в образовательных учреждениях мотивировать умеют (писать какую нибудь ерунду, которая итак уже есть)

Когда задают задания, которые не имеют практической ценности в зависимости, к примеру, от платформы или сферы применения языка, это да. А знание/понимание этого алгоритма, это не ерунда, без знания этого не было бы toString(). Кроме традиционного деления на 2 (кстати если говорить об алгоритме, то для полного представления картины и деления по модулю не должно быть, должна быть проверка), есть еще и метод сравнения уменьшающихся степеней:

var n, m = [], b = '';
if(n = prompt('Number')) {
    if(n > 1) {
        for(var i = k = 0; k < n; i++) {
            k = Math.pow(2, i);
            m.push(k);
        }

        m.pop();

        while(i = m.pop())  b += n >= i ? (n -= i, 1) : 0;
    } else b = n;
    
    alert(b) 
}


В основе то всего, включая и toString(), обычная бинарная логика. А двоичное представление имеет еще и множество форматов, к примеру двоично-десятичный, который используется сплошь и рядом, к примеру в часах. Ну-ка попробуйте перевести десятичное в двоично-десятичное представление используя toString(). ;)

MallSerg 05.03.2018 12:44

<script>
// Это же JS тут все просто и понятно =)

var i=0,s='';
NumToBinStr=n=>{var i=0,s='';while(s+=n&1<<i++?1:0,i<31);return s};

while ( s+=i+'>>'+NumToBinStr(i)+'<br>',i++<954);
document.write (s);
</script>


Часовой пояс GMT +3, время: 06:42.