ну да, особенно вот это для новичков чаще всего не понятно: "~~"
|
Цитата:
|
Цитата:
Цитата:
melky, да, в js я новичок и скорее всего у меня еще нет чувства стиля именно в нем. Но, я пишу так, как понятно мне и как мне кажется наиболее логичным. Тут надо внести ясность: если бы я знал, что этот код придется кому-нибудь сопровождать, то написал бы по другому (отчасти) и дополнил его комментариями ;) Цитата:
Думается мне, что большинство из Вас "пришло" в js уже зная C, C++, Java или какой-нибудь другой язык со схожим синтаксисом. К сожалению, это не про меня. trikadin, и вообще, я самоучка, препод мне никогда не чего не объяснял) Самостоятельно изучал Assembler (к сожалению не очень долго), VBA, html, css, bat (немного). Так что, "багаж" у меня совсем скромный :yes: Всех Вас я уважаю и мне очень интересно (и познавательно) наблюдать за Вашими советами/ответами и решениями. Надеюсь, что скоро смогу вступать с Вами в полноценные дискуссии по js :) melky, уж не знаю, пригодится или нет, в следующих двух постах приведенные выше алгоритмы с комментариями. Надеюсь, ни чего не напутал ^_^ |
// Переводит римские числа в арабские var num = prompt("Введите римское число", "ammmCMXCIX"); // default - 3999 if(num) alert(RomanToArabic(num)); function RomanToArabic() { // объявляем переменные, инициализируем объект var i, alph = { I:1, V:5, X:10, L:50, C:100, D:500, M:1000 }; // j - счетчик символов // h - результат предыдущих вычислений // n - возвращаемое число // По буквам строки/римского числа for(var h = 0, j = 0, n = 0; j < arguments[0].length; j++) { // используем объект как ассоциативный массив - по римской цифре определяем арабскую i = alph[arguments[0].charAt(j).toUpperCase()]; /* // строку ниже, в данном случае, можно записать так: if(i != undefined) { // римская цифра? if(h < i) { // предыдующая цифра < текущей, вычитаем h = i - h * 2; // т.е. h = i - (h << 1) } else { // предыдующая цифра >= текущей, получаем эту цифру h = i; } n += h; // собираем число } */ if(i) n += h = (h < i ? i - (h << 1) : i); } // возвращаем число return n; } |
// Переводит арабские числа в римские var num = prompt("Введите число", 19); // default - 19 if(num) alert(ArabicToRoman(num)); function ArabicToRoman() { // массив соответствий римских и арабских чисел var alph = [["I",1], ["IV",4], ["V",5], ["IX",9], ["X",10], ["XL",40], ["L",50], ["XC",90], ["C",100], ["CD",400], ["D",500], ["CM",900], ["M",1000]]; // j - счетчик эл. массива // i - число (арабское), кот. требуется перевести // n - возвращаемое римское число // По элементам массива -> от большего к меньшему for(var j = alph.length - 1, i = arguments[0], n = ""; j != -1; j--) { /* строку ниже можно записать следующим образом if(~~(i / alph[j][1]) > 0) { // целочисленное деление и сравнение с 0 n += alph[j][0]; // собираем римское число i -= alph[j][1]; // корректируем арабское число на то, кот. определили j++; // проверяем пару (эл. массива) еще раз } */ if(~~(i / alph[j][1]) > 0) { n += alph[j][0]; i -= alph[j][1]; j++; } } // возвращаем римское число return n; } |
Цитата:
я сейчас изменил стиль на более подробный ... и спустя месяц (проект застыл, дела. сейчас снова будет работать) я сел смотреть код. доя меня было радостным событием: я смог с первой попытки понять, что он делает ! торжественно! хотя что за файлы и каково их содержимое, я перестал помнить по истечении недели паузы разработки. Цитата:
а потом пересел на JS и читал про него днями (!)... так сильно мне понравился этот язык. Цитата:
PS начал учить JS осенью 2010 /////////////////// по делу ////////////////////////////// кстати, ~~(i / alph[j][1]) > 0 лучше бы заменить на (i / alph[j][1])|0 тоже "приведение к числу", но быстрее. это одно и то же , что и parseInt(i / alph[j][1]) |
Цитата:
alert( [2/2 | 0 > 1, (2/2 | 0) > 1] ) Цитата:
alert([1/3 * 1e10, parseInt(1/3 * 1e10), 1/3 * 1e10 | 0].join('\n')) |
nerv_, а я тоже, считай, сам всё изучал. Препод был по теории алгоритмов, а не по JS. Да и то недолго, ибо не школьный он был.
Кстати, по теме - js был первым языком, на котором я стал писать что-то сложнее print("Hello, world"). А нормально (то есть очень усиленно, с прочтением кучи литературы, тематических сайтов и т.д.) я его изучаю... Ну, полгода, наверное. Так что мы с вами в одном положении, можно сказать) Цитата:
|
Цитата:
Цитата:
|
Цитата:
alert( [-2/2 | 0 > 0, (-2/2 | 0) > 0] ) Цитата:
|
Часовой пояс GMT +3, время: 03:03. |