Работа с табличными данными, как?
Добрый день.
Возможно ли внести табличные данные (см.ниже) в массив. Далее определенными математическими действиями мы получаем значение (в правой колонке), нужно найти принадлежащее этому числу значение. Грубо говоря, нужно осуществить поиск в массиве значений. И еще дополняющий вопрос, возможно ли при не нахождении информации в правой колонке, искать следующее значение в бОльшую сторону? Возможно ли это? Есть табличные данные, вида: Код:
0 0 |
можно
|
Если не сложно, натолкните на решение данного вопроса...
|
Цитата:
http://javascript.ru/Array |
Ок, Есть массив:
arr = {}; arr[0]=0; arr[0.008]=0.01; arr[0.016]=0.02; arr[0.024]=0.03; arr[0.032]=0.04; arr[0.04]=0.05; for (i in arr){ if (i==0.024) { first=(arr[i]) alert (first) } } Выводится: 0.03 Ок! Как вывести следующее (и только следующее) значение массива = 0.04?? |
Цитата:
|
Хорошо, объект. Как узнать следующий после (0.03) элемент?
Мне нужно в переменную засунуть следующее за искомым значение (0.04). Сложность в том, что это табличные данные! Соотв. данные в таблице могут быть разными... |
Цитата:
Только после этого начнем "кодить". :) Цитата:
|
впринципе то что мне и нужно, но как остановить выполнение скрипта при достижении следующего (чтобы было только 2 значения, а не значения всего массива) элемента массива?
var arr = []; arr[1] = 3; arr[93] = 5; for(var key in arr) alert(key + ': ' + arr[key]); |
В общем, в 2 переменные мне нужно занести 2 значения. Значение первого я могу найти, а значение второго (следующего за первым по списку), нужно как-то найти. Как это сделать?
|
arr[0.909]=1.69 arr[0.911]=1.70 arr[0.913]=1.71 arr[0.915]=1.72 result = 0.911 if (key < 0.993) { x1=(arr[result]);//На выходе получаем: 1.70 } Как мне получить следующий элемент массива, 1.72 ? Видимо мне нужно прибавить 0.001 к 1.71, и получить значение равное 1.72 (0.915). Но как программно мне это сделать?? Подскажите пожалуйста, совсем запутался... |
Spelesto, зачем ты в индексах массива используешь такие значения как 0.909, 0.911, 0.913, 0.915?
"Есть мнение" что ты сначала проблему создал (сам себе), а потом думаешь как из неё выйти... :D Ты вообще смотрел в примере какие массивы создаются? Какие индексы при этом используются? Цитата:
Для начала создай нормальный массив. А там может и решение сам увидишь. ;) |
ksa,
Уважаемый, ты бы лучше подсказал как организовать массив, а не флудил в теме... Я спрашиваю конкретного совета, и если не знаешь/не хочешь (нужное подчеркнуть) отвечать, - НЕ ОТВЕЧАЙ, но не флуди!.. Я новичек, и не все схватываю на лету, посему изначально и горожу велосипеды... Вам бы старожилам немного подсказать, подтолкнуть в верном направлении, но нет же! Будем флудить и высмеивать, ан какой дурачек несмышленный, ай ай ай ай ай! Займитесь делом пожалуйста, или подскажите, или не мешайте. |
Цитата:
|
Оффтопик: Начнем с того, что грубить я не начинал, а лишь указал на тупой флуд, не по теме. Еще раз объясняю: Если ты знаешь как создать массив, и использовать его для решения моего вопроса, скажи пожалуйста. Если не знаешь, не флуди и не вякай. Спасибо.
По теме: первый=второй arr[1.7]=0.578 arr[1.71]=0.581 arr[1.72]=0.583 как мне обратиться к первому элементу, чтобы узнать его значение и наоборот, ко в торому элементу, чтобы узнать значение первого? Это для меня самое главное, это понять и пойму как все остальное сделать |
Spelesto, удачи тебе... :D
|
Ты умеешь создавать массивы - гуд
Цитата:
Цитата:
Цитата:
Если ключ совпал, то "alert" делаем на следующем проходе. =) |
Вот что накодил в итоге... http://dumpz.org/25633/
|
Spelesto,
ну это вам сюда |
DooMer, ну чего ты так сразу. Ну да, много копипаста, уличная магия присутствует. Но ведь теперь молодой человек обидится и не узнает, как сделать лучше. Хотя... в конце концов, это всего лишь лаба. Чего там. Сдал и забыл :lol:
p.s. и вообще, я тут подумал, что если бы я, например, написал решение, преподаватель бы просто не поверил, что это написал Spelesto. Или даже просто подумал про себя "А почему я этого не знаю? O.o" и обиделся |
x-yuri,
ну, я просто исходил из того что человек хочет научится. Как бы намекнул что в реальной жизни так не делают |
ну он может и хочет научиться, просто не все адекватно воспринимают прямолинейность ;)
|
Я написал, препод поверил, но не проникся... Гад! :(
Но интерес к JS лишь возрос :) Спасибо за советы) |
а что ему не понравилось?
|
x-yuri,
ну прежде всего то, что я не реализовал правильно вычисление одного из значений. мне нужно было переместиться и отобразить следующее значение в массиве. мне же пришлось изгаляться плюсованием 0.002 к первому, чтобы найти второе... Посему нужно было выявить математические зависимости в табличных данных, прописать условия при каких значениях сколько приплюсовывается. И все это из-за того, что я не смог правильно найти второе значение массива... Я думал мне здесь помогут, а флудерасы пофлудили, пофлудили, и свалили... |
Цитата:
|
во-первых, слишком нестандартная задача для js. А так как ты не объяснил, о какой таблице речь и зачем она тебе нужна, сразу же появляются мысли, что ты что-то не то делаешь. То ли таблица не нужна, то ли не так ее хранить надо. Да и просто сложно решать задачу, не зная условия
во-вторых, действительно, странно, что ты сам не придумал p.s. покомментировал твой код: arr = []; // объявляй переменные с var (хорошая привычка) arr[0.000]=0.00;arr[0.008]=0.01;arr[0.016]=0.02;arr[0.024]=0.03;arr[0.032]=0.04;arr[0.040]=0.05;arr[0.048]=0.06;arr[0.056]=0.07;arr[0.064]=0.08;arr[0.072]=0.09;arr[0.080]=0.10;arr[0.088]=0.11;arr[0.096]=0.12;arr[0.103]=0.13;arr[0.111]=0.14;arr[0.119]=0.15;arr[0.127]=0.16;arr[0.135]=0.17;arr[0.143]=0.18;arr[0.151]=0.19;arr[0.159]=0.20;arr[0.166]=0.21;arr[0.174]=0.22;arr[0.182]=0.23;arr[0.190]=0.24;arr[0.197]=0.25;arr[0.205]=0.26;arr[0.213]=0.27;arr[0.221]=0.28;arr[0.228]=0.29;arr[0.236]=0.30;arr[0.243]=0.31;arr[0.251]=0.32;arr[0.259]=0.33;arr[0.266]=0.34;arr[0.274]=0.35;arr[0.281]=0.36;arr[0.289]=0.37;arr[0.296]=0.38;arr[0.303]=0.39;arr[0.311]=0.40;arr[0.318]=0.41;arr[0.326]=0.42;arr[0.333]=0.43;arr[0.340]=0.44;arr[0.347]=0.45;arr[0.354]=0.46;arr[0.362]=0.47;arr[0.369]=0.48;arr[0.376]=0.49;arr[0.383]=0.50;arr[0.390]=0.51;arr[0.397]=0.52;arr[0.404]=0.53;arr[0.411]=0.54;arr[0.418]=0.55;arr[0.425]=0.56;arr[0.431]=0.57;arr[0.438]=0.58;arr[0.445]=0.59;arr[0.451]=0.60;arr[0.458]=0.61;arr[0.465]=0.62;arr[0.472]=0.63;arr[0.478]=0.64;arr[0.484]=0.65;arr[0.491]=0.66;arr[0.497]=0.67;arr[0.504]=0.68;arr[0.510]=0.69;arr[0.516]=0.70;arr[0.522]=0.71;arr[0.528]=0.72;arr[0.535]=0.73;arr[0.541]=0.74;arr[0.547]=0.75;arr[0.553]=0.76;arr[0.559]=0.77;arr[0.566]=0.78;arr[0.570]=0.79;arr[0.576]=0.80;arr[0.582]=0.81;arr[0.588]=0.82;arr[0.593]=0.83;arr[0.599]=0.84;arr[0.605]=0.85;arr[0.610]=0.86;arr[0.616]=0.87;arr[0.621]=0.88;arr[0.627]=0.89;arr[0.632]=0.90;arr[0.637]=0.91;arr[0.642]=0.92;arr[0.648]=0.93;arr[0.653]=0.94;arr[0.658]=0.95;arr[0.663]=0.96;arr[0.668]=0.97;arr[0.673]=0.98;arr[0.678]=0.99;arr[0.683]=1.00;arr[0.688]=1.01;arr[0.692]=1.02;arr[0.697]=1.03;arr[0.702]=1.04;arr[0.706]=1.05;arr[0.711]=1.06;arr[0.715]=1.07;arr[0.720]=1.08;arr[0.724]=1.09;arr[0.729]=1.10;arr[0.733]=1.11;arr[0.737]=1.12;arr[0.742]=1.13;arr[0.746]=1.14;arr[0.750]=1.15;arr[0.754]=1.16;arr[0.758]=1.17;arr[0.762]=1.18;arr[0.766]=1.19;arr[0.770]=1.20;arr[0.774]=1.21;arr[0.778]=1.22;arr[0.781]=1.23;arr[0.785]=1.24;arr[0.789]=1.25;arr[0.792]=1.26;arr[0.796]=1.27;arr[0.800]=1.28;arr[0.803]=1.29;arr[0.806]=1.30;arr[0.810]=1.31;arr[0.813]=1.32;arr[0.816]=1.33;arr[0.820]=1.34;arr[0.823]=1.35;arr[0.826]=1.36;arr[0.829]=1.37;arr[0.832]=1.38;arr[0.835]=1.39;arr[0.838]=1.40;arr[0.841]=1.41;arr[0.844]=1.42;arr[0.847]=1.43;arr[0.850]=1.44;arr[0.853]=1.45;arr[0.856]=1.46;arr[0.858]=1.47;arr[0.861]=1.48;arr[0.864]=1.49;arr[0.866]=1.50;arr[0.867]=1.51;arr[0.871]=1.52;arr[0.874]=1.53;arr[0.876]=1.54;arr[0.879]=1.55;arr[0.881]=1.56;arr[0.884]=1.57;arr[0.886]=1.58;arr[0.888]=1.59;arr[0.890]=1.60;arr[0.893]=1.61;arr[0.895]=1.62;arr[0.897]=1.63;arr[0.899]=1.64;arr[0.901]=1.65;arr[0.903]=1.66;arr[0.905]=1.67;arr[0.907]=1.68;arr[0.909]=1.69;arr[0.911]=1.70;arr[0.913]=1.71;arr[0.915]=1.72;arr[0.916]=1.73;arr[0.918]=1.74;arr[0.920]=1.75;arr[0.922]=1.76;arr[0.923]=1.77;arr[0.925]=1.78;arr[0.927]=1.79;arr[0.928]=1.80;arr[0.930]=1.81;arr[0.931]=1.82;arr[0.933]=1.83;arr[0.934]=1.84;arr[0.936]=1.85;arr[0.937]=1.86;arr[0.939]=1.87;arr[0.940]=1.88;arr[0.941]=1.89;arr[0.943]=1.90;arr[0.944]=1.91;arr[0.945]=1.92;arr[0.946]=1.93;arr[0.948]=1.94;arr[0.949]=1.95;arr[0.950]=1.96;arr[0.951]=1.97;arr[0.952]=1.98;arr[0.953]=1.99;arr[0.955]=2.00;arr[0.956]=2.01;arr[0.957]=2.02;arr[0.958]=2.03;arr[0.959]=2.04;arr[0.960]=2.05;arr[0.961]=2.06;arr[0.962]=2.07;arr[0.962]=2.08;arr[0.963]=2.09;arr[0.964]=2.10;arr[0.965]=2.11;arr[0.966]=2.12;arr[0.967]=2.13;arr[0.968]=2.14;arr[0.968]=2.15;arr[0.969]=2.16;arr[0.970]=2.17;arr[0.971]=2.18;arr[0.971]=2.19;arr[0.972]=2.20;arr[0.973]=2.21;arr[0.974]=2.22;arr[0.974]=2.23;arr[0.975]=2.24;arr[0.976]=2.25;arr[0.976]=2.26;arr[0.977]=2.27;arr[0.977]=2.28;arr[0.978]=2.29;arr[0.979]=2.30;arr[0.979]=2.31;arr[0.980]=2.32;arr[0.980]=2.33;arr[0.981]=2.34;arr[0.981]=2.35;arr[0.982]=2.36;arr[0.982]=2.37;arr[0.983]=2.38;arr[0.983]=2.39;arr[0.984]=2.40;arr[0.984]=2.41;arr[0.984]=2.42;arr[0.985]=2.43;arr[0.985]=2.44;arr[0.986]=2.45;arr[0.986]=2.46;arr[0.986]=2.47;arr[0.987]=2.48;arr[0.987]=2.49;arr[0.988]=2.50;arr[0.988]=2.51;arr[0.988]=2.52;arr[0.989]=2.53;arr[0.989]=2.54;arr[0.989]=2.55;arr[0.990]=2.56;arr[0.990]=2.57;arr[0.990]=2.58;arr[0.990]=2.59;arr[0.991]=2.60;arr[0.991]=2.61;arr[0.991]=2.62;arr[0.991]=2.63;arr[0.992]=2.64;arr[0.992]=2.65;arr[0.992]=2.66;arr[0.992]=2.67;arr[0.993]=2.68;arr[0.993]=2.69;arr[0.993]=2.70;arr[0.993]=2.72;arr[0.994]=2.74;arr[0.994]=2.76;arr[0.995]=2.78;arr[0.995]=2.80;arr[0.995]=2.82;arr[0.995]=2.84;arr[0.996]=2.86;arr[0.996]=2.88;arr[0.996]=2.90;arr[0.996]=2.92;arr[0.997]=2.94;arr[0.997]=2.96;arr[0.997]=2.98;arr[0.997]=3.00;arr[0.998]=3.10;arr[0.999]=3.20;arr[0.999]=3.30;arr[0.999]=3.40;arr[0.9995]=3.50;arr[0.9997]=3.60;arr[0.9998]=3.70;arr[0.99986]=3.80;arr[0.9999]=3.90;arr[0.99994]=4.00;arr[0.9999994]=5.00; // для этого есть объекты // var table = {'0.000': '0.00', '0.008': '0.01', ...}; pow = 2 // и точка с запятой в конце оператора - тоже хорошая привычка grd = 7 a1 = 82 b1 = 74 c1 = 73 d1 = 85 e1 = 79 f1 = 95 g1 = 77 h1 = 74 i1 = 95 j1 = 83 // для этого есть массивы // var xi = [82, 74, 73, ...]; count = 10 con = (a1 + b1 + c1 + d1 + e1 + f1 + g1 + h1 + i1 + j1) / count // var meanX = mean(xi); a2 = (a1 - con) b2 = (b1 - con) c2 = (c1 - con) d2 = (d1 - con) e2 = (e1 - con) f2 = (f1 - con) g2 = (g1 - con) h2 = (h1 - con) i2 = (i1 - con) j2 = (j1 - con) a3 = Math.pow(a2, pow) b3 = Math.pow(b2, pow) c3 = Math.pow(c2, pow) d3 = Math.pow(d2, pow) e3 = Math.pow(e2, pow) f3 = Math.pow(f2, pow) g3 = Math.pow(g2, pow) h3 = Math.pow(h2, pow) i3 = Math.pow(i2, pow) j3 = Math.pow(j2, pow) result1 = (a3 + b3 + c3 + d3 + e3 + f3 + g3 + h3 + i3 + j3) result2 = (result1 / count) result3 = Math.sqrt(result2).toFixed(3) // лучше округлять числа прямо перед выводом // var standardDeviationX = standardDeviation(xi, meanX); result4 = (grd / result3).toFixed(3) // название переменной ничего не говорит о ее содержимом result5 = (grd / result3) document.write("Вариант <b>№17</b><br/>------<br/>") document.write("Математическое ожидание СВ: <b>"+con+"</b><br/>") document.write("Среднее квадратическое отклонение СВ: <b>"+result3+"</b><br/>") // document.write("Среднее квадратическое отклонение СВ: <b>"+standardDeviationX.toFixed(3)+"</b><br/>") document.write("Вероятность попадания СВ в заданный диапазон равна: <b>"+result4+"</b><br/><br/>") // дальше я не понимаю, что ты делаешь // function mean( xi ){ // return sum(xi)/xi.length; // } // function standardDeviation( xi, mean ){ // var power = []; // for( var i=0; i<xi.length; i++ ){ // power += Math.pow(xi[i] - mean); // return Math.sqrt( power/xi.length ); // } // function sum( a ){ // var r = 0; // for( var i=0; i<a.length; i++ ){ // r += a[i]; // return r; // } |
Цитата:
Цитата:
Юрий, спасибо огромное за комментарии к коду!!! Вы единственный кто адекватно ответил в этой теме!.. :thanks: |
если подробнее расскажешь, что ты там делал, могу дальше покомментировать
p.s. я думаю, что для такой задачи лучше всего какой-нибудь mathcad подходит |
Цитата:
//находим X по таблице //second x = 1.7 for (key in arr){ if (key == result4) { xxx2=(arr[result4]) //second x } } //находим X по таблице //first x = 1.71 // //вот в этот момент у меня возникли трудности. я не смог найти следующее по порядку табличное значение... //Вот нужные мне данные в таблице(массиве): arr[0.911]=1.70;arr[0.913]=1.71; //изначально я математическими выкладками нашел число 0.911, нижней функцией нашел 1.70. А вот автоматически узнать следующее по порядку y=0.913(x=1.71) я так и не смог... Поэтому я выяснил, что каждое значение Y постоянно растет на 0.002, то прибавил к 0.911 число 0.002, и получил 0.913. Уже после нахождения 0.913 я узнал второй X=1.71. //знай я как узнать следующее после нужного значение в массиве, я бы не городил этот огород... //зы: и видимо объясняю хуже некуда, но извините, как получается... {:-) // for (key in arr){ if (key == result4) { //если ключ = значению Y (если находит его в таблице) xxx3=(result5 + 0.002).toFixed(3) //first y //то прибавляем 0.002 к значению Y, и находим другое значение Y, через которое в свою очередь находим второе значение X xxx4=(arr[xxx3]) //first x //сохраняем в переменную второе значение икс } } //далее пошли мат.выкладки, не относящиеся к сути вопроса x1 = (xxx4 - xxx2).toFixed(3) // это формула x2 = (((((xxx4 - xxx2) / 2)) + xxx2) - xxx2).toFixed(3) y1 = (xxx3 - result5).toFixed(3) y2 = (((x2 * y1) / x1) + result5).toFixed(3) |
for (key in arr){ if (key == result4) { ... } } это то же самое, что if( result4 in arr ){ ... } только лучше --- Цитата:
--- по поводу поиска следующего... задавать такую таблицу, конечно, удобно в виде ассоциативного массива (в js это будет объект). Но следующий элемент искать легче в массиве. Т.е. можно сделать так: var table = {'0.000': '0.00', '0.008': '0.01', '0.016': '0.02, ...}; var keys = getKeys(table); var values = getValues(table); var i1 = keys.indexOf(result4); // !!! рассчитываем на то, что в таблице есть такой y var x1 = values[i1]; var i2 = i1+1; var y2 = keys[i2]; var x2 = keys[i2]; function getKeys( o ){ var r = []; for( var k in o ) r.push( k ); return r; } function getValues( o ){ var r = []; for( var k in o ) r.push( o[k] ); return r; } --- но на самом деле рассчитывать на определенный порядок обхода объектов на стоит. Это я не подумал. Поэтому лучше сделать так: var table = [{'y': '0.000', 'x': '0.00'}, {'y': '0.008', 'x': '0.01'}, {'y': '0.016', 'x': '0.02}, ...]; var i1 = getIdxByY(table, result4); var y1 = table[i1]['y']; var x1 = table[i1]['x']; var y2 = table[i1+1]['y']; // !!! рассчитваем, что следующий существует var x2 = table[i1+1]['x']; function getIdxByY( a, y ){ for( var i=0; i<a.length; i++ ){ if( a[i]['y'] == y.toFixed(3) ) return i; } } --- но помимо всего этого, ты рассчитываешь на то, что твой y есть в таблице. А это только частный случай. И формулы у тебя дальше какие-то странные, но я весьма смутно представляю, что ты делаешь. Но может все же дело не только в том, что ты 0.002 прибавлял... и добавлю, что функции помогают перенести реализацию в другую часть кода. Т.е. у тебя не будет один большой сложный кусок кода в котором все последовательно происходит, а будет много маленьких и простых - а это намного лучше и вычисления с выводом мешать не стоит, не надо все превращать в одну большую кучу ;) |
Огромное спасибо за подробный разбор моего гомноКода!
СПАСИБО!! |
Часовой пояс GMT +3, время: 02:20. |