JavaScript. Учебник начального уровня - [7]
Вообще говоря, предложенный алгоритм имеет ряд изъянов. Как я уже говорил, возможно зацикливание (зависание), кроме того, неизвестно сколько времени потребуется для того, чтобы случайным образом выбрать ячейки для мин. Чисто теоретически, может 1000 раз подряд выпасть число 39, таким образом мы будем выполнять цикл более тысячи раз, а может сразу выпасть 10 разных чисел и мы будем выполнять цикл всего 10 раз. И хотя вероятность описанной мной ситуации ничтожно мала, она всё–таки существует и тем больше, чем большее количество мин нам нужно расставить. Грубо говоря, мой алгоритм, наверняка будет не плохо работать при количестве мин значительно меньшем, чем количество ячеек, но его не стоит применять, когда их почти столько же.
Наконец мы подошли к последней функции, о которой следует рассказать в этой статье. Она совсем небольшая, всего в одну строчку, итак, функция intRand.
> function intRand(maxVal)
> {
> return Math.round((maxVal + 1) * Math.random() — 0.5);
>}
Как я уже говорил, она возвращает случайное целое число от 0 до значения параметра maxVal включительно. То есть intRand(2) может вернуть или 0, или 1, или 2, причём каждый вероятность возврата каждого из этих вариантов равна.
Для реализации этой функции мы будем использовать ещё один предопределённый объект JavaScript‑Math, а именно, два метода этого объекта: round() и random(). Метод round() округляет число, переданное в качестве параметра до ближайшего целого. Например, raund(2.93) вернёт число 3, а raund(2.45) — число 2. Метод random() возвращает случайное дробное число от 0 до 1.
Предположим, мы вызвали функцию intRand() от 2, тогда (maxVal + 1) * Math.random() будет случайным дробным числом от 0 до 3. Каждое значение равновероятно, причём, при последующем округлении (если мы сразу применим функцию random к этому числу), нам вернётся 0 в случае, если число от 0 до 0.5; 1 если число от 0.5 до 1.5; 2 если число от 1.5 до 2.5 и 3 для числа от 2.5 до 3. Как видно из рассчётов, вероятность того, что вернётся 0 или 3 в два раза ниже, чем вероятность того, что вернётся 1 или 2. При том, что тройка нам не нужна совсем, а вероятность возврата 0 хотелось бы иметь равной вероятности возврата 1 и 2. Можно, конечно, написать условие, что если результат maxVal + 1, то вернуть 0 и это тоже будет формально правильно, однако я перед округлением вычел из дробного числа 0.5, что привело к по сути такому же результату.
Первый класс
Долго думал, стоит ли в рамках этого опуса использовать классы. На практике я часто сталкивался с тем, что очень не просто бывает объяснить зачем они нужны. На первый взгляд, после переделки какой–то простой процедурно–ориентированной программы в объектно ориентированную, ну или попросту после выделения одного–двух классов, программа, как правило, начинает выглядеть даже сложнее. Я всё же попробую. Причём как обычно буду стараться говорить человеческим языком, а если и буду вводить какие–то термины, постараюсь их объяснять.
Собственно преимущества выделения классов должны всплывать и в следующих главах по ходу повествования. Тут я лишь вскользь об этом упомяну.
Перейдём к делу, как я, кажется, уже говорил ранее, класс — это такая особенная переменная, которая может содержать другие переменные (поля), а также собственные функции (методы). В этой главе наша программа не научится делать ничего нового, при запуске произойдёт всё тоже самое, что и при запуске программы из прошлой главы. Изменился лишь сам код. Такое изменение программы называется рефакторингом.
Что же я поменял? Я выделил новый класс «minesClass» и перенёс туда часть переменных и функций. Для чего мне это понадобилось? Я решил отделить логику программы от её интерфейса. То есть класс «minesClass» ничего не будет знать о нашей таблице, однако он сам расставит бомбы при своём создании, а затем останется лишь их нарисовать.
Предлагаю читателю посмотреть на то, что получилось, а затем я всё–таки попытаюсь объяснить ему, что стало лучше.
>
>
>head>
>
> function minesClass(aRowCount, aColCount, aMinesCount)
> {
> this.intRand = function(maxVal)
> {
> return Math.floor((maxVal‑1) * Math.random() + 0.5) — 1;
>}
> this.fillMines = function()
> {
> var res = new Array(this.rowCount * this.colCount);
> var mines = this.minesCount;
> while (mines > 0)
> {
> var n = this.intRand(this.rowCount * this.colCount‑1);
> if (res[n] != 1)
> {
> res[n] = 1;
> mines--;
>}
>}
> return res;
>}
> this.colCount = aColCount;
> this.rowCount = aRowCount;
> this.minesCount = aMinesCount;
> this.mines = this.fillMines();
>}
> function initTable()
> {
> var mines = new minesClass(10, 10, 10);
> var tbl = document.getElementById(«tbl»);
> for (var i = 0; i < mines.rowCount; i++)
> {
> var row = tbl.insertRow(i);
> for(var j = 0; j < mines.colCount; j++)
> {
> var cell = row.insertCell(j);
> if (mines.mines[i * mines.rowCount + j] == 1)
> cell.innerHTML = '*'
> else

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

Дорогие ребята!На уроках литературы вы знакомитесь с произведениями устного народного творчества. Один из самых сложных жанров фольклора – былины. У вас часто возникают трудности в изучении этих произведений – особенно в написании сочинений. Нынешнему школьнику непросто понять мир старинных былин и чувства, которые древнерусский сказитель вкладывал в них. В тексте былин всегда встречается много слов и образов, которые в умах и сердцах наших далёких предков вызывали яркие впечатления и горячие отклики, а современному человеку их необходимо пояснять.Эта книга поможет вам легко выполнить самые различные задания учителя: найти постоянные эпитеты в тексте былины, дать сравнительную характеристику персонажей, ответить на вопросы по содержанию произведения, подобрать пословицы на заданную тему и объяснить их происхождение и, конечно же, написать отличное сочинение.На темы, которые предлагает школьная программа, в книге представлены уже готовые сочинения.

Настоящее пособие помогает формированию и совершенствованию у студентов умений и навыков произношения, словоупотребления, использования грамматических форм, правописания и постановки знаков препинания. Предназначено как для практических аудиторных занятий, так и для самостоятельной работы.Для студентов, изучающих курсы «Русский язык и культура речи», «Культура речи», «Стилистика русского языка и культура речи», «Стилистика и литературное редактирование» и др. Данное пособие может быть использовано также выпускниками средних школ и абитуриентами при подготовке к Единому государственному экзамену по русскому языку.

В книге развивается идея об адаптации языковой системы к биосоциальным особенностям человека и осуществлению им коммуникативного процесса как главном факторе функциональной, системно-структурной и знаковой (семиотической) специфики языка. В качестве иллюстративной языковой системы послужил главным образом русский язык в его общих с другими языками свойствах. В соответствии с поставленными задачами в книге объясняется специфика четырех семиотических измерений языка – языковых знаков, их семантики, синтактики и прагматики, чему подчинена структура книги.

Обучение созданию профессиональных видеофильмов и обработки их на компьютере представлено в виде 12 уроков. Рассматривается, как с помощью программы Adobe After Effects можно редактировать и рисовать последовательность кадров, добавлять титры и заголовки, применять различные видеоэффекты, редактировать звуковое сопровождение фильма. Описывается процесс настройки прозрачности и наложения слоев видео для последующего экспорта фильма в различных форматах. Показываются способы создания анимации при масштабировании, поворотах и в движении с наложением титров и спецэффектов.

Раскрываются становление культурно-исторического подхода к изучению общественного развития и воззрения его ведущих представителей. Представлены основные этапы и закономерности мирового культурно-исторического процесса от доисторического общества до наших дней. На примере величайших цивилизаций древности, средневековья и Нового времени освещаются важнейшие исторические события и явления культуры, определившие облик современной эпохи. Особое внимание уделено отечественной истории и культуре. В отличие от первого издания (М.: Логос, 1999) пособие содержит главу о западной цивилизации в XX в., а также приложения, справочный аппарат и иллюстрации.Для студентов высших учебных заведений.

В данном конспекте лекций в доступной форме изложены все основные вопросы по дисциплине «микроэкономика».Книга поможет получить основные знания и подготовиться к зачету или экзамену. Рекомендуется студентам экономических специальностей.