From 83da7890c806c55192259882b5e0bb6cd95d9163 Mon Sep 17 00:00:00 2001 From: AlexeyZinichev Date: Tue, 14 Jul 2026 17:03:41 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.base-concepts/task.js | 53 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/1.base-concepts/task.js b/1.base-concepts/task.js index d32b9a6ed9..a8dab4d2bf 100644 --- a/1.base-concepts/task.js +++ b/1.base-concepts/task.js @@ -1,10 +1,59 @@ "use strict" function solveEquation(a, b, c) { let arr = []; - - return arr; + + // Вычисление дискриминанта: D = b² - 4ac + const d = b ** 2 - 4 * a * c; + + if (d < 0) { + // Корней нет, возвращаем пустой массив + return arr; + } + + if (d === 0) { + // Один корень: -b / (2a) + arr.push(-b / (2 * a)); + return arr; + } + + // Два корня: (-b ± √D) / (2a) + const sqrtD = Math.sqrt(d); + const denominator = 2 * a; + + arr.push((-b + sqrtD) / denominator); + arr.push((-b - sqrtD) / denominator); + + return arr; } function calculateTotalMortgage(percent, contribution, amount, countMonths) { + // Тело кредита — то, что мы берем у банка + const loanBody = amount - contribution; + + // Защита от некорректных данных + if (countMonths <= 0 || loanBody <= 0) { + return 0; + } + + // Месячная процентная ставка (от 0 до 1) + const monthlyRate = percent / 100 / 12; + + let totalBankPayment; + + // Если ставка 0%, просто возвращаем тело кредита без процентов + if (monthlyRate === 0) { + totalBankPayment = loanBody; + } else { + // Расчет ежемесячного аннуитетного платежа + const denominator = ((1 + monthlyRate) ** countMonths) - 1; + const monthlyPayment = loanBody * (monthlyRate + (monthlyRate / denominator)); + + // Общая сумма, которую получит БАНК за весь срок + totalBankPayment = monthlyPayment * countMonths; + } + + // Округляем результат до двух знаков после запятой + // и возвращаем число (не строку) + return Math.round(totalBankPayment * 100) / 100; } \ No newline at end of file From 372d01fd32ae5b21d288cece4f990e64a9b8720f Mon Sep 17 00:00:00 2001 From: AlexeyZinichev Date: Wed, 15 Jul 2026 11:12:09 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=BE=20=D1=83=D1=81=D0=BF=D0=B5?= =?UTF-8?q?=D1=88=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2.functions/task.js | 91 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 3 deletions(-) diff --git a/2.functions/task.js b/2.functions/task.js index 7b6d15ac58..47a6bb5e13 100644 --- a/2.functions/task.js +++ b/2.functions/task.js @@ -1,24 +1,109 @@ + function getArrayParams(...arr) { + if (arr.length === 0) { + return { min: NaN, max: NaN, avg: NaN }; + } + + const min = Math.min(...arr); + const max = Math.max(...arr); + const sum = arr.reduce((acc, val) => acc + val, 0); + const avg = Number((sum / arr.length).toFixed(2)); - return { min: min, max: max, avg: avg }; + return { min, max, avg }; } function summElementsWorker(...arr) { - + // Если массив пуст, возвращаем 0 (мяса нет — нечего суммировать) + if (arr.length === 0) return 0; + + let sum = 0; + for (let i = 0; i < arr.length; i++) { + sum += arr[i]; + } + return sum; } function differenceMaxMinWorker(...arr) { + // Если элементов нет или всего один, разница между максимумом и минимумом равна 0 + if (arr.length === 0) return 0; + let min = arr[0]; + let max = arr[0]; + + for (let i = 1; i < arr.length; i++) { + const currentNum = arr[i]; + if (currentNum > max) max = currentNum; + if (currentNum < min) min = currentNum; + } + + return max - min; } function differenceEvenOddWorker(...arr) { + // Если массив пуст, разницы нет + if (arr.length === 0) return 0; + + let sumEvenElement = 0; + let sumOddElement = 0; + for (let i = 0; i < arr.length; i++) { + const currentNum = arr[i]; + + // Проверка на четность через остаток от деления на 2 + if (currentNum % 2 === 0) { + sumEvenElement += currentNum; + } else { + sumOddElement += currentNum; + } + } + + return sumEvenElement - sumOddElement; } function averageEvenElementsWorker(...arr) { + // Если массива нет, среднее вычислить невозможно + if (arr.length === 0) return 0; + + let sumEvenElement = 0; + let countEvenElement = 0; + for (let i = 0; i < arr.length; i++) { + const currentNum = arr[i]; + + if (currentNum % 2 === 0) { + sumEvenElement += currentNum; + countEvenElement++; + } + } + + // Если в массиве не оказалось ни одного чётного числа, + // деление на ноль даст NaN, поэтому возвращаем 0 + if (countEvenElement === 0) return 0; + + return sumEvenElement / countEvenElement; } -function makeWork (arrOfArr, func) { +function makeWork(arrOfArr, func) { + // Если данных для обработки нет, возвращаем 0 + if (arrOfArr.length === 0) return 0; + + // Инициализируем переменную максимума. + // Используем первый элемент массива как стартовую точку, + // чтобы корректно работать с отрицательными числами. + let maxWorkerResult = func(...arrOfArr[0]); + + // Начинаем цикл с единицы, так как нулевой элемент уже обработан выше + for (let i = 1; i < arrOfArr.length; i++) { + const currentData = arrOfArr[i]; + + // Передаем данные в насадку. Spread-оператор превращает [1, 2, 3] в три аргумента: 1, 2, 3 + const currentResult = func(...currentData); + + // Проверяем, является ли текущий результат новым максимумом + if (currentResult > maxWorkerResult) { + maxWorkerResult = currentResult; + } + } + return maxWorkerResult; } From 209913570ae9797bf04e7e98ed402b6ca0f37db6 Mon Sep 17 00:00:00 2001 From: AlexeyZinichev Date: Sun, 26 Jul 2026 16:21:48 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B?= =?UTF-8?q?=20Student:=20setSubject,=20addMarks,=20getAverage,=20exclude?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.objects/task.js | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/4.objects/task.js b/4.objects/task.js index 0776889200..b5d9431486 100644 --- a/4.objects/task.js +++ b/4.objects/task.js @@ -1,19 +1,36 @@ function Student(name, gender, age) { - + this.name = name; + this.gender = gender; + this.age = age; + this.marks = []; // Инициализируем пустой массив оценок сразу при создании объекта } Student.prototype.setSubject = function (subjectName) { - -} + this.subject = subjectName; +}; -Student.prototype.addMarks = function (...marks) { +Student.prototype.addMarks = function (...marksToAdd) { + // Проверка: если студент отчислен, свойства marks не существует. Добавление невозможно. + if (!Array.isArray(this.marks)) return; -} + // Фильтрация: добавляем только корректные оценки от 1 до 5 + const validMarks = marksToAdd.filter(mark => typeof mark === 'number' && Number.isInteger(mark) && mark >= 1 && mark <= 5); + this.marks.push(...validMarks); +}; Student.prototype.getAverage = function () { + // Если свойство marks отсутствует или в нем нет оценок — возвращаем 0 + if (!Array.isArray(this.marks) || this.marks.length === 0) { + return 0; + } -} + const sum = this.marks.reduce((acc, val) => acc + val, 0); + return sum / this.marks.length; +}; Student.prototype.exclude = function (reason) { - -} + // Удаляем учебные данные и фиксируем причину исключения + delete this.subject; + delete this.marks; + this.excluded = reason; +};