Browse Source

done hw js 3 or 4 Omelchenko Hryhorii

unknown 3 years ago
parent
commit
c405dd9c44
2 changed files with 400 additions and 1 deletions
  1. 3 1
      html-css/index.html
  2. 397 0
      javascript/hw1.js

+ 3 - 1
html-css/index.html

@@ -5,6 +5,8 @@
 		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
 		<title>Document-js</title>
 	</head>
-	<body></body>
+	<body>
+		<div id="matrix"></div>
+	</body>
 	<script src="../javascript/hw1.js" type="module"></script>
 </html>

+ 397 - 0
javascript/hw1.js

@@ -0,0 +1,397 @@
+//ДЗ: Вложенные декларативные структуры и код в них. Отображение циклических и
+//древовидных структур.Циклы.
+
+//html tree
+//    <body>
+//         <div>
+//             <span>Enter a data please:</span><br/>
+//             <input type='text' id='name'>
+//             <input type='text' id='surname'>
+//         </div>
+//         <div>
+//             <button id='ok'>OK</button>
+//             <button id='cancel'>Cancel</button>
+//         </div>
+//     </body>
+
+const body = {
+	tagName: 'body',
+	subTags: [
+		{
+			tagName: 'div',
+			subTags: [
+				{
+					tagName: 'span',
+					text: 'Enter a data please:',
+				},
+				{
+					tagName: 'br',
+				},
+				{
+					tagName: 'input',
+					attrs: {
+						type: 'text',
+						id: 'name',
+					},
+				},
+				{
+					tagName: 'input',
+					attrs: {
+						type: 'text',
+						id: 'surname',
+					},
+				},
+			],
+		},
+		{
+			tagName: 'div',
+			subTags: [
+				{
+					tagName: 'button',
+					text: 'OK',
+					attrs: {
+						id: 'ok',
+					},
+				},
+				{
+					tagName: 'button',
+					text: 'Cancel',
+					attrs: {
+						id: 'cancel',
+					},
+				},
+			],
+		},
+	],
+};
+
+// console.log(
+// 	body.subTags[1].subTags[0].text,
+// 	'and',
+// 	body.subTags[1].subTags[1].text
+// ); //Выведите значения текста во второй кнопке, используя . и [].
+// console.log(body.subTags[0].subTags[3].attrs.id);
+//Выведите значение атрибута id во втором input, используя . и [].
+
+//declarative fields
+
+//Как известно, элемент массива и объекта может быть любого типа данных JS,
+//т.е.в коде может быть любое выражение, которое вычисляется в то или иное
+//значение типа данных.А значит, мы можем применять функции для ввода данных
+//типа confirm или prompt:
+
+// const laptop = {
+// 	brand: prompt('Enter a brand') || 'HP',
+// 	type: prompt('Enter a type') || '440 G4',
+// 	model: prompt('Enter a model') || 'Y7Z75EA',
+// 	ram: +prompt('Enter a ram') || 4,
+// 	size: +prompt('Enter a size') || 14,
+// 	weight: +prompt('Enter a weight') || 1.8,
+// 	resolution: {
+// 		width: +prompt('Enter a width') || 1920,
+// 		height: +prompt('Enter a height') || 1080,
+// 	},
+// };
+// const {
+// 	brand,
+// 	type,
+// 	model,
+// 	ram,
+// 	size,
+// 	weight,
+// 	resolution: { width, height },
+// } = laptop;
+
+// console.log(brand, type, model, ram, size, weight, width, height);
+
+// const phone = {
+// 	brand: prompt('Enter a brand') || 'meizu',
+// 	model: prompt('Enter a model') || 'm2',
+// 	ram: +prompt('Enter a ram') || 2,
+// 	color: prompt('Enter a color') || 'black',
+// };
+
+// const { brand: phoneBrand, model: phoneModel, ram: phoneRam, color } = phone;
+// console.log(phoneBrand, phoneModel, phoneRam, color);
+
+// const person = {
+// 	name: prompt('Enter a name') || 'Donald',
+// 	surname: prompt('Enter a surname') || 'Trump',
+// 	married: confirm('Married?'),
+// };
+
+// const { name, surname, married } = person;
+// console.log(name, surname, married);
+
+//object links
+//Добавьте персоне гаджеты, используя новые поля smartphone и laptop в объекте персоны
+// person.smartphone = phone;
+// person.laptop = laptop;
+
+//Добавьте владельца в гаджеты, используя новое поле owner в объектах телефона и ноутбука.
+// laptop.owner = person;
+// phone.owner = person;
+//обратите внимание на цикличность ссылок в объектах, если вы все сделали правильно, то
+// console.log(
+// 	person.smartphone.owner.laptop.owner.smartphone == person.smartphone
+// );
+
+//imperative array fill 3
+//Создайте пустой массив и добавьте в него три элемента, введенные пользователем
+//(prompt), используя императивный подход(несколько операторов подряд)
+
+// const emptyArray = [];
+// const firstPrompt = prompt('Write something');
+// const secondPrompt = prompt('Write something else');
+// const thirdPrompt = prompt('Write something again');
+// emptyArray.push(firstPrompt, secondPrompt, thirdPrompt);
+
+// console.log(emptyArray);
+
+//while confirm
+//Сделайте цикл с confirm, который продолжается по Отмена и заканчивается по ОК.
+// let ageConfirm;
+// do {
+// 	ageConfirm = confirm('Do you have more that 18 years old?');
+// } while (!ageConfirm);
+
+//array fill
+//Создайте пустой массив и добавляйте в него элементы, пока пользователь
+//не нажмет Отмена в очередном prompt.Используйте push для удобства: push
+// const emptyArray = [];
+
+// let userConfirm;
+// do {
+// 	userConfirm = prompt('Please select filed!');
+// 	userConfirm && emptyArray.push(userConfirm);
+// } while (userConfirm);
+// console.log(emptyArray);
+
+//array fill nopush
+//Сделайте предыдущее задание, не используя push, а обращаясь к элементам по индексу.
+
+// const emptyArray = [];
+// let userConfirm;
+// do {
+// 	userConfirm = prompt('Please select filed!');
+// 	if (userConfirm)
+// 		emptyArray[emptyArray.length === 0 ? 0 : emptyArray.length] = userConfirm;
+// } while (userConfirm);
+// console.log(emptyArray);
+
+//infinite probability
+
+//Создайте бесконечный цикл, который прерывается с помощью конструкции break,
+//когда Math.random() > 0.9.Код должен подсчитывать количество итераций
+//и вывести это число с помощью alert.
+
+// for (var i = 1; i < Infinity; i++) {
+// 	if (Math.random() > 0.9) {
+// 		alert(
+// 			`Loop made ${i} iterations before  Math.random() > 0.9 was equel to true`
+// 		);
+// 		break;
+// 	}
+// 	console.log(i);
+// }
+
+//empty loop
+//Сделайте цикл с prompt, который прерывается по нажатию OK и продолжается
+//по нажатию "Отмена" c пустым телом цикла.
+
+// const promptValue = prompt('How are you');
+// while (is === null) {
+// 	console.log('executin with empty body of loop');
+// }
+
+//progression sum
+//Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3 (1,4,7,10,13,16,19,22,25,28)
+//используя цикл for.
+
+// const progressionSum = (N = 2, startValue = 1, step = 3) => {
+// 	let sum = startValue;
+// 	let sumResult = startValue;
+// 	for (let i = 1; i < N; i++) {
+// 		sum += step;
+// 		sumResult += sum;
+// 	}
+
+// 	return sumResult;
+// };
+
+// console.log(progressionSum(10, 1, 3));
+
+//chess one line
+//Сформировать строку " # # # # # " с помощью цикла for.
+//Длина строки может быть четной и нечетной, и указывается в одном месте в коде.
+
+// const chessOneLine = (value = '#', lenght = 5) => {
+// 	let str = '';
+// 	for (let i = 0; i < lenght; i++) {
+// 		str += value;
+// 	}
+// 	return str;
+// };
+
+// console.log(chessOneLine());
+
+//numbers
+//Сформировать строку c помощью вложенных циклов. Для перевода строки используйте \n.
+
+// const isertedLoop = (n) => {
+// 	let table = '';
+// 	for (let i = 0; i < n; i++) {
+// 		let row = '';
+// 		for (let j = 0; j < n; j++) {
+// 			row += j;
+// 		}
+// 		table = `${table}\n${row}`;
+// 	}
+// 	return table;
+// };
+
+// console.log(isertedLoop(10));
+
+//chess
+//Сформируйте строку с шахматной доской из вложенных циклов.
+//Для перевода строки используйте \n.Код должен поддерживать легкое изменение размеров доски.
+
+// const chessLoop = (n, firstSighn, secondSighn) => {
+// 	let table = '';
+// 	for (let i = 0; i < n; i++) {
+// 		let row = '';
+// 		for (let j = 0; j < n; j++) {
+// 			if (j % 2 === 0) {
+// 				row += firstSighn;
+// 			} else {
+// 				row += secondSighn;
+// 			}
+// 		}
+// 		table = `${table}\n${row}`;
+// 	}
+// 	return table;
+// };
+
+// console.log(chessLoop(10, '.', '#'));
+
+//cubes
+//Сформируйте массив из N элементов, содержащий в себе кубы индексов, т. е:
+// const cubes = (N = 1, pow = 3) => {
+// 	const indexesArrayInPow = [];
+// 	for (let i = 0; i < N; i++) {
+// 		indexesArrayInPow.push(Math.pow(i, pow));
+// 	}
+// 	return indexesArrayInPow;
+// };
+
+// console.log(cubes(5, 3));
+
+//multiply table
+//C помощью вложенного цикла сформируйте массив массивов "таблица умножения".
+//Для инициализации вложенных массивов используйте
+//arr[i] = [] //в i-тый элемент массива заносится новый пустой массив
+//arr[5][6] должен быть равен, соответственно, 30, arr[7][2] == 14 и так далее.
+
+// const multiplyTable = () => {
+// 	let table = [];
+// 	for (let i = 0; i < 10; i++) {
+// 		table[i] = [];
+// 		for (let j = 0; j < 10; j++) {
+// 			table[i][j] = i * j;
+// 		}
+// 		table;
+// 	}
+// 	return table;
+// };
+
+// const result = multiplyTable();
+// console.log(result[5][6], result[7][2]);
+
+//matrix to html table
+//Сделайте вложенный цикл, который формирует HTML-таблицу в переменной
+//строкового типа из любого двумерного массива.Т.е.если в нём использовать
+//результат работы предыдущего задания, то получится таблица умножения в HTML
+
+// const matrixToHtmltable = (twoDimensionalArray) => {
+// 	const table = document.createElement('table');
+// 	for (let i = 1; i < twoDimensionalArray.length; i++) {
+// 		const tr = document.createElement('tr');
+// 		for (let j = 1; j < twoDimensionalArray[i].length; j++) {
+// 			const th = document.createElement('th');
+// 			th.textContent = `${j}*${i}=${twoDimensionalArray[j][i]}`;
+// 			tr.appendChild(th);
+// 		}
+// 		table.appendChild(tr);
+// 	}
+// 	return table;
+// };
+
+// const tableMatrix = matrixToHtmltable(result);
+// const matrixDiv = document.getElementById('matrix');
+// matrixDiv.append(tableMatrix);
+// console.log(matrixDiv);
+
+//Задание на синий пояс: Треугольник
+//Сформировать следующую строку - треугольник:
+
+// const trangl = (firstSign = '.', secondSign = '#') => {
+// 	let firTree = '';
+// 	const middle = [5];
+// 	for (let i = 0; i < 6; i++) {
+// 		let row = '';
+
+// 		if (i !== 0) {
+// 			middle.unshift(middle[0] - 1);
+// 			middle.push(middle[middle.length - 1] + 1);
+// 		}
+
+// 		for (let j = 0; j < 11; j++) {
+// 			if (middle.includes(j)) {
+// 				row += secondSign;
+// 			} else {
+// 				row += firstSign;
+// 			}
+// 		}
+
+// 		firTree = `${firTree}\n${row}`;
+// 	}
+// 	return firTree;
+// };
+
+// console.log(trangl());
+
+//Задание на черный пояс: Электронная гадалка
+//Пользователь вводит 0 или 1. Гадалка пытается угадать, что введет пользователь
+//(естественно перед его вводом), но не показывает пользователю,
+//что бы пользователь не выбрал противоположный вариант, а выводит
+//предполагаемый вариант в консоль, скрытую от пользователя.
+
+// function makeDimensional(dim, lvl, arr) {
+// 	if (lvl === 1) return [];
+// 	if (!lvl) lvl = dim;
+// 	if (!arr) arr = [];
+// 	for (let i = 0, l = dim; i < l; i += 1) {
+// 		arr[i] = makeDimensional(dim, lvl - 1, arr[i]);
+// 	}
+// 	return arr;
+// }
+
+// const predictArray = makeDimensional(4);
+// const hystory = [1, 1, 1, 1];
+
+// const internalGame = () => {
+// 	const answer = confirm(
+// 		'Choose OK  or Cancel  to play in this game and will see if you guess answer of PC '
+// 	)
+// 		? 0
+// 		: 1;
+// 	predictArray[hystory[0]][hystory[1]][hystory[2]][hystory[3]] = answer;
+// 	console.log(hystory, 'hystory before changes');
+// 	hystory.shift();
+// 	hystory.push(answer);
+// 	console.log(hystory, 'hystory after changes');
+// 	console.log(predictArray);
+// 	internalGame();
+// };
+
+// internalGame();