rgl, как бы не принято писать 1 перед неизвестными. Также о нулевых коэффициентах нужно позаботиться.
Но, естественно, вопрос не к Вам, а к ТС. |
function toPlusStr( n ) { n += ""; return n.charAt(0) == "-" ? n : "+" + n; } var a=1, b=-2, m=-3; alert("Уравнения прямой: " + a + "*x" + toPlusStr(b) + "*y" + toPlusStr(m) + "=0"); |
rgl, не понял, чем отличается результат от предыдущего?
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Нужна была функция для упрощения (преобразования к привычному виду) уравнений любого порядка. Получилось так: <script type="text/javascript"> function simplifyEq(an,xn) { var axn = [], sign; xn[an.length-1] = ''; for (i=0; i<an.length; i++) { if (an[i]<0) {sign = ''} else {sign = '+'} if (an[i]==-1) {axn[i]='-'+xn[i]; axn[an.length-1]='-1'} else if (an[i]==0) {axn[i]=''} else if (an[i]==1) {axn[i]='+'+xn[i]; axn[an.length-1]='+1'} else {axn[i]=sign+an[i]+xn[i]} } var newEq = axn.join(''); if (/\+/.test(newEq.charAt(0))) //Если перед самым 1-м коэф. будет '+', то удаляем этот '+' { newEq = newEq.replace(/\+/,'') } if (/-/.test(newEq.charAt(0))) { newEq = newEq.replace(/-/,'').replace(/(-|\+)/g,'$1+').replace(/-\+/g,'+').replace(/\+\+/g,'-') } //Если перед самым 1-м коэф. будет '-', то удаляем этот '-' //и изменяем остальные знаки на противоположные return newEq+'=0'; } </script> <button onclick="alert( '-2x^2+1y^2-1xy+0x+5y-4=0\n<=>\n' + simplifyEq([-2,1,-1,0,5,-4],['x^2','y^2','xy','x','y']) )"> Преобразовать <b>-2x^2+1y^2-1xy+0x+5y-4=0</b> к привычному виду</button> |
Demath,
Почитал. Зачем нужны зачеркнутые части? if (an[i]==-1) {axn[i]='-'+xn[i]; else if (an[i]==0) {axn[i]=''} else if (an[i]==1) {axn[i]='+'+xn[i]; else {axn[i]=sign+an[i]+xn[i]} Зачем проверять и заменять регэкспом в таком простом случае? if (/\+/.test(newEq.charAt(0))) //Если перед самым 1-м коэф. будет '+', то удаляем этот '+' { newEq = newEq.replace(/\+/,'') } Почему не: if ( newEq.charAt(0) == '+' ) newEq = newEq.slice(1) if (/-/.test(newEq.charAt(0))) { newEq = newEq.replace(/-/,'').replace(/(-|\+)/g,'$1+').replace(/-\+/g,'+').replace(/\+\+/g,'-') } //Если перед самым 1-м коэф. будет '-', то удаляем этот '-' //и изменяем остальные знаки на противоположные Аналогично первый минус можно удалить слайсом, а остальные знаки инвертировать одним вызовом replace, которому передать функцию, возвращающую плюс или минус в зависимости от... |
Цитата:
Мне показалось, что так проще всего его учесть. Цитата:
Цитата:
P.S. А где почитать продвинутое использование циклов в JavaScript? То есть интересуют "чистые" алгоритмы с минимальным использованием готовых методов. |
Часовой пояс GMT +3, время: 17:12. |