Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.11.2019, 23:15
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

Проверьте пожалуйста код
Я тут много чего нахимичил, в связи своей неопытности, но думаю, что можно это все упростить в несколько раз.
-Вычисления.
-Построение графика.
-История вычислений, с сохранением и загрузкой файла.
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);
}
Вложения:
Тип файла: zip лаба5 готовая.zip (1.02 Мб, 1 просмотров)

Последний раз редактировалось maplol123@gmail.com, 17.11.2019 в 23:35. Причина: Добавление кода
Ответить с цитированием
  #2 (permalink)  
Старый 17.11.2019, 23:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

maplol123@gmail.com,
Ответить с цитированием
  #3 (permalink)  
Старый 17.11.2019, 23:26
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

рони,
не напугал?))
Ответить с цитированием
  #4 (permalink)  
Старый 17.11.2019, 23:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

maplol123@gmail.com,
а как-то локализовать проблему и разместить код здесь или в одной из песочниц. zip это не то, что ускоряет решение.
Ответить с цитированием
  #5 (permalink)  
Старый 17.11.2019, 23:36
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

рони,
добавил js код.
Ответить с цитированием
  #6 (permalink)  
Старый 18.11.2019, 00:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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);
Ответить с цитированием
  #7 (permalink)  
Старый 18.11.2019, 21:11
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

рони,
Спасибо, а с точки зрения логики, все нормально?
Ответить с цитированием
  #8 (permalink)  
Старый 18.11.2019, 21:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от maplol123@gmail.com
а с точки зрения логики, все нормально?
увы мне, я не осилил ваш код.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Покритикуйте, пожалуйста, код ) Alessio18911 jQuery 0 17.04.2019 00:50
пожалуйста переведите код с c++ на JavaScript GermanIvk05 jQuery 4 14.12.2018 22:41
Пожалуйста, кому не лень, посмотрите код, что он примерно делает?? arsen97 Общие вопросы Javascript 1 15.08.2014 16:51
Расшифруйте пожалуйста код! Mrs.Haneki Элементы интерфейса 2 17.04.2014 10:25
помогите пожалуйста улучшить код. Duda.Ml1986@gmail.com Серверные языки и технологии 4 07.01.2012 20:53