2018 ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ ПИб-1курс ЛЕК=14шт Л/Р=11шт СРС=72ч 2019 Курс: Алгоритмы на Python https://goo.gl/KLKKPZ папка с презентациями Лекций https://goo.gl/dZxpGg рейтинг и оценки Если в аудитории нет Пайтона, то работаем он-лайн тут: https://trinket.io/features/python3 Программа для ТЕСТИРОВАНИЯ: https://pCoding.ru/download/-TEST-.zip ============== 2 семестр ============== Лекция 2 - Функции 01 def decToBin(dec): bin = "" while dec > 0: bin = str(dec % 2) + bin dec //= 2 return bin dec = int(input("Введите десятичное число - ")) print("dec =", dec, "\nbin =", decToBin(dec)) 02 def binToDec(bin): dec = 0; st = len(bin) for i in range(st): st -= 1 dec += int(bin[i]) * 2 ** st return dec bin = input("Введите двоичное число - ") print("dec =", binToDec(bin), "\nbin =", bin) 03 def recSumma(n): if n==0: return 0 # базис рекурсии else: return recSumma(n-1) + n n = 100 print(recSumma(n)) 04 def decToBin(dec): if dec==0: # базис рекурсии return '' else: # шаг рекурсии return decToBin(dec//2) + str(dec%2) dec = int(input("Введите десятичное число - ")) print("dec =", dec, "\tbin =", decToBin(dec)) ============== 1 семестр ============== Ссылка на плейлист - видео с Лекциями и дистанционными занятиями: https://www.youtube.com/playlist?list=PL2PI4EDhLXozBzc5NdtvFU-Ve6eVi0Kp- Телеграм-канал - тут оперативно: где какие занятия и что делать: https://t.me/joinchat/AAAAAEiRgXeGoC5Qwy7wSg Что нужно иметь на компьютере и как настроить (можно установить заранее, можно вместе со мной на Л/Р 27.11.2018): https://pcoding.ru/pdf/readmeHosting.pdf Пример оформления страницы с решениями лабораторок для Дистанционных занятий: http://t919492h.beget.tech/ Ссылка на документ куда можно вставлять кусочки своего кода: https://goo.gl/qhpyTF а я их увижу и смогу поискать ошибку и прокомментировать Смотрим Плейлист «Азбука программирования» с сайта https://pcoding.ru/ Используем Справочник по JS https://pcoding.ru/pdf/jsManual.pdf Читаем Методичку по Алгоритмизации https://pcoding.ru/pdf/algo.pdf Редактор блок-схем алгоритмов: https://pcoding.ru/res/redaktor.rar Он-лайн редактор блок-схем алгоритмов: https://www.draw.io/ требования по Дисциплине: - посещать лекции, так как без них не понять что и как делать - до лабораторки: дома тренироваться самому по примерам с лекции - на лабораторке: приходить на лабораторки, выполнять задания ==================================================== итоговая оценка за дисциплину складывается по итогам работы на лабораторках и выполнения тестов ЭКЗАМЕН: в форме собеседования с решением практических заданий (только для тех, кого не удовлетворила оценка выше) ==================================================== ТЕМЫ Диалоги, ветвления, циклы, операции, шифрование. Массивы. Файлы. Функции. Модульное программирование Генерация HTML-документа Кодирование цвета Событийное программирование ---------------------------------------------------- ЛЕКЦИИ - Найти нужное: CTRL+"Лекция N" ---------------------------------------------------- Лекция _ Анимация | 20_12_2018 Реакция на событие Убегающая кнопка Принудительное движение Снежинки Миньон Спиннер Солнечная Система Лекция _ Программирование микроконтроллеров 0) API (англ. application programming interface) или программный интерфейс приложения - это описание способов (набор классов, функций, структур, констант), которыми одна компьютерная программа может взаимодействовать с другой программой. API определяет функциональность, которую предоставляет модуль/ библиотека. API позволяет абстрагироваться от того, как именно эта функциональность реализована. 1) Функции функции как выражения Объекты-функции Анонимные функции Функция как аргумент 2) Датчики Температуры Компас Освещённости Наклона Встряхивания Индикаторы (позиция и яркость) 3) Примеры программ 1. Счётчик 2. Заполнение по строчное 3. С переменной яркостью ------------------------------------------------------ let cls = function () { basic.clearScreen(); } let cls_ = () => basic.clearScreen(); input.onButtonPressed(Button.B, cls_); input.onButtonPressed(Button.A, () => basic.showNumber(input.temperature()) ) basic.showString("Hello!"); function print() { return "Hello Word!"; } let print_ = function () { return "Hello Word!"; } let print__ = () => "Hello Word!"; basic.showString(print__()); ------------------------------------------------------ Температура input.onButtonPressed(Button.A, () => { basic.showNumber(input.temperature()) }) ------------------------------------------------------ let max = 25 basic.forever(() => { led.plotBarGraph( input.temperature(), max ); basic.pause(500); }) ------------------------------------------------------ Освещённость basic.showNumber(input.lightLevel()); Светодиоды led.plotAll(); ------------------------------------------------------ let num = 0; let step = 10; let brightness = 0; let size = 5; input.onButtonPressed(Button.B, () => basic.clearScreen()); input.onButtonPressed(Button.A, function () { while (num < size ** 2) { let posX = Math.floor(num / size); let posY = num % size; brightness = ++num * step; led.plotBrightness(posY, posX, brightness); basic.pause(200); } }) ------------------------------------------------------ let pos = 0; let size = 5; input.onButtonPressed(Button.A, function () { for (let row = 0; row < size; row++) { for (let col = 0; col < size; col++) { led.plot(col, row); basic.pause(200); } } }); input.onButtonPressed(Button.B, function () { basic.clearScreen(); }); ------------------------------------------------------ let f_Reset = function () { basic.clearScreen(); } let reset = () => basic.clearScreen(); input.onButtonPressed(Button.A, function () { basic.showLeds(` . # . # . # . # . # # . . . # . # . # . . . # . . `) }) input.onButtonPressed(Button.B, reset) ------------------------------------------------------ let smb = IconNames.Yes; let smbs = [IconNames.Yes, IconNames.No, IconNames.Snake]; basic.forever(function () { let pos = Math.randomRange(0, 3); smb = smbs[pos]; basic.showIcon(smb); basic.pause(1000); }) ------------------------------------------------------ let f_Reset = function () { basic.clearScreen(); } let reset = () => basic.clearScreen(); let print_H = () => basic.showLeds(`. # . # .\n# . # . #\n# . . . #\n. # . # .\n. . # . .\n`); input.onGesture(Gesture.Shake, function () { basic.showIcon(IconNames.Sad) }) input.onButtonPressed(Button.A, print_H) input.onButtonPressed(Button.B, reset) ------------------------------------------------------ компас let a = 0 a = input.compassHeading() basic.showNumber(a) input.onButtonPressed(Button.A, () => { a = input.compassHeading() basic.showNumber(a) }) input.onButtonPressed(Button.B, () => { basic.clearScreen() }) ------------------------------------------------------ наклон basic.forever(function () { let arrow = 0; let x = input.acceleration(Dimension.X); let y = input.acceleration(Dimension.Y); arrow = x>0? 2: 6; basic.showArrow(arrow); basic.pause(100); }) ------------------------------------------------------ let posY = 2; let posX = 2 let stepX = 0; let stepY = 0; function setNewPos() { led.unplot(posX, posY); posX += stepX; posY += stepY; led.plot(posX, posY); } function reset() { led.unplot(posX, posY); posX = 2; posY = 2; led.plot(posX, posY); } input.onButtonPressed(Button.AB, function () { reset(); }) input.onButtonPressed(Button.A, function () { stepX = -1; stepY = 0; setNewPos(); }) input.onButtonPressed(Button.B, function () { stepX = +1; stepY = 0; setNewPos(); }) basic.forever(function () { let x = input.acceleration(Dimension.X) let y = input.acceleration(Dimension.Y) if (y < 0 - 199) { stepX = 0; stepY = -1; setNewPos(); } if (y > 0 + 199) { stepX = 0; stepY = +1; setNewPos(); } basic.pause(600); }) ------------------------------------------------------ Лекция _ Событийное программирование 1) Как это работает, какие события? 2) Способы обработки событий. Где размещать код... 3) Пример программы. Способ 1 - обработчик на уровне html
0
Способ 2 - обработчик на уровне dom
0
Способ 3 - слушатель событий
0
ПРИМЕР 1
вверх
0
вниз
- prim.js - var count = 0; var elm = document.getElementById("txt"); function reset() { count = 0; elm.innerHTML = count; } function next(src) { let step = src.target.innerHTML=="вверх"? +1: -1; count += step; elm.innerHTML = count; } var btnTxt = document.getElementById("txt"); var btnUp = document.getElementById("up"); var btnDown = document.getElementById("down"); btnTxt.addEventListener('click', reset, false); btnUp.addEventListener('mouseup', next, false); btnDown.addEventListener('mousedown', next, false); Лекция 4 Многоальтернативное ветвление 0) примеры из урока 04: https://pcoding.ru/up/up.php 1) арифметические операции & | ^ a = 5, b = 6; result = a & b; console.log(result); a = 5, b = 6; result = a | b; console.log(result); a = 5, b = 6; result = a ^ b; console.log(result); a = 6; b = 2; result = a << b; console.log(result); // внимание! console.log( ~~12.345 ); // 12 - округляет console.log( 3 * 14.5 ^ 0); // 43 - округляет a = 5; b = 6; console.log(3==a^b); // 6 a = 5; b = 6; console.log(3==(a^b)); // true 2) таблица символов - кодировки str = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ'; //for (let i=0; i"); //} // for (let i=0; i=1040&&pos<=1071) return String.fromCharCode(pos+32); else return smb; } console.log(str); result = ""; for (i=0; i 5 -05- console.log( mail ); decode = mail ^ k; console.log( decode ); x = 3; // 00000000000000000000000000011 y = ~x; // 11111111111111111111111111100 console.log( y ); 3) алгоритм шифрования XOR num = 1984, key = 9876; result = num ^ key; console.log(num, "- это исходное послание"); console.log(result, "- это зашифрованное"); console.log(result ^ key, "- расшифрованное"); strInput = 'Мама мыла раму'; strOutput = ""; for (let i=0, len=strInput.length; i10->2 5) презентация со слайда 38: clck.ru/9pUsG алгоритмы - вычисление значения Пи методом Лебница: Pi/4 = 1/1 - 1/3 + 1/5 - 1/7 + ... методом Монте-Карло - вычисление корня числа методом Герона Лекция 6 Массивы // // a b // + - * / ... // Поменять значения двух переменных не используя третью arr = [1, 2, 3, 4, 5]; for (index = 0; index < arr.length; index++) { console.log(arr[index]); } console.log(index); arr = [7, 2, 0, 4, -66]; str = ""; for (index = arr.length-1; index>=0; index--) { str += " "+arr[index]; } console.log(str); arr = [701, 2, 0, 4, 6, Math.PI]; // undefined avg = 0; len = arr.length; i = 0; while (i { // этот метод мы не разбирали на лекции if (arr2.indexOf(elm)<0) { arr3.push(elm) } }); for (elm of arr2) { // этот метод мы разбирали на лекции if (arr1.indexOf(elm)<0) { arr3.push(elm); } } fs.writeFileSync("output.txt", arr3.join(' ')); ЛЕКЦИЯ 8 - Генерация html-документа - 22/11/2018 Таблица
-это стили- body { background-color: antiquewhite; } table { font-family: 'Courier New'; font-size: 24px; margin: auto; } td { width: 36px; text-align: center; } -это модуль с функциями- function getTable(count) { str = ""; str += ""; for (row=1; row<=count; row++) { str += "" for (col=1; col<=count; col++) { str += ""; } str += ""; } str += "
" + String(row*col) + "
"; return str; } function getColor(row) { return row%2!=0? "yellow": "white"; } ЛЕКЦИЯ 9 - Генерация html-документа - 29/11/2018 Как сгенерировать пустой HTML-документ. Задача: Сгенерировать таблицу умножения. Данные вводятся: из консоли, из диалога. Анализ данных "на число". Значение по умолчанию. Модуль с функцией генерации таблицы. Вывод в файл *.html Архитектура консольного приложения: Разбить программу на функции/модули. -0.js- fs = require("fs"); gen = require("./genHtml_m"); read = require("readline-sync"); function generateHtml(count) { str = ''; // тут будет весь html-документ str += 'Таблица умножения'; str += ''; str += gen.getTable(count); // тут генерация таблицы str += ''; return str; } console.log("Введите размерность таблицы умножения"); count = read.question(); if (isNaN(count)) { count = 5; // значение по умолчанию } else { count = +count; } // arr = process.argv; count = arr[2]; // if (isNaN(count)) { // count = 5; // значение по умолчанию // } // else { // count = +count; // } fs.writeFileSync("genHtml.html", generateHtml(count)); console.clear(); console.log("Генерация html-документа завершена..."); console.log("Таблица умножения размерностью -", count); ЛЕКЦИЯ 10 - Генерация html-документа из данных файла. ЛЕКЦИЯ 11 - Объекты HTML, событийное программирование textarea Вставить в задачи про файлы транслитерацию mama prived medved / ш <--> sharik ---------------------------------------------------- ЛАБОРАТОРКИ ---------------------------------------------------- 19/12/2018 примеры: ЛР_08 console.clear(); let array = [33, 55, 66]; str = ""; for (let i = 0; i < array.length; i++) { str += array[i] + "\t"; } console.log(str); console.clear(); let array = [-233, -55, -66]; max = array[0]; for (let i = 0; i < array.length; i++) { if (array[i] > max) max = array[i]; } console.log(max); console.clear(); let arr = [ [1, 20, 30], [4, 5, 60], [7, 8, 9] ]; let add = 0; for (let row = 0; row < arr.length; row++) { for (let col = 0; col < arr[row].length; col++) { if (row function getRnd(min, max) { return min+Math.floor(Math.random()*(max-min+1)); } document.write( getRnd(10,20) ); /* 5. Пользователь задаёт диапазон – это два целых числа от Min до Max. Программа генерирует случайное целое число в заданном диапазоне. */ // установить пакет: npm install readline-sync -S rdln = require('readline-sync'); console.clear(); console.log("- введите целое число"); answer = Number(rdln.question()); result = answer%2==0? "чётное": "нечётное"; console.log("это число " + result);



ЛР_02 Циклы. min = 20; max = 30; min += min%2==0? 1: 0; str = ""; for (i=min; i<=max; i+=2) { str += String(i) + " "; } console.log(str); num = 100; sum = 0; i = 0; do { sum += ++i; } while (i bin = prompt("Введите двоичное число"); // parseInt - переведёт число в 10-ую СС alert( parseInt(bin, 2) ); dec = 0; len = bin.length; for (i=0; i"); result = 0; while (dec>0) { result += String(dec%2); // вот тут БАГ dec = Math.floor(dec/2); } document.write(result); // остаток = dec % 2; // остаток от целочисленного деления // целое = Math.floor(dec/2); // целочисленное деление // str = String(num); // привести число к строке // num = Number(str); // привести строку к числу ---------------------------------------------------- ЛР_03 Техническое задание: ----------------------------------------------------