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