Перепишите код, заменив цикл for на while, без изменения поведения цикла.
Решение
[Открыть задачу в новом окне]
Важность: 5
Напишите цикл, который предлагает prompt ввести число, большее 100. Если посетитель ввел другое число — попросить ввести еще раз, и так далее.
Цикл должен спрашивать число пока либо посетитель не введет число, большее 100, либо не нажмет кнопку Cancel (ESC).
Предполагается, что посетитель вводит только числа.
Пример работы.
Решение
[Открыть задачу в новом окне]
‹ Логические операторы Директивы break и continue ›
01.11.2010
Илья Кантор
Александр
var answ = 1; while ( (answ = prompt('Введите число больше 100', 100)) <= 100 && answ ) {}
Катерина Червенкова
Я попробовала все возможные варианты решения задачи:
var i = 0; while (i < 3) { alert(i++); }
http://learn.javascript.ru/pla...
Обнаружилось, что - первые два аналогичны по результату (потому что постфиксная форма возвращает сначала старое значение, потом новое), причём вариант с i++ короче; - а вторые два различаются: первый выводит сразу новое значение (что закономерно), и даже одно выходящее за границы условия (3), поэтому такая форма записи для решения не подходит; а второй выводит сперва старое, потом новое, то есть в принципе аналогичен первым двум. Итого: оптимален самый первый вариант.
Влад
<script type="text/javascript"> var i = 0; while (i < 3) { alert("number " + i + "!"); i++ } </script>
Я, конечно, не так сделала, но почему-то результат условиям соответствует
var numb = prompt ('Введите число больше 100', ''); while (numb < 100 ) { var numb = prompt ('Введите число больше 100', ''); }
·
Александр Белец
нет проверки на null, плюс, дважды одна команда повторяется, чего можно было бы избежать в do...while. Речь идет о красоте кода, однако, на нее полезно ориентироваться, полагаю, для систем с высокой нагрузкой.
GrafMonteKristo
Вдоволь постебавшись над циклом for, я понял, что это некий гибрид управляющей конструкции, блока, задающего переменные и трёх (!!) вспомогательных блоков с действиями.
Посмотрите на скрипт - повеселитесь от души! =)
·
Александр Белец
интересно, сколько будет итераций у цикла for(i++;i++<10;i++){console.log(i);}
·
GrafMonteKristo
Ты читать умеешь или нет? Я же русским языком написал "любое присвоение КРОМЕ любой формы -крементов".
·
Александр Белец
Эй, полегче, я тебе не брат или сестра, чтобы так фамильярничать. Уберем из первого блока инкремент, хорошо. Каков ответ на такой вопрос? Сколько будет в итоге итераций, каков будет их порядок? Интереса это почти не снижает.
Го
От 1 до 5.
var i = 0;while (i++ < 5) alert(i);Первое значение: i=1. Остановимся на нём подробнее. Оператор i++увеличивает i, возвращая старое значение, так что в сравнении i++ < 5 будет участвовать старое i=0.А почему 0 не выведет?
·
Artur Trvd
var i = 0;while (i++ < 5) alert(i); при сравнении: (i++ < 5) сначала сравнивает 0 < 5 потом увеличивает но на 1, а когда идёт в тело цикла в i уже значение 1 вот он и выводит 1
·
Artur Trvd
потом увеличивает ноль на 1*
сори клавиши на клаве западают)
Mel1
А можно так про 100 написать?
var num=0; while (num != null && num=prompt('Введите число больше 100',0) <= 100 ) ;
ПавелСурж
Я решил задачу про больше ста так: <title></title><meta charset="utf-8"><script>var a = 1;while (a <= 100) {a = prompt('Введите число большее 100.','');}</script>
David
Да, не помешало бы итога в конце главы и заданий по всему что было в этой главе! тогда все хорошо закрепится и запомнится)
Baizer
1var i = 3;2 3while(i) {4 alert(i--);5} РешениеОтвет: 3,2,1.А не 1.
Андрей Гладков
Я только начал изучать язык по данному ресурсу. Последнюю задачу решил так:
for (var i=0; i<100&& i!=null; i =prompt('enter the namber > 100','')) {}Спасибо за замечательный ресурс:)!
·
palehorse
Очень кривое решение, которое, во-первых, противоречит самой природе цикла for (for использует переменную-счетчик, которая в пределах цикла должна использоваться лишь для подсчета количества итераций, а не для сохранения значений каких-либо выражений), во-вторых, затрудняет читаемость кода, в-третьих, работает некорректно (попробуйте, используя этот код, ввести не число). Циклы while и do-while существуют не для красоты, пользуйтесь ими, это как раз подходящий случай. Учитесь с самого начала решать задачи правильно во всех смыслах.
·
palehorse
Прошу прощения насчет третьего пункта, не дочитал условие задачи до конца :)
·
Андрей Гладков
Тогда как я понимаю должно быть в током виде:
for (var i=0; i<100&& i!=null; ) { i =prompt('enter the namber > 100','') }Спасибо за обратную связь.
·
Андрей Гладков
Прочитал еще раз:) вот так вот поторопился... и понял что речь шла и об имени переменной тоже.. т.е такой вид можно считать корректным : for (var num = 0; num<100&& num!=null; ) { num =prompt('Введите число больше 100','') }
·
Андрей Гладков
Вот опять прочитал и из ваших слов, вижу что цикл For только считает количество итераций а не для сохранения значения.. Но значение полученное в результате выполнения цикла for можно вывести.. ( в теории? или я ошибаюсь?).Что то я окончательно запутался..
Для изучения пользуюсь только этим ресурсом..
Dimitry Lapynow
Отличная глава, спасибо!
Скучаю по итогам в конце главы, как было в некоторых ранее, что бы укомплектовать информацию и закрепить материал.
Volya Pers
Почему етот код не работает?о_О do { var numbr=promt("Введите число больше 100 и всё будет нормас",""); } while(numbr<=100 && numbr!=null);
·
ATi
Потому что promt is not definedОчепятка))
Volya Pers
Почему етот код не работает?о_О
do { var numbr=promt("Введите число больше 100 и всё будет нормас",""); } while(numbr<=100 && numbr!=null);
Сергей
У меня работает такой код: <script> do { var num=prompt('Введите число, большее 100',''); if (num<=100&& num!=null) { alert ('Вы ввели число, меньше 100. Попробуйте еще раз )'); } } while (num<=100 && num!=null); alert ('Введенное Вами число - '+num);</script> Только как сделать, чтобы откидывало все символы кроме цифр?
Dennis
Последняя задача – просто потрясающая (по крайне мере – для чайника, вроде меня).Во-первых, хочу сказать, что фраза в последнем предложении решения задачи «при вводе null» создает впечатление, что имеется ввиду введение строки « null» в промпт. Может написать «при возращении промптом значения null»…Во-вторых, данная задача отлична помогла еще раз уяснить, что такое специальное значение null и в чем различия работы логических операторов ИЛИ и И.И в-третьих, я не совсем понял алгоритм сброса цикла при введении строки. Получается, что при введении строки сравнение num <= 100 дает false, но почему именно? Не может же быть, что любая буква больше цифры сто, или может?
·
Dennis
Методом проверки всех вариантов сравнения разобрался, почему строка дает False и обрыв цикла: во всех сравнениях с цифрой строка дает False, кроме сравнения “НЕ равно”.
Также прочитал еще раз раздел «операторы сравнения» и понял почему Null дает True в данном сравнении (так как Null приводится к нулю).
А вот с пустой строкой, вернувшейся из промпта – не понятно.
Если пустую строку, вернувшуюся из промпта, сравнить (пустая строка<1) то будет True, поэтому цикл повторяется. Но ведь должно вернутся Ubdefined, которое как сказано в разделе «операторы сравнения» «При преобразовании в число undefined становится NaN … А значение NaN по стандарту устроено так, что любые сравнения с ним возвращают false». Непонятно…
PS Сравнивал Ubdefined, полученную в такой ситуации: var num; alert(num<1); и, да, дает False, как и положено…
·
Dimitry Lapynow
Функция prompt возвращает тип String, а при сравнении строки с числом выдается значение false. И если вписать любое символьное значение(включая 'null'), то получим false и прерывание цикла.
Пустая же строка приравнивается к 0, что подходит по условию цикла, поэтому прерывания не вызывает.
Fenix-2750
var num=prompt('Введите число, большее 100', '0'); do { var num = prompt("Введите число больше 100?", 0); } while(num <= 100 && num != null); alert('Верно!');
Это скрипт, данный в решении. Если два раза нажать на "Отмена", цикл прекращается и выводит "Верно!". А если сделать проще, например, вот так:
var num=prompt('Введите число, большее 100', '0');while(num<=100) { var num = prompt("Введите число больше 100?", 0);} while(num <= 100 && num != null);alert('Верно!');
или так:
var num=prompt('Введите число, большее 100', '0');for(; num<=100; ) { var num = prompt("Введите число больше 100?", 0);} while(num <= 100 && num != null);alert('Верно!');то будет работать до тех пор, пока не введете число, большее 100.
Vir2alex
Объявлять одну и ту же переменную много раз, это хорошо?
·
Patch
особого смысла в этом нет, да и считается плохим тоном.
Ag-velichko
последняя задача еще проще: var i=prompt('Введите число','');for(;i<=100&&i!=null; ){i=prompt('Введите число','');}
·
shamash
Тогда уж и var внутрь for: for(var i=prompt('Введите число','');i<=100&&i!=null; ){i=prompt('Введите число','');}
Verasiavka
Меня интересует тот же вопрос, что и Катюшу Гриценко
Во второй части задания "Для каждого цикла запишите, какие значения он выведет. Потом сравните с ответом." (в решении) указано объяснение, почему первое значение i=1 вот так:
"Первое значение - i=1, по той же причине."
Тоесть, исходя из объяснений по первому циклу, причина вот такая:"Первое значение - i=1, так как первым выполнится сравнение ++i < 5. При этом i будет уже увеличена до 1." (т.е.1<5)зы. СНАЧАЛА увеличение i на 1, ПОТОМ сравнение этого увеличенного i=1 и 5.
Но, если я все правильно поняла, то это объяснение не подходит для второго цикла. Оно должно быть примерно таким:"Первое значение - i=1, так как первым выполнится сравнение i++ < 5. При этом i будет равно 0, т.е. 0<5 - условие выполняется. После этого i увеличивается на единицу и становится равным 1, т.е. алертом выводится уже 1."зы. СНАЧАЛА сравнение начального i=0 и 5, ПОТОМ увеличение i на 1.
Объясните, если я не права :)
·
Roman Skritskiy
Вы правы, во второй части первого примера фраза "Первое значение - i=1, по той же причине" неверна. Первым значением будет 0, он сравнивается с 5, потом i увеличивается и выводится 1.
Box4sawa
Мой вариант: <script> var a = true while(a) { var number = prompt('Enter the number more than 100'); if(number > 100 || number == null) a = false; }</script>