Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.11.2018, 15:42
Кандидат Javascript-наук
Отправить личное сообщение для Retro_1477 Посмотреть профиль Найти все сообщения от Retro_1477
 
Регистрация: 14.04.2018
Сообщений: 113

Перевод с с++ на js
Всем привет! Помогите перевести данный код на js. Если что он решает систему нелинейных и трансцендентных уравнений методом Стеффенсена.

Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>

int Steffensen(int n, float eps, int count, float x[n], float y[n]);

int main(int argc, char **argv)
{
	int n;		// количество неизвестных
	int count;	//	заданное количество итераций
	float eps;	//	заданная погрешность вычислений
int i,j;		// рабочие переменные
	printf("\n kolichestvo neizvestnyh n=");
	scanf("%d", &n);
	float x[n];	//	вектор решения системы уравнений
	float y[n];	//	вектор невязок
	printf("\n vektor nachalnyh priblisheniy:\n");
	for (i=0; i<n; i++)
		scanf("%f", &x[i]);
	printf("\n pogreshn. vychisl. eps=");
	scanf("%g", &eps);
	printf("\n max kolich. iteraciy count=");
	scanf("%d", &count);
	
	Steffensen(n, eps, count, x, y);

	printf("\n Reshenie sistemy uravn.:\n");
	for (i=0; i<n; i++)
		printf("%12.6f", x[i]);		
	printf("\n");
	printf("\n Vektor nevjazok:\n");
	for (i=0; i<n; i++)
		printf("%e    ", y[i]);	
	printf("\n");
return 0;	
}
Ответить с цитированием
  #2 (permalink)  
Старый 18.11.2018, 16:18
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

В JS нет аналогов функций printf и scanf, то есть это нельзя заменить одной строкой кода, нужно писать пользовательские, хотя они уже есть и готовые.
Ответить с цитированием
  #3 (permalink)  
Старый 18.11.2018, 16:31
Кандидат Javascript-наук
Отправить личное сообщение для Retro_1477 Посмотреть профиль Найти все сообщения от Retro_1477
 
Регистрация: 14.04.2018
Сообщений: 113

Я решил использовать input для написания
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title>Лабораторная работа</title>
</head>
<style>
    .container{
        border: 2px solid #127ABD;
        padding: 10px;
    }
    div:nth-child(2){
        display: inline-block;
    }
    div.warning{
        color: red;
        display: inline-block;
    }
</style>

<body>

    <div class="container">
        <div><b>Количество неизвестных:</b><br>
        <input id="n" type="text" size="12" placeholder="n" maxlength="1"></div>

        <div><b>Вектор начальных приближений <div class="warning">(указывать через пробел)</div>:</b><br>
        <input id="vector" type="text" size="12"></div>

        <div><b>Погрешность вычислений.</b><br>
        <input id="eps" type="text" size="12" placeholder="eps" maxlength="12"></div>
        
        <div><b>Максимальное количество итераций </b><br>
        <input id="count" type="text" size="12" placeholder="count" maxlength="3"></div>

        <input id="button" type="submit" value="Решить">

        <div class="result"></div>
    </div>

</body>
<script src="jquery-3.3.1.js"></script>
<script>
var Steffensen = {
    n:undefined,
    vector:undefined,
    eps:undefined,
    count:undefined,
    x:[n],
    y:[n]
}

function solution(){

    Steffensen.n = document.getElementById('n').value;
    Steffensen.vector = document.getElementById('vector').value;
    Steffensen.eps = document.getElementById('eps').value;
    Steffensen.cont = document.getElementById('count').value;


    //$('.result').append(Steffensen.n);
}

$('#button').click(function(){
    solution();
});

</script>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 18.11.2018, 16:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

И как поля ввода будут решать for (i=0; i<n; i++) scanf("%f", &x[i]);?
Ответить с цитированием
  #5 (permalink)  
Старый 18.11.2018, 18:19
Кандидат Javascript-наук
Отправить личное сообщение для Retro_1477 Посмотреть профиль Найти все сообщения от Retro_1477
 
Регистрация: 14.04.2018
Сообщений: 113

Плохо знаком с синтаксисом c++, это цикличный ввод? Можно буде взять эту строку и поделить её через .split() на отдельные кусочки и потом работать с ними. И можно добавить условия для ввода вектора, типо n = кол-ву аргументов
Ответить с цитированием
  #6 (permalink)  
Старый 18.11.2018, 19:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Retro_1477
это цикличный ввод?
Это форматируемый ввод (считывание данных из пото­ка stdin) в цикле.
printf, это форматируемый вывод.
Формат ожидаемого при вводе и трактуемого при выводе задается в аргументах функций.

Конечно можно задать некие наборы, а затем выполнить расчет (аналогичное Steffensen на JS решение тоже должно быть). Но вопрос звучащий в теме тогда вообще можно было бы и не ставить.
Ответить с цитированием
  #7 (permalink)  
Старый 18.11.2018, 21:30
Кандидат Javascript-наук
Отправить личное сообщение для Retro_1477 Посмотреть профиль Найти все сообщения от Retro_1477
 
Регистрация: 14.04.2018
Сообщений: 113

я думал получится перевести, ну ладно. Может есть какой-нибудь онлайн калькулятор и там взять js код
Ответить с цитированием
  #8 (permalink)  
Старый 19.11.2018, 06:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Retro_1477
я думал получится перевести
Можно, но если по писанному, то получится не удобно. Вопрос видимо иначе надо было ставить, типа - "есть JS функция решающая систему нелинейных уравнений методом Стеффенсена (#include <stdio.h>, #include <math.h>, #include <conio.h>, int Steffensen(int n, float eps, int count, float x[n], float y[n]); вообще не уминается), как обеспечить ввод данных для функции?".

В общем то прочесть о функции scanf несложно. На JS вы не сможете обеспечить такой же функционал, но вы можете установить обработчик ввода в поля. Он должен проверять вводимые значения в поля согласно формату, а также запрещать ввод в последующие поля при пустых предыдущих. То есть, если поле определяющее количество неизвестных пусто, то ввод значений для &x[i], запрещен, так как определяет длину массива значений, что также нужно проверять в обработчик при вводе.

Как можно видеть форматы %е, %f, %g определяют число с плавающей запятой. Разница в форматах заключается в следующем:
f - формат d.ddd...
e - формат в научной нотации (типа 1.2e2 и т.п.)
g - шестизначная дробная часть

То есть поля обеспечивающие ввод значений для соответствующих переменных должны иметь шаблоны рег. выражений для проверки ввода. Если обработчик обнаружил, что ввод корректен, количество неизвестных указано и введено, то выполняется функция.

Соответственно можно организовать и вывод на экран, где printf("\n"); и подобные, это ненужное и бесполезное, ну а вывод в формате %e и %12.6f, это также не сложно для понимания.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод SMIL анимации в JS (часть вторая) Black_Star Общие вопросы Javascript 5 16.02.2017 17:13
Перевод SMIL анимации в JS Black_Star Общие вопросы Javascript 9 14.02.2017 18:25
BackEnd/FrontEnd Developer (Native JS) Abab Работа 0 25.12.2016 10:56
js стиль render для react.js vflash Ваши сайты и скрипты 5 01.04.2016 22:57
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28