| 
	| 
	
	| 
		
	| 
			
			 
			
				05.02.2013, 13:27
			
			
			
		 |  
	| 
		
			|  | Кандидат Javascript-наук       |  | 
					Регистрация: 03.08.2011 
						Сообщений: 106
					 
		
 |  |  
	| 
				Как написать алгоритм выборки в javascript?
			 Здравствуйте. Подскажите пожалуйста, целый день пытаюсь написать алгоритм, но пока ничего не выходит.  
Есть основные числа в белых ячейках, которые я получаю от пользователя и знаю их заранее. Напирмер: 
у нас есть число 500 оно соответсвует числу 100 и 5, или у нас есть число 75 — соответсвует числу 25 и 3 или возьмем число 450, которого в таблице нет. Тогда мы берем число, которое меньше числа 450 но ближе всех остальных находится к нему. В данном случае это 400, оно соответсвует числам 100 и 4 в нашей таблице. 
Вопрос: как мне правильно составить алгоритм в javascript, который будет находить соответствия для нужных чисел? 
Подскажите пожалуйста или дайте ссылку на подобные решения или статьи. 
Спасибо за потраченное время. |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 13:48
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 11.09.2010 
						Сообщений: 8,804
					 
		
 |  |  
	| А какой тут может быть алгоритм?Проходим в цикле по элементам массива и пытаемся найти максимальное число, меньшее или равное искомому. Помоему по-другому никак. По крайней мере через цикл - проще всего.
 |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 13:54
			
			
			
		 |  
	| 
		
			|  | Кандидат Javascript-наук       |  | 
					Регистрация: 03.08.2011 
						Сообщений: 106
					 
		
 |  |  
	| 
	
 
	| Сообщение от danik.js   |  
	| А какой тут может быть алгоритм? Проходим в цикле по элементам массива и пытаемся найти максимальное число, меньшее или равное искомому. Помоему по-другому никак. По крайней мере через цикл - проще всего.
 |  
	
 Можно пример, как именно проходить? |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 14:07
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| Isaac,а с 5 как быть ? 6 будет 5,1 или 1,5?
 |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 14:27
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 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 перекрыл только для отладки, не стоит так делать в рабочем проекте. |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 14:50
			
			
			
		 |  
	| 
		
			|  | Кандидат Javascript-наук       |  | 
					Регистрация: 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. Выборка должна выбрать тот вариант, где цифра по синий линии больше, подскажите пожалуйста, как добавить эту проверку в ваш код? |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 14:54
			
			
			
		 |  
	| 
		
			|  | Кандидат Javascript-наук       |  | 
					Регистрация: 03.08.2011 
						Сообщений: 106
					 
		
 |  |  
	| 
	
 
	| Сообщение от рони   |  
	| Isaac, а с 5 как быть ? 6 будет 5,1 или 1,5?
 |  
	
 Берем тот ответ, где цифра в синий колонке больше, то есть в данном случае если у нас число 5, то берем 5 и 1 |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 14:54
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 11.09.2010 
						Сообщений: 8,804
					 
		
 |  |  
	| Поменять местами массивы x и y и изменить знак сравнения temp > last.value на temp >= last.value |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 15:00
			
			
			
		 |  
	| 
		
			|  | Кандидат Javascript-наук       |  | 
					Регистрация: 03.08.2011 
						Сообщений: 106
					 
		
 |  |  
	| 
	
 
	| Сообщение от danik.js   |  
	| Поменять местами массивы x и y и изменить знак сравнения temp > last.value на temp >= last.value |  
	
 Можете показать, как это сделать ,я не совсем понимаю, где именно менять?   |  |  
	| 
		
	| 
			
			 
			
				05.02.2013, 15:04
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 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];
  |  |  |  |