«Единственный способ творить великие дела – это любить то, что ты делаешь»
JavaScript

Игра на «Морской Бой» на JavaScript: Простая Игра и Игра для Двоих


В прошлой заметке были рассмотрены методы объекта Math, позволяющие округлять дробные десятичные числа.

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

Ваша задача написать функцию, которая принимает два параметра.
1. Массив, состоящий из чисел с дробями.
2. Метод округления "round", "ceil" или "floor".

На выходе функция должна выводить этот же массив, но при этом все элементы массива, должны быть округлены с помощью указанного во втором параметре метода объекта Math.

Исходный массив:

var numberArray = [34.82, 12.90, 17.01, 78.51];



Решение №1 - Внимание

По условию задачи функция должна принимать два параметра - исходный массив и один из методов: round, ceil или floor. Исходя из этого, можно пробовать сделать так...

Фрагмент кода

<script type = "text/javascript">

var numberArray = [34.82, 12.90, 17.01, 78.51];

function decimal(anyArray,method) /* Создаем функцию с двумя параметрами */
{

for (i = 0; i < anyArray.length; i++) /* Перебираем элементы массива */

{
document.write(anyArray[i] + " - исходный элемент массива <br />") /* Выводим текущий элемент массива */

anyArray[i] = Math.method(anyArray[i]); /* При помощи одного из методов объекта Math округляем текущий элемент массива */


document.write(anyArray[i] + "<p>") /* Выводим ОКРУГЛЕННЫЙ элемент массива */
}

}

decimal(numberArray, round) /* Вызываем функцию и указываем для нее два параметра. Но НЕЛЬЗЯ указывать ИМЯ метода в качестве параметра функции */

</script>

Результат

В этом решении создаем функцию с двумя параметрами, а когда ее вызываем, то в качестве параметров функции пробуем указать исходный массив и ИМЯ одного методов:

decimal(numberArray, round) /* в данном случае round */

Но результата мы не получим, так как НЕЛЬЗЯ указывать ИМЯ метода в качестве параметра функции.

Обратите внимание: не случайно в условии задачи имена методов "round", "ceil" и "floor" заключены в кавычки.

decimal(numberArray, "round") - но такая запись тоже не будет верной!!!

Решение №2 - Корректируем предыдущее решение

Конечно, можно решить эту задачу, указав для функции один параметр.

Фрагмент кода

<script type = "text/javascript">

var numberArray = [34.82, 12.90, 17.01, 78.51];

function decimal(anyArray) /* Создаем функцию с одним параметром */
{

for (i = 0; i < anyArray.length; i++) /* Перебираем элементы массива */

{
document.write(anyArray[i] + " - исходный элемент массива <br />") /* Выводим текущий элемент массива */

anyArray[i] = Math.round(anyArray[i]); /* При помощи метода round объекта Math округляем текущий элемент массива */


document.write(anyArray[i] + " - Округленный элемент <p>") /* Выводим ОКРУГЛЕННЫЙ элемент массива */
}

}

decimal(numberArray) /* Вызываем функцию и указываем один параметр - исходный массив */

</script>

Результат

Решение №2 - Функция с одним параметром

34.82 - исходный элемент массива
35 - Округленный элемент

12.9 - исходный элемент массива
13 - Округленный элемент

17.01 - исходный элемент массива
17 - Округленный элемент

78.51 - исходный элемент массива
79 - Округленный элемент

Здесь удалось достичь нужного результата: метод round округлил все числа по классическим правилам. Но при этом не выполнено условие задачи, так как функция принимает лишь один параметр.

Решение №3 - Функция с двумя параметрами

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

Фрагмент кода

<script type = "text/javascript">

var numberArray = [34.82, 12.90, 17.01, 78.51];

function decimal(anyArray,method)
{
for (i = 0; i < anyArray.length; i++)
{
document.write(anyArray[i] + " - исходный элемент массива <br />");

if (method == "round") /* 1-е условие */
{
anyArray[i] = Math.round(anyArray[i]);
document.write(anyArray[i] + " - стандартное округление <p>")
}

else if(method == "ceil") /* 2-е условие */
{
anyArray[i] = Math.ceil(anyArray[i]);
document.write(anyArray[i] + " - округляем в БОЛЬШУЮ сторону <p>")
}

else if(method == "floor") /* 3-е условие */
{
anyArray[i] = Math.floor(anyArray[i]);
document.write(anyArray[i] + " - округляем в МЕНЬШУЮ сторону <p>")
}

}
}
decimal(numberArray, "ceil")/* Вторым параметром функции - в кавычках указываем имя одного из методов */

</script>

Результат

Решение №3 - Функция с двумя параметрами

34.82 - исходный элемент массива
35 - округляем в БОЛЬШУЮ сторону

12.9 - исходный элемент массива
13 - округляем в БОЛЬШУЮ сторону

17.01 - исходный элемент массива
18 - округляем в БОЛЬШУЮ сторону

78.51 - исходный элемент массива
79 - округляем в БОЛЬШУЮ сторону

Это правильное решение задачи. Здесь согласно условию для функции указаны два параметра.

Пробуйте в последней строке этого решения:
decimal(numberArray, "ceil") в качестве второго параметра функции указать имя одного из методов "round" и "floor" объекта Math.

Решение №4 + метод prompt

Можно оптимизировать последнее решение и добавить метод prompt, чтобы вызвать модальное окно, содержащее поле для ввода информации.

Благодаря этому шагу можно будет ввести название одного из методов round, floor или ceil в поле для ввода и получить соответствующий результат.

Фрагмент кода

<script type = "text/javascript">

var numberArray = [34.82, 12.90, 17.01, 78.51];

function decimal(anyArray,method)
{
for (i = 0; i < anyArray.length; i++)
{
document.write(anyArray[i] + " - исходный элемент массива <br />");

if (method == "round") /* 1-е условие */
{
anyArray[i] = Math.round(anyArray[i]);
document.write(anyArray[i] + " <p>")
}

else if(method == "ceil") /* 2-е условие */
{
anyArray[i] = Math.ceil(anyArray[i]);
document.write(anyArray[i] + " <p>")
}

else if(method == "floor") /* 3-е условие */
{
anyArray[i] = Math.floor(anyArray[i]);
document.write(anyArray[i] + " <p>")
}

}
}

/* Добавляем метод prompt */

var method = prompt("Введите один из методов: round, ceil или floor");

if (method == "floor") /* 1-е условие */
{
document.write("Вы ввели метод " + method + " , который округляет числа в МЕНЬШУЮ сторону <p>")
}

else if (method == "round") /* 2-е условие */
{
document.write("Вы ввели метод " + method + " , который округляет числа по стандартным правилам <p>")
}

else if (method == "ceil") /* 3-е условие */
{
document.write("Вы ввели метод " + method + " , который округляет числа в БОЛЬШУЮ сторону <p>")
}

else /* Иначе... */
{
document.write("Вы не ввели или ошибочно ввели метод <p>")
}

decimal(numberArray, method) /* Вызываем функцию */

</script>

Результат

Это задание неплохо иллюстрирует, как работают методы round, floor или ceil объекта Math, которые округляют дробные числа.

Отзывы и комментарии:

Комментариев нет...

Оставить отзыв:

Ваше Имя:

Текст комментария:

Ответьте на вопрос:

Сколько дней в Високосном году?


Объект Math
Последние заметки
Популярные заметки