# Введение ## Алгоритмы и Блок-схемы Все в программировании структурировано, подчиняется логике, **алгоритмизированно**. Написание программы требует в первую очередь не знания языка, а умения строить логические цепочки, связывать события между собой, т.е. строить алгоритмы. Для построения алгоритмов рекомендуется использовать блок-схемы. Первое время студентам настоятельно рекомендуется строить блок-схемы даже для самых простых задач, далее - только для тех, которые кажутся им сложными. ## Блок-схемы **Блок-схемой** называется графическое представление алгоритма. В блок-схеме шаг или последовательность шагов алгоритма представляется в виде блока, а между блоками устанавливаются связи. Начало и конец алгоритма изображаются скругленными прямоугольниками, обычные действия - прямоугольниками, условия - ромбами, ввод и вывод данных - параллелограммами. Для более подробного ознакомления с блок-схемами читайте [википедию](https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0) на эту тему, и см. правило 2. Для примера построим блок-схему алгоритма написания программы. Рекомендуется использовать Google Drawings (для этого создаем почту gmail, заходим на google drive, new->more->google drawings document) ![Блок-Схема](https://www.evernote.com/l/AUblF_ASXpJAZIZA7sJMeHXT-H0gGGIh0TMB/image.png) ## Код и данные Алгоритм, и, следовательно, программа его реализующая, включает в себя те или иные операции (код) над разнообразными данными. ```javascript 2 + 2 ``` В примере выше данными являются числа 2, кодом - оператор "+" ## REPL **REPL** (от англ. *read-eval-print loop — цикл «чтение — вычисление — вывод»*) — форма организации простой интерактивной среды программирования в рамках средств интерфейса командной строки. [википедия](https://ru.wikipedia.org/wiki/REPL) REPL позволяет выполнять небольшие простые части кода (обычно часть строки-несколько строк) и сразу же видеть результат работы этого кода. Это очень удобно при изучении новых языков программирования, а также для экспериментов и отладки. Разобравшись с чем-то новым с помощью REPL строки кода могут быть добавлены в бОльшую программу. Что происходит в REPL? - Ввод строки на языке программирования. Текст считывается с того или иного поля ввода - Выполнение этого кода, получение результата - Вывод результата или ошибки как ответа пользователю. Вы в **любой** момент можете взять интересующую Вас часть кода и проверить в REPL ## Переменные, типы данных, базовые операции, скобки, выражения ### Переменные **Переменной** называется поименованная область в памяти, где хранятся данные. Переменная является *ярлыком*, *меткой* для определенной структуры данных определенного типа в оперативной памяти. Для того, чтобы создать переменную и записать в нее значение, используется оператор присвоения (=). Переменная может получать свое значение из других переменных с помощью операций над ними или другого кода. В целом можно сказать что код пишется для того, что бы одни данные (*представленные* в коде переменными) преобразовать к другим данным, которые нужны в результате исполнения программы. ### Типы данных **Тип данных (тип)** — множество значений и операций на этих значениях. Все виды данных в языках программирования можно отнести к двум группам: скалярные (простые) типы данных и структурированные (составные) типы данных. #### Скалярные типы данных - Number (число) - Boolean (true или false) #### Составные типы данных - String (строка) - Object (объект) и другие. На этом уроке мы работаем только со скалярным типом данных Number (число) и структурированным типом данных String(строка), представляющим собой последовательность символов. Подробнее структурированные типы данных будут рассмотрены на следующих уроках. Далее представлены переменные различных типов: ```javascript var hands = 2; //количество рук var fingersOnTheHand = 5; //количество пальцев на руках var fingersOnTheFoot = fingersOnTheHand //на ногах - столько же var foots = 2; //количество ног var isEvening = true //сейчас вечер? - истина var isSkyRed = false //небо красное? - ложь var alphabet = "abcdefghijklmnopqrstuvwxyz" //строка с алфавитом var capitalizedAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" //СТРОКА С АЛФАВИТОМ ``` ### Нестрогая динамическая типизация **Javascript - язык со нестрогой динамической типизацией.** **Динамическая типизация** означает, что одну и ту же переменную можно сначала инициализировать строкой, потом числом, потом булевым значением, и так далее. Языки со статической типизацией, как язык C, Java, подобного не позволяют. **Нестрогая типизация** означает, что язык может сам определять и менять тип переменной в зависимости от контекста. К примеру, строка "1" может быть интерпретирована как число 1 в математических операциях, абсурдных для строки. У этого есть плюсы и минусы, однако надо быть аккуратным в использовании таких возможностей языка, из-за вероятности возникновения трудноустраняемых ошибок. ### Простейшие операции ```javascript var totalFingers = foots*fingersOnTheFoot + hands*fingersOnTheHand //сколько всего пальцев на ногах и руках? var numberOfLimbs = totalFingers / fingersOnTheHand //сколько у человека конечностей? var numberOfHands = numberOfLimbs - foots //сколько у человека рук? var numberOfOnes = 753 % 10 //количество единиц в числе 753 var Monday = 0; //программисты считают с нуля var Tuesday = Monday; Tuesday++; //инкремент, т. е. увеличение на 1 var Wednesday = Tuesday; Wednesday += 1; //инкремент по-другому var Saturday = 5; var nextMonthWeekDay = ((31 % 7) + Saturday) % 7 //в какой день недели будет следующее 1е число, //если в этом месяце 31 день и начался этот месяц //в субботу? ``` ### Выражения **Выражением** называется часть кода программы, которая при выполнении подменяется результатом (значением) её вычисления. ```javascript var a = 5 var b = 10 var c = a + b //эти две строки равнозначны c = 15 // var alphabet = "abcdefghijklmnopqrstuvwxyz" //строка с алфавитом var alphabet2 = "abcdefghijklm" + "nopqrstuvwxyz" //строка с алфавитом var alphabet3 = "abcdef" + "ghijklmnopqr" + "stuvwxyz" //строка с алфавитом ``` ### Первая программа. В качестве первой программы мы сделаем конвертер валют, который в цикле спрашивает сумму, конвертирует и выводит сумму в другой валюте. ```javascript var USD2UAH = 27; //курс var usdValue; //объявление переменной для результата do{ //цикл var uahValue = prompt("Введите сумму в грн.",""); //просим пользователя ввести сумму usdValue = uahValue / USD2UAH; //переводим по курсу alert("$ " + usdValue); //выводим сумму в долларах }while(uahValue !== null) //пока пользователь не нажмет отмену ``` ## Домашнее задание №1 1. Нарисовать простейшую блок-схему приготовления чая "из пакетика". 2. Нарисовать блок-схему программы обмена валют 3. Написать отзывы о конвертере: список того, что нравится, что не нравится, что, по вашему мнению, можно улучшить. 4. Подготовить список вопросов обо всем, что было за урок непонятного. 5. Поискать разные онлайн-среды для работы в JS, попробовать их, сравнить с Developer Tools 6. Все списки и блок-схемы оформить в электронном виде и прислать преподавателю на почту или в скайп. ~~7. Ознакомиться с правилами для студентов.~~ 8. Прийти на следующий урок :)