че там со второй задачей то?
я верно понял что входные числа и исходящие должны быть предоставленны в виде строк? |
вторая задача должна работать так?
var result = calc( '12124234325234234234234234234234234234234 + 3242343424234342423424234324234234 - 41' ); result // 4453463573474675475674654654654675465465465465465464 или так? var a = new BigNumber( '12' ); var b = new BigNumber( '324234' ); var c = new BigNumber( '41' ); var d = ( a.plus( b ).minus( c ) ).multiply( a ); |
я вообще не понял 2-ую задачу >.<
|
написать функцию для возможности работы с бОльшими числами чем поддерживает javascript/
В каком месте не понятно? ________________________________________ не ну вы посмотрите как удобно это пишется на Class ВЫ только посмотрите какая красота получается ^__^ var BigNumber = new Class( function BigNumber( BigNumber ) { this.__construct__ = function ( value ) { this.stringValue = value + ''; }; this.plus = function ( bigNumber ) { var result = parseInt( this.stringValue.toString() ) + parseInt( bigNumber.toString() ); return new BigNumber( result ) }; this.minus = function ( bigNumber ) { var result = parseInt( this.stringValue.toString() ) - parseInt( bigNumber.toString() ); return new BigNumber( result ) }; this.multiply = function ( bigNumber ) { var result = parseInt( this.stringValue.toString() ) * parseInt( bigNumber.toString() ); return new BigNumber( result ) }; this.toString = function () { return this.stringValue }; this.valueOf = function () { return this.stringValue }; } ); var a = new BigNumber( '12' ); var b = new BigNumber( '324234' ); var c = new BigNumber( '41' ); var d = ( a.plus( b ).minus( c ) ).multiply( a ); |
Цитата:
for( var i = 0; i < 10; i++ ) { (function() { var ololo = i; // сделать так чтобы ololo был виден только в блоке с циклом }()); } |
Так нельзя потому что eval там не корректно работать будет, если сделаем eval('var qq = 11') то вар объявится в контексте внутренней функции, а не внешней)
|
Maxmaxmахimus,
это как некорректно? |
если сделаем eval('var qq = 11') то вар объявится в контексте внутренней функции, а не внешней)
|
Ну и без eval так же будет, если там объявить переменную.
|
Цитата:
в чём проблема? а вот в чём - все числа больше максимального обращаются в бесконечность : alert( Number.MAX_VALUE * 10 ); |
а, всё, я понял вторую задачу)))
|
подсказка: Столбиком уже не считается да)? ;)
|
Цитата:
Мое решение через полином Лагранжа. function throwError (fname, error) { throw new Error(fname + ": " + error); } function lagrangePoly (points) { if (points.length % 2) { throwError("lagrangePoly", "bad number of elements"); } var result = []; var degree = points.length / 2; var i, j, t, cn, c, c0, c1; for (i=0, t=[]; i<points.length; i++) { if (!isFinite(points[i])) { throwError("lagrangePoly", "non-finite value encountered"); } if (!(i % 2)) { t.push(points[i]); } } t.sort(function (a, b) { return a - b; }); for (i=0; i<degree-1; i++) { if (t[i] == t[i+1]) { return false; } } for (i=0, c1=[]; i<degree; i++) { c1.push(points[i*2 + 1]); for (j=1, t=1; j<degree; j++) { t *= points[i*2]; c1.push(-t); } } c = [c1]; for (cn=degree; cn>1; cn--) { c0 = c1; c1 = []; for (i=0; i<cn-1; i++) { t = c0[i * cn + 1] - c0[(i+1) * cn + 1]; for (j=0; j<cn; j++) { if (j == 1) { continue; } c1.push(-(c0[i * cn + j] - c0[(i+1) * cn + j]) / t); } } c.push(c1); } for (cn=degree-1; cn>-1; cn--) { result[cn] = c[cn][0]; for (i=1; i<degree-cn; i++) { result[cn] += c[cn][i] * result[cn+i]; } } return result; } function polyFunction (poly) { var _poly = [].concat(poly); return function (x) { var i, e, y; for (i=0, e=1, y=0; i<_poly.length; i++) { y += e * _poly[i]; e *= x; } return y; } } function continueSequence (sequence) { var points = [], polyfn, i; for (i=0; i<sequence.length; i++) { points.push(i, sequence[i]); } polyfn = polyFunction(lagrangePoly(points)); return function () { return polyfn(i++); } } function maxFraction (value, digits) { if (!isFinite(value) || !isFinite(digits)) { throwError("maxFraction", "bad argument(s)"); } var fixed = (+value).toFixed(digits); var i = fixed.length - 1; loop: while (true) { switch (fixed.charAt(i)) { case "0": i--; continue; case ".": i--; break loop; } break; } return fixed.slice(0, i+1); } function test (sequence, iterations) { var generator = continueSequence(sequence); var result = sequence.join(", ") + "...\n"; while (iterations--) { result += maxFraction(generator(), 6) + (iterations? ", ": "...\n\n"); } return result; } var result = ""; result += test([ 0, 1, 4, 7, 10], 15); result += test([-2, 1, 4, 7, 10], 15); result += test([ 0, 1, 3, 6, 10], 15); result += test([0, 1, 4, 9], 15); result += test([0, 1, 8, 27], 15); result += test([9, 8, 7, 6, 5, 4, 3, 2, 1], 15); result += test([9, 8, 7, 6, 5, 4, 3, 2, 2, 2, 10], 15); alert(result); |
Цитата:
|
Цитата:
Цитата:
|
поисковой индекс, только локально на клиенте. например, я делал хтмл документацию, распространяющуюся на cd, где требовался поиск по содержимому.
|
Как вам вот такая задача ?
for i=1 to 6 step 2 alert(i) next i; распарсите пример на бейсике в вид пригодный для компиляции о бэйсике - for начало тела цикла, next -конец, шаг это значение которое прибавляется к i должно получится что то вроде { command:"for", varname:"i", start:"1", end:6, step:2, code:[ { command:"call", functionName:"alert", params:["i"] } ] } |
DjDiablo,
For i = 1 To 6 [step 2] alert(i) Next step - может быть опушен. При этом, оба варианта ниже являются правильными For i = 1 To 6 [step 2] For j = 1 To 6 [step 2] alert(i) Next Next For i = 1 To 6 [step 2] For j = 1 To 6 [step 2] alert(i) Next j, i |
Тогда уж напишите синтаксический анализатор кода на javascript)))
Чтобы можно было настраивать токены )) таким образом он был бы универсальным) |
№ 0, пожалуй самое смешное решение :D
for ( var i = 0; i < 10; i++ ){ var ololo = i; // сделать так чтобы ololo был виден только в блоке с циклом ....//somecode ololo = undefined;//или null, кому как нравится } // но не тут window.ololo // undefined |
ololo создается только один раз когда скрипт входит в контекст функции или чего там.
а нужно чтобы она создавалась каждый раз когда начинается выполнение блока )) подобно тому как это делает оператор let |
Maxmaxmахimus,
WTF???:blink: переведи нормально:) |
думаю речь об этом.
alert (i); for(var i=0;i<10;i++){ } alert (i); |
нужно чтобы переменная ololo создавалась каждый раз РАЗНАЯ при каждой итерации цикла. а не использовалась одна и та же
|
Maxmaxmахimus,
:blink: :blink: : for (var i = 0, someObject = {}; i < 10; i++) { if (someObject.ololo) alert("Я никогда не выполнюсь!!!"); someObject.ololo = i; alert(someObject.ololo); delete someObject.ololo; } alert(someObject.ololo);//меня не видно :D |
DimaJS - в примере маленький недостаток, в виде оставшегося бесхозного ОБЬЕКТА.
for (var i = 0, someObject = {}; i < 10; i++) { if (someObject.ololo) alert("Я никогда не выполнюсь!!!"); someObject.ololo = i; alert(someObject.ololo); delete someObject.ololo; } alert(someObject.ololo);//меня не видно :D alert(someObject);//зато видно МЕНЯ !!!!!!!!! |
DjDiablo,
это не так страшно, его видно, память он не жрёт (по крайней мере в FF), и его можно удалить (естественно через someObject = null;):) |
var funcs = []; for ( i = 0; i<10; i++ ) { var ololo = i; funcs[i] = function(){ alert( ololo ) }; } funcs[0] () // 0??? нет 9!! откуда 9 ?? funcs[4] () // 4??? нет!! 9, а должно 4 Вообще это общеизвестная проблема, но нубы не часто с ней сталкивались по этому не особо втулили что от них требвовалось) var funcs = []; for ( i = 0; i<10; i++ ) try{throw 0} catch( ololo ) { ololo = i; funcs[i] = function(){ alert( ololo ) }; } funcs[0] () // 0 ОПА funcs[4] () // 4 ОПА |
Maxmaxmахimus,
На всякий: var foo = []; for (var i = 0; i < 10; i++) { foo.push(function(i) { return function() { alert(i); }; }(i)); } foo[0](); foo[4](); На CoffeeScript это конечно элегантней будет: foo = ((do (i) -> -> i) for i in [0..10]) |
monolithed - помоему перемудрил
вот так было бы почитабельней var foo = []; for (var i = 0; i < 10; i++) (function(i) { foo.push(function(){ alert (i); } ); })(i); foo[0](); foo[4](); |
DjDiablo, только хотел написать)) что за место блока можно функцию юзать.
Кстати проверьте кто нить что быстрее функция или try{throw 0} catch |
Цитата:
Эти записи эквивалентны, если что.. просто для меня всегда мой вариант предпочтительней. |
перемудрил тем что фиксированное знчаение текущей итерации цикла , то есть i, должна иметь возможность использоваться ВЕЗДЕ в блоке цикла... а у тебя не везде. у тебя чтобы использовать еще раз фиксированный i придется опять создавать саморазвивающеюся функцию
|
Цитата:
|
и что еж быстрее?
|
Цитата:
|
Цитата:
А ТАК ЖЕ, в чем ты перемудрил? Отвечаю: ЗАЧЕМ одна функция ретурнит другую? |
Maxmaxmахimus,
функция быстрее. |
Цитата:
|
уже првоерил, кстати классынй сайт
Цитата:
|
Часовой пояс GMT +3, время: 21:19. |