gitverse new year логотип

lab_4_10

Форк
0

7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
README.md

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САХАЛИНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»







Институт естественных наук и техносферной безопасности
Кафедра информатики
Гусев Владислав Михайлович





Лабораторная работа №10.«JS»
01.03.02 Прикладная математика и информатика













Научный руководитель
Соболев Евгений Игоревич




г. Южно-Сахалинск
2024 г.













Введение

HTML — стандартизированный язык гипертекстовой разметки документов для просмотра веб-страниц в браузере. Веб-браузеры получают HTML документ от сервера по протоколам HTTP/HTTPS или открывают с локального диска, далее интерпретируют код в интерфейс, который будет отображаться на экране монитора.

CSS — формальный язык описания внешнего вида документа, написанного с использованием языка разметки. Также может применяться к любым XML-документам, например, к SVG или XUL.

Задачи js

  1. Треугольник. Напишите цикл, выводит такой треугольник:
  2. FizzBuzz. Напишите программу, которая выводит через console.log все числа от 1 до 100, с двумя исключениями. Для чисел, нацело делящихся на 3, она должна выводить ‘Fizz’, а для чисел, делящихся на 5 (но не на 3) – ‘Buzz’.Когда сумеете – исправьте её так, чтобы она выводила «FizzBuzz» для всех чисел, которые делятся и на 3 и на 5.
  3. Шахматная доска. Напишите программу, создающую строку, содержащую решётку 8х8, в которой линии разделяются символами новой строки. На каждой позиции либо пробел, либо #.
  4. Минимум. Напишите функцию min, принимающую два аргумента, и возвращающую минимальный из них.
  5. Рекурсия. Ноль чётный. Единица нечётная. У любого числа N чётность такая же, как у N-2. Напишите рекурсивную функцию isEven согласно этим правилам. Она должна принимать число и возвращать булевское значение. Потестируйте её на 50 и 75. Попробуйте задать ей -1. Почему она ведёт себя таким образом? Можно ли её как-то исправить?
  6. Считаем бобы. Символ номер N строки можно получить, добавив к ней .charAt(N) ( “строчка”.charAt(5) ) – схожим образом с получением длины строки при помощи .length. Возвращаемое значение будет строковым, состоящим из одного символа (к примеру, “к”). У первого символа строки позиция 0, что означает, что у последнего символа позиция будет string.length – 1. Другими словами, у строки из двух символов длина 2, а позиции её символов будут 0 и 1.Напишите функцию countBs, которая принимает строку в качестве аргумента, и возвращает количество символов “B”, содержащихся в строке.Затем напишите функцию countChar, которая работает примерно как countBs, только принимает второй параметр — символ, который мы будем искать в строке (вместо того, чтобы просто считать количество символов “B”). Для этого переделайте функцию countBs.
  7. Сумма диапазона. Напишите функцию range, принимающую два аргумента, начало и конец диапазона, и возвращающую массив, который содержит все числа из него, включая начальное и конечное.Затем напишите функцию sum, принимающую массив чисел и возвращающую их сумму. Запустите указанную выше инструкцию и убедитесь, что она возвращает 55.В качестве бонуса дополните функцию range, чтобы она могла принимать необязательный третий аргумент – шаг для построения массива. Если он не задан, шаг равен единице. Вызов функции range(1, 10, 2) должен будет вернуть [1, 3, 5, 7, 9]. Убедитесь, что она работает с отрицательным шагом так, что вызов range(5, 2, -1) возвращает [5, 4, 3, 2].
  8. Обращаем массив вспять. Напишите две функции, reverseArray и reverseArrayInPlace. Первая получает массив как аргумент и выдаёт новый массив, с обратным порядком элементов. Вторая работает как оригинальный метод reverse – она меняет порядок элементов на обратный в том массиве, который был ей передан в качестве аргумента. Не используйте стандартный метод reverse.
  9. Глубокое сравнение. Оператор == сравнивает переменные объектов, проверяя, ссылаются ли они на один объект. Но иногда полезно было бы сравнить объекты по содержимому. Напишите функцию deepEqual, которая принимает два значения и возвращает true, только если это два одинаковых значения или это объекты, свойства которых имеют одинаковые значения, если их сравнивать рекурсивным вызовом deepEqual. Чтобы узнать, когда сравнивать величины через ===, а когда – объекты по содержимому, используйте оператор typeof. Если он выдаёт “object” для обеих величин, значит нужно делать глубокое сравнение. Не забудьте об одном дурацком исключении, случившемся из-за исторических причин: “typeof null” тоже возвращает “object”.
  10. Свертка. Используйте метод reduce в комбинации с concat для свёртки массива массивов в один массив, у которого есть все элементы входных массивов.

Решения

Файл 1.js

function findDivisibleNumbers(arr, divisor) {
return arr.filter(num => num % divisor === 0);
}
console.log(findDivisibleNumbers([10, 15, 20, 25, 30], 5));
console.log(findDivisibleNumbers([3, 6, 9, 12, 15], 3));
console.log(findDivisibleNumbers([7, 14, 21, 28, 35], 7));
console.log(findDivisibleNumbers([2, 4, 6, 8, 10], 2));

Файл 2.js

var countLetters = function(s){
var letters = {};
for(var i = 0; i < s.length; i++){
var letter = s[i];
if(letter === " ") continue;
letters[letter] = (letters[letter] || 0) + 1;
}
return letters;
};
var isAnagram = function(s1, s2){
s1 = s1.toLowerCase().trim();
s2 = s2.toLowerCase().trim();
if(s1 === s2){
return false;
}
return res.eq(countLetters(s1), countLetters(s2));
};
var res = {
eq: function(a,b){
for(var i in a) {
if(b[i] !== a[i]) return false;
}
for(var i in b) {
if(b[i] !== a[i]) return false;
}
return true;
}
};
console.log(isAnagram('Тест', 'ЕТТс'));
console.log(isAnagram('Привет', 'Ворона'));

Файл 3.js

function countVowels(str) {
const vowels = ['a', 'e', 'i', 'o', 'u'];
str = str.toLowerCase();
let count = 0;
for (let i = 0; i < str.length; i++) {
if (vowels.includes(str[i])) {
count++;
}
}
return count;
}
console.log(countVowels("Hello World"));
console.log(countVowels("JavaScript"));
console.log(countVowels("Anthropic"));
console.log(countVowels("AEIOU"));

Файл 4.js

for (let i = 1; i <= 7; i++) {
console.log('#'.repeat(i));
}

Файл 5.js

for (let i = 1; i <= 100; i++) {
if (i % 3 === 0 && i % 5 === 0) {
console.log("FizzBuzz");
} else if (i % 3 === 0) {
console.log("Fizz");
} else if (i % 5 === 0) {
console.log("Buzz");
} else {
console.log(i);
}
}

Файл 6.js

let board = "";
for (let i = 0; i < 8; i++) {
for (let j = 0; j < 8; j++) {
if ((i + j) % 2 === 0) {
board += " ";
} else {
board += "#";
}
}
board += "\n";
}
console.log(board);

Файл 7.js

function min(a, b) {
return a < b ? a : b;
}
console.log(min(0, 10));
console.log(min(0, -10));
console.log(min(5, 5));

Файл 8.js

function isEven(n) {
if (n < 0) {
return false;
} else if (n === 0) {
return true;
} else if (n === 1) {
return false;
} else {
return isEven(n - 2);
}
}
console.log(isEven(50));
console.log(isEven(75));
console.log(isEven(-1));

Файл 9.js

function countBs(str) {
let count = 0;
for (let i = 0; i < str.length; i++) {
if (str.charAt(i) === "B") {
count++;
}
}
return count;
}
function countChar(str, char) {
let count = 0;
for (let i = 0; i < str.length; i++) {
if (str.charAt(i) === char) {
count++;
}
}
return count;
}
console.log(countBs("BBC"));
console.log(countChar("kakkerlak", "k"));

Файл 10.js

function range(start, end, step = 1) {
let result = [];
if (step > 0) {
for (let i = start; i <= end; i += step) {
result.push(i);
}
} else {
for (let i = start; i >= end; i += step) {
result.push(i);
}
}
return result;
}
function sum(numbers) {
let total = 0;
for (let i = 0; i < numbers.length; i++) {
total += numbers[i];
}
return total;
}
console.log(range(1, 10));
console.log(range(1, 10, 2));
console.log(range(5, 2, -1));
console.log(sum(range(1, 10)));

Файл 11.js

function reverseArray(array) {
let result = [];
for (let i = array.length - 1; i >= 0; i--) {
result.push(array[i]);
}
return result;
}
function reverseArrayInPlace(array) {
for (let i = 0; i < Math.floor(array.length / 2); i++) {
let temp = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
return array;
}
let myArray = [1, 2, 3, 4, 5];
console.log(reverseArray(myArray));
console.log(myArray);
console.log(reverseArrayInPlace(myArray));
console.log(myArray);

Файл 12.js

function deepEqual(a, b) {
if (typeof a === typeof b && (typeof a !== 'object' || a === null || b === null)) {
return a === b;
}
if (typeof a === 'object' && typeof b === 'object' && a !== null && b !== null) {
const aKeys = Object.keys(a);
const bKeys = Object.keys(b);
if (aKeys.length !== bKeys.length) {
return false;
}
for (let key of aKeys) {
if (!deepEqual(a[key], b[key])) {
return false;
}
}
return true;
}
return false;
}
console.log(deepEqual(1, 1));
console.log(deepEqual(1, '1'));
console.log(deepEqual([1, 2], [1, 2]));
console.log(deepEqual([1, 2], [1, 2, 3]));
console.log(deepEqual({ a: 1, b: 2 }, { a: 1, b: 2 }));
console.log(deepEqual({ a: 1, b: 2 }, { a: 1, b: 3 }));
console.log(deepEqual(null, null));
console.log(deepEqual(null, undefined));

Файл 13.js

function flatten(arr) {
return arr.reduce((result, item) => result.concat(item), []);
}
const nestedArray = [[1, 2], [3, 4], [5, 6]];
const flatArray = flatten(nestedArray);
console.log(flatArray);

Результат HTML

  1. Напишите функцию, которая найдёт числа в массиве, которые делятся на заданное число.
  2. Нужно написать функцию, которая проверяет, являются ли две строки анаграммами, причем регистр букв не имеет значения. Учитываются лишь символы; пробелы или знаки препинания в расчет не берутся.
  3. Нужно написать функцию, принимающую строку в качестве аргумента и возвращающую количество гласных, которые содержатся в строке. Гласными являются «a», «e», «i», «o», «u».
  4. Треугольник. Напишите цикл, выводит такой треугольник:
  5. FizzBuzz. Напишите программу, которая выводит через console.log все числа от 1 до 100, с двумя исключениями. Для чисел, нацело делящихся на 3, она должна выводить ‘Fizz’, а для чисел, делящихся на 5 (но не на 3) – ‘Buzz’.Когда сумеете – исправьте её так, чтобы она выводила «FizzBuzz» для всех чисел, которые делятся и на 3 и на 5.
  6. Шахматная доска. Напишите программу, создающую строку, содержащую решётку 8х8, в которой линии разделяются символами новой строки. На каждой позиции либо пробел, либо #.
  7. Минимум. Напишите функцию min, принимающую два аргумента, и возвращающую минимальный из них.
  8. Рекурсия. Ноль чётный. Единица нечётная. У любого числа N чётность такая же, как у N-2. Напишите рекурсивную функцию isEven согласно этим правилам. Она должна принимать число и возвращать булевское значение. Потестируйте её на 50 и 75. Попробуйте задать ей -1. Почему она ведёт себя таким образом? Можно ли её как-то исправить?
  9. Считаем бобы. Символ номер N строки можно получить, добавив к ней .charAt(N) ( “строчка”.charAt(5) ) – схожим образом с получением длины строки при помощи .length. Возвращаемое значение будет строковым, состоящим из одного символа (к примеру, “к”). У первого символа строки позиция 0, что означает, что у последнего символа позиция будет string.length – 1. Другими словами, у строки из двух символов длина 2, а позиции её символов будут 0 и 1.Напишите функцию countBs, которая принимает строку в качестве аргумента, и возвращает количество символов “B”, содержащихся в строке.Затем напишите функцию countChar, которая работает примерно как countBs, только принимает второй параметр — символ, который мы будем искать в строке (вместо того, чтобы просто считать количество символов “B”). Для этого переделайте функцию countBs.
  10. Сумма диапазона. Напишите функцию range, принимающую два аргумента, начало и конец диапазона, и возвращающую массив, который содержит все числа из него, включая начальное и конечное.Затем напишите функцию sum, принимающую массив чисел и возвращающую их сумму. Запустите указанную выше инструкцию и убедитесь, что она возвращает 55.В качестве бонуса дополните функцию range, чтобы она могла принимать необязательный третий аргумент – шаг для построения массива. Если он не задан, шаг равен единице. Вызов функции range(1, 10, 2) должен будет вернуть [1, 3, 5, 7, 9]. Убедитесь, что она работает с отрицательным шагом так, что вызов range(5, 2, -1) возвращает [5, 4, 3, 2].
  11. Обращаем массив вспять. Напишите две функции, reverseArray и reverseArrayInPlace. Первая получает массив как аргумент и выдаёт новый массив, с обратным порядком элементов. Вторая работает как оригинальный метод reverse – она меняет порядок элементов на обратный в том массиве, который был ей передан в качестве аргумента. Не используйте стандартный метод reverse.
  12. Глубокое сравнение. Оператор == сравнивает переменные объектов, проверяя, ссылаются ли они на один объект. Но иногда полезно было бы сравнить объекты по содержимому. Напишите функцию deepEqual, которая принимает два значения и возвращает true, только если это два одинаковых значения или это объекты, свойства которых имеют одинаковые значения, если их сравнивать рекурсивным вызовом deepEqual. Чтобы узнать, когда сравнивать величины через ===, а когда – объекты по содержимому, используйте оператор typeof. Если он выдаёт “object” для обеих величин, значит нужно делать глубокое сравнение. Не забудьте об одном дурацком исключении, случившемся из-за исторических причин: “typeof null” тоже возвращает “object”.
  13. Свертка. Используйте метод reduce в комбинации с concat для свёртки массива массивов в один массив, у которого есть все элементы входных массивов.

Вывод

В ходе выполнения лабораторной работы по js были применены алгоритмы работы с циклами списками и другими структурами данных на js.

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.