Программирование аркадных игр
и обучение информатикеПостойте-ка, что ещё мы можем сделать?
5.1 Демонстрация Arduino
// Импортировать библиотеку servo #include <Servo.h> // Глобальные переменные long currentPin=4; Servo myservo; // Функция установки void setup() { // Прикрепить объект Servo к контакту 3 myservo.attach(3); // Установить контакты от 1 до 13 на вывод. for( int i=1; i <= 13; i++ ) pinMode(i, OUTPUT); } // Основной цикл программы void loop() { // Цикл от контакта 4 до 13 for( int i=4; i <= 13; i++ ) { // Определить, должна ли гореть лампа if( currentPin == i ) { digitalWrite(i, HIGH); // On } else { digitalWrite(i, LOW); // Off } } // Установить следующую лампу на включение currentPin += 1; // Вернуться в начало if( currentPin > 13 ) { currentPin = 4; } // Получить случайные номера цветов int r=random(0,256); int g=random(0,256); int b=random(0,256); // Установить красный, зелёный и синий оттенки лампы analogWrite(0, r); analogWrite(1, g); analogWrite(2, b); // Считать силовой сенсор на контакте 5 (возможные значения от 0 до 1023) int sensorValue = analogRead(A5); // Записать позицию servo (возможные значения от 0 до 255) myservo.write(sensorValue / 4); // Задержка на 150мс до следующего раза delay(150); }
5.2 Демонстрация макроса Excel
47.2.1 Введение
Рабочий день в деловом мире зачастую включает в себя много повторно выполняемых заданий. Это скучно, дорого, а так же сопровождаемо ошибками. Компьютеры превосходно выполняют такие задачи быстро, дёшево. К тому же, может быть интересно определить, как лучше автоматизировать задание. Ученики учаться программировать в школе, однако зачастую не может справиться с автоматизацией повторяющихся заданий, теряя годы продуктивности.
Хотя Python и является основным языком, на котором концентрируется эта книга, выученные принципы программирования могут быть применены к любому языку. Эта глава показывает, как создать полезную программу, используя Microsoft Excel и язык программирования Visual Basic.
Этот пример на самом деле был взят из одной жизненной ситуации автора. Он создал программу, автоматизирующую его работу в инвесторской фирме. Это дало ему прирост в продуктивности, затем позволивший ему получить больше ответственности внутри компании.
Это видео показывает шаги этого урока:
47.2.2 Урок
- Мы начинаем свою рабочую жизнь как батрак. Вот наши обязанности:
- Надо импортировать данные из интернета.
- Сделать график, основываясь на полученных данных.
- Нужно ежедневно создавать 10 графиков для разных наборов данных.
- Такое может потребоваться в каждой работе. Данными может быть что угодно. В данном случае, возьмём цены акций.
- Отлично, у нас скучная работа. Склонная к ошибкам. Занимающая кучу времени. Особенно если хочется сделать графики хоро выглядящими.
- Но постойте-ка, мы прошли курс по программированию от профессора Кравена. Посмотрим, что можно сделать.
- Создадим Excel программу, рисующую графики из интернет данных.
- Опишем, что требуется от нашей программы:
- Открыть новый файл
- Взять данные из интернета
- Создать график
- Шаги к программированию на Excel:
- Открыть Excel
- Написать в первой ячейке “Этот лист содержит нашу программу”.
- Сохранить как “создатель диаграмм” Убедитесь, чтобы файл был сохранён как Macro workbook!
- Выбрать панель “view”
- Нажать на стрелку под macros, затем выбрать “record macro”
- Назвать макрос CreateChart
- Нельзя использовать пробел, это имя функции
- Нельзя использовать пробел, это имя функции
- Панель File...New...Blank workbook
- Панель Data...From web (Не меняйте размер окна, в Excel покажется ошибка)
- Используйте yahoo: http://finance.yahoo.com/q/hp?s=wfc
- Выберите таблицу, в которой вы заинтересованы, а затем импортируйте её
- Выбрать ячейки, по которым мы хотим сделать графики (ctrl-shift-левая стрелка, затем ctrl-shift-правая стрелка, затем вверх)
- Insert tab...Line Chart
- Перейдите на новый лист
- Правый клик на диаграмме, "select data"
- Выбрать только adjusted close
- Выбрать панель Layout
- Set axis labels
- Remove legend
- Change title
- Остановить запись (Панель view, кнопка macros, stop recording)
- Закрыть только что созданный нами документ. (Но не создатель диаграмм)
- Попробуйте:
- Запустите макрос chart maker
- Отлично, но что здесь общего с тем, что мы проходили ранее?
- Рад, что вы спросили. Вместо того, чтобы проиграть макрос, нажмите edit.
- Заметьте первую линию. Sub - сокращение от subroutine. Что является другим именем функции/метода.
- Посмотрите, Workbooks.Add, функция для создания нового документа! Посмотрите на параметры! Булевые переменные! Объекты!
- Что изменится, если мы поменяем акцию?
- Круто! Что, если бы у нас была переменная, представляющая Тиккер?
- Ок, что, если бы мы могли переделать это в функцию, которой мы передаём тиккер?
- А затем мы создали бы новую функцию, вызывающую эту функцию несколько раз, каждый раз передавая ей новый тиккер
Sub CreateCharts() CreateChart ("WMT") CreateChart ("INTC") CreateChart ("WFC") CreateChart ("BBY") CreateChart ("FDX") End Sub
47.2.3 Исходный код
Sub CreateChart() ' ' CreateChart Macro ' ' Workbooks.Add With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://finance.yahoo.com/q/hp?s=wfc", Destination:=Range("$A$1")) .Name = "hp?s=wfc" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "16" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$G$69") ActiveChart.Location Where:=xlLocationAsNewSheet ActiveChart.ChartArea.Select ActiveChart.Legend.Select Selection.Delete ActiveChart.ChartArea.Select ActiveChart.SeriesCollection(5).Select ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.ChartArea.Select ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = "WFC" Selection.Format.TextFrame2.TextRange.Characters.Text = "WFC" With Selection.Format.TextFrame2.TextRange.Characters(1, 3).ParagraphFormat .TextDirection = msoTextDirectionLeftToRight .Alignment = msoAlignCenter End With With Selection.Format.TextFrame2.TextRange.Characters(1, 3).Font .BaselineOffset = 0 .Bold = msoTrue .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(0, 0, 0) .Fill.Transparency = 0 .Fill.Solid .Size = 18 .Italic = msoFalse .Kerning = 12 .Name = "+mn-lt" .UnderlineStyle = msoNoUnderline .Strike = msoNoStrike End With End Sub
Sub CreateChart(ticker) ' ' CreateChart Macro ' ' Workbooks.Add With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://finance.yahoo.com/q/hp?s=" + ticker, Destination:=Range("$A$1")) .Name = "hp?s=wfc" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "16" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$G$69") ActiveChart.Location Where:=xlLocationAsNewSheet ActiveChart.ChartArea.Select ActiveChart.Legend.Select Selection.Delete ActiveChart.ChartArea.Select ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).Delete ActiveChart.ChartArea.Select ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = ticker Selection.Format.TextFrame2.TextRange.Characters.Text = ticker With Selection.Format.TextFrame2.TextRange.Characters(1, 3).ParagraphFormat .TextDirection = msoTextDirectionLeftToRight .Alignment = msoAlignCenter End With With Selection.Format.TextFrame2.TextRange.Characters(1, 3).Font .BaselineOffset = 0 .Bold = msoTrue .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(0, 0, 0) .Fill.Transparency = 0 .Fill.Solid .Size = 18 .Italic = msoFalse .Kerning = 12 .Name = "+mn-lt" .UnderlineStyle = msoNoUnderline .Strike = msoNoStrike End With End Sub
Sub CreateCharts() CreateChart ("WMT") CreateChart ("INTC") CreateChart ("WFC") CreateChart ("BBY") CreateChart ("FDX") End Sub
47.2.4 Повторение пройденного
Пройдите тест с несколькими вариантами ответов (на англ. яз.).
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin