Решить с помощью цикла FOR...
Здравствуйте!
Я очень поверхностно знаком с Javascript и недавно решил повторить для себя уроки Попова по этой теме. Задание в его уроке следующее: Вам надо спросить сначала, сколько человеку лет, затем - какой сейчас год. После этого нужно создать цикл и вывести на экран список, сколько человеку было лет год назад, 2 года назад и т.д. Например, человек ввел что ему 30 лет, и сейчас 2010 год. Вам в итоге надо вывести наэкран В 2009 году Вам было 29 лет В 2008 году Вам было 28 лет и т.д. */ // решение: var age = window.prompt("Сколько вам лет?"); var year = window.prompt("Какой сейчас год?"); while(age > 0){ document.write("В "+ year + " году Вам было лет: " + age + "<br/>"); age--; year--; } P.S. Вышеописанное решение было взято из его урока - но хотелось осуществить это с помощью цикла FOR и у меня вышло следующее: var age = window.prompt("Сколько вам лет?"); var year = window.prompt("Какой сейчас год?"); for ( age>=0;age-- ; year--) { document.write(" В" + year + " году Вам было " + age + " лет" + "<br/>"); } В результате применения именно этого варианта получается, что возраст возвращается на экран на 1-ну единицу меньще от той которую я ввожу изначально...(хотя с годом все в порядке..) вопрос: В чем моя ошибка и как это осуществить с помощью цикла FOR? P.S. Я новичёк на форуме по этому извиняюсь если создал свою тему не по адресу... Заранее Всем благодарен за ответ! |
Цитата:
|
На приведенной вами ссылке я не заметил аналогичной ситуации...
P.S. Не подскажите как именно форматируется код? |
В первом алгоритме age-- и year-- выполняются после document.write().
Во втором алгоритме в начале выполняется age--, потом document.write() и в конце уже year--. По приведенной выше ссылке это написано. Работающее решение: for ( i = 0; age !== i ; year--, age--) |
Цитата:
|
Большое спасибо за подсказку!
Правда я не совсем понял что означаем символ "!" ? В гугле найти не удалось... :) P.S. Но все равно спасибо... |
|
Mike_Kharkov, специально для вас сидел набирал:
<html> <head> <meta charset="utf-8"> <script type="text/javascript"> var x = prompt('Сколько вам лет?', 0); // Запрос пользователю. // Если ввод отменен, то prompt возвращает null. Иначе то, что ввел пользователь в строковом представлении (строку). // Т.е., если пользователь ввел, к примеру, "1", то эта единица будет строкой (не числом). // isNaN - глобальный метод. Пытается преобразовать переданный параметр в число. // Если параметр не может быть преобразован, возвращает true, иначе возвращает false. // ! - Логическое НЕ (!). // Оператор инвертирует значение своего (одиночного) операнда. // Логика. // isNaN пытается преобразовать то, что мы получили от пользователя в число. // Если ему это удается, он возвращает False, но поскольку инструкция if() выполняется только в том случае, // когда выражение истинно (или может быть преобразовано к истине), // обращаем False в True с помощью логического оператора НЕ (!). if(!isNaN(x)) { // new Date() - Создание объекта, в котором хранятся текущие дата и время. // С помощью метода getFullYear() объекта Date, получаем полное представление текущего года. var z = new Date().getFullYear(); // Важно: в данный момент в переменной x содержится строка, а не число. // Но поскольку javascript автоматически преобразовывает к нужному типу данныx в зависимости от контекста, // то на первой итерации (проходе) цикла, оно будет преобразовано в число, и дальнейшие операции // уже будут выполняться с ним, как с числом. /* Цитата из Фленегана: если значение одного типа используется в контексте, требующем значение некоего другого типа, интерпретатор JavaScript автоматически пытается преобразовать это значение. */ // Инструкция for/Цикл for. Ее шаблон выглядит примерно так: // for (инициализация; проверка; шаг) { // ... тело цикла ... // } // В строке ниже инициализация пропущена, поскольку значение нужной нам переменной (x) было присвоено раньше. for(; x > 0; x--, z--) { document.write(z + " - " + x + "<br>"); } // Заметка. Если тело цикла состоит из одной строки, то можно обойтись без фигурных скобок, т.е. записать, например, так: // for(; x > 0; x--, z--) document.write(z + " - " + x + "<br>"); } </script> </head> <body> </body> </html> // без комментариев скрипт выглядит так: var x = prompt('Сколько вам лет?', 0); if(!isNaN(x)) { var z = new Date().getFullYear(); for(; x > 0; x--, z--) { document.write(z + " - " + x + "<br>"); } } p.s.: если где ошибся, надеюсь, меня поправят. |
Большое спасибо Вам за потраченное время!
Даже не знаю как вас и отблагодарить... P.S. Постараюсь разобраться в том что вы написали!:) |
Цитата:
// проверяем соответствие число - строка (равны, но не идентичны) if(1 != "1") alert("не равно"); // false if(1 !== "1") alert("не идентично"); // true |
Часовой пояс GMT +3, время: 08:19. |