Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Оператор while




Даже если Вы ещё никогда не программировали, то наверняка работали в разных программах просто как пользователь. И знаете, что одного и того же результата иногда можно достичь разными способами.

То же и в программировании. С помощью цикла while можно делать всё то же, что и с помощью цикла for. Что-то удобнее делать в одном цикле, что-то — в другом. Что-то быстрее в одном, что-то безопаснее в другом. Кто-то привык к одному, кто-то — к другому.

Чтобы Вам было понятнее, мы будем использовать те же самые примеры, но в новой «аранжировке».

While означает «в то время как» или «до тех пор, пока». В то время как имеется условие и до тех пор, пока оно существует, выполняется код.

Синтаксис до боли знакомый:

while (условие) {код}

Попробуем «проиграть» в этом цикле наш первый пример: сумму чисел от 1 до 10. Вот как выглядят оба кода:

В цикле for значение счётчика i задавалось в заголовке цикла. В цикле while оно не задаётся, мы задаём его при объявлении переменной.

Шаг здесь переносится в самый конец. То есть мы задаём условие, назначаем на него действие и только потом указываем шаг для его выполнения.

Расширенный вариант, с выводом всех значений и блоком if для разделителей, попробуйте конвертировать сами. А потом взгляните на ответ.

А теперь немножко помучаемся с таблицей умножения.

Здесь у нас были вложенные циклы. Цикл while тоже можно вкладывать, но мы наткнёмся на один нюанс, связанный с последовательностью действий и сохранением данных в переменной, и придётся немножко обмануть программу.

А сначала попробуем комбинированный вариант: внешний цикл сконвертируем в while, а внутренний оставим for.

Вот наш внешний цикл, выводящий <tr>.

var i = 2, j; /* Сразу объявим переменную и для внутреннего цикла. Назначать не будем, так как внутренний цикл у нас FOR.*/ document.write(" <table border='1' cellspacing='0' cellpadding='2' align='center'> ") while (i <= 10) { document.write(" <tr> ") // Здесь будет // вложенный цикл. document.write(" </tr> ") i++ } document.write(" </table> ")

Теперь просто скопируем в отведённое место вложенный цикл for:

var i = 2, j; document.write(" <table border='1' cellspacing='0' cellpadding='2' align='center'> ") while (i <= 10) { document.write(" <tr> ") for (j = 2; j < 10; j++) {document.write(" <td> " + j + " &times; " + i + " = " + (i * j) + " </td> ")} document.write(" </tr> ") i++ } document.write(" </table> ")

Теперь разберёмся с проблемой вложенных циклов while. Сейчас я приведу неправильный скрипт, и попробуем понять, почему он неправильный и как его исправить. Это будет неплохая разминка для мозгов.

var i = 2, j = 2; document.write(" <table border='1' cellspacing='0' cellpadding='2' align='center'> ") while (i <= 10) { document.write(" </tr> ") while (j < 10) {document.write(" <td> " + j + " &times; " + i + " = " + (i * j) + " </td> ") j++ } document.write(" </tr> ") i++ } document.write(" </table> ")

Можете скопировать и запустить. Вы увидите заполненную первую строку и какую-то белую полоску под ней. Эта полоска — результат сгенерированных пустых <tr>. То есть внешний цикл честно отрабатывает до конца, а вложенный виснет на первом круге.

Вопрос: чему равна переменная j после первого прохождения большого цикла?

Ответ: она равна 10.

Вопрос: чему она должна быть равна к началу прохождения второго витка?

Ответ: 2, как задано.

Вопрос: как её сбросить?..

Давайте подумаем.

Есть оператор break, который мы использовали в switch. Здесь он тоже используется (потом мы о нём специально поговорим). Но сразу скажу, нашей беде он не поможет. С его помощью можно только поменять циклы (то есть будет выводиться только один вертикальный столбец).

Внимание. Думаем. Вникаем. Нам нужна переменная, которая бы содержала неизменную двойку. И нам нужна переменная, которая бы многократно проходила цикл от этой двойки. А что нам мешает создать ещё одну переменную, допустим, k, приравнять её к j и запустить в цикл? Да ничего, разве что тормоза в голове.

Смотрите, она (k) пройдёт цикл, прирастая до 10, а в следующем витке вновь приравняется к неизменной j и снова пройдёт тот же цикл:

var i = 2, j = 2, k; document.write(" <table border='1' cellspacing='0' cellpadding='2' align='center'> ") while (i <= 10) { document.write(" <tr> ") k = j while (k < 10) {document.write(" <td> " + k + " &times; " + i + " = " + (i * k) + " </td> ") k++ } document.write(" </tr> ") i++ } document.write(" </table> ")

Вывод: лучше, всё-таки, использовать for. Но чтобы это понять, надо попробовать и while.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 269 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Не будет большим злом, если студент впадет в заблуждение; если же ошибаются великие умы, мир дорого оплачивает их ошибки. © Никола Тесла
==> читать все изречения...

4569 - | 4256 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.