10 класс
Компьютерное моделирование технических систем
Урок: Знакомство с платформой Engee

14. Знакомство с российской инженерной платформой Engee

📅 13.01 ⏱ 1 академический час (40 минут)

📋 План занятия

  1. 00:20 Введение в модельно-ориентированное проектирование
  2. 20:40 Обзор платформы Engee: возможности и интерфейс

🎯 Основной материал

Что такое Engee?

Engee — это российская инженерная платформа для разработки сложных технических систем с применением методологии модельно-ориентированного проектирования. Это единственная российская мультиязычная среда IDE для разработки инженерных скриптов, программ и приложений.

Ключевые возможности платформы:

  • Математические вычисления: Инженерные исследования, анализ данных, визуализация
  • Динамическое моделирование: Создание и отладка системных моделей с помощью блок-схем
  • 1D-моделирование: Физическое моделирование электроники, механики, гидравлики
  • Генерация кода: Автоматическая генерация читаемого Си-кода для встраиваемых систем
  • Полунатурное тестирование: Интеграция с аппаратными комплексами реального времени
Перейти на Engee →

Практическое задание на уроке:

Задача: Ознакомиться с веб-интерфейсом платформы Engee и ее основными возможностями

Цель: Понять структуру платформы, основные инструменты и принцип работы

Инструкция:

  1. Перейдите по ссылке start.engee.com
  2. Изучите разделы интерфейса: файловый браузер, командную строку, редактор скриптов
  3. Создайте простой математический скрипт (например, вычисление площади круга)
  4. Попробуйте построить график функции
Пример простого скрипта:
// Вычисление площади круга
radius = 5;
area = 3.14 * radius^2;
disp("Площадь круга: " + area);

📝 Домашнее задание

ДЗ #1 📅 Срок сдачи: 20 января 2025 🏆 Макс. балл: 5 баллов

Регистрация и первое знакомство с Engee

Цель задания: Получить практический доступ к платформе, изучить базовый функционал и создать первый проект

Что нужно сделать:

  1. Зарегистрироваться на платформе Engee по адресу start.engee.com

🔍 Дополнительно

❓ Частые вопросы по теме

Вопрос 1: Чем Engee отличается от MATLAB/Simulink?

Engee — это российский аналог с облачной архитектурой, не требующий установки. Поддерживает мультиязычность (Julia, Python, MATLAB-синтаксис, Fortran, C/C++), имеет богатую библиотеку российских компонентов и интеграцию с отечественными процессорами (Байкал, Эльбрус).

Вопрос 2: Нужно ли устанавливать Engee на компьютер?

Нет, Engee — это облачная платформа, которая работает прямо в браузере. Достаточно иметь доступ в интернет и зарегистрированный аккаунт.

Вопрос 3: Какие браузеры поддерживает Engee?

Engee поддерживает современные браузеры: Chrome, Firefox, Edge, Safari. Рекомендуется использовать последние версии.

Урок 15: Командная строка и редактор скриптов в Engee

Работа с командной строкой и редактором скриптов в Engee

📅 20.01 ⏱ 1 академический час (40 минут)

📋 План занятия

  1. 00:05 Организационный момент. Постановка целей урока
  2. 05:10 Работа с командной строкой: ввод команд, создание переменных
  3. 10:30 Практическая работа: выполнение упражнений из материалов
  4. 30:40 Подведение итогов. Домашнее задание

🎯 Практическая работа на уроке

Часть 1: Работа с командной строкой

На этом уроке вы будете выполнять задания из документа "01 - Окно команд.pdf":

Задачи для выполнения:

  1. Откройте командную строку в Engee (кнопка на левой панели)
  2. Выполните умножение чисел 3 и 5: 3*5
  3. Создайте переменную m и присвойте ей результат: m = 3*5
  4. Измените значение переменной: m = m + 1
  5. Создайте переменную y = m/2
  6. Создайте переменную с подавлением вывода: k = 8 - 2;
  7. Используйте стрелку вверх для повторения команд
  8. Создайте переменную A = -2 (обратите внимание на регистр)
  9. Вычислите среднее: meanAa = (a+A)/2
  10. Очистите командную строку: Ctrl+L
>> 3*5 15 >> m = 3*5 15 >> m = m + 1 16 >> y = m/2 8.0

Часть 2: Работа в редакторе скриптов

Теперь перейдите к выполнению заданий из документа "02 - Редактор скриптов.pdf":

Задачи для выполнения:

  1. Откройте редактор скриптов (кнопка на левой панели)
  2. Создайте новый скрипт с именем "Мой_первый_скрипт"
  3. В первой ячейке введите: r = 3
  4. Во второй ячейке вычислите площадь круга: x = pi*r^2
  5. Измените значение r = 0.5 и пересчитайте площадь
  6. Добавьте текстовую ячейку с заголовком "Расчет длины окружности"
  7. В следующей ячейке вычислите длину окружности: y = 2*pi*r
  8. Запустите все ячейки по очереди, наблюдая результаты под каждой
# Текстовая ячейка Расчет геометрических параметров круга # Кодовая ячейка 1 r = 3 # Кодовая ячейка 2 x = pi*r^2 # Кодовая ячейка 3 y = 2*pi*r

Дополнительные задания для быстрых учащихся:

  1. Создайте переменную с греческой буквой: введите \alpha и нажмите Tab
  2. Вычислите синус угла: sin(pi/4)
  3. Работайте с комплексными числами: sqrt(-9+0im)
  4. Сохраните переменные в файл (если успеете освоить JLD2)

📝 Домашнее задание

ДЗ #2 📅 Срок сдачи: 27 января 2026 🏆 Макс. балл: 5 баллов

Создание учебного скрипта в Engee

Цель задания: Закрепить навыки работы с переменными, операторами и редактором скриптов

Задание 1: Базовые вычисления

  1. Создайте новый скрипт с именем "Домашняя_работа_1"
  2. В первой текстовой ячейке напишите "Часть 1: Арифметические операции"
  3. Создайте переменные: a = 12, b = 7, c = 3.5
  4. Вычислите и выведите: сумму, разность, произведение и частное a и b
  5. Вычислите: (a + b) * c / 2

Задание 2: Работа с математическими функциями

  1. Добавьте текстовую ячейку "Часть 2: Математические функции"
  2. Вычислите квадратный корень из a: sqrt(a)
  3. Вычислите модуль разности: abs(a - 15)
  4. Вычислите синус угла 45 градусов (в радианах: pi/4)

Задание 3: Создание отчета

  1. Добавьте текстовую ячейку в конце скрипта с заголовком "Выводы"
  2. Напишите 2-3 предложения о том, что вы узнали на уроке
  3. Сохраните скрипт

Требования к сдаче:

  • Все ячейки должны быть выполнены (иметь вывод под собой)
  • Скрипт должен содержать как текстовые, так и кодовые ячейки

🔍 Полезная информация

❓ Частые ошибки начинающих

Забыли поставить точку с запятой для подавления вывода

Команда x = 5+1 покажет результат 6. Команда x = 5+1; выполнит вычисление, но не покажет результат.

Путаница с регистром переменных

В Julia a и A — разные переменные. Следите за регистром при создании и использовании переменных.

Не обновляются связанные переменные

Если вы изменили переменную m, то y = m/2 не обновится автоматически. Нужно выполнить команду заново.

📱 Горячие клавиши Engee

  • Enter — выполнить команду/ячейку
  • Ctrl+Enter — выполнить ячейку и перейти к следующей
  • / — навигация по истории команд
  • Ctrl+L — очистить командную строку
  • Tab — автодополнение (например, для греческих букв)
Урок 16: Векторы и матрицы. Основы работы с массивами

Занятие 16: Векторы и матрицы. Основы работы с массивами

📅 27 января 2026 ⏱ 1 академический час (40 минут) Занятие 16

📋 План занятия

  1. 00:05 Организационный момент. Цель урока: создание массивов для моделирования робота
  2. 05:15 Теория: что такое векторы и матрицы в Julia. Создание массивов вручную и через диапазоны
  3. 15:30 Практика: выполнение упражнений из блока "03 - Векторы и матрицы.pdf"
  4. 25:40 Применение: создание массивов данных для модели робота (шаги, скорости)
  5. 35:40 Итоги. Домашнее задание: создание массивов для моторов робота

🎯 Практическая работа на уроке

Часть 1: Теория векторов и матриц (по материалам PDF)

Сегодня изучаем блок "03 - Векторы и матрицы.pdf". Массивы - это коллекции чисел, которые позволяют работать с несколькими значениями одновременно. В моделировании робота массивы будут хранить:

  • Координаты положения робота
  • Скорости на разных участках траектории
  • Показания датчиков во времени
  • Управляющие сигналы для моторов

Задания из учебного блока "03 - Векторы и матрицы.pdf"

Задача 1: Создание простых переменных

  1. Создайте переменную x со значением 4: x = 4
  2. Создайте массив y с двумя элементами 7 и 9: y = [7 9]
  3. Создайте вектор z с элементами 7 и 9 через точку с запятой: z = [7; 9]
  4. Создайте вектор a с тремя числами: a = [3, 10, 5]

Задача 2: Создание матриц

  1. Создайте матрицу 2×3: b = [3 4 5; 6 7 8]
  2. Создайте матрицу из задачи 5 PDF: c = [5 6 7; 8 9 10]
  3. Попробуйте разные разделители: пробелы, запятые, точки с запятой
# Примеры создания массивов # Вектор-строка (1×n матрица) vec_row = [1 2 3 4 5] # Вектор-столбец (n×1 матрица) vec_col = [1; 2; 3; 4; 5] # Матрица 2×3 mat = [1 2 3; 4 5 6] # Массив с вычислениями внутри calc_array = [2+2, 3*3, sqrt(16)]

Часть 2: Создание данных для модели робота

Используем массивы для создания "цифрового двойника" - набора данных, описывающих поведение робота:

Создание базовых данных робота:

  1. Вектор времени (шагов симуляции): time_steps = [0, 1, 2, 3, 4, 5]
  2. Вектор скоростей робота: speed = [0.0, 0.5, 1.0, 1.0, 0.5, 0.0]
  3. Вектор номеров шагов через оператор диапазона: step_numbers = [1:6;]
  4. Проверьте созданные массивы командой display()
# Создание данных для модели робота time_steps = [0, 1, 2, 3, 4, 5] speed = [0.0, 0.5, 1.0, 1.0, 0.5, 0.0] # Альтернативный способ через диапазон step_numbers = [1:6;] # Обратите внимание на точку с запятой в конце! # Проверка println("Время шагов: ", time_steps) println("Скорости: ", speed) println("Номера шагов: ", step_numbers)

Задания с диапазонами (оператор :)

Оператор : создает диапазон чисел. Для преобразования в вектор нужно добавить точку с запятой внутри квадратных скобок.

Практические задания:

  1. Создайте диапазон от 1 до 10: 1:10
  2. Преобразуйте в вектор: [1:10;]
  3. Создайте диапазон с шагом 0.5: 1:0.5:5
  4. Преобразуйте в вектор: [1:0.5:5;]
  5. Создайте вектор от 3 до 13 с шагом 2: [3:2:13;]

📝 Домашнее задание

ДЗ #16 📅 Срок сдачи: 3 февраля 2026 🏆 Макс. балл: 5 баллов

Создание массивов данных для модели робота

Цель: Научиться создавать и использовать массивы для хранения данных о роботе.

Задание 1: Создание базовых массивов

  1. Создайте новый скрипт в Engee с именем "Занятие16_Массивы"
  2. В первой текстовой ячейке напишите "Создание данных для модели робота"
  3. Создайте вектор wheel_left из 6 элементов: [30, 35, 40, 40, 35, 30]
  4. Создайте вектор wheel_right с такими же значениями
  5. Создайте вектор step_numbers от 1 до 6 с помощью оператора :

Задание 2: Анализ созданных данных

  1. Выведите все три созданных массива на экран
  2. Определите размер каждого массива с помощью функции size()
  3. Выведите 3-й элемент каждого массива
  4. Создайте текстовую ячейку с объяснением: "Эти массивы будут хранить мощность моторов робота на каждом шаге симуляции"

Задание 3: Эксперименты с диапазонами

  1. Создайте диапазон от 0 до 10 с шагом 2
  2. Преобразуйте его в вектор
  3. Создайте вектор от 0.1 до 1.0 с шагом 0.1
  4. Объясните в текстовой ячейке, как эти диапазоны могут пригодиться в моделировании

Требования к сдаче:

  • Все ячейки должны быть выполнены (иметь вывод)
  • Скрипт должен содержать не менее 2 текстовых ячеек с комментариями
  • Должны быть созданы все указанные массивы

🔍 Полезная информация

❓ Частые ошибки с массивами

Разница между [1:5] и [1:5;]

[1:5] создает массив из одного элемента - диапазона. [1:5;] создает вектор из 5 чисел. Точка с запятой внутри скобок "раскрывает" диапазон.

Пробелы vs запятые в квадратных скобках

В Julia пробелы создают вектор-строку (матрицу 1×n), запятые или точки с запятой создают вектор-столбец. Для начала обучения это не критично, но важно знать.

Индексация начинается с 1

В отличие от многих языков программирования, в Julia индексы массивов начинаются с 1, а не с 0. arr[1] - первый элемент.

💡 Применение в проекте

Сегодня мы создали основу для модели робота:

  • time_steps - моменты времени симуляции
  • speed - скорость робота в каждый момент
  • wheel_left/right - мощность моторов

На следующих уроках мы научимся изменять эти массивы, анализировать их и визуализировать данные.

Урок 17: Индексы и модификация массивов

Занятие 17: Индексы и модификация массивов

📅 3 февраля 2026 ⏱ 1 академический час (40 минут) Занятие 17

📋 План занятия

  1. 00:05 Проверка ДЗ 16. Разбор ошибок с массивами
  2. 05:15 Теория: индексация массивов, срезы, ключевое слово end
  3. 15:30 Практика: выполнение упражнений из "04 - Индексы и модификация массивов.pdf"
  4. 25:40 Применение: изменение данных робота (мощности моторов, скорость)
  5. 35:40 Итоги. Домашнее задание: модификация данных для проекта

🎯 Практическая работа на уроке

Часть 1: Основы индексации массивов (по материалам PDF)

Изучаем блок "04 - Индексы и модификация массивов.pdf". Индексация - это механизм доступа к элементам массива по их положению (индексу). В Julia индексы начинаются с 1 (не с 0 как в некоторых языках).

# Основные правила индексации в Julia: # 1. Индексы начинаются с 1 # 2. arr[индекс] - доступ к элементу # 3. arr[начало:конец] - срез (диапазон) # 4. arr[end] - последний элемент # 5. arr[end-1] - предпоследний элемент

Задания из учебного блока "04 - Индексы и модификация массивов.pdf"

Задача 1: Базовое извлечение элементов

Используем массив data из PDF (представлен ниже):

# Создаем тестовую матрицу как в PDF data = [3.0 0.53 4.0753 3.517; 18.0 1.78 6.6678 2.1328; 19.0 0.86 1.5177 3.6852; 20.0 1.6 3.6375 8.5389; 21.0 3.0 4.7243 10.157; 23.0 6.11 9.0698 2.8739; 38.0 2.54 5.3002 4.4508]
  1. Извлеките элемент из 6-й строки, 3-го столбца: data[6, 3]
  2. Извлеките элемент из последней строки, 3-го столбца: data[end, 3]
  3. Извлеките элемент из предпоследней строки, 3-го столбца: data[end-1, 3]
  4. Извлеките весь 2-й столбец: data[:, 2]
  5. Извлеките последние два столбца: data[:, 3:4] или data[:, end-1:end]

Задача 2: Работа с векторами

  1. Создайте вектор: density = data[:, 2]
  2. Извлеките 6-й элемент: density[6]
  3. Извлеките элементы со 2-го по 5-й: density[2:5]
  4. Извлеките 1-й, 3-й и 6-й элементы: density[[1, 3, 6]]

Часть 2: Модификация данных робота

Используем массивы из прошлого урока и учимся их изменять:

Работа с массивами робота:

# Воссоздаем массивы из прошлого урока wheel_left = [30, 35, 40, 40, 35, 30] wheel_right = [30, 35, 40, 40, 35, 30] speed = [0.0, 0.5, 1.0, 1.0, 0.5, 0.0]
  1. Увеличьте мощность левого мотора на 2-м шаге на 5: wheel_left[2] = wheel_left[2] + 5
  2. Уменьшите скорость на последнем шаге: speed[end] = 0.2
  3. Измените мощность правого мотора на 4-м шаге: wheel_right[4] = 45
  4. Создайте срез первых трех значений скорости: first_three_speed = speed[1:3]
  5. Создайте массив только четных шагов (2,4,6): even_steps = speed[2:2:end]

Практика с ключевым словом end:

  1. Предпоследний элемент: wheel_left[end-1]
  2. Последние три элемента: speed[end-2:end]
  3. Все кроме первого: wheel_right[2:end]

Дополнительные задания (для быстрых учащихся)

Задание 1: Замена значений в матрице

# Создаем тестовую матрицу для робота robot_data = [1 2 3; 4 5 6; 7 8 9]
  1. Замените элемент в 1-й строке, 3-м столбце на 10: robot_data[1, 3] = 10
  2. Замените всю 2-ю строку: robot_data[2, :] = [10, 20, 30]
  3. Замените 3-й столбец на 100: robot_data[:, 3] .= 100

Задание 2: Копирование данных

  1. Скопируйте 2-й столбец в 1-й: robot_data[:, 1] = robot_data[:, 2]
  2. Создайте копию массива: robot_copy = copy(robot_data)

📝 Домашнее задание

ДЗ #17 📅 Срок сдачи: 10 февраля 2026 🏆 Макс. балл: 5 баллов

Модификация данных робота

Цель: Научиться извлекать и изменять элементы массивов для настройки модели робота.

Задание 1: Работа с массивами из прошлого ДЗ

  1. Откройте скрипт из ДЗ 16 или создайте новый "Занятие17_Индексация"
  2. Воссоздайте массивы: wheel_left, wheel_right, step_numbers
  3. Измените значения в массиве wheel_left:
    • Увеличьте значение на 2-м шаге на 5 единиц
    • Увеличьте значение на 4-м шаге на 5 единиц
    • Уменьшите значение на последнем шаге на 10 единиц

Задание 2: Создание новых массивов через срезы

  1. Создайте новый массив first_three_steps, содержащий только первые три элемента из wheel_left
  2. Создайте массив even_power, содержащий только элементы на четных позициях (2,4,6) из wheel_right
  3. Создайте массив odd_power, содержащий только элементы на нечетных позициях (1,3,5)

Задание 3: Анализ с использованием end

  1. Выведите последний элемент каждого созданного массива
  2. Выведите предпоследний элемент массива wheel_left
  3. Выведите последние два элемента массива wheel_right
  4. Создайте текстовую ячейку с объяснением: "Эти операции позволяют нам анализировать и корректировать поведение робота в конце траектории"

Требования к сдаче:

  • Все операции должны быть выполнены в скрипте Engee
  • Должны быть созданы все указанные массивы
  • Вывод результатов каждой операции должен быть виден
  • Добавьте минимум 2 текстовые ячейки с комментариями

🔍 Полезная информация

❓ Типичные ошибки при индексации

Индекс вне диапазона (BoundsError)

Если массив имеет 6 элементов, а вы пытаетесь обратиться к arr[7], получите ошибку. Всегда проверяйте размер массива: size(arr) или length(arr).

Забыли про end при работе с срезами

Для получения всех элементов кроме первого нужно arr[2:end], а не arr[2:] (это вызовет ошибку).

Путаница с индексацией матриц

Для матриц нужны два индекса: matrix[строка, столбец]. matrix[1] вернет первый элемент при линейной индексации (по столбцам).

💡 Применение в проекте робота

Сегодня мы научились:

  • Извлекать данные - получать мощность моторов на конкретном шаге
  • Изменять параметры - корректировать поведение робота
  • Работать со срезами - анализировать отдельные участки траектории

Это позволяет нам "настраивать" робота, изменяя его параметры в нужные моменты времени.

Урок 18: Векторы и матрицы. Основы работы с массивами

Занятие 18: Операции с массивами. Анализ данных

📅 10 февраля 2026 ⏱ 1 академический час (40 минут) Занятие 18

📋 План занятия

  1. 00:05 Проверка ДЗ 17. Разбор модификации массивов
  2. 05:15 Теория: поэлементные операции, функции sum, maximum, mean
  3. 15:30 Практика: выполнение упражнений из "05 - Операции с массивами.pdf"
  4. 25:40 Применение: анализ данных робота (средняя скорость, разница моторов)
  5. 35:40 Итоги. Домашнее задание: расчет статистики для проекта

🎯 Практическая работа на уроке

Часть 1: Поэлементные операции (по материалам PDF)

Изучаем блок "05 - Операции с массивами.pdf". В Julia есть два типа операций с массивами:

  • Поэлементные операции (с точкой): .+, .-, .*, ./ - применяются к каждому элементу
  • Матричные операции (без точки): * - матричное умножение
  • Скалярные операции: массив + число - операция применяется ко всем элементам

Задания из учебного блока "05 - Операции с массивами.pdf"

Задача 1: Базовые операции с массивами

# Создаем тестовые массивы x = [1, 2, 3] y = [4, 5, 6]
  1. Прибавьте 2 к каждому элементу x: x .+ 2 или x .+ 2
  2. Сложите массивы x и y: x + y (обычный + работает для сложения массивов одинакового размера)
  3. Умножьте каждый элемент x на 3: x * 3 или x .* 3
  4. Разделите каждый элемент y на 2: y / 2 или y ./ 2
  5. Поэлементное умножение x и y: x .* y

Задача 2: Статистические функции

using Statistics # Не забудьте подключить библиотеку!
  1. Найдите максимальное значение: maximum(x)
  2. Найдите минимальное значение: minimum(x)
  3. Найдите среднее значение: mean(x)
  4. Найдите сумму всех элементов: sum(x)
  5. Округлите элементы: round.(x)

Часть 2: Анализ данных робота

Применяем операции к данным нашего робота:

Анализ параметров движения:

# Воссоздаем данные робота wheel_left = [30, 35, 40, 40, 35, 30] wheel_right = [30, 35, 40, 40, 35, 30] speed = [0.0, 0.5, 1.0, 1.0, 0.5, 0.0]

Задание 1: Расчет разницы моторов

  1. Вычислите разницу мощностей: diff_power = wheel_right .- wheel_left
  2. Найдите максимальную разницу: maximum(abs.(diff_power))
  3. Определите, на каком шаге разница наибольшая

Задание 2: Расчет суммарных параметров

  1. Вычислите суммарную мощность: total_power = wheel_left .+ wheel_right
  2. Найдите среднюю мощность: mean(total_power)
  3. Найдите максимальную суммарную мощность

Задание 3: Анализ скорости

  1. Вычислите среднюю скорость: mean(speed)
  2. Найдите максимальную скорость: maximum(speed)
  3. Вычислите, сколько времени скорость была больше 0.7: sum(speed .> 0.7)

Дополнительные задания (для быстрых учащихся)

Задание 1: Комбинированные операции

# Данные сенсоров робота (0-белое, 1-черное) sensor_data = [0, 0, 1, 1, 1, 0]
  1. Создайте маску для черного: on_black = sensor_data .== 1
  2. Посчитайте время на черной линии: sum(on_black)
  3. Найдите индексы, где был черный: findall(on_black)

Задание 2: Нормализация данных

  1. Нормализуйте скорость к диапазону 0-1: normalized_speed = speed ./ maximum(speed)
  2. Масштабируйте мощность к диапазону 0-100

📝 Домашнее задание

ДЗ #18 📅 Срок сдачи: 17 февраля 2026 🏆 Макс. балл: 5 баллов

Анализ данных робота с помощью операций с массивами

Цель: Научиться анализировать данные робота с помощью статистических функций и поэлементных операций.

Задание 1: Расчет основных параметров

  1. Создайте новый скрипт "Занятие18_Операции" или продолжите предыдущий
  2. Воссоздайте массивы: wheel_left, wheel_right, speed
  3. Вычислите разницу мощностей моторов на каждом шаге: diff_power = wheel_right .- wheel_left
  4. Вычислите суммарную мощность моторов на каждом шаге: total_power = wheel_left .+ wheel_right
  5. Найдите максимальное значение в массиве total_power

Задание 2: Статистический анализ

  1. Вычислите среднюю скорость робота
  2. Найдите максимальную скорость и шаг, на котором она была достигнута
  3. Посчитайте, сколько шагов скорость была больше 0.5
  4. Вычислите среднюю суммарную мощность моторов

Задание 3: Анализ разницы моторов

  1. Найдите шаг, на котором была наибольшая разница между моторами
  2. Вычислите среднюю абсолютную разницу: mean(abs.(diff_power))
  3. Определите, на скольких шагах левый мотор был мощнее правого
  4. Создайте текстовую ячейку с выводом: "Анализ показывает, что наибольшая разница моторов была на шаге X, что может привести к повороту робота"

Требования к сдаче:

  • Используйте библиотеку Statistics (using Statistics)
  • Все расчеты должны быть выполнены в коде
  • Выведите результаты всех вычислений
  • Добавьте минимум 3 текстовые ячейки с комментариями к каждому блоку расчетов

🔍 Полезная информация

❓ Разница между .* и *

Поэлементное vs матричное умножение

.* умножает соответствующие элементы: [1,2] .* [3,4] = [3,8]. * пытается выполнить матричное умножение: [1,2] * [3,4] вызовет ошибку, так как размеры не подходят.

Когда точка не нужна

Для сложения/вычитания массивов одинакового размера точка не обязательна: + и - работают как поэлементные операции. Для умножения/деления точка обязательна.

Операции с скалярами

При операциях массива со скаляром точка не нужна: arr + 5 и arr .+ 5 дают одинаковый результат.

💡 Применение в проекте

Сегодня мы научились анализировать данные робота:

  • Сравнивать моторы - находить разницу, которая приводит к поворотам
  • Оценивать общую мощность - определять "силу" робота
  • Анализировать скорость - находить пики и средние значения

Это позволяет нам оценивать эффективность работы робота и находить проблемы в управлении.

Урок 19: Векторы и матрицы. Основы работы с массивами

Занятие 19: Построение графиков. Визуализация данных

📅 17 февраля 2026 ⏱ 1 академический час (40 минут) Занятие 19

📋 План занятия

  1. 00:05 Проверка ДЗ 18. Разбор статистического анализа
  2. 05:15 Теория: библиотека Plots, функция plot(), настройка графиков
  3. 15:30 Практика: выполнение упражнений из "07 - Построение графиков.pdf"
  4. 25:40 Применение: визуализация данных робота (график скорости, мощности)
  5. 35:40 Итоги. Домашнее задание: создание графиков для проекта

🎯 Практическая работа на уроке

Часть 1: Основы построения графиков (по материалам PDF)

Изучаем блок "07 - Построение графиков.pdf". Графики позволяют визуально анализировать данные. Основные функции:

using Plots # Подключаем библиотеку графиков gr() # Выбираем backend (можно также plotly(), pyplot())
  • plot(x, y) - график линии
  • scatter(x, y) - точечный график
  • bar(x, y) - столбчатая диаграмма
  • title!("Заголовок") - добавление заголовка
  • xlabel!("Ось X"), ylabel!("Ось Y") - подписи осей

Задания из учебного блока "07 - Построение графиков.pdf"

Задача 1: Базовые графики

# Подготовка данных x = 1:10 y = sin.(x)
  1. Постройте простой график: plot(x, y)
  2. Добавьте заголовок: title!("График синуса")
  3. Добавьте подписи осей: xlabel!("X"), ylabel!("sin(X)")
  4. Измените цвет линии: plot(x, y, color=:red) или plot(x, y, c=:red)
  5. Измените стиль линии: plot(x, y, linestyle=:dash)

Задача 2: Настройка маркеров

  1. Добавьте маркеры: plot(x, y, marker=:circle) или plot(x, y, m=:o)
  2. Измените размер маркеров: plot(x, y, markersize=10)
  3. Сделайте график без линии: plot(x, y, linealpha=0, marker=:circle)
  4. Используйте разные типы маркеров: :circle, :square, :xcross, :diamond

Задача 3: Несколько графиков на одном

y2 = cos.(x)
  1. Постройте два графика: plot(x, [y y2])
  2. Или используйте plot!: plot(x, y); plot!(x, y2)
  3. Разные цвета для линий: plot(x, [y y2], color=[:red :blue])
  4. Добавьте легенду: plot(x, [y y2], label=["sin" "cos"])

Часть 2: Визуализация данных робота

Строим графики для анализа поведения робота:

График 1: Изменение скорости робота

# Данные робота step_numbers = [1:6;] speed = [0.0, 0.5, 1.0, 1.0, 0.5, 0.0]
  1. Постройте график скорости: plot(step_numbers, speed)
  2. Добавьте заголовок: "Изменение скорости робота"
  3. Подпишите оси: "Шаг симуляции", "Скорость (м/с)"
  4. Добавьте маркеры: marker=:circle
  5. Сохраните график: savefig("robot_speed.png")

График 2: Мощность моторов

wheel_left = [30, 35, 40, 40, 35, 30] wheel_right = [30, 35, 40, 40, 35, 30]
  1. Постройте оба графика на одном: plot(step_numbers, [wheel_left wheel_right])
  2. Добавьте легенду: label=["Левый мотор" "Правый мотор"]
  3. Измените цвета: color=[:blue :red]
  4. Разные типы линий: linestyle=[:solid :dash]

График 3: Сравнение параметров

  1. Создайте график с двумя областями: plot(layout=(2,1))
  2. Верхний график - скорость, нижний - мощность
  3. Используйте plot! для добавления графиков в нужные области

Дополнительные задания (для быстрых учащихся)

Задание 1: Гистограмма

  1. Постройте гистограмму скорости: histogram(speed)
  2. Измените цвет столбцов: histogram(speed, color=:green)
  3. Добавьте заголовок: "Распределение скорости"

Задание 2: Настройка отображения

  1. Измените размер графика: plot(..., size=(800, 400))
  2. Добавьте сетку: plot(..., grid=true)
  3. Измените толщину линии: plot(..., linewidth=3)
  4. Сохраните в высоком разрешении: savefig(..., dpi=300)

📝 Домашнее задание

ДЗ #19 📅 Срок сдачи: 24 февраля 2026 🏆 Макс. балл: 5 баллов

Визуализация данных робота с помощью графиков

Цель: Научиться создавать информативные графики для анализа поведения робота.

Задание 1: Создание базовых графиков

  1. Создайте новый скрипт "Занятие19_Графики"
  2. Воссоздайте массивы: step_numbers, speed, wheel_left, wheel_right, total_power (из ДЗ 18)
  3. Постройте график зависимости скорости от номера шага
  4. Добавьте заголовок "Изменение скорости робота" и подписи осей
  5. Используйте синий цвет линии и круглые маркеры

Задание 2: График мощности моторов

  1. Постройте график, на котором одновременно отображены мощности левого и правого моторов
  2. Используйте разные цвета для моторов (например, синий для левого, красный для правого)
  3. Добавьте легенду с названиями "Левый мотор" и "Правый мотор"
  4. Добавьте заголовок "Мощность моторов робота"
  5. Сохраните график в файл: savefig("motor_power.png")

Задание 3: Комплексная визуализация

  1. Создайте график с двумя областями (subplot)
  2. В верхней области отобразите график скорости
  3. В нижней области отобразите график суммарной мощности моторов
  4. Добавьте общий заголовок "Анализ движения робота"
  5. Создайте текстовую ячейку с анализом: "График показывает, что когда скорость максимальна (шаг 3-4), суммарная мощность также максимальна"

Требования к сдаче:

  • Используйте библиотеку Plots (using Plots)
  • Все графики должны быть построены в скрипте
  • Графики должны иметь заголовки и подписи осей
  • Сохраните хотя бы один график в файл
  • Добавьте текстовые ячейки с комментариями к каждому графику

🔍 Полезная информация

❓ Частые проблемы с графиками

График не отображается

Убедитесь, что подключили библиотеку: using Plots. В Engee графики отображаются под ячейкой с кодом.

Неправильные размеры массивов

Для plot(x, y) массивы x и y должны быть одинаковой длины. Проверьте: length(x) == length(y).

Не сохраняется график

Функция savefig() сохраняет последний построенный график. Убедитесь, что график построен перед вызовом savefig.

💡 Применение в проекте

Визуализация позволяет:

  • Быстро оценить поведение - увидеть, как меняются параметры
  • Найти аномалии - резкие скачки или падения
  • Сравнить параметры - как связаны скорость и мощность
  • Создать отчеты - наглядные материалы для презентации

Графики - мощный инструмент анализа данных робота.

Урок 20: Векторы и матрицы. Основы работы с массивами

Занятие 20: Вызов функций. Анализ данных

📅 24 февраля 2026 ⏱ 1 академический час (40 минут) Занятие 20

📋 План занятия

  1. 00:05 Демонстрация лучших графиков из ДЗ 19
  2. 05:15 Теория: функции size(), findmax(), получение нескольких выходов
  3. 15:30 Практика: выполнение упражнений из "06 - Вызов функций.pdf"
  4. 25:40 Применение: анализ данных робота (поиск максимумов, размеры массивов)
  5. 35:40 Итоги. Домашнее задание: анализ ошибок следования

🎯 Практическая работа на уроке

Часть 1: Работа с функциями (по материалам PDF)

Изучаем блок "06 - Вызов функций.pdf". Функции в Julia могут возвращать одно или несколько значений. Важные функции для анализа данных:

using Statistics # Для функций mean, std и др.
  • size(arr) - размеры массива (для матриц возвращает (строки, столбцы))
  • length(arr) - общее количество элементов
  • findmax(arr) - максимальное значение и его индекс
  • findmin(arr) - минимальное значение и его индекс
  • findall(condition) - все индексы, где условие истинно
  • argmax(arr) - индекс максимального элемента
  • argmin(arr) - индекс минимального элемента

Задания из учебного блока "06 - Вызов функций.pdf"

Задача 1: Определение размеров данных

# Создаем тестовые данные data_matrix = [1 2 3; 4 5 6; 7 8 9] data_vector = [10, 20, 30, 40, 50]
  1. Узнайте размер матрицы: size(data_matrix)
  2. Узнайте длину вектора: length(data_vector)
  3. Получите отдельно количество строк и столбцов: (rows, cols) = size(data_matrix)
  4. Создайте переменные dr (rows) и dc (cols) с размерами

Задача 2: Поиск экстремумов

  1. Найдите максимальное значение в векторе: maximum(data_vector)
  2. Найдите максимальное значение и его индекс: (max_val, max_idx) = findmax(data_vector)
  3. Найдите минимальное значение и индекс: findmin(data_vector)
  4. Найдите только индекс максимума: argmax(data_vector)
  5. Найдите только индекс минимума: argmin(data_vector)

Задача 3: Работа с условиями

# Данные с условиями temperatures = [15.2, 18.5, 22.1, 19.8, 25.3, 17.6]
  1. Найдите все температуры выше 20: findall(temperatures .> 20)
  2. Найдите максимальную температуру выше 20: maximum(temperatures[temperatures .> 20])
  3. Подсчитайте сколько температур выше 20: sum(temperatures .> 20)

Часть 2: Анализ данных робота с помощью функций

Применяем функции для глубокого анализа данных робота:

Анализ 1: Основные характеристики

# Данные робота speed = [0.0, 0.5, 1.0, 1.0, 0.5, 0.0] wheel_left = [30, 35, 40, 40, 35, 30] wheel_right = [30, 35, 40, 40, 35, 30]
  1. Определите размер массива скорости: size(speed)
  2. Найдите максимальную скорость и шаг, когда она была: (max_speed, speed_step) = findmax(speed)
  3. Найдите минимальную скорость: minimum(speed)
  4. Определите, на скольких шагах скорость была больше 0.7

Анализ 2: Сравнение моторов

# Разница мощностей diff_power = wheel_right .- wheel_left
  1. Найдите максимальную разницу между моторами
  2. Определите, на каком шаге левый мотор был значительно мощнее правого
  3. Найдите шаг с наименьшей разницей (наиболее сбалансированная работа)
  4. Подсчитайте, на скольких шагах правый мотор был мощнее левого

Анализ 3: Комплексный анализ

  1. Создайте функцию, которая возвращает три значения: среднюю скорость, максимальную скорость и шаг максимума
  2. Используйте оператор ~ для игнорирования ненужных возвращаемых значений
  3. Например: (~, idx) = findmax(speed) - получаем только индекс

Дополнительные задания (для быстрых учащихся)

Задание 1: Анализ тенденций

# Данные с трендом trend_data = [1, 3, 2, 5, 4, 7, 6, 9, 8]
  1. Найдите локальные максимумы (элементы больше соседей)
  2. Определите, сколько раз данные росли (текущий > предыдущего)
  3. Найдите самую длинную возрастающую последовательность

Задание 2: Пользовательская функция анализа

  1. Напишите функцию analyze_robot(speed, power_left, power_right)
  2. Функция должна возвращать словарь или именованный кортеж с ключевыми метриками
  3. Включите: среднюю скорость, максимальную мощность, баланс моторов

📝 Домашнее задание

ДЗ #20 📅 Срок сдачи: 3 марта 2026 🏆 Макс. балл: 5 баллов

Глубокий анализ данных робота с помощью функций

Цель: Научиться использовать функции для комплексного анализа данных робота.

Задание 1: Анализ размеров и структуры данных

  1. Создайте новый скрипт "Занятие20_Функции"
  2. Воссоздайте все массивы робота: speed, wheel_left, wheel_right, diff_power, total_power
  3. Определите размер каждого массива с помощью size()
  4. Создайте переменные num_steps (количество шагов) и num_params (количество параметров)
  5. Выведите сводку: "Робот анализировался на X шагах по Y параметрам"

Задание 2: Поиск экстремальных значений

  1. Найдите максимальную и минимальную скорость, а также шаги, когда они были достигнуты
  2. Найдите шаг с наибольшей разницей между моторами (максимальное значение abs.(diff_power))
  3. Найдите шаг с наибольшей суммарной мощностью
  4. Определите, на каком шаге была самая сбалансированная работа моторов (минимальная абсолютная разница)

Задание 3: Комплексный анализ с несколькими возвращаемыми значениями

  1. Напишите код, который в одной строке получает из findmax(speed) только индекс максимальной скорости (используйте ~ для игнорирования значения)
  2. Создайте кортеж с основными характеристиками: (max_speed, min_speed, avg_speed) = (maximum(speed), minimum(speed), mean(speed))
  3. Напишите функцию get_robot_stats(), которая возвращает словарь со статистиками
  4. Создайте текстовую ячейку с выводом: "Анализ показывает, что максимальная скорость была достигнута на шаге X, когда разница моторов составляла Y"

Требования к сдаче:

  • Используйте функции findmax, findmin, argmax, argmin
  • Продемонстрируйте получение нескольких возвращаемых значений
  • Используйте оператор ~ для игнорирования значений
  • Создайте хотя бы одну пользовательскую функцию анализа
  • Добавьте текстовые ячейки с интерпретацией результатов

🔍 Полезная информация

❓ Особенности работы с функциями

findmax vs maximum

maximum(arr) возвращает только значение. findmax(arr) возвращает кортеж (значение, индекс). Для получения индекса используйте findmax.

size для векторов и матриц

Для вектора size(arr) вернет кортеж из одного элемента (n,). Для матрицы (rows, cols). Используйте length(arr) для общего количества элементов.

Игнорирование возвращаемых значений

Если функция возвращает несколько значений, но вам нужно не все, используйте ~: (~, idx) = findmax(arr) - получаем только индекс.

💡 Применение в проекте

Функции анализа позволяют:

  • Находить критические точки - когда скорость максимальна/минимальна
  • Анализировать баланс - насколько сбалансированно работают моторы
  • Определять структуру данных - сколько шагов, параметров
  • Автоматизировать анализ - создавать функции для регулярного использования

Это основа для создания интеллектуальной системы анализа данных робота.

Урок 21: Векторы и матрицы. Основы работы с массивами

Занятие 21: Бинарные массивы. Моделирование датчиков

📅 3 марта 2026 ⏱ 1 академический час (40 минут) Занятие 21

📋 План занятия

  1. 00:05 Проверка ДЗ 20. Разбор анализа с функциями
  2. 05:15 Теория: логические операторы, бинарные массивы, маски
  3. 15:30 Практика: выполнение упражнений из "09 - Бинарные массивы.pdf"
  4. 25:40 Применение: моделирование датчика линии робота (0-белое, 1-черное)
  5. 35:40 Итоги. Домашнее задание: анализ показаний датчика

🎯 Практическая работа на уроке

Часть 1: Логические операции и бинарные массивы (по материалам PDF)

Изучаем блок "09 - Бинарные массивы.pdf". Бинарные массивы содержат только значения true (1) и false (0). Они создаются с помощью операторов сравнения:

# Операторы сравнения (возвращают true/false) # .> - больше # .< - меньше # .>= - больше или равно # .<= - меньше или равно # .== - равно # .!= - не равно # Логические операторы (для комбинирования условий) # .& - И (and) # .| - ИЛИ (or) # .! - НЕ (not) или .~

Задания из учебного блока "09 - Бинарные массивы.pdf"

Задача 1: Создание бинарных массивов

# Тестовые данные temperatures = [15, 18, 22, 19, 25, 17]
  1. Создайте маску для температур выше 20: hot_days = temperatures .> 20
  2. Создайте маску для температур ниже 18: cold_days = temperatures .< 18
  3. Создайте маску для температур от 18 до 22: comfortable = (temperatures .>= 18) .& (temperatures .<= 22)
  4. Проверьте равенство: temperatures .== 22
  5. Проверьте неравенство: temperatures .!= 20

Задача 2: Использование масок для фильтрации

# Маска (бинарный массив) high_temp_mask = temperatures .> 20
  1. Примените маску для фильтрации: temperatures[high_temp_mask]
  2. Найдите индексы высоких температур: findall(high_temp_mask)
  3. Подсчитайте количество высоких температур: sum(high_temp_mask)
  4. Измените значения по маске: temperatures[high_temp_mask] .= 30

Задача 3: Комбинирование условий

  1. Температуры выше 20 И ниже 25: (temperatures .> 20) .& (temperatures .< 25)
  2. Температуры ниже 18 ИЛИ выше 22: (temperatures .< 18) .| (temperatures .> 22)
  3. НЕ высокие температуры: .(!(temperatures .> 20)) или temperatures .<= 20

Часть 2: Моделирование датчика линии робота

Создаем модель датчика следования за линией. В реальном роботе ИК-датчик возвращает 1, когда видит черную линию, и 0, когда видит белое поле.

Модель 1: Простой датчик

# Моделируем показания датчика на 10 шагах # 0 - белое поле, 1 - черная линия sensor_readings = [0, 0, 1, 1, 1, 0, 0, 1, 1, 0]
  1. Создайте маску для черной линии: on_black = sensor_readings .== 1
  2. Найдите шаги, когда робот был на линии: findall(on_black)
  3. Подсчитайте время на линии: sum(on_black)
  4. Найдите периоды непрерывного нахождения на линии

Модель 2: Анализ поведения

# Скорость робота в те же моменты времени speed = [0.5, 0.6, 0.4, 0.3, 0.5, 0.7, 0.8, 0.4, 0.3, 0.6]
  1. Найдите скорость, когда робот на черной линии: speed[on_black]
  2. Найдите скорость, когда робот на белом поле: speed[.!on_black]
  3. Сравните средние скорости: mean(speed[on_black]) vs mean(speed[.!on_black])
  4. Найдите моменты, когда скорость была высокой (>0.6) И робот был на линии

Модель 3: Коррекция данных

  1. Создайте маску для "проблемных" ситуаций (высокая скорость на линии)
  2. Измените скорость в проблемных ситуациях: speed[problem_mask] .= 0.3
  3. Создайте маску для "идеальных" ситуаций (умеренная скорость на линии)
  4. Проанализируйте результат коррекции

Дополнительные задания (для быстрых учащихся)

Задание 1: Анализ последовательностей

# Более сложные показания датчика complex_sensor = [0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]
  1. Найдите начало и конец каждого периода на черной линии
  2. Определите длину самого длинного непрерывного периода на линии
  3. Найдите количество переходов с белого на черное

Задание 2: Модель с шумом

  1. Добавьте случайный шум к показаниям датчика
  2. Создайте фильтр для удаления одиночных выбросов (одиночные 0 среди 1 или наоборот)
  3. Сравните "чистые" и "зашумленные" данные

📝 Домашнее задание

ДЗ #21 📅 Срок сдачи: 10 марта 2026 🏆 Макс. балл: 5 баллов

Моделирование и анализ данных датчика линии

Цель: Научиться работать с бинарными массивами для моделирования датчиков робота.

Задание 1: Создание модели датчика

  1. Создайте новый скрипт "Занятие21_Датчики"
  2. Создайте массив sensor из 10 элементов, моделирующий показания датчика линии:
    • 0 - белое поле
    • 1 - черная линия
    • Например: [0, 0, 1, 1, 1, 0, 0, 1, 1, 0]
  3. Создайте маску on_black, которая равна true там, где датчик видит черную линию
  4. Создайте маску on_white для белого поля
  5. Выведите обе маски и объясните, что они означают

Задание 2: Анализ показаний датчика

  1. Используя маску on_black, определите на каких шагах робот был на черной линии
  2. Подсчитайте, сколько всего шагов робот был на линии
  3. Найдите самый длинный непрерывный участок на черной линии
  4. Определите, сколько раз робот терял линию (переход 1→0)
  5. Создайте массив speed и проанализируйте скорость на черной и белой поверхности

Задание 3: Сложные условия фильтрации

  1. Создайте маску для ситуаций, когда скорость больше 0.7
  2. Создайте комбинированную маску для ситуаций, когда робот на черной линии И скорость высокая
  3. Создайте маску для ситуаций, когда робот на белом поле ИЛИ скорость низкая (<0.3)
  4. Используя маски, отфильтруйте соответствующие значения скорости
  5. Создайте текстовую ячейку с анализом: "Робот проводит X% времени на линии. На линии его средняя скорость Y, вне линии - Z"

Требования к сдаче:

  • Используйте операторы сравнения с точкой: .==, .>, .<
  • Используйте логические операторы: .& (И), .| (ИЛИ)
  • Продемонстрируйте фильтрацию массивов с помощью масок
  • Используйте sum() для подсчета true значений
  • Используйте findall() для поиска индексов
  • Добавьте текстовые ячейки с анализом результатов

🔍 Полезная информация

❓ Особенности бинарных массивов

Точка в операторах сравнения

Для поэлементного сравнения массивов нужна точка: arr .> 5. Без точки arr > 5 попытается сравнить весь массив с числом, что не имеет смысла.

BitArray vs Array{Bool}

Бинарные массивы в Julia обычно имеют тип BitArray, который эффективно хранит true/false значения (1 бит на элемент вместо 8 байт).

Фильтрация vs индексация

arr[mask] возвращает элементы, где mask=true. arr[findall(mask)] делает то же самое, но через промежуточный шаг с индексами.

💡 Применение в проекте робота

Бинарные массивы позволяют:

  • Моделировать датчики - создавать виртуальные показания
  • Анализировать состояние - где робот, что он "видит"
  • Фильтровать данные - анализировать только определенные ситуации
  • Принимать решения - на основе условий (если на линии, то...)

Это основа для создания алгоритмов управления роботом.

Урок 22: Векторы и матрицы. Основы работы с массивами

Занятие 22: Программирование I. Условные операторы

📅 10 марта 2026 ⏱ 1 академический час (40 минут) Занятие 22

📋 План занятия

  1. 00:05 Проверка ДЗ 21. Разбор работы с датчиками
  2. 05:15 Теория: условный оператор if-elseif-else, логические условия
  3. 15:30 Практика: выполнение упражнений из "10 - Программирование.pdf" (часть 1)
  4. 25:40 Применение: простейший алгоритм для робота (если датчик видит черное → поворот)
  5. 35:40 Итоги. Домашнее задание: реализация логики принятия решений

🎯 Практическая работа на уроке

Часть 1: Условные операторы (по материалам PDF)

Изучаем первую часть блока "10 - Программирование.pdf". Условные операторы позволяют выполнять код только при определенных условиях. Структура:

# Базовая структура if-else if условие # код, выполняемый если условие истинно else # код, выполняемый если условие ложно end # Структура с несколькими условиями if условие1 # код для условия1 elseif условие2 # код для условия2 else # код, если ни одно условие не выполнено end

Задания из учебного блока "10 - Программирование.pdf"

Задача 1: Простые условия

# Тестовые переменные x = 5 y = 10
  1. Проверьте, равно ли x 5: if x == 5 println("x равно 5") end
  2. Проверьте, больше ли y чем x: if y > x println("y больше x") end
  3. Используйте if-else: если x четное, выведите "четное", иначе "нечетное"
  4. Проверьте несколько условий: если x < 5, если x == 5, если x > 5

Задача 2: Сложные условия

temperature = 22 is_raining = false
  1. Проверьте комбинированное условие: если температура > 20 И не идет дождь
  2. Используйте elseif: если температура < 10 - "холодно", 10-20 - "прохладно", 20-30 - "тепло", >30 - "жарко"
  3. Создайте переменную погоды на основе условий
  4. Используйте вложенные условия (if внутри if)

Задача 3: Практическое применение

# Данные о батарее робота battery_level = 75 # в процентах is_charging = false
  1. Если батарея < 20% и не заряжается - вывести предупреждение
  2. Если батарея > 80% и заряжается - вывести "почти заряжено"
  3. Создайте систему оповещений о состоянии батареи

Часть 2: Алгоритм управления роботом

Создаем простейший алгоритм следования за линией на основе показаний датчика:

Алгоритм 1: Бинарное управление

# Показание датчика в текущий момент sensor_value = 1 # 0 - белое, 1 - черное base_power = 30 # Базовая мощность моторов
  1. Создайте переменную turn_power (мощность поворота)
  2. Если датчик видит черное (1) - поворачиваем влево: turn_power = 10
  3. Если датчик видит белое (0) - поворачиваем вправо: turn_power = -5
  4. Рассчитайте мощности моторов:
    left_power = base_power + turn_power right_power = base_power - turn_power
  5. Выведите результат: "Левый мотор: X, Правый мотор: Y"

Алгоритм 2: Учет скорости

current_speed = 0.7 max_safe_speed = 1.0
  1. Если скорость близка к максимальной - уменьшить базовую мощность
  2. Если скорость очень низкая - увеличить базовую мощность
  3. Создайте адаптивную систему, которая регулирует мощность в зависимости от скорости
  4. Добавьте проверку на критически низкую скорость

Алгоритм 3: Комбинированные условия

  1. Если робот на линии И скорость нормальная - двигаться прямо
  2. Если робот на линии И скорость высокая - немного уменьшить мощность
  3. Если робот не на линии - активно искать линию
  4. Если робот не на линии долгое время - остановиться

Дополнительные задания (для быстрых учащихся)

Задание 1: Система приоритетов

# Множественные условия battery_critical = false sensor_error = false obstacle_detected = true
  1. Создайте систему приоритетов: безопасность > заряд батареи > выполнение задачи
  2. Реализуйте логику: если препятствие - остановиться, иначе если батарея критическая - идти на зарядку, иначе следовать за линией
  3. Добавьте обработку ошибок датчика

Задание 2: Калькулятор поворота

  1. Напишите функцию, которая принимает показание датчика и текущую скорость
  2. Функция должна возвращать мощности для левого и правого моторов
  3. Добавьте разные режимы: осторожный, нормальный, агрессивный
  4. Протестируйте функцию на разных входных данных

📝 Домашнее задание

ДЗ #22 📅 Срок сдачи: 17 марта 2026 🏆 Макс. балл: 5 баллов

Реализация алгоритма управления роботом

Цель: Научиться создавать алгоритмы принятия решений для управления роботом.

Задание 1: Базовый алгоритм следования за линией

  1. Создайте новый скрипт "Занятие22_Алгоритм"
  2. Создайте переменные:
    • sensor_value - текущее показание датчика (0 или 1)
    • base_power = 30 - базовая мощность моторов
    • current_speed - текущая скорость робота
  3. Реализуйте алгоритм:
    if sensor_value == 1 # Робот на черной линии turn_power = 10 # Поворачиваем влево println("На линии -> поворот влево") else # Робот на белом поле turn_power = -5 # Поворачиваем вправо println("Вне линии -> поворот вправо") end
  4. Рассчитайте и выведите конечные мощности моторов

Задание 2: Учет скорости в алгоритме

  1. Добавьте проверку скорости в алгоритм:
    • Если скорость < 0.3 - увеличить базовую мощность на 10
    • Если скорость > 0.8 - уменьшить базовую мощность на 10
    • Иначе - использовать стандартную мощность
  2. Используйте конструкцию if-elseif-else для реализации
  3. Протестируйте алгоритм с разными значениями скорости (0.2, 0.5, 0.9)
  4. Выведите для каждого теста: начальные условия и результирующие мощности

Задание 3: Комплексная система управления

  1. Создайте систему, которая учитывает одновременно:
    • Показание датчика (на линии/вне линии)
    • Текущую скорость (низкая/нормальная/высокая)
    • Время нахождения вне линии (если долго вне линии - экстренный поворот)
  2. Используйте вложенные условия (if внутри if)
  3. Добавьте переменную time_off_track и логику ее обработки
  4. Создайте текстовую ячейку с описанием алгоритма: "Мой алгоритм сначала проверяет X, затем Y, и в зависимости от Z делает W"

Требования к сдаче:

  • Используйте все три формы: if, if-else, if-elseif-else
  • Продемонстрируйте вложенные условия
  • Протестируйте алгоритм минимум с 3 разными наборами входных данных
  • Выводите понятные сообщения о принимаемых решениях
  • Добавьте текстовые ячейки с объяснением логики

🔍 Полезная информация

❓ Частые ошибки с условиями

= vs ==

= - оператор присваивания. == - оператор сравнения. В условиях нужно использовать ==: if x == 5.

Забытый end

Каждый if должен заканчиваться end. Если забыть end, Julia будет ждать продолжения и выдаст ошибку.

Сложные условия без скобок

При комбинировании условий используйте скобки для ясности: (x > 5) && (y < 10) вместо x > 5 && y < 10.

💡 Применение в проекте робота

Условные операторы - основа интеллекта робота:

  • Принятие решений - что делать в текущей ситуации
  • Обработка сенсоров - как реагировать на показания датчиков
  • Управление моторами - какую мощность подавать
  • Обработка ошибок - что делать при проблемах

Без условий робот был бы просто набором заранее заданных команд.

Урок 23: Векторы и матрицы. Основы работы с массивами

Занятие 23: Программирование II. Циклы

📅 17 марта 2026 ⏱ 1 академический час (40 минут) Занятие 23

📋 План занятия

  1. 00:05 Проверка ДЗ 22. Разбор алгоритмов управления
  2. 05:15 Теория: цикл for, итерация по диапазонам и массивам
  3. 15:30 Практика: выполнение упражнений из "10 - Программирование.pdf" (часть 2)
  4. 25:40 Применение: создание прототипа симулятора робота (цикл по шагам)
  5. 35:40 Итоги. Домашнее задание: автоматизация расчета

🎯 Практическая работа на уроке

Часть 1: Циклы for (по материалам PDF)

Изучаем вторую часть блока "10 - Программирование.pdf". Циклы позволяют выполнять один и тот же код много раз. В Julia основной цикл - for:

# Базовая структура цикла for for переменная in диапазон # код, выполняемый на каждой итерации end # Итерация по диапазону for i in 1:5 println("Шаг ", i) end # Итерация по массиву for value in [10, 20, 30, 40] println("Значение: ", value) end

Задания из учебного блока "10 - Программирование.pdf"

Задача 1: Простые циклы

  1. Выведите числа от 1 до 10: for i in 1:10 println(i) end
  2. Выведите квадраты чисел от 1 до 5: for x in 1:5 println(x^2) end
  3. Выведите только четные числа от 2 до 10: for i in 2:2:10 println(i) end
  4. Итерация в обратном порядке: for i in 5:-1:1 println(i) end

Задача 2: Накопление результатов

# Сумма чисел total = 0 for i in 1:10 total = total + i end println("Сумма: ", total)
  1. Вычислите сумму чисел от 1 до 100
  2. Вычислите произведение чисел от 1 до 5 (факториал 5)
  3. Создайте массив квадратов чисел от 1 до 10
  4. Найдите максимальное число в массиве с помощью цикла (без функции maximum)

Задача 3: Вложенные циклы

# Таблица умножения for i in 1:5 for j in 1:5 print(i*j, " ") end println() # переход на новую строку end
  1. Создайте таблицу умножения 10×10
  2. Выведите треугольник из звездочек с помощью вложенных циклов
  3. Создайте матрицу, где каждый элемент равен сумме его индексов

Часть 2: Создание симулятора робота

Используем циклы для моделирования движения робота шаг за шагом:

Симулятор 1: Простая симуляция

# Данные для симуляции sensor_data = [0, 0, 1, 1, 1, 0] # Показания датчика base_power = 30 # Базовая мощность
  1. Создайте массивы для хранения истории:
    left_history = zeros(6) # История мощности левого мотора right_history = zeros(6) # История мощности правого мотора turn_history = zeros(6) # История поворотов
  2. Напишите цикл, который для каждого шага:
    • Получает показание датчика
    • Применяет алгоритм из прошлого урока
    • Рассчитывает мощности моторов
    • Сохраняет результаты в массивы истории
  3. Выведите итоговые массивы

Симулятор 2: С учетом скорости

# Добавляем скорость initial_speed = 0.0 speed_history = zeros(6)
  1. Расширьте симулятор: на каждом шаге рассчитывайте скорость на основе мощности
  2. Используйте упрощенную формулу: speed = mean_power / 100
  3. Корректируйте мощность в зависимости от скорости (как в прошлом уроке)
  4. Сохраняйте историю скорости

Симулятор 3: Визуализация процесса

  1. Внутри цикла выводите информацию о каждом шаге:
    println("Шаг ", step, ": датчик=", sensor, " L=", left_power, " R=", right_power, " скорость=", round(current_speed, digits=2))
  2. В конце постройте графики истории мощности и скорости
  3. Проанализируйте, как менялось поведение робота

Дополнительные задания (для быстрых учащихся)

Задание 1: Усложненная симуляция

  1. Добавьте случайные помехи в показания датчика
  2. Реализуйте адаптивный алгоритм, который учится на ошибках
  3. Добавьте ограничение по энергии (батарея разряжается)

Задание 2: Анализ эффективности

  1. После симуляции вычислите метрики:
    • Среднее отклонение от линии
    • Эффективность использования энергии
    • Плавность движения
  2. Сравните разные алгоритмы управления
  3. Найдите оптимальные параметры

📝 Домашнее задание

ДЗ #23 📅 Срок сдачи: 24 марта 2026 🏆 Макс. балл: 5 баллов

Создание прототипа симулятора робота с использованием циклов

Цель: Научиться использовать циклы для автоматизации расчетов и создания симуляторов.

Задание 1: Базовый симулятор

  1. Создайте новый скрипт "Занятие23_Симулятор"
  2. Создайте массив показаний датчика: sensor = [0, 0, 1, 1, 0, 0]
  3. Создайте массивы для хранения истории:
    • turn_history - история значений поворота
    • left_history - история мощности левого мотора
    • right_history - история мощности правого мотора
  4. Напишите цикл for, который проходит по всем элементам массива sensor
  5. Внутри цикла используйте алгоритм из ДЗ 22 для расчета turn_power
  6. Сохраняйте результаты в массивы истории

Задание 2: Расширенная симуляция

  1. Добавьте в симулятор учет скорости:
    • Создайте массив speed_history
    • Начальная скорость = 0.0
    • На каждом шаге рассчитывайте скорость как среднее мощностей моторов, деленное на 100
    • Корректируйте базовую мощность в зависимости от скорости (как в ДЗ 22)
  2. Добавьте вывод информации на каждом шаге:
    println("Шаг ", i, ": датчик=", sensor[i], " поворот=", turn_history[i], " скорость=", round(speed_history[i], digits=2))
  3. После цикла выведите все массивы истории

Задание 3: Анализ результатов

  1. После завершения симуляции вычислите:
    • Среднюю скорость робота
    • Общее время на черной линии
    • Среднюю разницу между моторами
    • Максимальную достигнутую скорость
  2. Постройте графики:
    • График изменения скорости
    • График мощностей левого и правого моторов
    • График значений поворота
  3. Создайте текстовую ячейку с анализом: "Симуляция показала, что робот проводит X% времени на линии. Наибольшая скорость была достигнута на шаге Y, когда показания датчика были Z"

Требования к сдаче:

  • Используйте цикл for для итерации по массиву
  • Сохраняйте историю в массивах
  • Выводите информацию на каждом шаге (или через несколько шагов)
  • После цикла анализируйте результаты
  • Создайте хотя бы один график с результатами симуляции
  • Добавьте текстовые ячейки с описанием симуляции и анализом результатов

🔍 Полезная информация

❓ Особенности циклов в Julia

Индексация в циклах

Для доступа к индексу и значению используйте: for (i, val) in enumerate(arr) или for i in 1:length(arr) и тогда arr[i].

Изменение массивов в циклах

Массивы можно изменять внутри цикла: arr[i] = новое_значение. Убедитесь, что индекс в допустимом диапазоне.

Прерывание цикла

Для досрочного выхода из цикла используйте break. Для перехода к следующей итерации - continue.

💡 Применение в проекте робота

Циклы позволяют:

  • Моделировать поведение во времени - шаг за шагом
  • Автоматизировать расчеты - для множества условий
  • Собирать статистику - накапливать данные
  • Тестировать алгоритмы - на разных наборах данных

Цикл - это "двигатель" симуляции, который заставляет время идти и робота двигаться.

Урок 24: Векторы и матрицы. Основы работы с массивами

Занятие 24: Физика движения. От мощности к координатам

📅 24 марта 2026 ⏱ 1 академический час (40 минут) Занятие 24

📋 План занятия

  1. 00:05 Анализ ДЗ 23. Разбор симуляторов
  2. 05:15 Теория: основы кинематики, связь скорости и координаты
  3. 15:30 Применение: улучшение симулятора - добавление расчета позиции
  4. 25:40 Практика: расчет траектории робота по мощности моторов
  5. 35:40 Итоги. Домашнее задание: финальная подготовка к интеграции

🎯 Практическая работа на уроке

Часть 1: Основы кинематики для моделирования

Чтобы симуляция была реалистичной, нужно связать мощность моторов с движением робота. Используем упрощенную модель:

# Основные понятия: # v - скорость (м/с) # x - координата (м) # t - время (с) # dt - шаг времени (интервал между расчетами) # Уравнение движения (равномерное): # Новая_координата = Старая_координата + Скорость * Время # В дискретной форме (для симуляции): x_new = x_old + v * dt # Связь мощности моторов и скорости (упрощенно): # Скорость пропорциональна средней мощности моторов v = (power_left + power_right) / k # где k - коэффициент, зависящий от массы, трения и т.д.

Практика: Расчет движения по заданной скорости

Задача 1: Равномерное движение

# Параметры dt = 1.0 # Шаг времени (1 секунда) v = 0.5 # Постоянная скорость (0.5 м/с) x = 0.0 # Начальная позиция time_steps = 6
  1. Создайте массив для хранения позиций: x_positions = zeros(time_steps)
  2. Напишите цикл, который рассчитывает позицию на каждом шаге
  3. Используйте формулу: x = x + v * dt
  4. Сохраняйте каждое значение x в массив
  5. Выведите итоговый массив позиций
  6. Постройте график x от времени

Задача 2: Движение с переменной скоростью

# Скорость меняется со временем speeds = [0.0, 0.5, 1.0, 1.0, 0.5, 0.0]
  1. Используйте массив speeds вместо постоянной скорости
  2. В цикле берите скорость для текущего шага: v = speeds[i]
  3. Рассчитайте позицию на каждом шаге
  4. Сравните с равномерным движением
  5. Проанализируйте, как изменение скорости влияет на пройденный путь

Задача 3: Движение в 2D

# Добавляем координату Y x = 0.0 y = 0.0 vx = 0.3 # Скорость по X vy = 0.4 # Скорость по Y
  1. Расширьте модель для двух координат
  2. Создайте массивы x_positions и y_positions
  3. Рассчитайте траекторию за 10 шагов
  4. Постройте график траектории в координатах (x, y)
  5. Вычислите общее пройденное расстояние

Часть 2: Интеграция физики в симулятор робота

Объединяем все компоненты: датчики, алгоритм управления, мощность моторов и физику движения:

Полный симулятор робота

# Исходные данные sensor_data = [0, 0, 1, 1, 1, 0] # Показания датчика base_power = 30 # Базовая мощность dt = 1.0 # Шаг времени

Шаг 1: Инициализация массивов

# Массивы для истории num_steps = length(sensor_data) left_history = zeros(num_steps) right_history = zeros(num_steps) speed_history = zeros(num_steps) x_positions = zeros(num_steps) y_positions = zeros(num_steps) # Начальные условия x = 0.0 y = 0.0 current_speed = 0.0

Шаг 2: Основной цикл симуляции

  1. Для каждого шага i от 1 до num_steps:
  2. Получите показание датчика: sensor = sensor_data[i]
  3. Примените алгоритм управления (из ДЗ 22) для расчета turn_power
  4. Рассчитайте мощности моторов: left = base_power + turn_power, right = base_power - turn_power
  5. Сохраните мощности в историю
  6. Рассчитайте скорость: current_speed = (left + right) / 200 (упрощенная формула)
  7. Сохраните скорость в историю
  8. Обновите координаты: x = x + current_speed * dt (пока только по X)
  9. Сохраните координаты в историю
  10. Выведите информацию о текущем шаге

Шаг 3: Анализ результатов

  1. После цикла выведите все массивы истории
  2. Постройте графики:
    • Траектория движения (x от шага)
    • Скорость от времени
    • Мощности моторов
  3. Проанализируйте результаты:
    • Как далеко уехал робот?
    • Когда скорость была максимальна?
    • Как повороты влияли на движение?

Дополнительные задания (для быстрых учащихся)

Задание 1: Модель с углом поворота

# Добавляем угол поворота theta = 0.0 # Начальный угол (радианы) # При повороте меняется направление скорости vx = current_speed * cos(theta) vy = current_speed * sin(theta)
  1. Расширьте модель для учета направления движения
  2. Рассчитайте, как разница мощностей моторов влияет на угол поворота
  3. Смоделируйте движение по кругу

Задание 2: Учет инерции

  1. Добавьте инерцию: скорость не может мгновенно измениться
  2. Используйте формулу: v_new = v_old + a * dt, где a - ускорение
  3. Ускорение зависит от разницы между текущей и целевой скоростью
  4. Сравните модели с инерцией и без

📝 Домашнее задание

ДЗ #24 📅 Срок сдачи: 31 марта 2026 🏆 Макс. балл: 5 баллов

Создание физической модели движения робота

Цель: Научиться рассчитывать траекторию движения робота на основе мощности моторов.

Задание 1: Расчет движения по прямой

  1. Создайте новый скрипт "Занятие24_Физика" или продолжите предыдущий
  2. Задайте массивы мощностей моторов (из прошлых ДЗ или создайте новые):
    left_power = [30, 30, 40, 40, 30, 30] right_power = [30, 30, 20, 20, 30, 30]
  3. Рассчитайте скорость на каждом шаге: speed = (left_power[i] + right_power[i]) / 100
  4. Рассчитайте позицию робота вдоль оси X:
    • Начальная позиция: x = 0.0
    • Шаг времени: dt = 1.0
    • Формула: x = x + speed * dt
  5. Сохраняйте позицию в массив x_positions
  6. Выведите итоговую траекторию

Задание 2: Анализ влияния разницы моторов

  1. Проанализируйте, как разница мощностей моторов влияет на движение:
    • Если мощности равны - движение по прямой
    • Если правый мотор мощнее - поворот влево
    • Если левый мотор мощнее - поворот вправо
  2. Создайте три разных сценария с разными соотношениями мощностей
  3. Для каждого сценария рассчитайте траекторию
  4. Постройте графики всех трех траекторий на одном рисунке
  5. Объясните в текстовой ячейке, почему траектории разные

Задание 3: Интеграция с алгоритмом управления

  1. Объедините физическую модель с алгоритмом управления из ДЗ 22-23
  2. Создайте полный цикл симуляции:
    • Входные данные: показания датчика
    • Алгоритм: рассчитывает мощности моторов
    • Физика: рассчитывает скорость и позицию
    • Выход: траектория движения
  3. Протестируйте на разных наборах данных датчика
  4. Постройте финальную траекторию
  5. Создайте текстовую ячейку с выводом: "Моя модель показывает, что при данных показаниях датчика робот проезжает X метров, максимально отклоняясь на Y метров от прямой"

Требования к сдаче:

  • Реализуйте расчет позиции по скорости
  • Проанализируйте минимум 3 разных сценария движения
  • Постройте графики траекторий
  • Интегрируйте физику с алгоритмом управления
  • Продемонстрируйте полный цикл симуляции
  • Добавьте текстовые ячейки с анализом физических принципов

🔍 Полезная информация

❓ Упрощения в физической модели

Идеальная поверхность

Мы предполагаем, что нет трения, поверхность идеально ровная. В реальности трение замедляет робота и влияет на повороты.

Мгновенный отклик

В нашей модели скорость мгновенно меняется с изменением мощности. В реальности есть инерция - робот не может мгновенно разогнаться или остановиться.

Линейная зависимость

Мы используем линейную зависимость скорости от мощности. В реальности зависимость может быть более сложной, особенно на высоких скоростях.

💡 Дальнейшее развитие модели

Для более реалистичной симуляции можно добавить:

  • Трение - сила, замедляющая движение
  • Инерцию - сопротивление изменению скорости
  • Массу - чем тяжелее робот, тем сложнее его разогнать
  • Проскальзывание - колеса могут буксовать
  • Неровности поверхности - влияют на движение

Наша модель - хорошее начало для понимания основных принципов.

Made on
Tilda