⛓️ Составление цепочки команд

Циклы в действии: программируем умные алгоритмы

🔄 Циклы • 📋 Алгоритмы • ⚡ Оптимизация • 🤖 Практика
7 класс • Технология • 45 минут
Учитель: mw285748 • 2025-06-15

🎯 Цель практической работы

💡 Научимся:

  • Составлять эффективные цепочки команд
  • Оптимизировать алгоритмы с помощью циклов
  • Программировать роботов для сложных маршрутов
  • Отлаживать и улучшать программы

🔄 Практический подход:

1Задача → Анализ → Цикл → Код → Тест → Оптимизация

🧠 Анализ повторяющихся действий

🔍 Поиск паттернов

❌ Неэффективный код:

1robot.forward(50)
2robot.turn_right(90)
3robot.forward(50)  
4robot.turn_right(90)
5robot.forward(50)
6robot.turn_right(90)
7robot.forward(50)
8robot.turn_right(90)
9# 8 строк для квадрата!

✅ Эффективный код:

1for i in range(4):
2    robot.forward(50)
3    robot.turn_right(90)
4# 3 строки для квадрата!

📊 Экономия: 62% кода, меньше ошибок, легче изменять

🎯 Типы повторений в робототехнике

1️⃣ Точное количество раз:

1# Обход 5 контрольных точек
2for checkpoint in range(5):
3    robot.move_to_checkpoint(checkpoint)
4    robot.signal()

2️⃣ До выполнения условия:

1# Движение до препятствия
2while distance_sensor.value() > 10:
3    robot.forward()
4robot.stop()

3️⃣ Минимум один раз:

1# Поиск линии (обязательно повернуться)
2do:
3    robot.turn_right(10)
4while color_sensor.value() != "black"

🔧 Алгоритм оптимизации

Шаги анализа задачи:

  1. Выделить повторяющиеся фрагменты
  2. Определить тип повторения
  3. Выбрать подходящий цикл
  4. Минимизировать операции в теле цикла
  5. Проверить условия выхода

⚠️ Опасности:

  • Бесконечные циклы
  • Неточные условия
  • Избыточные вычисления

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

🟢 Базовый уровень: “Геометрические фигуры”

Задача: Робот рисует правильный многоугольник

1# Параметры
2sides = 6        # количество сторон
3side_length = 40 # длина стороны в см
4angle = 360 / sides  # угол поворота
5
6# Алгоритм
7for i in range(sides):
8    robot.forward(side_length)
9    robot.turn_right(angle)

🎯 Расширения:

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

🟡 Средний уровень: “Змейка с препятствиями”

Задача: Движение зигзагом с обходом препятствий

 1rows = 4
 2columns = 5
 3
 4for row in range(rows):
 5    for col in range(columns):
 6        # Проверка препятствия
 7        if distance_sensor.value() < 15:
 8            robot.obstacle_avoidance()
 9        else:
10            robot.forward(30)
11    
12    # Переход на следующую строку
13    if row < rows - 1:
14        robot.turn_right(90)
15        robot.forward(30)
16        robot.turn_right(90)

🔧 Алгоритм обхода препятствий:

1def obstacle_avoidance():
2    robot.turn_left(90)
3    robot.forward(40)
4    robot.turn_right(90)
5    robot.forward(40)
6    robot.turn_right(90)
7    robot.forward(40)
8    robot.turn_left(90)

🔴 Продвинутый уровень: “Умный патруль”

Задача: Патрулирование с адаптивным маршрутом

 1checkpoints = [(0,0), (100,0), (100,100), (0,100)]
 2patrol_count = 0
 3max_patrols = 10
 4
 5while patrol_count < max_patrols:
 6    for point in checkpoints:
 7        robot.move_to(point)
 8        
 9        # Сканирование на 360°
10        for angle in range(0, 360, 45):
11            robot.turn_to(angle)
12            if threat_detected():
13                robot.alert()
14                robot.investigate_threat()
15                break
16    
17    patrol_count += 1
18    robot.status_report(patrol_count)

🧠 Адаптивность:

  • Изменение маршрута при обнаружении угроз
  • Оптимизация времени патрулирования
  • Запоминание проблемных зон

📐 Математика оптимизации

⏱️ Временная сложность

Оценка эффективности алгоритмов: \[T = n \times t_{step} + k \times t_{overhead}\]

где:

  • n - количество итераций
  • t_step - время одной итерации
  • k - количество дополнительных операций
  • t_overhead - время служебных операций

📊 Сравнение подходов:

1Без циклов: T = 8 × 2с = 16с (квадрат)
2С циклом:   T = 4 × 2с + 0.1с = 8.1с
3Выигрыш:    50% времени выполнения

🎯 Оптимизация вложенных циклов

Сложность вложенности: \[O(n^k) \text{ где k - уровень вложенности}\]

⚠️ Примеры:

  • Одинарный цикл: O(n) - линейная сложность
  • Двойной цикл: O(n²) - квадратичная сложность
  • Тройной цикл: O(n³) - кубическая сложность

💡 Правило: Избегайте глубокой вложенности!

✅ Хорошо:

1# O(n + m) - линейная сложность
2for row in range(n):
3    process_row(row)
4for col in range(m):
5    process_column(col)

❌ Плохо:

1# O(n * m) - квадратичная сложность
2for row in range(n):
3    for col in range(m):
4        process_cell(row, col)

🧪 Отладка и тестирование

🔍 Поиск ошибок в циклах

Типичные проблемы:

1. Бесконечный цикл:

 1# ❌ Ошибка: условие никогда не станет ложным
 2x = 10
 3while x > 0:
 4    robot.forward()
 5    # x не изменяется!
 6
 7# ✅ Исправление
 8x = 10
 9while x > 0:
10    robot.forward()
11    x -= 1  # изменяем переменную цикла

2. Неточное условие:

1# ❌ Ошибка: может не найти точно 50
2while distance_sensor.value() != 50:
3    robot.forward()
4
5# ✅ Исправление: диапазон значений
6while abs(distance_sensor.value() - 50) > 2:
7    robot.forward()

🧮 Методы отладки

Пошаговое тестирование:

 1def debug_patrol():
 2    print("Начало патрулирования")
 3    
 4    for i, checkpoint in enumerate(checkpoints):
 5        print(f"Движение к точке {i}: {checkpoint}")
 6        robot.move_to(checkpoint)
 7        print(f"Достигнута точка {i}")
 8        
 9        if sensor_check():
10            print("Обнаружена аномалия!")
11            break
12    
13    print("Патрулирование завершено")

Визуализация состояния:

1def show_robot_state():
2    print(f"Позиция: ({robot.x}, {robot.y})")
3    print(f"Направление: {robot.heading}°")
4    print(f"Батарея: {robot.battery}%")
5    print(f"Датчики: {robot.get_sensor_data()}")

🎮 Практическая работа

⏱️ План выполнения (45 минут)

👥 Команды по 2-3 человека

 1Этап 1: Анализ задания (5 мин)
 2• Понимание требований
 3• Выделение повторяющихся действий
 4• Выбор типа цикла
 5
 6Этап 2: Создание алгоритма (10 мин)
 7• Блок-схема решения
 8• Псевдокод программы
 9• Проверка логики
10
11Этап 3: Программирование (20 мин)
12• Написание кода
13• Загрузка в робота
14• Первичное тестирование
15
16Этап 4: Отладка и оптимизация (7 мин)
17• Исправление ошибок
18• Улучшение производительности
19• Финальные испытания
20
21Этап 5: Презентация (3 мин)
22• Демонстрация работы
23• Объяснение решения

🏆 Критерии оценки

📊 Оценочная матрица (20 баллов):

Критерий Максимум Описание
Алгоритм 5 Логика, оптимальность, комментарии
Программа 5 Работоспособность, эффективность
Исполнение 5 Точность, плавность, скорость
Защита 5 Понимание, объяснение, ответы

🎯 Перевод в оценки:

  • 18-20 баллов: “5” (отлично)
  • 14-17 баллов: “4” (хорошо)
  • 10-13 баллов: “3” (удовлетворительно)
  • < 10 баллов: “2” (неудовлетворительно)

🎤 Демонстрация результатов

📋 Структура защиты (2 минуты)

1. Постановка задачи (30 сек):

  • Что должен делать робот?
  • Какие ограничения учитывались?

2. Объяснение алгоритма (60 сек):

  • Какие циклы использованы и почему?
  • Как решены сложные моменты?
  • Какие оптимизации применены?

3. Демонстрация (30 сек):

  • Показ работы робота
  • Комментарии к выполнению

❓ Вопросы для обсуждения

🔧 Технические аспекты:

  • Почему выбран именно этот тип цикла?
  • Как можно дальше оптимизировать алгоритм?
  • Что произойдет при изменении условий?

🧠 Алгоритмические решения:

  • Как избежали бесконечных циклов?
  • Какие альтернативные подходы рассматривались?
  • Как тестировали корректность работы?

📚 Памятка программиста

🔧 Правила использования циклов

1. Выбор типа цикла:

  • FOR - точное количество итераций
  • WHILE - условие проверяется ДО выполнения
  • DO-WHILE - условие проверяется ПОСЛЕ выполнения

2. Безопасность:

  • Всегда предусматривайте выход из цикла
  • Используйте таймауты для критических операций
  • Проверяйте граничные условия

3. Оптимизация:

  • Выносите константы за пределы цикла
  • Минимизируйте операции в теле цикла
  • Избегайте глубокой вложенности

4. Отладка:

  • Добавляйте отладочную печать
  • Тестируйте граничные случаи
  • Используйте пошаговое выполнение

🤔 Рефлексия “3-2-1”

📝 Анализ работы

3 вещи, которые узнал или научился делать:

  • 2 вопроса, которые остались:

  • 1 идея для дальнейшего развития:

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

    🎯 Основное задание

    Разработать алгоритм “Умная уборка”:

    Робот-пылесос должен убрать комнату размером 4×4 метра:

    • Использовать вложенные циклы для покрытия всей площади
    • Избегать повторной уборки одних участков
    • Возвращаться на базу при низком заряде батареи
    • Оптимизировать траекторию для минимального времени

    📋 Требования:

    • Блок-схема алгоритма
    • Псевдокод программы
    • Расчет времени выполнения
    • Анализ эффективности

    🌟 Творческое задание

    Придумать робототехническую задачу: Описать реальную задачу, которая эффективно решается вложенными циклами:

    • Постановка проблемы
    • Описание алгоритма решения
    • Оценка сложности
    • Области применения

    🎉 Итоги практической работы

    🏆 Что освоили

    ✅ Практические навыки:

    • Анализ задач на предмет циклических структур
    • Составление оптимальных цепочек команд
    • Программирование роботов с использованием циклов
    • Отладка и тестирование циклических алгоритмов

    🔄 Понимание принципов:

    • Циклы экономят код и повышают надежность
    • Правильный выбор типа цикла критически важен
    • Оптимизация улучшает производительность
    • Тестирование выявляет скрытые ошибки

    🌟 Главное правило

    “Хороший цикл - это цикл, который завершается в нужный момент и делает именно то, что требуется, не больше и не меньше”

    🚀 Следующий уровень: Изучение сложных алгоритмических структур и машинного обучения

    💡 Теперь ваши роботы думают циклично и действуют эффективно!