JavaScript · Синтаксис · Начальный уровень
Функции: уровень 3
Упражнения по функциям JavaScript уровня 3: функции с режимами работы, флагами, несколькими условиями, обработкой строк, массивов и чисел для развития алгоритмического мышления.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Паттерны режимов и флагов
#Упражнения:
Режим double или triple.
#Напишите функцию, которая принимает число и строку-режим: "double" или "triple". Если режим "double" — вернуть число, умноженное на 2, если "triple" — умноженное на 3.
function scaleNumber(n, mode) {
// ваш код здесь
}
Решение
function scaleNumber(n, mode) {
if (mode === "double") {
return n * 2;
} else if (mode === "triple") {
return n * 3;
} else {
return n;
}
}
Флаг верхнего регистра.
#Напишите функцию, которая принимает строку и логическое значение. Если флаг upper равен true — вернуть строку в верхнем регистре, иначе — в нижнем.
function formatText(text, upper) {
// ваш код здесь
}
Решение
function formatText(text, upper) {
if (upper) {
return text.toUpperCase();
} else {
return text.toLowerCase();
}
}
Операция add или sub.
#Напишите функцию, которая принимает два числа и строку-операцию: "add" или "sub". Верните сумму или разность в зависимости от операции.
function calculate(a, b, operation) {
// ваш код здесь
}
Решение
function calculate(a, b, operation) {
if (operation === "add") {
return a + b;
} else if (operation === "sub") {
return a - b;
} else {
return 0;
}
}
Переворот по условию.
#Напишите функцию, которая принимает строку и число. Если число больше 5 — вернуть строку в обратном порядке, иначе — вернуть строку без изменений.
function conditionalReverse(text, limit) {
// ваш код здесь
}
Решение
function conditionalReverse(text, limit) {
if (limit > 5) {
return text.split('').reverse().join('');
} else {
return text;
}
}
Абсолютное значение по флагу.
#Напишите функцию, которая принимает число и флаг. Если флаг true — вернуть абсолютное значение, если false — вернуть число как есть.
function maybeAbs(n, useAbs) {
// ваш код здесь
}
Решение
function maybeAbs(n, useAbs) {
if ((useAbs) && (n < 0)) {
return -n;
}
return n;
}
Режим first или last.
#Напишите функцию, которая принимает строку и режим: "first" или "last". Верните либо первый символ строки, либо последний.
function pickChar(text, mode) {
// ваш код здесь
}
Решение
function pickChar(text, mode) {
if (text === "") {
return "";
}
if (mode === "first") {
return text[0];
} else if (mode === "last") {
return text[text.length - 1];
} else {
return "";
}
}
Сумма или произведение.
#Напишите функцию, которая принимает массив чисел и режим: "sum" или "product". Верните сумму или произведение всех элементов.
function combineNumbers(numbers, mode) {
// ваш код здесь
}
Решение
function combineNumbers(numbers, mode) {
if (mode === "sum") {
let total = 0;
for (let n of numbers) {
total += n;
}
return total;
} else if (mode === "product") {
let result = 1;
for (let n of numbers) {
result *= n;
}
return result;
} else {
return 0;
}
}
Удаление пробелов по флагу.
#Напишите функцию, которая принимает строку и флаг. Если флаг true — удалить все пробелы, если false — вернуть строку без изменений.
function cleanSpaces(text, remove) {
// ваш код здесь
}
Решение
function cleanSpaces(text, remove) {
if (!(remove)) {
return text;
}
let result = "";
for (let ch of text) {
if (ch !== " ") {
result += ch;
}
}
return result;
}
Режим even или odd.
#Напишите функцию, которая принимает число и режим: "even" или "odd". Верните true, если число соответствует режиму.
function checkParity(n, mode) {
// ваш код здесь
}
Решение
function checkParity(n, mode) {
if (mode === "even") {
return n % 2 === 0;
} else if (mode === "odd") {
return n % 2 !== 0;
} else {
return false;
}
}
Первые или последние 3 символа.
#Напишите функцию, которая принимает строку и режим: "short" или "long". Если режим "short" — вернуть первые 3 символа, если "long" — последние 3 символа.
function sliceText(text, mode) {
// ваш код здесь
}
Решение
function sliceText(text, mode) {
if (text.length < 3) {
return text;
}
if (mode === "short") {
return text.slice(0, 3);
} else if (mode === "long") {
return text.slice(-3);
}
}
Большее или меньшее по флагу.
#Напишите функцию, которая принимает два числа и флаг. Если флаг true — вернуть большее число, если false — меньшее.
function pickNumber(a, b, get_max) {
// ваш код здесь
}
Решение
function pickNumber(a, b, getMax) {
if (getMax) {
return (a > b ? a : b);
} else {
return (a < b ? a : b);
}
}
Count или length.
#Напишите функцию, которая принимает строку и режим: "count" или "length". Если режим "count" — вернуть количество букв "a", если "length" — длину строки.
function analyzeText(text, mode) {
// ваш код здесь
}
Решение
function analyzeText(text, mode) {
if (mode === "length") {
return text.length;
} else if (mode === "count") {
let cnt = 0;
for (let ch of text.toLowerCase()) {
if (ch === "a") {
cnt += 1;
}
}
return cnt;
}
}
Квадрат или куб.
#Напишите функцию, которая принимает число и флаг. Если флаг true — вернуть квадрат числа, если false — куб числа.
function powerByFlag(n, square) {
// ваш код здесь
}
Решение
function powerByFlag(n, square) {
if (square) {
return n * n;
} else {
return n * n * n;
}
}
Обрезка start или end.
#Напишите функцию, которая принимает строку и режим: "start" или "end". Если "start" — вернуть строку без первых 2 символов, если "end" — без последних 2.
function trimText(text, mode) {
// ваш код здесь
}
Решение
function trimText(text, mode) {
if (text.length <= 2) {
return "";
}
if (mode === "start") {
return text.slice(2);
} else if (mode === "end") {
return text.slice(0, -2);
}
}
Sign или abs.
#Напишите функцию, которая принимает число и режим: "sign" или "abs". Если режим "sign" — вернуть строку "positive", "negative" или "zero", если "abs" — вернуть абсолютное значение числа.
function numberInfo(n, mode) {
// ваш код здесь
}
Решение
function numberInfo(n, mode) {
if (mode === "abs") {
return (n < 0 ? -n : n);
} else if (mode === "sign") {
if (n > 0) {
return "positive";
} else if (n < 0) {
return "negative";
} else {
return "zero";
}
} else {
return null;
}
}