Проверьте пожалуйста код
Вложений: 1
Я тут много чего нахимичил, в связи своей неопытности, но думаю, что можно это все упростить в несколько раз.
-Вычисления. -Построение графика. -История вычислений, с сохранением и загрузкой файла. let x=[],y=[],i,h,j,xs, a = document.getElementById("a"), b = document.getElementById("b"), step = document.getElementById("step"), buff = document.getElementById("buf"), ys = xs => "", xw = document.getElementById("xw"), tocn = document.getElementById("tocn"), newton = document.getElementById("newton"), nporg = document.getElementById("nporg"), lagr = document.getElementById("lagr"), lpogr = document.getElementById("lpogr"), stocn = document.getElementById("stocn"), snewton = document.getElementById("snewton"), snporg = document.getElementById("snporg"), slagr = document.getElementById("slagr"), slpogr = document.getElementById("slpogr"), c = document.querySelector("canvas"), ctx = c.getContext("2d"), z1 = document.getElementById("z"); a.focus(); ///////////////////////////////////////////// function fillmass() { let a1 = parseFloat(a.value.replace(",", ".")), b1 = parseFloat(b.value.replace(",", ".")), step1 = parseFloat(step.value.replace(",", ".")); if(!a1 || !b1 || !step1) { alert("не все данные введены!"); return; } h= (b1 - a1)/step1; for(i =0; i<=step1;i++) { x[i]= parseFloat((a1+i*h).toFixed(4)); y[i]= parseFloat((((Math.pow(x[i],3)/2)+7) -0.6*(Math.exp(x[i]))).toFixed(4)); buff.value += "x["+ i +"] " +x [i]+" "+ "y["+ i +"] "+y[i]+"\n"; } alert("Массив заполнен"); } /////////////////////////////// function lininterpol(){ let xw1 = parseFloat(xw.value.replace(",", ".")); if(!xw1) { alert("не все данные введены!"); return; } j=1; while (xw1 > x[j]) { j ++} tocn.value = (((Math.pow(xw1, 3) / 2) + 7) - 0.6 * (Math.exp(xw1))).toFixed(4); newton.value =(y[j - 1] + (y[j]-y[j - 1]) * (xw1-x[j - 1])/(x[j]-x[j - 1])).toFixed(4) ; lagr.value =(y[j - 1]*(xw1-x[j])/(x[j - 1]-x[j])+y[j]*(xw1-x[j - 1])/(x[j]-x[j - 1])).toFixed(4); nporg.value = (newton.value-tocn.value).toFixed(4); lpogr.value =(lagr.value-tocn.value).toFixed(4) ; buff.value += "Линейная\nТочный результат = "+ tocn.value+"\n"+ "По формуле Ньютона = "+ newton.value+"\n"+ "Абс. погрешность по формуле Ньютона = "+ nporg.value+"\n"+ "По формуле Лагранжа = "+ lagr.value+"\n"+ "Абс. погрешность по формуле Лагранжа = "+ lpogr.value +"\n" ; } ////////////////////// function kvinterpol(){ let xw1 = parseFloat(xw.value.replace(",", ".")); if(!xw1) { alert("не все данные введены!"); return; } j=1; while (xw1 > x[j]) { j ++} stocn.value = (((Math.pow(xw1, 3) / 2) + 7) - 0.6 * (Math.exp(xw1))).toFixed(4); snewton.value = (y[j - 2] + ((y[j-1]-y[j-2])/h) *(xw1-x[j-2])+(1/(2*h*h))*(y[j-2]-2*y[j-1]+y[j])*(xw1-x[j-2])*(xw1-x[j-1])).toFixed(4); slagr.value =(y[j-2]*((xw1-x[j-1])*(xw1-x[j]))/((x[j-2]-x[j-1])*(x[j-2]-x[j]))+y[j-1]*((xw1-x[j-2])*(xw1-x[j]))/((x[j-1]-x[j-2])*(x[j-1]-x[j]))+y[j]*((xw1-x[j-2])*(xw1-x[j-1]))/((x[j]-x[j-2])*(x[j]-x[j-1]))).toFixed(4); snporg.value = (snewton.value-stocn.value).toFixed(4); slpogr.value =(slagr.value-stocn.value).toFixed(4) ; buff.value += "Квадратичная\nТочный результат = "+ stocn.value+"\n"+ "По формуле Ньютона = "+ snewton.value+"\n"+ "Абс. погрешность по формуле Ньютона = "+ snporg.value+"\n"+ "По формуле Лагранжа = "+ slagr.value+"\n"+ "Абс. погрешность по формуле Лагранжа = "+ slpogr.value +"\n" ; } ctx.translate(c.width/2, c.height/2); function sizeGhraph(){ setInterval(function() { let z = parseInt(z1.value), r = parseFloat(b.value.replace(",", ".")), l = parseFloat(a.value.replace(",", ".")), sizes = z/2.5 +"pt"; ctx.clearRect(-c.height/2,-c.width/2,c.height,c.width); //главные оси ctx.strokeStyle = "#00a1ff"; ctx.lineWidth = 3; ctx.setLineDash([0, 0]); ctx.beginPath(); for (xs = 0; xs <1; xs ++ ) { ctx.moveTo(xs * z, -c.height / 2); ctx.lineTo(xs * z, c.height / 2); ctx.moveTo(-c.width / 2, -xs * z); ctx.lineTo(c.width / 2, -xs * z); } ctx.stroke(); //выделение границ ctx.strokeStyle = "#04ff00"; ctx.lineWidth = 3; ctx.beginPath(); for (xs = 0; xs <1; xs ++ ) { ctx.moveTo(r*z, -c.height/2); ctx.lineTo(r*z, c.height/2); ctx.moveTo(l*z, -c.height/2); ctx.lineTo(l*z, c.height/2); } ctx.stroke(); //cетка ctx.strokeStyle = "rgba(0,0,0,0.4)"; ctx.lineWidth = 1; ctx.setLineDash([8, 1]); ctx.beginPath(); for (xs = -100; xs <= 100; xs ++ ) { ctx.moveTo(xs*z, -c.height/2); ctx.lineTo(xs*z, c.height/2); ctx.moveTo(-c.width/2, xs*z); ctx.lineTo(c.width/2, xs*z); } ctx.stroke(); // график функции ctx.strokeStyle = '#' + (2342).toString(16); ctx.setLineDash([0, 0]); ctx.lineWidth = 4; ctx.beginPath(); for (i = l; i <= r; i += 0.02) { ctx[i ? "lineTo" : "moveTo"](i * z, -ys(i) * z); } ctx.stroke(); //подпись координат ctx.fillStyle = "rgb(37,37,41)"; ctx.font = "italic 15pt Arial"; ctx.fillText("x", xs+120, 20); ctx.fillText("y", -20, -xs-120); ctx.fillStyle = "rgba(37,37,41,0.83)"; ctx.font = sizes +" Arial"; for (xs = -100; xs <= 100; xs ++ ) { ctx.fillText(xs.toFixed(1), xs*z, -5); ctx.fillText(xs.toFixed(1), 5, -xs*z); } }, 10) } //////////////////// //удаление функции function clearGraph() { ys = xs => ''; } //////////////////////////// //cоздание функции function createGraph() { ys = xs => (((Math.pow(xs, 3) / 2) + 7) - 0.6 * (Math.exp(xs))).toFixed(4);// функция } ///////////////////////////////////////////////////////////////////////////////////////////////// function clear_buff() { buff.value = ""; a.focus(); } function download(data, filename, type) { let file = new Blob([data], {type: type}); if (window.navigator.msSaveOrOpenBlob) window.navigator.msSaveOrOpenBlob(file, filename); else { let a = document.createElement("a"), url = URL.createObjectURL(file); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); setTimeout(function() { document.body.removeChild(a); window.URL.revokeObjectURL(url); }, 0); } } let openFile = function(event) { let input = event.target, reader = new FileReader(); reader.onload = function(){ let text = reader.result; buff.value += text; }; reader.readAsText(input.files[0]); }; function copy() { buff.select(); document.execCommand("copy"); alert("Сохранен в буфер: " +"\n"+ buff.value); } |
maplol123@gmail.com,
:-? |
рони,
не напугал?)) |
maplol123@gmail.com,
а как-то локализовать проблему и разместить код здесь или в одной из песочниц. zip это не то, что ускоряет решение. |
рони,
добавил js код. |
maplol123@gmail.com,
const replacedСomma = ({value}) => parseFloat(value.replace(",", ".")); function fillmass() { let a1 = replacedСomma(a), b1 = replacedСomma(b), step1 = replacedСomma(step); |
рони,
Спасибо, а с точки зрения логики, все нормально? |
Цитата:
|
Часовой пояс GMT +3, время: 03:05. |