Упражнение по написанию кода 8: (*) Продвинутые задания на использование функций

Задания


1) Создайте функцию, которая принимает в себя целое число минут и возвращает время в нужном формате строки. (Смотри пример). Обратите внимание на окончание слова "час" - оно меняется в зависимости от цифры. Если вместо аргумента приходит не число, дробное или отрицательное число - функция возвращает строку "Ошибка, проверьте данные"

Внимание! Давайте пока ограничимся максимум 600 минутами (10 часов). Так как проверки на большие числа будут раздувать код (33 часа, 31 час, 11 часов и тд).

Пример:

getTimeFromMinutes(150) => "Это 2 часа и 30 минут"

getTimeFromMinutes(50) => "Это 0 часов и 50 минут"

getTimeFromMinutes(0) => "Это 0 часов и 0 минут"

getTimeFromMinutes(-150) => "Ошибка, проверьте данные"

2) Напишите функцию, которая принимает в себя 4 числа и возвращает самое большее из них. Если один из аргументов не является числом или их меньше 4 - возвращается 0. Дробные числа разрешены.

Пример:

findMaxNumber(1, 5, 6.6, 11); =>  11

findMaxNumber(1, 5, '6', '10');  =>  0

Код
// Место для первой задачи
function getTimeFromMinutes() {

}

// Место для второй задачи
function findMaxNumber() {

}

Решения


1 задача:

Код
function getTimeFromMinutes(time) {
  let hours = '';

  if (time < 0 || typeof time !== 'number' || !Number.isInteger(time)) {
  return 'Ошибка, проверьте данные';
  }

  if (time >= 60 && time < 120) {
  hours += 'час';
  } else if (time >= 120 && time < 300) {
  hours += 'часа';
  } else if (time < 60 || time >= 300 && time <= 600) {
  hours += 'часов';
  }

  return `Это ${Math.floor(time/60)} ${hours} и ${time%60} минут`;
}

getTimeFromMinutes(150); // Это 2 часа и 30 минут

2 задача:

Код
function findMaxNumber(a, b, c, d) {
  if (
  typeof a !== "number" ||
  typeof b !== "number" ||
  typeof c !== "number" ||
  typeof d !== "number" ||
  arguments.length < 4
  ) {
  return 0;
  }

  return Math.max(a, b, c, d);
}

findMaxNumber(1.5, 5, 6.6, 11); // 11

Всего комментариев: 2

Алексей 22.06.2025 в 00:29 / Материал
Решения преподавателя (почему-то нет проверки числа аргументов во втором задании):

Код
function getTimeFromMinutes(minutesTotal) {
  if (typeof(minutesTotal) !== 'number' || minutesTotal < 0 || !Number.isInteger(minutesTotal)) {
  return "Ошибка, проверьте данные";
  }

  const hours = Math.floor(minutesTotal / 60);
  const minutes = minutesTotal % 60;

  let hoursStr = '';

  switch (hours) {
  case 0:  
  hoursStr = 'часов';
  break;
  case 1:
  hoursStr = 'час';
  break;
  case 2:
  case 3:
  case 4:
  hoursStr = 'часа';
  break;
  default:
  hoursStr = 'часов';
  }

  return `Это ${hours} ${hoursStr} и ${minutes} минут`;
}

getTimeFromMinutes(180)

function findMaxNumber(a, b ,c, d) {
  // Самое простое - это использовать Math.max :)
  // А оптимизировать такую проверку мы научимся совсем скоро
  if (typeof(a) !== 'number' ||
  typeof(b) !== 'number' ||
  typeof(c) !== 'number' ||
  typeof(d) !== 'number') {
  return 0;
  } else {
  return Math.max(a, b ,c, d);
  }
}

findMaxNumber(1, 5, 6.6, 10.5);
findMaxNumber(1, 5, '6', '10');
0
Алексей 22.06.2025 в 00:24 / Материал
arguments.length свойство, содержащее число аргументов переданных в функцию.

Код
function myFunction(a, b, c) {
  console.log("Количество параметров:", myFunction.length); // Выведет 3
  console.log("Количество аргументов:", arguments.length); // Зависит от вызова
}

myFunction(1, 2); // Выведет 2 в arguments.length
myFunction(1, 2, 3, 4); // Выведет 4 в arguments.length
0
Имя *:
Email *:
Код *:
Хостинг от uCoz