HW10.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. // while confirm
  2. // Сделайте цикл с confirm, который продолжается по Отмена и заканчивается по ОК.
  3. {
  4. while (!confirm('Жми отмену!')) {
  5. alert('Опа, нежданчик! Тут магия зазеркалья')
  6. }
  7. }
  8. // array fill
  9. // Создайте пустой массив и добавляйте в него элементы, пока пользователь не нажмет Отмена в очередном prompt.Используйте push для удобства: push
  10. {
  11. const arr = []
  12. let item
  13. while (item !== null) {
  14. item = prompt('введи что-то для добавления в массив')
  15. if (item !== null) { arr.push(item) }
  16. else break
  17. }
  18. console.log(arr)
  19. }
  20. // array fill nopush
  21. // Сделайте предыдущее задание, не используя push, а обращаясь к элементам по индексу.
  22. {
  23. const arr = []
  24. let item, i = 0
  25. while (item !== null) {
  26. item = prompt('введи что-то для добавления в массив')
  27. if (item !== null) { arr[i] = item }
  28. else break;
  29. i++
  30. }
  31. console.log(arr)
  32. }
  33. // infinite probability
  34. // Создайте бесконечный цикл, который прерывается с помощью конструкции break, когда Math.random() > 0.9.Код должен подсчитывать количество итераций и вывести это число с помощью alert
  35. {
  36. let num = 0, i = 0
  37. while (num <= 0.9) {
  38. num = Math.random()
  39. console.log(`${i + 1}:`, num)
  40. if (num > 0.9) {
  41. break
  42. }
  43. i++
  44. }
  45. alert(`Всего было ${i + 1} итераций цикла`)
  46. }
  47. // empty loop
  48. // Сделайте цикл с prompt, который прерывается по нажатию OK и продолжается по нажатию "Отмена" c пустым телом цикла.
  49. {
  50. while (prompt('Жми') === null) { }
  51. }
  52. // progression sum
  53. // Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3(1, 4, 7....) используя цикл for.Метод Гаусса не применять, наоборот, сделать максимально наивное решение.
  54. {
  55. const arr = []
  56. const length = +prompt('Введите количество членов арифметической прогрессии')
  57. for (let i = 0; i < length; i++) {
  58. arr.push(1 + i * 3)
  59. }
  60. console.log(arr.reduce((a, b) => a + b))
  61. }
  62. // chess one line
  63. // Сформировать строку " # # # # # " с помощью цикла for.Длина строки может быть четной и нечетной, и указывается в одном месте в коде.
  64. {
  65. const length = +prompt('Введите длину строки')
  66. let str = ''
  67. for (i = 0; i < length; i++) {
  68. str += (i % 2 ? '#' : ' ')
  69. }
  70. console.log(str)
  71. }
  72. // numbers
  73. // Сформировать строку c помощью вложенных циклов.Для перевода строки используйте \n.
  74. {
  75. let str = ''
  76. for (let i = 0; i < 10; i++) {
  77. for (let j = 0; j < 10; j++) {
  78. str += j;
  79. }
  80. str += '\n'
  81. }
  82. console.log(str);
  83. }
  84. // chess
  85. // Сформируйте строку с шахматной доской из вложенных циклов.Для перевода строки используйте \n.Код должен поддерживать легкое изменение размеров доски.
  86. {
  87. [row, column] = ['Введите количество строк в таблице', 'Введите количество столбцов в таблице'].map(prompt)
  88. let str = ''
  89. for (let i = 0; i < +row; i++) {
  90. for (let j = 0; j < +column; j++) {
  91. i % 2 ? str += (j % 2 ? '.' : '#') : str += (j % 2 ? '#' : '.')
  92. }
  93. str += '\n'
  94. }
  95. console.log(str)
  96. }
  97. // cubes
  98. // Сформируйте массив из N элементов, содержащий в себе кубы индексов, т.е: [0, 1, 8, 27, 64...]
  99. {
  100. const arr = []
  101. const length = +prompt('Введите длинну массива')
  102. for (let i = 0; i < length; i++) {
  103. arr.push(i ** 3)
  104. }
  105. console.log(arr)
  106. }
  107. // multiply table
  108. // C помощью вложенного цикла сформируйте массив массивов "таблица умножения". Для инициализации вложенных массивов используйте: arr[i] = []
  109. {
  110. const length = +prompt('Введите размер стороны таблицы Пифагора')
  111. let arr = []
  112. for (let i = 0; i < length; i++) {
  113. arr[i] = []
  114. for (let j = 0; j < length; j++) {
  115. arr[i].push(i * j)
  116. }
  117. arr.push(arr[i])
  118. }
  119. console.log(arr)
  120. console.log(arr[5][6] == 30)
  121. console.log(arr[7][2] == 14)
  122. }
  123. // read array of objects
  124. // Напишите функцию readArrayOfObjects, которая циклически добавляет в массив объекты, которые ввел пользователь.Пользователь вводит ключи и значения(их в каждом объекте может быть любое количество), используя prompt.Когда пользователь нажимает "Отмена" в окне prompt, ввод объекта заканчивается и объект добавляется в массив.Перед вводом следующего объекта пользователю задается вопрос(используя confirm), хочет ли он продолжить это мучение ввод объектов.При утвердительном ответе, опять работает ввод любюго количества ключей для создания нового объекта
  125. // Функция должна возвращать созданный массив с объектами.
  126. {
  127. let readArrayOfObjects = () => {
  128. const arr = []
  129. do {
  130. const obj = {}
  131. for (let key, value; ; obj[key] = value) {
  132. key = prompt('Введите ключ для объекта')
  133. if (key === null) {
  134. break
  135. }
  136. value = prompt('Введите значение ключа объекта')
  137. if (value === null) {
  138. break
  139. }
  140. }
  141. arr.push(obj)
  142. } while (confirm('Продолжаем ввод объектов?'))
  143. return arr
  144. }
  145. readArrayOfObjects()
  146. }
  147. // ромбик
  148. // Сформировать следующую строку - ромбик:
  149. {
  150. const length = prompt('Введите любое нечетное число')
  151. let str = ''
  152. for (let i = 0; i < length; i++) {
  153. for (let j = 0; j < length; j++) {
  154. if (i < length / 2) {
  155. !(j < (Math.floor(length / 2) - i) || j > (Math.floor(length / 2) + i)) ? str += '#' : str += '.'
  156. } else {
  157. !(j < (i - Math.floor(length / 2)) || j > length - (i - Math.floor(length / 2) + 1)) ? str += '#' : str += '.'
  158. }
  159. }
  160. str += '\n'
  161. }
  162. console.log(str)
  163. }
  164. // DOM: multiply table + highlight cell + Highlight cross
  165. // Сделать таблицу умножения, используя DOM createElement и innerText.Создайте таблицу, вложенные строки и ячейки в циклах.Должно получится что - то вроде этого:
  166. // Подсветить ячейку, над которой находится курсор мыши.Используйте события mouseover и mouseout, и style.backgroundColor для подсветки.Для того, что бы подсветить правильную ячейку, добавьте обработчики событий во вложенный цикл, и используйте в них ту переменную, которая хранит < td >.В таком случае замыкания вам помогут.
  167. // Подсветить строку и столбец, в которой находится подсвеченная ячейка.Если у вас обработчики событий объявлены во вложенном цикле, то вы можете пользоваться счетчиками цикла(обычно i и j) и другими переменными, например переменной, содержащей в себе DOM - элемент строки.
  168. {
  169. const length = +prompt('Введите размер стороны таблицы Пифагора')
  170. // создаем див-родитель для таблицы
  171. const div = document.createElement('div')
  172. document.body.append(div)
  173. // создаем тег table
  174. const multiplyTable = document.createElement('table')
  175. div.append(multiplyTable)
  176. // создаем тело таблицы
  177. for (let i = 1; i < length + 1; i++) {
  178. const row = document.createElement('tr')
  179. multiplyTable.append(row)
  180. for (let j = 1; j < length + 1; j++) {
  181. const col = document.createElement('td')
  182. col.style.cssText = `
  183. border: 1px solid grey;
  184. min-width: 1.3em;
  185. text-align: center;
  186. `
  187. row.append(col)
  188. col.innerText = `${i * j}`
  189. // подсветка строки
  190. col.addEventListener('mouseover', () => multiplyTable.rows[i - 1].style.backgroundColor = '#00FFFF')
  191. col.addEventListener('mouseout', () => multiplyTable.rows[i - 1].style.backgroundColor = 'transparent')
  192. // подсвета столбца
  193. col.addEventListener('mouseover', () => {
  194. for (let k = 1; k < length + 1; k++) {
  195. multiplyTable.rows[k - 1].cells[j - 1].style.backgroundColor = "#00FFFF"
  196. // console.log(multiplyTable.rows[k - 0])
  197. }
  198. })
  199. col.addEventListener('mouseout', () => {
  200. for (let k = 1; k < length + 1; k++) {
  201. multiplyTable.rows[k - 1].cells[j - 1].style.backgroundColor = "transparent"
  202. }
  203. })
  204. // подсветка элемента таблицы
  205. col.onmouseover = () => col.style.backgroundColor = '#FFFF00'
  206. col.addEventListener('mouseout', () => col.style.backgroundColor = 'transparent')
  207. }
  208. }
  209. }