Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 07.12.2011, 22:50
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну да, особенно вот это для новичков чаще всего не понятно: "~~"
Ответить с цитированием
  #12 (permalink)  
Старый 07.12.2011, 22:59
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от devote
ну да, особенно вот это для новичков чаще всего не понятно: "~~"
Нас препод (не по js, нет - по C++), помнится, специально заставлял использовать побитовые операторы - чтобы в будущем хоть представляли, что это.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #13 (permalink)  
Старый 08.12.2011, 18:00
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от melky
вы для людей код пишите? вы добровольно решаете задачу, выкладываете решение на форум.. да, для людей! так почему не следуете стилю написания?
в данном случае такое написание мне кажется более логичным
Сообщение от melky
а попытки ручного преобразования в байт-код оставьте для второй версии скрипта, которая называется "минифицированной" и после всех ухищрений ещё и сжата в GCC.
Вы заблуждаетесь, попыток обфускации я не предпринимал. За ссылку спасибо)
melky, да, в js я новичок и скорее всего у меня еще нет чувства стиля именно в нем. Но, я пишу так, как понятно мне и как мне кажется наиболее логичным.

Тут надо внести ясность: если бы я знал, что этот код придется кому-нибудь сопровождать, то написал бы по другому (отчасти) и дополнил его комментариями

Сообщение от melky
PSS если выложите код в двух версиях - для разработчиков (с комментариями и со всем порядочным) и для пользователей (минифицированная), то я поставлю вам плюсик, если это важно
Поставите - спасибо, нет - ну значит нет) Для меня сейчас главное врубиться в синтаксис js, его особенности и нюансы; попытаться понять причуды браузеров.

Думается мне, что большинство из Вас "пришло" в js уже зная C, C++, Java или какой-нибудь другой язык со схожим синтаксисом. К сожалению, это не про меня. trikadin, и вообще, я самоучка, препод мне никогда не чего не объяснял) Самостоятельно изучал Assembler (к сожалению не очень долго), VBA, html, css, bat (немного). Так что, "багаж" у меня совсем скромный

Всех Вас я уважаю и мне очень интересно (и познавательно) наблюдать за Вашими советами/ответами и решениями. Надеюсь, что скоро смогу вступать с Вами в полноценные дискуссии по js

melky, уж не знаю, пригодится или нет, в следующих двух постах приведенные выше алгоритмы с комментариями. Надеюсь, ни чего не напутал ^_^
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 08.12.2011 в 18:04.
Ответить с цитированием
  #14 (permalink)  
Старый 08.12.2011, 18:03
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

// Переводит римские числа в арабские
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;
}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #15 (permalink)  
Старый 08.12.2011, 18:03
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

// Переводит арабские числа в римские 
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;
}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #16 (permalink)  
Старый 08.12.2011, 22:30
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от nerv_ Посмотреть сообщение
melky, да, в js я новичок и скорее всего у меня еще нет чувства стиля именно в нем. Но, я пишу так, как понятно мне и как мне кажется наиболее логичным.
код перестанет быть таким через месяц

я сейчас изменил стиль на более подробный ... и спустя месяц (проект застыл, дела. сейчас снова будет работать) я сел смотреть код. доя меня было радостным событием: я смог с первой попытки понять, что он делает !

торжественно! хотя что за файлы и каково их содержимое, я перестал помнить по истечении недели паузы разработки.
Сообщение от nerv_ Посмотреть сообщение
Думается мне, что большинство из Вас "пришло" в js уже зная C, C++, Java или какой-нибудь другой язык со схожим синтаксисом. К сожалению, это не про меня. trikadin, и вообще, я самоучка, препод мне никогда не чего не объяснял) Самостоятельно изучал Assembler (к сожалению не очень долго), VBA, html, css, bat (немного). Так что, "багаж" у меня совсем скромный
я изучал html+css+php на уровне гавнокода. потом сел за C#, в котором понимал многопоточность 2 дня (!!!!полностью допёрло,как это использовать. помню кстати до сих пор эти проклятые new Thread(), myth.start() и myth.reportProgress(a,b,c,d) .....)

а потом пересел на JS и читал про него днями (!)... так сильно мне понравился этот язык.

Сообщение от nerv_ Посмотреть сообщение
Всех Вас я уважаю и мне очень интересно (и познавательно) наблюдать за Вашими советами/ответами и решениями. Надеюсь, что скоро смогу вступать с Вами в полноценные дискуссии по js
+1 собеседник. было бы неплохо! обращайся, если будут вопросы

PS начал учить JS осенью 2010

/////////////////// по делу //////////////////////////////
кстати,
~~(i / alph[j][1]) > 0

лучше бы заменить на
(i / alph[j][1])|0

тоже "приведение к числу", но быстрее.

это одно и то же , что и
parseInt(i / alph[j][1])

Последний раз редактировалось melky, 08.12.2011 в 22:40.
Ответить с цитированием
  #17 (permalink)  
Старый 08.12.2011, 23:01
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от melky
(i / alph[j][1])|0
Только | 0 нужно писать внутри скобок.
alert( [2/2 | 0 > 1, (2/2 | 0) > 1] )
Сообщение от melky
это одно и то же , что и
Не совсем.
alert([1/3 * 1e10, parseInt(1/3 * 1e10), 1/3 * 1e10 | 0].join('\n'))
Ответить с цитированием
  #18 (permalink)  
Старый 08.12.2011, 23:19
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

nerv_, а я тоже, считай, сам всё изучал. Препод был по теории алгоритмов, а не по JS. Да и то недолго, ибо не школьный он был.

Кстати, по теме - js был первым языком, на котором я стал писать что-то сложнее print("Hello, world"). А нормально (то есть очень усиленно, с прочтением кучи литературы, тематических сайтов и т.д.) я его изучаю... Ну, полгода, наверное. Так что мы с вами в одном положении, можно сказать)

Сообщение от nerv_
Думается мне
Хех) Одна из моих любимых фраз)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #19 (permalink)  
Старый 08.12.2011, 23:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от B@rmaley.e><e Посмотреть сообщение
Только | 0 нужно писать внутри скобок.
alert( [2/2 | 0 > 1, (2/2 | 0) > 1] )
в вышестоящем примере была проверка на положительное число, поэтому можно таки опустить.
Сообщение от B@rmaley.e><e Посмотреть сообщение
Не совсем.
alert([1/3 * 1e10, parseInt(1/3 * 1e10), 1/3 * 1e10 | 0].join('\n'))
спасибо за пример. почему так происходит ?
Ответить с цитированием
  #20 (permalink)  
Старый 09.12.2011, 01:16
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от melky
в вышестоящем примере была проверка на положительное число, поэтому можно таки опустить.
?
alert( [-2/2 | 0 > 0, (-2/2 | 0) > 0] )
Сообщение от melky
спасибо за пример. почему так происходит ?
Согласно стандарту, у побитовых операторов есть такой шаг как вызов ToInt32. Т.е. каждый из аргументов приводится к 32-х битовому знаковому числу. В то время как обычно JS оперирует 64-битными числами двойной точности (IEEE 754). Отсюда и получается сужение множества значений.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите дописать раскрывающиеся меню frost18 Библиотеки/Тулкиты/Фреймворки 3 07.09.2011 09:58
Помогите дописать скрипт. peektoseen Javascript под браузер 7 22.03.2011 00:15
таймер обратного отсчёта , помогите дописать ДимаЯл Элементы интерфейса 5 08.01.2011 10:20
Помогите пожалуйста дописать 1 функцию (onmouseout) -user21- Элементы интерфейса 0 09.06.2010 22:04
Помогите дописать скрипт ползунков + калькулятор saigo AJAX и COMET 0 30.03.2010 11:00