js.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. // ДЗ: Циклы
  2. //1. while confirm +
  3. // Сделайте цикл с confirm, который продолжается по Отмена и заканчивается по ОК.
  4. /*{
  5. let i = 0;
  6. while (confirm("Введите что-то") === false) {
  7. i++
  8. }
  9. } */
  10. //2. array fill +
  11. // Создайте пустой массив и добавляйте в него элементы, пока пользователь не нажмет Отмена в очередном prompt.
  12. // Используйте push для удобства: push
  13. /*{
  14. const arr = [];
  15. let name;
  16. while (name = prompt("Введите любое имя")) {
  17. arr.push(name);
  18. }
  19. console.log(arr)
  20. } */
  21. // 3. array fill nopush +
  22. // Сделайте предыдущее задание, не используя push, а обращаясь к элементам по индексу.
  23. /*{
  24. const arr = [];
  25. let name;
  26. let i =0;
  27. while (name = prompt("Введите любое имя")) {
  28. arr[i] = name
  29. i++;
  30. }
  31. console.log(arr)
  32. } */
  33. // 4. infinite probability +
  34. // Создайте бесконечный цикл, который прерывается с помощью конструкции break, когда Math.random() > 0.9.
  35. // Код должен подсчитывать количество итераций и вывести это число с помощью alert.
  36. // {
  37. // let i = 0;
  38. // let j = Math.random();
  39. // while (j < 0.9) {
  40. // j = Math.random()
  41. // i++
  42. // if (j > 0.9) {
  43. // break
  44. // }
  45. // }
  46. // alert(`Число > 0.9 появилось на ${i} итерации.`)
  47. // }
  48. //5. empty loop +
  49. // Сделайте цикл с prompt, который прерывается по нажатию OK и продолжается по нажатию "Отмена"
  50. // c пустым телом цикла.
  51. /*{
  52. let i = 0;
  53. while (confirm("Введите что-то") === false) {
  54. }
  55. } */
  56. //6. progression sum +
  57. // Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3 (1,4,7....) используя цикл for.
  58. // Метод Гаусса не применять, наоборот, сделать максимально наивное решение.
  59. // {
  60. // let x = 0;
  61. // for (let i = 1; i < 20; i+=3){
  62. // x += i;
  63. // }
  64. // console.log(`Сумма всех чисел c шагом 3 - ${x}`)
  65. // }
  66. //7. chess one line +
  67. // Сформировать строку " # # # # # " с помощью цикла for. Длина строки может быть четной и нечетной,
  68. // и указывается в одном месте в коде.
  69. // {
  70. // let x = "#";
  71. // for (let i = 0; i < 10; i++){
  72. // x += " #";
  73. // }
  74. // console.log(x)
  75. // }
  76. // 8. numbers +-
  77. // Сформировать строку c помощью вложенных циклов. Для перевода строки используйте \n.
  78. //
  79. // 0123456789
  80. // 0123456789
  81. // 0123456789
  82. // 0123456789
  83. // 0123456789
  84. // 0123456789
  85. // 0123456789
  86. // 0123456789
  87. // 0123456789
  88. // 0123456789
  89. /*{
  90. for (let i=0;i<9;i++){
  91. let str = "";
  92. for (let j=0;j<10;j++){
  93. str += j;
  94. }
  95. console.log(str);
  96. }
  97. }*/
  98. // 9. chess +
  99. // Сформируйте строку с шахматной доской из вложенных циклов. Для перевода строки используйте \n. Код
  100. // должен поддерживать легкое изменение размеров доски.
  101. //
  102. // .#.#.#.#.#.#
  103. // #.#.#.#.#.#.
  104. // .#.#.#.#.#.#
  105. // #.#.#.#.#.#.
  106. // .#.#.#.#.#.#
  107. // #.#.#.#.#.#.
  108. // .#.#.#.#.#.#
  109. // #.#.#.#.#.#.
  110. // .#.#.#.#.#.#
  111. // #.#.#.#.#.#.
  112. // {
  113. // let res = ""
  114. //
  115. // for (let q=0; q<10; ++q) {
  116. // let line = ""
  117. //
  118. // for (let w=0; w<10; ++w) {
  119. // line += q+w & 1 ? "#" : "."
  120. // }
  121. // res += line + "\n"
  122. // }
  123. // console.log(res)
  124. // }
  125. // 10. cubes +
  126. // Сформируйте массив из N элементов, содержащий в себе кубы индексов, т. е:
  127. //
  128. // [0,1,8,27,64...]
  129. // {
  130. // let arr = [];
  131. // let a = 1;
  132. // for (let i=0; i<10; i++) {
  133. // a = i * i * i;
  134. // arr.push(a)
  135. // }
  136. // console.log(arr)
  137. // }
  138. // 11. multiply table
  139. // C помощью вложенного цикла сформируйте массив массивов "таблица умножения".
  140. // Для инициализации вложенных массивов используйте
  141. // arr[i] = [] //в i-тый элемент массива заносится новый пустой массив
  142. // arr[5][6] должен быть равен, соответственно, 30, arr[7][2] == 14 и так далее.
  143. // 12. read array of objects
  144. // Напишите функцию readArrayOfObjects, которая циклически добавляет в массив объекты, которые ввел пользователь.
  145. // Пользователь вводит ключи и значения (их в каждом объекте может быть любое количество), используя prompt.
  146. // Когда пользователь нажимает "Отмена" в окне prompt, ввод объекта заканчивается и объект добавляется в массив.
  147. // Перед вводом следующего объекта пользователю задается вопрос (используя confirm), хочет ли он продолжить это мучение
  148. // ввод объектов. При утвердительном ответе, опять работает ввод любюго количества ключей для создания нового объекта
  149. // Функция должна возвращать созданный массив с объектами.
  150. // const result = () => {
  151. // let arr = [];
  152. // let key, property, ask;
  153. // while (ask = confirm("Создадим объект")) {
  154. // while (ask === true) {
  155. // let obj = {};
  156. // obj[prompt("Введите ключ")] = prompt('Введите значение для ключа');
  157. // console.log(obj)
  158. // }
  159. // }
  160. // }
  161. // result()
  162. // 13. ромбик +
  163. // Сформировать следующую строку - ромбик:
  164. //
  165. // .....#.....
  166. // ....###....
  167. // ...#####...
  168. // ..#######..
  169. // .#########.
  170. // ###########
  171. // .#########.
  172. // ..#######..
  173. // ...#####...
  174. // ....###....
  175. // .....#.....
  176. // let n = 10
  177. //
  178. // for(let i=1; i<=n; i++){
  179. // let str='';
  180. //
  181. // for(let j=n-i; j>0; j--){
  182. // str+=' ';
  183. // }
  184. //
  185. // for(let j=1; j<=i*2-1; j++){
  186. // str+='#';
  187. // }
  188. // console.log(str);
  189. // }
  190. //
  191. // for (let i=2; i<=n; i++){
  192. // let str='';
  193. //
  194. // for (let j=0; j<i-1; j++){
  195. // str+=' ';
  196. // }
  197. // for (let j=(n-i)*2+1; j>0; j--){
  198. // str+='#';
  199. // }
  200. // console.log(str);
  201. // }
  202. // 14. DOM: multiply table +
  203. // Сделать таблицу умножения, используя DOM createElement и innerText. Создайте таблицу, вложенные строки и ячейки
  204. // в циклах. Должно получится что-то вроде этого:
  205. // {
  206. // let table = document.getElementById("table");
  207. // document.body.append(table);
  208. //
  209. // for (let i = 1; i < 10; i++) {
  210. // let tr = document.createElement("tr");
  211. // table.appendChild(tr);
  212. // if (i % 2 === 0) {
  213. // tr.style.backgroundColor = 'lightgrey';
  214. // }
  215. // for (let j = 1; j < 10; j++) {
  216. // let td = document.createElement("td");
  217. // tr.appendChild(td);
  218. // td.innerText = i * j;
  219. // table.style.width = '30%';
  220. // table.style.border = 'black 2px'
  221. // }
  222. // }
  223. // }
  224. // const table = document.getElementById('table');
  225. //
  226. // for (let i = 0; i < 10; i++){
  227. // let tr = document.createElement('tr');
  228. // if (i % 2 === 1) {
  229. // tr.style.backgroundColor = 'lightgrey';
  230. // }
  231. // for (let j = 0; j < 10; j++){
  232. // const td = document.createElement('td');
  233. // let value = i * j;
  234. // if (value === 0) {
  235. // value = i || j;
  236. // }
  237. // td.innerHTML = value;
  238. // tr.appendChild(td);
  239. // }
  240. // table.appendChild(tr);
  241. // }
  242. // 15 DOM: highlight cell
  243. // Подсветить ячейку, над которой находится курсор мыши. Используйте события mouseover и mouseout,
  244. // и style.backgroundColor для подсветки. Для того, что бы подсветить правильную ячейку, добавьте обработчики событий
  245. // во вложенный цикл, и используйте в них ту переменную, которая хранит <td>. В таком случае замыкания вам помогут.
  246. // Внимание: :hover это читерство :-)
  247. //
  248. // const table = document.getElementById('table');
  249. //
  250. // for (let i = 0; i < 10; i++){
  251. // let tr = document.createElement('tr');
  252. // if (i % 2 === 1) {
  253. // tr.style.backgroundColor = 'lightgrey';
  254. // }
  255. // for (let j = 0; j < 10; j++){
  256. // const td = document.createElement('td');
  257. // let value = i * j;
  258. // if (value === 0) {
  259. // value = i || j;
  260. // }
  261. // td.innerHTML = value;
  262. // tr.appendChild(td);
  263. // }
  264. // table.appendChild(tr);
  265. // }
  266. //
  267. // table.onmouseover = function(event) {
  268. // let target = event.target;
  269. // target.style.background = 'lightblue';
  270. // };
  271. //
  272. // table.onmouseout = function(event) {
  273. // let target = event.target;
  274. // target.style.background = '';
  275. // };
  276. // 16. DOM: Highlight cross
  277. // Подсветить строку и столбец, в которой находится подсвеченная ячейка. Если у вас обработчики событий объявлены во
  278. // вложенном цикле, то вы можете пользоваться счетчиками цикла (обычно i и j) и другими переменными, например
  279. // переменной, содержащей в себе DOM-элемент строки.
  280. //
  281. // const table = document.getElementById('table');
  282. //
  283. // for (let i = 0; i < 10; i++){
  284. // const row = document.createElement('tr');
  285. // for (let j = 0; j < 10; j++){
  286. // const col = document.createElement('td');
  287. // let val = i * j;
  288. // if (val === 0) {
  289. // val = i || j;
  290. // }
  291. // col.innerHTML = val;
  292. // row.appendChild(col);
  293. // }
  294. // table.appendChild(row);
  295. // }
  296. //
  297. // table.onmouseover = function(event) {
  298. // let target = event.target;
  299. // target.style.background = 'pink';
  300. //
  301. // document.querySelectorAll(".highlight").forEach(
  302. // item => item.classList.remove("highlight")
  303. // );
  304. // target.closest("tr").classList.add("highlight");
  305. // target.closest("table").querySelectorAll("tr").forEach(
  306. // row => row.cells[target.cellIndex].classList.add("highlight")
  307. // );
  308. // };
  309. //
  310. // table.onmouseout = function(event) {
  311. // let target = event.target;
  312. // target.style.background = '';
  313. //
  314. // document.querySelectorAll(".highlight").forEach(
  315. // item => item.classList.remove("highlight")
  316. // );
  317. // };