Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 51 additions & 2 deletions 1.base-concepts/task.js
Original file line number Diff line number Diff line change
@@ -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;
}
91 changes: 88 additions & 3 deletions 2.functions/task.js
Original file line number Diff line number Diff line change
@@ -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;
}
33 changes: 25 additions & 8 deletions 4.objects/task.js
Original file line number Diff line number Diff line change
@@ -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;
};