ostapenkonataliia 2 years ago
parent
commit
b0155154cc
10 changed files with 804 additions and 71 deletions
  1. 15 3
      .idea/workspace.xml
  2. 4 4
      Js_01/js.js
  3. 2 2
      Js_02/js.js
  4. 28 17
      Js_05/js.js
  5. 0 1
      Js_06/index.html
  6. 57 44
      Js_06/js.js
  7. 42 0
      Js_07/index.html
  8. 323 0
      Js_07/js.js
  9. 71 0
      Js_08/index.html
  10. 262 0
      Js_08/js.js

+ 15 - 3
.idea/workspace.xml

@@ -2,9 +2,13 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="c45bf7d2-992f-400a-8194-6f236ee5f805" name="Changes" comment="">
+      <change afterPath="$PROJECT_DIR$/Js_07/index.html" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/Js_07/js.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/Js_05/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/Js_05/index.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Js_01/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_01/js.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Js_02/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_02/js.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/Js_05/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_05/js.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Js_06/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/Js_06/index.html" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/Js_06/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_06/js.js" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
@@ -16,8 +20,8 @@
     <option name="RECENT_TEMPLATES">
       <list>
         <option value="CSS File" />
-        <option value="HTML File" />
         <option value="JavaScript File" />
+        <option value="HTML File" />
       </list>
     </option>
   </component>
@@ -46,6 +50,11 @@
     &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
   }
 }</component>
+  <component name="RecentsManager">
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="C:\A-Level\JS" />
+    </key>
+  </component>
   <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
   <component name="TaskManager">
     <task active="true" id="Default" summary="Default task">
@@ -70,7 +79,10 @@
       <workItem from="1667638076419" duration="35685000" />
       <workItem from="1667817859511" duration="1908000" />
       <workItem from="1667847126461" duration="5051000" />
-      <workItem from="1667890124866" duration="33466000" />
+      <workItem from="1667890124866" duration="69765000" />
+      <workItem from="1668117208152" duration="114564000" />
+      <workItem from="1668934156041" duration="2171000" />
+      <workItem from="1668936521847" duration="15558000" />
     </task>
     <servers />
   </component>

+ 4 - 4
Js_01/js.js

@@ -1,16 +1,16 @@
 // Задание Calc
-
+/*
 const coffeCup = prompt('Введите количество чашек кофе, которые Вы покупаете за день');
 const price = prompt('Введите цену одной чашки кофе (грн.)');
 
 const dailyConst = coffeCup * price;
 const monthConst = dailyConst * 30;
 
-alert("Расходы на кофе за 1 день" + dailyConst + " грн. Расходы на кофе в месяц " + monthConst +" грн.");
+alert("Расходы на кофе за 1 день" + dailyConst + " грн. Расходы на кофе в месяц " + monthConst +" грн."); */
 
 
 // Задание на синий пояс
-
+/*
 let userName = prompt("Введите логин");
 if (userName == 'admin') {
     let pass = prompt("Введите пароль");
@@ -25,4 +25,4 @@ if (userName == 'admin') {
     alert('Логин не введен');
 } else {
     alert("Неправильный логин");
-}
+}*/

+ 2 - 2
Js_02/js.js

@@ -59,7 +59,7 @@ alert("Ваш цвет " + colorCss); */
 //7. Number: flats
 //Сделайте калькулятор, который позволит вам исходя из информации о количества этажей в доме и количества квартир на
 // этаже находить подъезд и этаж определенной квартиры по её номеру.
-
+/*
 const porch = prompt("Введите количество подъездов в доме");
 const area = prompt("Введите количество квартир на этаже");
 const floor = prompt("Введите количество этажей в доме");
@@ -71,6 +71,6 @@ const totalPorch = total / porch; // Количество квартир в од
 const numberPorch = Math.floor(1 + (flat - 1) / totalPorch) ; // Номер подьезда
 const numberFloor = Math.floor(1 + ((flat - 1) % totalPorch) / area); //Номер этажа
 
-alert(`Квартира № ${flat} находится в ${numberPorch} подъезде ${numberFloor} этаже`);
+alert(`Квартира № ${flat} находится в ${numberPorch} подъезде ${numberFloor} этаже`); */
 
 

+ 28 - 17
Js_05/js.js

@@ -244,7 +244,7 @@
          str += "<tr>" + "</tr>"
         console.log(currency)
         for (let letter of currency){
-            str += "<td>" + letter + "</td>"
+            str += "<td>" + letter  + "</td>"
             console.log(letter)
         }
     }
@@ -256,18 +256,33 @@
 // Выведите таблицу умножения 5x5 из задания Multiply table в таблицу, используя вложенные for .... of и document.write
 //Сделайте черезстрочную подсветку - задавайте четным строкам один цвет фона, нечетным - другой
 /*{
-    let cols = [0,1,2,3,4];
-    let rows = [0,1,2,3,4];
-    document.write('<table border=1, cellpadding=0, cellspacing=0, width="50%">');
-    for (i = 0; i < cols.length; i++) {
-        document.write("<tr>");
-        for (k = 0; k < rows.length; k++) {
-            document.write("<td>"+(k*i)+"</td>");
+    const arr = [
+        [0,0,0,0,0,0],
+        [0,1,2,3,4,5],
+        [0,2,4,6,8,10],
+        [0,3,6,9,12,15],
+        [0,4,8,12,16,20],
+        [0,5,10,15,20,25]
+    ];
+    let str = "<table>"
+    let i = 1
+
+    for (let tr of arr){
+
+        if (i++ % 2 === 0){
+            str += '<tr style="background-color: lightgray;">'
+        }else{
+            str += "<tr>"
         }
-        document.write("</tr>");
+        for (let td of tr){
+            str += "<td>" + td + "</td>"
+        }
+        str += "</tr>"
     }
-    document.write("</table>");
-}*/
+
+    str += "</table>"
+    document.write(str)
+} */
 
 //24. Function Capitalize +
 // Реализуйте задачу String: capitalize как отдельную функцию:
@@ -294,18 +309,14 @@
 //26. Filter Lexics
 // Пусть пользователь вводит строку. Разбейте её по пробелам. Используя filter верните true если элемент массива не
 // состоит в определенном массиве недопустимых слов. Если же элемент массива - недопустимое слово, функция, переданная
-// в filter должна возвращать false. Соберите массив в строку обратно. блин какая сегодня
-
+// в filter должна возвращать false. Соберите массив в строку обратно.
 
 //27. Beep Lexics
 // Пусть пользователь вводит строку. Разбейте её по пробелам. Используя map и тернарный оператор верните из функции
 // слово без изменений, если оно не состоит в каком-то другом массиве запрещенных слов. Если же слово состоит в этом
 // списке, функция должна вернуть слово BEEP. Соберите массив обратно в строку через пробел. Таким образом вы сможете
 // реализовать замену нескольких запрещенных слов на BEEP.
-/*{
-    const ask = prompt("Введите несколько слов");
-    const arr = ask.split(` `);
-}*/
+
 
 //28. Reduce HTML +-
 // Реализуйте задачу For Select Option используя reduce

+ 0 - 1
Js_06/index.html

@@ -6,6 +6,5 @@
     <script src="js.js"></script>
 </head>
 <body>
-
 </body>
 </html>

+ 57 - 44
Js_06/js.js

@@ -33,7 +33,7 @@
     console.log(newCar)
 }*/
 
-//4. Html tree продолжение в конспекте +
+//4. Html tree +
 /*{
     let form = {
         tagName  : 'form',
@@ -88,7 +88,7 @@
 } */
 
 
-// 5. Parent +-
+// 5. Parent +
 // Добавьте каждому объекту тэга из предыдущего задания связь с родителем, используя свойство parent и присвоение
 /*{
     let form = {
@@ -139,14 +139,17 @@
             }
         ]
     }
-}
-{
-    let form = {
-        tagName  : 'form',
-        children : form.children,
-    }
-} */
 
+body.children[0].parent = body;
+body.children[1].parent = body;
+body.children[0].children[0].parent = body.children[0].parent;
+body.children[0].children[1].parent = body.children[0].parent;
+body.children[0].children[2].parent = body.children[0].parent;
+body.children[0].children[3].parent = body.children[0].parent;
+body.children[1].children[0].parent = body.children[1].parent;
+body.children[1].children[1].parent = body.children[1].parent;
+}
+*/
 
 // 6. Change OK +
 // Добавьте(или измените) любой введенный пользователем атрибут тэга <button id='ok'> из задания HTML Tree.
@@ -328,12 +331,13 @@ console.log(id)
     fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
         .then(data => {
             const {[prompt("Введите исходную валюту").toUpperCase()]:baseCurrency} = data.rates;
-            const {[prompt("Введите валюту в которую просходит конверция").toUpperCase()]:quoteCurrency} = data.rates;
+            const {[prompt("Введите валюту в которую просходит конвертация").toUpperCase()]:quoteCurrency} = data.rates;
             let result = baseCurrency/quoteCurrency*sum;
             console.log(result)
+            console.log(data)
         })
-}
-*/
+}*/
+
 
 // 14. Currency drop down +
 // Сделайте выпадающий список с названиями всех валют, используя код из прошлого задания и накопление HTML-тэгов
@@ -353,29 +357,32 @@ console.log(id)
     })
 } */
 
-// 15. Currency table +-
+// 15. Currency table +
 // Сделайте двумерную таблицу с курсами между всеми возможными парами валют по типу таблицы Пифагора, используя
 // заготовку из задания Currency real rate:
-/*   fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
+/*
+  fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
     .then(data => {
-        //console.log(data);
-        const rates = Object.keys(data.rates);
-        const values = Object.values(data.rates);
-        console.log(rates);
-        console.log(values);
 
-        document.write('<table border=1, cellpadding=0, cellspacing=0, width="100%">');
-        for (let i = 0; i < values.length; i++) {
-            document.write("<tr>" + values[i].toFixed(3) + "</tr>");
+        let table = '<table>'
+        table += '<tr><td></td>'
+        for (let currency in data.rates){
+            table += '<td>' + currency + '</td>'
+        }
+        table += '</tr>'
 
-            for (let k = 0; k < values.length; k++) {
-                document.write("<td>" + (values[i]/values[k]).toFixed(3) + "</td>");
-            }
-            document.write("</tr>");
+            for (let currencyVertical in data.rates){
+                table += '<tr><td>' + currencyVertical + '</td>';
+
+                for (let currencyHorizontal in data.rates) {
+                    table += `<td>${data.rates[currencyHorizontal] / data.rates[currencyVertical]}</td>`
+                    }
         }
-        document.write('</table>');
+        table += '</table>'
+        document.write(table)
+
     })
-*/
+     */
 
 //16. Form +
 // Напишите код, который их любого объекта создает форму HTML. Например для такого объекта
@@ -407,7 +414,6 @@ console.log(id)
 
 //17. Table в конспекте
 // Даден любой массив с объектами
-
 const persons = [
     {
         name: 'Мария',
@@ -428,24 +434,31 @@ const persons = [
         married: true
     },
 ]
+let arrColumn = [];
+
+for (let obj of persons) {
+    for (let key in obj) {
+        if (!(arrColumn.includes(key))) {arrColumn.push(key)}
+    }
+}
+let table = '<table>';
 
-const joinObj = {
-    ...persons[0],
-    ...persons[1],
-    ...persons[2]
+table += '<tr>'
+for (let th of arrColumn){
+    table += '<th>' + th + '</th>'
 }
+table += '</tr>'
 
-{
-    const keyS = Object.keys(joinObj);
-    const lineArr = Object.values(joinObj);
+for ( let obj of persons) {
+    table += '<tr>';
 
-    let   str = "<table width='80%' border='1' bgcolor='#add8e6'>"
-    for (let name of keyS) {
-        str +="<th>"+ name +"</th>";
+    for (column of arrColumn){
+        table += '<td>'
+        if (obj[column]) { table += obj[column] }
+        table += '</td>'
     }
-        for (let line of lineArr) {
-            str += "<tr>"+ line +"</tr>";
-        }
-    str+= "</table>";
-    document.write(str)
+    table += '</tr>';
 }
+
+table += '</table>'
+document.write(table)

+ 42 - 0
Js_07/index.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <script src="js.js"></script>
+
+</head>
+<body>
+
+
+<input type='number' id="firstNumber" />
+<input type='number' id="secondNumber" />
+<div>
+    <p>Первое число поместится во втором целых <span id="divisionResult">___ </span> раз </p>
+</div>
+
+<!--<script>-->
+<!--    const calcResult = () => {-->
+<!--        console.log(firstNumber.value, secondNumber.value, divisionResult.innerHTML)-->
+<!--        divisionResult.innerHTML = Math.floor(Math.abs(firstNumber.value/secondNumber.value ))-->
+<!--    }-->
+<!--    firstNumber.oninput = secondNumber.oninput = calcResult-->
+<!--</script>-->
+
+<p> Введите количество чашек кофе, которые Вы покупаете за день </p>
+<input type='number' id="coffeeCup" />
+<p> Введите стоимость одной чашки кофе </p>
+<input type='number' id="price" />
+<div>
+    <p> Расходы на кофе за день <span id="dailyExpenses">___ </span> грн </p>
+</div>
+<script>
+
+        const calcResult = () => {
+            dailyExpenses.innerHTML= coffeeCup.value * price.value;
+        }
+
+        coffeeCup.oninput = price.oninput = calcResult
+</script>
+</body>
+</html>

+ 323 - 0
Js_07/js.js

@@ -0,0 +1,323 @@
+// 1. Temperature
+// Оформите Temperature как функцию, в которую параметром передается температура в одной системе, а возвращается в
+// другой. Никаких prompt и console.log в коде быть не должно, если вы хотите в дальнейшем пользоваться этой функцией
+// где угодно в коде удобно. Нужен ли блок кода в функции для решения этой задачи?
+/*{
+    const temp = a => a * 1.8 + 32;
+}*/
+
+//2.  RGB
+// Оформите Number: RGB как функцию, в которую параметрами передаются три числа (r,g,b) => . Функция должна возвращать
+// строку в нотации #RRGGBB. Используя условия или тернарный оператор добейтесь что бы в результате всегда было
+// 7 символов, даже когда значение цвета меньше 15ти. Нужен ли блок кода этой функции?
+/*{
+    const rgbToHex = (r,g,b) => {
+        const hex = '#' +
+            (r > 15 ? r.toString(16) : "0" + r.toString(16)) +
+            (g > 15 ? g.toString(16) : "0" + g.toString(16)) +
+            (b > 15 ? b.toString(16) : "0" + b.toString(16));
+        return hex
+    }
+    console.log(rgbToHex(15,10,5))
+}*/
+
+//3. Flats
+// Оформите Number: flats как функцию. Продумайте достаточное количество параметров для решения задачи. Функция должна
+// возвращать объект вида {entrance, floor}, где entrance - номер падика, floor - номер этажа на котором находится
+// квартира.
+/*{
+    const result = (porch, area, floor, flat) => {
+        const total = porch * floor * area; // Общее количество квартир в доме
+        const totalPorch = total / porch; // Количество квартир в одном подьезде
+        const numPorch = Math.floor(1 + (flat - 1) / totalPorch) ;
+        const numFloor = Math.floor(1 + ((flat - 1) % totalPorch) / area);// Номер подьезда
+
+        console.log(flatResult);
+        return flatResult = {
+            numPorch,
+            numFloor
+        }
+    }
+    result(4,4,5,30);
+} */
+
+// 4. Credentials
+// Оформите задание String: credentials как функцию без параметров. Используйте функцию capitalize из домашнего
+// задания по массивам. Функция должна содержать вызовы prompt и возвращать объект вида {name, surname, fatherName,
+//  fullName}
+/*{
+    function capitalize() {
+        const name = prompt('Введите имя');
+        const fatherName = prompt('Введите отчество')
+        const surname = prompt('Введите фамилию')
+        let fullName = name + " " + fatherName + " " + surname;
+        const arr = fullName.split(' ');
+        const newArr = [];
+        arr.forEach((item) => {
+            const word = item[0].toUpperCase() + item.slice(1);
+            newArr.push(word);
+        })
+        const obj = Object.assign({}, newArr);
+        console.log(obj)
+        return obj;
+    }
+    capitalize()
+} */
+
+//5. New line
+// Оформите задание String: new line как функцию с параметром-строкой. Функция должна возвращать строку с настоящими
+// переносами.
+/*{
+    const string = (str = prompt('введите несколько строк разделенных \n')) => {
+        return str.split('\\n').join('\n');
+    }
+    let result = string()
+    alert(result);
+}*/
+
+//6.  Prompt OR
+// Оформите задание Prompt: OR как функцию, которая принимает строку для prompt и значение по умолчанию. Функция должна
+// возвращать введенный текст или значение по умолчанию в случае отказа пользователя вводить что-либо. Используйте
+// функцию без блока кода (функцию в одно выражение)
+/*
+{
+     const promptOr = (promptStr, promptDefault) => prompt (promptStr) || promptDefault
+    console.log( promptOr('Введите что-то', 'ignore') )
+}
+}*/
+
+//7.  Login And Password
+// Оформите задание Login And Password как функцию, которая принимает два параметра - правильный логин и пароль и
+// возвращает true если логин и пароль введенные пользователями верны, или false если пользователь не смог.
+/*
+{
+    const sign = (userName = 'admin', pass ='qwerty' ) => {
+        if (userName === 'admin') {
+            if (pass === 'qwerty') {
+                alert('Успешный вход');
+            } else if (pass === '' || pass == null) {
+                alert('Пароль не введен');
+            } else {
+                alert('Неправильный пароль');
+            }
+        } else if (userName === '' || userName == null) {
+            alert('Логин не введен');
+        } else {
+            alert("Неправильный логин");
+        }
+    }
+    sign('admin', 'qwerty')
+}*/
+
+// 8. For Table
+// Оформите задание For Multiply Table как функцию, которая принимает любой массив с массивами, а возвращает строку
+// HTML с тэгом <table> и всякими tr и td.
+/*{
+    const arr = [
+        [0,0,0,0,0,0],
+        [0,1,2,3,4,5],
+        [0,2,4,6,8,10],
+        [0,3,6,9,12,15],
+        [0,4,8,12,16,20],
+        [0,5,10,15,20,25]
+    ];
+
+    const newTable = arr => {
+        let str = "<table>"
+        let i = 1
+        for (let tr of arr){
+            if (i++ % 2 === 0){
+                str += '<tr>'
+            }else{
+                str += "<tr>"
+            }
+            for (let td of tr){
+                str += "<td>" + td + "</td>"
+            }
+            str += "</tr>"
+        }
+        str += "</table>"
+        return (str)
+    }
+    newTable(arr)
+} */
+
+//9.  Filter Lexics
+// Оформите задание Filter Lexics как функцию, принимающую любую строку для проверки и массив некорректных слов
+// (['бляха', 'муха', "пляха", "шабля"], например). Функция должна возвращать строку без этих некорректных слов.
+/*{
+    let arrBadWords = ['бляха', 'муха', "пляха", "шабля"];
+    let str = prompt("Введите текст");
+
+    let filterLexics = (str, arrBadWords) => {
+        let arr = str.split(" ");
+
+        const f = (word) => {
+            for (let badWords of arrBadWords) {
+                if (word === badWords) {
+                    return false
+                } else {
+                    return true }
+            }
+        }
+    let arrNew = arr.filter(f);
+    return arrNew.join(' ')
+    }
+console.log(filterLexics(str, arrBadWords))
+} */
+
+// 10. Currency Table +-
+// Оформите задание Currency Table как функцию, без параметров, которая складывает полученные данные во внутренний
+// двумерный массив, после чего отображает его используя функцию из задания For Table
+{
+  fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
+      .then(data => {
+
+        const fullArr = Object.entries(data.rates);
+        console.log(fullArr )
+
+          const newTable = () => {
+              let str = "<table>"
+              let i = 1
+              for (let tr of fullArr){
+                  if (i++ % 2 === 0){
+                      str += '<tr style="background-color: lightgray;">'
+                  }else{
+                      str += "<tr>"
+                  }
+                  for (let td of tr){
+                      str += "<td>" + td + "</td>"
+                  }
+                  str += "</tr>"
+              }
+              str += "</table>"
+              document.write(str)
+          }
+          newTable()
+        })
+}
+
+//11.  Form +
+// Оформите задание Form как функцию, которая принимает любой объект как параметр и создает форму на экране.
+/*{
+    const car = {
+        "Name":"chevrolet chevelle malibu",
+        "Cylinders":8,
+        "Displacement":307,
+        "Horsepower":130,
+        "Weight_in_lbs":3504,
+        "Origin":"USA",
+        "in_production": false }
+
+    const createForm = car => {
+        for (const [key, values] of Object.entries(car)) {
+            str = "<form>";
+            if (typeof values === 'string') {
+                str += "<label>" + key + "<input type='text' value='" + values + "'/>" + "</label>";
+            } else if (typeof values === 'number') {
+                str += "<label>" + key + "<input type='number' value='" + values + "'/>" + "</label>";
+            } else if (typeof values === 'boolean') {
+                str += "<label>" + key + "<input type='checkbox' value='" + values + "'/>" + "</label>";
+            }
+            str += "</form>"
+            document.write(str);
+        }
+    }
+    createForm(car)
+}*/
+
+//12. Array of objects sort +
+// Сделайте обобщенную функцию сортировки массива с объектами
+// Функция позволяет отсортировать любой набор данных по имени поля (второй параметр). Третьим параметром идет
+// необязательный Boolean, который в случае true делает сортировку по возрастанию, в случае false - по убыванию.
+// По умолчанию (без третьего параметра) происходит сортировка по возрастанию.
+// Если параметр не задан - внутри функции он равен undefined
+/*{
+    let persons = [
+        {name: "Иван", age: 17},
+        {name: "Мария", age: 35},
+        {name: "Алексей", age: 73},
+        {name: "Яков", age: 12},
+    ]
+
+    function sort(arr, key,boolean){
+        arr.sort(mySort)
+
+        function mySort(a, b){
+            return (boolean) ? (a[key] > b[key]) : (b[key] > a[key]);
+        }
+        return arr;
+    }
+
+    console.log(sort(persons, "name", false));
+} */
+
+
+// 14. Divide
+// Реализуйте задание Number: divide в HTML:
+/*{
+    <input type='number' id="firstNumber" />
+    <input type='number' id="secondNumber" />
+
+    <div>
+        <p>Первое число поместится во втором целых <span id="divisionResult">___ </span> раз </p>
+    </div>
+
+
+    <script>
+        const calcResult = () => {
+        console.log(firstNumber.value, secondNumber.value, divisionResult.innerHTML)
+        divisionResult.innerHTML = Math.floor(Math.abs(firstNumber.value/secondNumber.value ))
+    }
+        firstNumber.oninput = secondNumber.oninput = calcResult
+} */
+
+
+// Воспользуйтесь следующей информацией:
+//     все id в HTML становятся глобальными переменными (если это имя не занято, id="prompt" не сработает, функция
+//     prompt будет работать и далее);
+//     Любой DOM-элемент (то, что в HTML называется тэгом или парой тэгов) является объектом;
+//     Для доступа к атрибуту value тэгов input используется свойство value (например, firstNumber.value)
+//     Для доступа к вложенному тексту парных тэгов используется свойство innerHTML (например, divisionResult.innerHTML)
+//
+// Заготовка выше обеспечивает запуск функции calcResult по любому изменению текста в полях ввода. Напишите в ней
+// деление значений из полей ввода и выведите резуль тат в div.
+
+// 15. Calc Func
+// Вспомните первое ДЗ по Javascript, в котором вы делали всякие расчеты используя код на Javascript. Оформите это как
+// функцию:
+//
+//     найдите все входящие данные, сделайте из них параметры
+//     найдите переменную с результатом расчетов и сделайте так, что бы ваша функция возвращала этот результат.
+//         Если результатов несколько, создайте объект из этих результатов и верните его.
+/*
+{
+    const amountCoffee = (coffeeCup = +prompt('Введите количество чашек кофе, которые Вы покупаете за день'),
+                         price = +prompt('Введите цену одной чашки кофе (грн.)')) => {
+        let dailyConst = coffeeCup * price;
+        console.log(dailyConst)
+    }
+    amountCoffee()
+} */
+
+
+//16. Calc Live +
+// Используя пример из задания Divide и функцию из Calc Func сделайте несколько полей ввода в HTML, меняя которые вы
+// будете получать результат калькуляции в каком-то div.
+/*
+    <p> Введите количество чашек кофе, которые Вы покупаете за день </p>
+    <input type='number' id="coffeeCup" />
+    <p> Введите стоимость одной чашки кофе </p>
+    <input type='number' id="price" />
+    <div>
+        <p> Расходы на кофе за день <span id="dailyExpenses">___ </span> грн </p>
+    </div>
+    <script>
+
+        const calcResult = () => {
+        dailyExpenses.innerHTML= coffeeCup.value * price.value;
+    }
+
+        coffeeCup.oninput = price.oninput = calcResult
+    </script> -->
+} */

+ 71 - 0
Js_08/index.html

@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+
+</head>
+<body>
+<!--
+    <script>
+        fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
+            .then(data => {
+                    let currencyFrom = document.createElement("select");
+                    currencyFrom.id = 'from'
+                    document.body.prepend(currencyFrom);
+
+                    let currencyTo = document.createElement("select");
+                    currencyFrom.id = 'to'
+                    document.body.prepend(currencyTo);
+
+
+
+                    const numberInput = document.getElementById('amount')
+                    numberInput.type  = 'number'
+                    numberInput.value = '100'
+                    numberInput.oninput = () => {
+                        console.log('Чесло', numberInput.value)
+                    }
+
+                    for (const [key,rates] of Object.entries(data.rates)) {
+                        console.log(key,rates);
+                        currencyFrom.innerHTML += "<option>" + key + "</option>";
+                        currencyTo.innerHTML += "<option>" + key + "</option>";
+
+                        let course = document.getElementById('rate');
+                        const calcResult = () => {
+                            course.innerHTML = rates / 2;
+                        }
+                        calcResult()
+                    }
+                }
+            )
+    </script> -->
+
+<!-- closure calc 2  -->
+
+<select id='from'> </select>
+<select id='to'> </select>
+<div>
+    <p> Крос курс From <span id="rateFrom">___ </span> </p>
+</div>
+
+<div>
+    <p> Крос курс To <span id="rateTo">___ </span> </p>
+</div>
+
+<input type='number' id='amount' />
+<div>
+    <p > Результат <span id="result">___ </span> </p>
+</div>
+
+                <!-- countries and cities -->
+<form action="">
+    <select id="countrySelect" name=""></select>
+    <select id="citySelect" name=""></select>
+</form>
+
+
+    <script src="js.js"></script>
+</body>
+</html>

+ 262 - 0
Js_08/js.js

@@ -0,0 +1,262 @@
+//1. blocks
+/*let a = 10
+{
+    let b = 20
+    {
+        let c = 30
+        //какие тут будут значения переменных a,b,c,d
+
+        b++
+        a *= 10
+    }
+    {
+        let c = 50
+        //какие тут будут значения переменных a,b,c,d
+        b += 500
+    }
+    {
+        const a = 100500
+        const d = "value"
+        //какие тут будут значения переменных a,b,c,d
+        {
+            let a = -50
+            b     = 1000
+            //какие тут будут значения переменных a,b,c,d
+        }
+    }
+}
+*/
+
+//2. comparison if +
+//Разберите пример
+//Добавьте условие отрицательного возраста в пример выше. Расставьте недостающие (но синтаксически необязательные)
+//  фигурные скобки. Выкиньте лишнее из текущего кода
+/*
+let age = +prompt("Сколько вам лет?","");
+if (age > 6 && age <= 18){
+    alert("школьник");
+}
+else if (age < 0) {
+    alert("ты еще не родился?")
+}
+else if (age > 18 && age < 30){
+    alert("молодеж");
+}
+else if (age > 30 && age < 45){
+    alert("зрелость");
+}
+else if (age > 45 && age < 60){
+    alert("закат");
+}
+else if (age > 60){
+    alert("как пенсия?");
+}
+else {
+    alert("то ли киборг, то ли KERNESS");
+}
+*/
+//3. switch: sizes +
+// Сделайте задание Comparison: sizes используя switch
+/*{
+    let size = +prompt("Введите ваш украинский размер одежды (верхняя одежда, платья, брюки)");
+        switch (size) {
+            case 36:
+            case 38:
+                alert("Ваш размер по размерной сетке США XS");
+                break;
+            case 40:
+                alert("Ваш размер по размерной сетке США S");
+                break;
+            case 42:
+            case 44:
+                alert("Ваш размер по размерной сетке США M");
+                break;
+            case 46:
+            case 48:
+                alert("Ваш размер по размерной сетке США L");
+                break;
+            case 50:
+            case 52:
+                alert("Ваш размер по размерной сетке США XL");
+                break;
+        }
+}*/
+
+//4. switch: if +
+//  Перепишите пример ниже, используя if.
+/*    let color = prompt("Введите цвет","");
+
+    switch (color){
+        case "red":
+            document.write("<div style='background-color: red;'>красный</div>");
+        case "black":
+            document.write("<div style='background-color: black; color: white;'>черный</div>");
+            break;
+        case "blue":
+            document.write("<div style='background-color: blue;'>синий</div>");
+        case "green":
+            document.write("<div style='background-color: green;'>зеленый</div>");
+            break;
+        default: document.write("<div style='background-color: gray;'>Я не понял</div>");
+    }
+{   let color = prompt("Введите цвет","");
+
+    if (color === 'red') {
+        document.write("<div style='background-color: red;'>красный</div>");
+        document.write("<div style='background-color: black; color: white;'>черный</div>")
+    } else if (color === 'black') {
+        document.write("<div style='background-color: black; color: white;'>черный</div>")
+    } else if (color === 'blue') {
+        document.write("<div style='background-color: blue;'>синий</div>");
+        document.write("<div style='background-color: green;'>зеленый</div>");
+    } else if (color === 'green') {
+        document.write("<div style='background-color: green;'>зеленый</div>");
+    } else {
+        document.write("<div style='background-color: gray;'>Я не понял</div>");
+    }
+} */
+
+//5. noswitch +
+//Напишите функцию noSwitch, которая принимает объект со значениями-функциями, ключ для объекта и запускает одну
+// из функций из объекта если ключ найден, иначе - запускает default:
+/*
+{
+    const noSwitch = (key, cases, defaultKey = 'default') => {
+        if (drink in cases) {
+            cases[drink]()
+        } else {
+            cases.default()
+        }
+    }
+
+    const drink = prompt("Что вы любите пить");
+
+//запуск функции
+    noSwitch (drink, {
+        воду: () => console.log('Самый здоровый выбор!'),
+        чай() {
+            console.log('Вкусная и полезная штука. Не переусердствуйте с сахаром')
+        },
+        "пиво": () => console.log('Хорошо летом, да в меру'),
+        виски: function () {
+            console.log('Да вы, батенька, эстет! Не забудьте лед и сигару')
+        },
+        default() {
+            console.log('шото я не понял')
+        }
+    })
+}  */
+
+//6. closure calc
+// Напишите внутри анонимной функции, переданной в then (data =>):
+// цикл, который перебирает курсы;
+// на каждой итерации создается кнопка (document.createElement)
+// текст кнопки - название валюты (innerHTML или innerText)
+// Назначьте обработчик события на этой кнопке (onclick = () => {.....}). Функция-обработчик должна быть написана
+// прямо в теле цикла
+// Обработчик должен спрашивать сумму используя prompt и переводить эту суммы из валюты, написанной на кнопке в USD
+//
+// Найдите замыкания. Для доступа к валютам из data.rates используйте [], . тут не поможет. Кнопки добавляйте в
+// специальный контейнер (div например), созданный в HTML, или, на худой конец, в body
+
+/*
+fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
+    .then(data => {
+        for (const [key,value] of Object.entries(data.rates)) {
+            let button = document.createElement( "button" ) // создаем новый элемент <button>
+            button.innerText = key;
+            document.body.append(button);  // добавляем наш элемент в элемент <body>
+
+            button.onclick = () => {
+                let sum = prompt("Введите сумму в выбраной валюте");
+                let result = (sum / value).toFixed(2);
+                alert(`Результат операции ${result} $`)
+            }
+        }
+        console.log(data) //изучите структуру, получаемую с сервера в консоли
+    })
+*/
+
+//7. closure calc 2 +
+//Используя заготовку из предыдущего задания, наполните select-ы тэгами option с названиями валют, используя цикл
+//     document.createElement
+//     innerText для option
+//     from.append или to.append
+//     За пределами цикла назначьте обработчики onchange для элементов select и oninput для элемента input, используя
+//     их id. По этим событиям обновляйте текст в div#rate и div#result
+//
+//     Для чтения текущего значения select используйте свойство value: from.value или to.value
+//Создайте HTML файл с :
+
+fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
+    .then(data => {
+
+        for (let [key,value] of Object.entries(data.rates)) {
+            let currencyFromOption = document.createElement('option');
+            let currencyFromSelect = document.getElementById('from');
+
+            currencyFromOption.innerHTML= key;
+            currencyFromSelect.appendChild(currencyFromOption);
+
+            let currencyToOption = document.createElement('option');
+            let currencyToSelect = document.getElementById('to');
+
+            currencyToOption.innerHTML= key;
+            currencyToSelect.appendChild(currencyToOption);
+
+            document.getElementById('from').addEventListener('change', function (){
+                let rateCurrencyFrom = document.getElementById('rateFrom');
+                rateCurrencyFrom.innerHTML = value;
+            })
+
+            document.getElementById('to').addEventListener('change', function (){
+                let rateCurrencyTo = document.getElementById('rateTo');
+                rateCurrencyTo.innerHTML = value;
+            })
+
+        }
+        const amountInput = document.getElementById('amount')
+        amountInput.type  = 'number'
+        amountInput.value = '100'
+
+    })
+
+
+//8. countries and cities
+//По аналогии с предыдущем заданием, реализуйте интерфейс выбора страны и города:
+//
+// по закрузке данных наполняйте select#countries элементами option с названиями стран;
+// так же назначьте обработчик события onchange в select#countries, который:
+// удаляет старый контент select#cities (достаточно занести в innerHTML или innerText пустую строку)
+// добавляет в select#cities элементы option с городами из выбранной только что страны.
+// Таким образом, при изменении страны будет меняться список городов в select#cities
+/*
+{
+fetch('https://raw.githubusercontent.com/russ666/all-countries-and-cities-json/master/countries.min.json').then(res => res.json())
+    .then(data => {
+
+            for  (let key in data) {
+                let countryOption = document.createElement('option');
+                let countrySelect = document.getElementById('countrySelect');
+
+                countryOption.innerHTML = key;
+                countrySelect.append(countryOption);
+        }
+
+         document.getElementById('countrySelect').addEventListener('change', function () {
+             let cities = data[this.value];
+             //citySelect.length = 0;
+             console.log(cities);
+
+             for (const iterator of cities) {
+                 let cityOption = document.createElement('option');
+                 let citySelect = document.getElementById('citySelect');
+
+                 cityOption.innerHTML = iterator;
+                 citySelect.append(cityOption)
+
+             }
+         })
+     })
+} */
+