Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.02.2013, 13:27
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Как написать алгоритм выборки в javascript?
Здравствуйте. Подскажите пожалуйста, целый день пытаюсь написать алгоритм, но пока ничего не выходит.

Есть основные числа в белых ячейках, которые я получаю от пользователя и знаю их заранее. Напирмер:
у нас есть число 500 оно соответсвует числу 100 и 5, или у нас есть число 75 — соответсвует числу 25 и 3 или возьмем число 450, которого в таблице нет. Тогда мы берем число, которое меньше числа 450 но ближе всех остальных находится к нему. В данном случае это 400, оно соответсвует числам 100 и 4 в нашей таблице.
Вопрос: как мне правильно составить алгоритм в javascript, который будет находить соответствия для нужных чисел?
Подскажите пожалуйста или дайте ссылку на подобные решения или статьи.
Спасибо за потраченное время.
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2013, 13:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А какой тут может быть алгоритм?
Проходим в цикле по элементам массива и пытаемся найти максимальное число, меньшее или равное искомому. Помоему по-другому никак. По крайней мере через цикл - проще всего.
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2013, 13:54
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Сообщение от danik.js Посмотреть сообщение
А какой тут может быть алгоритм?
Проходим в цикле по элементам массива и пытаемся найти максимальное число, меньшее или равное искомому. Помоему по-другому никак. По крайней мере через цикл - проще всего.
Можно пример, как именно проходить?
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2013, 14:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Isaac,
а с 5 как быть ? 6 будет 5,1 или 1,5?
Ответить с цитированием
  #5 (permalink)  
Старый 05.02.2013, 14:27
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Object.defineProperty(Object.prototype, 'toString', {
    value: function () {
		var result = [];
		for (var property in this) {
			result.push( property + ' : ' + this[property] );
		}
		return result.join(',');
	},
	enumerable: false
});

function find (needle) {
    var x = [1,2,3,4,5];
    var y = [1,5,10,25,50,100];
    
    var last = {x: -1, y: -1, value: -1}, temp;
    for (var i=0; i<x.length; i++) {
        for (var j=0; j<y.length; j++) {
            temp = x[i] * y[j];
            if (temp == needle) {
                return {x: x[i], y: y[j], value: needle};
            }
            if (temp < needle && temp > last.value) {
                last = {x: x[i], y: y[j], value: temp};
            }
        }
    }
    return last;
}

alert ( find(450) );
alert ( find(250) );


toString перекрыл только для отладки, не стоит так делать в рабочем проекте.
Ответить с цитированием
  #6 (permalink)  
Старый 05.02.2013, 14:50
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Сообщение от danik.js Посмотреть сообщение
Object.defineProperty(Object.prototype, 'toString', {
    value: function () {
		var result = [];
		for (var property in this) {
			result.push( property + ' : ' + this[property] );
		}
		return result.join(',');
	},
	enumerable: false
});

function find (needle) {
    var x = [1,2,3,4,5];
    var y = [1,5,10,25,50,100];
    
    var last = {x: -1, y: -1, value: -1}, temp;
    for (var i=0; i<x.length; i++) {
        for (var j=0; j<y.length; j++) {
            temp = x[i] * y[j];
            if (temp == needle) {
                return {x: x[i], y: y[j], value: needle};
            }
            if (temp < needle && temp > last.value) {
                last = {x: x[i], y: y[j], value: temp};
            }
        }
    }
    return last;
}

alert ( find(450) );
alert ( find(250) );


toString перекрыл только для отладки, не стоит так делать в рабочем проекте.
Все супер, только если например у нас есть цифра 10, то у нас получается 2 варианта ответов: 5 и 2; 10 и 1. Выборка должна выбрать тот вариант, где цифра по синий линии больше, подскажите пожалуйста, как добавить эту проверку в ваш код?
Ответить с цитированием
  #7 (permalink)  
Старый 05.02.2013, 14:54
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Сообщение от рони Посмотреть сообщение
Isaac,
а с 5 как быть ? 6 будет 5,1 или 1,5?
Берем тот ответ, где цифра в синий колонке больше, то есть в данном случае если у нас число 5, то берем 5 и 1
Ответить с цитированием
  #8 (permalink)  
Старый 05.02.2013, 14:54
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Поменять местами массивы x и y и изменить знак сравнения temp > last.value на temp >= last.value
Ответить с цитированием
  #9 (permalink)  
Старый 05.02.2013, 15:00
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Сообщение от danik.js Посмотреть сообщение
Поменять местами массивы x и y и изменить знак сравнения temp > last.value на temp >= last.value
Можете показать, как это сделать ,я не совсем понимаю, где именно менять?
Ответить с цитированием
  #10 (permalink)  
Старый 05.02.2013, 15:04
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Поменять
var x = [1,2,3,4,5];
var y = [1,5,10,25,50,100];


на
var y = [1,5,10,25,50,100];
var x = [1,2,3,4,5];


Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как научиться думать на javascript ? samuel Оффтопик 31 03.09.2013 02:10
Как загрузить JavaScript после создание DOM? Jeremen Общие вопросы Javascript 6 24.08.2012 21:54
Как отложить синтаксический анализ javascript? Ingiborn Javascript под браузер 124 11.08.2012 12:05
Как вывести переменную из javascript в html код? red-nicolas Элементы интерфейса 3 25.02.2012 13:27
Как то можно узнать ID HTML элемента вызвавшего JavaScript функцию? Opusel Events/DOM/Window 1 18.12.2011 18:36