Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2012, 11:20
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

Решить с помощью цикла 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. Я новичёк на форуме по этому извиняюсь если создал свою тему не по адресу...
Заранее Всем благодарен за ответ!

Последний раз редактировалось Mike_Kharkov, 08.01.2012 в 11:25.
Ответить с цитированием
  #2 (permalink)  
Старый 08.01.2012, 11:25
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Mike_Kharkov
В чем моя ошибка и как это осуществить с помощью цикла FOR?
Для форматирования кода на форуме существуют специальные теги. Циклы while, for.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2012, 11:38
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

На приведенной вами ссылке я не заметил аналогичной ситуации...
P.S. Не подскажите как именно форматируется код?
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2012, 12:16
Интересующийся
Отправить личное сообщение для Saqsess Посмотреть профиль Найти все сообщения от Saqsess
 
Регистрация: 06.01.2012
Сообщений: 25

В первом алгоритме age-- и year-- выполняются после document.write().
Во втором алгоритме в начале выполняется age--, потом document.write() и в конце уже year--. По приведенной выше ссылке это написано.
Работающее решение:
for ( i = 0; age !== i ; year--, age--)

Последний раз редактировалось Saqsess, 08.01.2012 в 12:23.
Ответить с цитированием
  #5 (permalink)  
Старый 08.01.2012, 12:25
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Mike_Kharkov
На приведенной вами ссылке я не заметил аналогичной ситуации...
Очень даже может быть. Потому, что там основы, усвоив которые, подобные вопросы перестанут возникать
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 08.01.2012, 13:05
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

Большое спасибо за подсказку!
Правда я не совсем понял что означаем символ "!" ?
В гугле найти не удалось...
P.S. Но все равно спасибо...
Ответить с цитированием
  #7 (permalink)  
Старый 08.01.2012, 13:13
Интересующийся
Отправить личное сообщение для Saqsess Посмотреть профиль Найти все сообщения от Saqsess
 
Регистрация: 06.01.2012
Сообщений: 25

«Не равно». В школе он пишется как ≠
Ответить с цитированием
  #8 (permalink)  
Старый 08.01.2012, 13:19
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

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.: если где ошибся, надеюсь, меня поправят.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 08.01.2012 в 13:33.
Ответить с цитированием
  #9 (permalink)  
Старый 08.01.2012, 13:33
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

Большое спасибо Вам за потраченное время!
Даже не знаю как вас и отблагодарить...
P.S. Постараюсь разобраться в том что вы написали!
Ответить с цитированием
  #10 (permalink)  
Старый 08.01.2012, 13:35
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Mike_Kharkov
Правда я не совсем понял что означаем символ "!" ?
Смотря в каком контексте он используется. В том, о, кот. шла речь "не идентично".

// проверяем соответствие число - строка (равны, но не идентичны)
if(1 != "1") alert("не равно"); // false
if(1 !== "1") alert("не идентично"); // true
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 08.01.2012 в 13:48.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать переход с одной страницы на другую с помощью клавиш "стрелок" bazilio2010 Общие вопросы Javascript 6 13.11.2011 23:58
Создание с помощью скрипта html элемента Anastasiya Общие вопросы Javascript 4 25.10.2011 22:28
создание текстового поля с помощью javascript mrDeko Общие вопросы Javascript 2 02.09.2010 21:07
Прокрутка страницы с помощью клавиш Mirgorod Events/DOM/Window 0 17.06.2010 22:39
Проверка наличия логина в БД при регистрации, с помощью ajax storng Общие вопросы Javascript 4 09.04.2010 20:24