diff --git a/Лаб5-М/Сайт/src/index.html b/Лаб5-М/Сайт/src/index.html
new file mode 100644
index 0000000..807e224
--- /dev/null
+++ b/Лаб5-М/Сайт/src/index.html
@@ -0,0 +1,24 @@
+
+
+
+
+ Решение задачи
+
+
+ Введите параметры
+
+
+
+
+
+
+
+
+
+ Результаты
+
+
+
+
+
+
diff --git a/Лаб5-М/Сайт/src/script.js b/Лаб5-М/Сайт/src/script.js
new file mode 100644
index 0000000..f207919
--- /dev/null
+++ b/Лаб5-М/Сайт/src/script.js
@@ -0,0 +1,112 @@
+const alphabet = 'abcdefghijklmnopqrstuvwxyz';
+
+function isOrderedAlphabetically(vector) {
+ return vector.every(
+ (item, index, array) => index === 0 || item >= array[index - 1]
+ );
+}
+
+function getRandomLetter(min, max) {
+ const startIndex = alphabet.indexOf(min.toLowerCase());
+ const endIndex = alphabet.indexOf(max.toLowerCase());
+ const randomIndex =
+ Math.floor(Math.random() * (endIndex - startIndex + 1)) + startIndex;
+ return alphabet[randomIndex];
+}
+
+function removeOddLetters(vector) {
+ return vector.filter((item, index) => alphabet.indexOf(item) % 2 === 1);
+}
+
+function generateVector(size, minChar, maxChar) {
+ return Array.from({ length: size }, () =>
+ getRandomLetter(minChar, maxChar)
+ );
+}
+
+function generateMatrix(rows, cols, probability) {
+ return Array.from({ length: rows }, () =>
+ Math.random() < probability
+ ? generateVector(cols, 'a', 'z').sort()
+ : generateVector(cols, 'a', 'z')
+ );
+}
+
+function calculate() {
+ const rows = parseInt(document.getElementById('rows').value);
+ const cols = parseInt(document.getElementById('cols').value);
+
+ const M1 = generateMatrix(rows, cols, 0.5);
+ const M2 = generateMatrix(rows, cols, 0.5);
+
+ const rowsOrderedAlphabeticalM1 = M1.map((row) =>
+ isOrderedAlphabetically(row)
+ );
+ const rowsOrderedAlphabeticalM2 = M2.map((row) =>
+ isOrderedAlphabetically(row)
+ );
+
+ const notSortedRowsM1 = M1.filter(
+ (row, i) => !rowsOrderedAlphabeticalM1[i]
+ );
+ const notSortedRowsM2 = M2.filter(
+ (row, i) => !rowsOrderedAlphabeticalM2[i]
+ );
+
+ const noOddLettersInSortedRowsM1 = notSortedRowsM1.map((row) =>
+ removeOddLetters(row)
+ );
+ const noOddLettersInSortedRowsM2 = notSortedRowsM2.map((row) =>
+ removeOddLetters(row)
+ );
+
+ const sortedNoOddLettersInSortedRowsM1 = noOddLettersInSortedRowsM1.map(
+ (row) => Array.from(row).sort()
+ );
+ const sortedNoOddLettersInSortedRowsM2 = noOddLettersInSortedRowsM2.map(
+ (row) => Array.from(row).sort()
+ );
+
+ const output = document.getElementById('output');
+ output.innerHTML = `
+ Изначальные матрицы:
+ M1:\n${matrixToString(M1)}
+ M2:\n${matrixToString(M2)}
+ Векторы средних значений:
+ Отсортированные строки M1:\n${rowsOrderedAlphabeticalM1
+ .map((row, i) => `Строка ${i + 1}: ${row}`)
+ .join('\n')}
+ Отсортированные строки M2:\n${rowsOrderedAlphabeticalM2
+ .map((row, i) => `Строка ${i + 1}: ${row}`)
+ .join('\n')}
+ Несортированные строки:
+ Несортированные строки M1:\n${notSortedRowsM1
+ .map((row, i) => `Строка ${i + 1}: ${row}`)
+ .join('\n')}
+ Несортированные строки M2:\n${notSortedRowsM2
+ .map((row, i) => `Строка ${i + 1}: ${row}`)
+ .join('\n')}
+ Строки без нечетных букв:
+ Строки без нечетных букв M1:\n${noOddLettersInSortedRowsM1
+ .map((row, i) => `Строка ${i + 1}: ${row}`)
+ .join('\n')}
+ Строки без нечетных букв M2:\n${noOddLettersInSortedRowsM2
+ .map((row, i) => `Строка ${i + 1}: ${row}`)
+ .join('\n')}
+ Отсортированные строки без нечетных букв:
+ Отсортированные строки без нечетных букв M1:\n${sortedNoOddLettersInSortedRowsM1
+ .map((row, i) => `Строка ${i + 1}: ${row}`)
+ .join('\n')}
+ Отсортированные строки без нечетных букв M2:\n${sortedNoOddLettersInSortedRowsM2
+ .map((row, i) => `Строка ${i + 1}: ${row}`)
+ .join('\n')}
+ `;
+}
+
+function matrixToString(matrix) {
+ return matrix.map((row) => row.join(', ')).join('\n');
+}
+
+function vectorToString(vector) {
+ return `[${vector.join(', ')}]`;
+}