Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 09.08.2017, 15:43
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

Сообщение от ksa
Так он же напрашивается!
Конкретно для этой задачи цикл вовсе не обязателен, я так считаю.

biben, у тебя в коде логическая ошибка связанная с переменной «а», найди её.


Решение твоей задачи с циклом:
// [url]https://jsfiddle.net/sza10bke/[/url] 
$(function(){
	function count(){
		var data={
				2000:1.5,
				5000:1.3,
				30000:1
			},
			sum=+$("#count_inp").val() || 0,
			result=false;
		
		for(var val in data){
			if(data.hasOwnProperty(val) && sum>=val)
				result=data[val]*sum;
		};
		
		$("#result p").html(result===false?'Укажите расстояние':result+' Рублей');
	};
	var s=$("#process_all_b");
	s.click(count);
});

Последний раз редактировалось Nexus, 09.08.2017 в 15:46.
Ответить с цитированием
  #12 (permalink)  
Старый 09.08.2017, 15:47
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<htm>
<head>
</head>
<body>
	<div id="calc_div">

		<div id="quantity_div"><p class="c">
			Сколько километров <br>
			<input type="text" id="count_inp" value="0"><br>
		</div>

		<div id="final_div">
			<p class="c"><button id="process_all_b" >Посчитать</button><br></p>
			<div id="result"><p class="c">Укажите расстояние</p></div>
		</div>
	</div>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	<script>

		$(function() {
			$("#process_all_b").click(function(){
				var sum = $("#count_inp").val(), k = [1.5, 1.3, 1, 0.8], r = [0, 2000, 5000, 30000],  i = k.length ;
				while(i--) if (sum >= r[i]) {
					sum *= k[i];
					 break;
					}
				$("#result p").html(sum.toFixed(0)+' Рублей');
			});
		});

	</script>
</body>
</html>

Последний раз редактировалось j0hnik, 09.08.2017 в 16:05. Причина: .toFixed(0)
Ответить с цитированием
  #13 (permalink)  
Старый 09.08.2017, 15:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Nexus
Конкретно для этой задачи цикл вовсе не обязателен, я так считаю.
Дело твое...
Ответить с цитированием
  #14 (permalink)  
Старый 09.08.2017, 15:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от j0hnik
k = [1.5, 1.3, 1, 0.8], r = [0, 2000, 5000, 30000];
Массив объектов был бы более гармоничен...
Ответить с цитированием
  #15 (permalink)  
Старый 09.08.2017, 15:57
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

После кода j0hnik я понял, что у меня в коде в объекте «data» не хватает свойства «0» со значением 2.
А у j0hnik в коде я бы переменную «i» объявил самой последней и значение ей установил бы как «k.length». + условие немного некорректное, у автора сравнение идет «больше или равно», а не строго «больше». Также отсутствует проверка на корректность введенных данных, к примеру если ввести отрицательное число, то...
Ответить с цитированием
  #16 (permalink)  
Старый 09.08.2017, 15:58
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Nexus
var data={
                2000:1.5,
                5000:1.3,
                30000:1
            }
Это опасная практика.
"Изготовитель" не гарантирует "правильность" сортировки ключей в объекте. Для правильного 100%-ного порядка следования нужно использовать массив.
Ответить с цитированием
  #17 (permalink)  
Старый 09.08.2017, 15:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

Сообщение от ksa Посмотреть сообщение
Дело твое...
На самом деле это дело автора)
Ответить с цитированием
  #18 (permalink)  
Старый 09.08.2017, 16:01
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

Сообщение от ksa Посмотреть сообщение
Это опасная практика.
"Изготовитель" не гарантирует "правильность" сортировки ключей в объекте. Для правильного 100%-ного порядка следования нужно использовать массив.
Ошибки в любом случае не будет, хоть как расставляй ключи, т.к. цикл не разрывается на первом фейле.

UPD. Затупил, ошибка возможна
Ответить с цитированием
  #19 (permalink)  
Старый 09.08.2017, 16:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Nexus
цикл не разрывается на первом фейле
Зачем делать лишние итерации?
Ответить с цитированием
  #20 (permalink)  
Старый 09.08.2017, 16:04
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Nexus
На самом деле это дело автора)
Тогда уже его "работодателя"...
Т.к. не каждого устроит индусский код
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заставить калькулятор считать дробные числа с запятой. webmanss Элементы интерфейса 3 10.03.2016 16:07
Калькулятор услуг tarantino Javascript под браузер 1 30.07.2015 00:21
Не работает Калькулятор просчета отопления igor700 Общие вопросы Javascript 5 26.02.2014 16:18
Кредитный калькулятор kurya4iy Общие вопросы Javascript 4 11.05.2013 23:09
Сделать калькулятор на сайт. asderru Работа 1 22.07.2010 13:46