index.js 12 KB

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