🔄 Алгоритмическая структура «Цикл»

Повторения, которые делают роботов умнее

🔁 Итерации • 📊 Условия • ⚡ Оптимизация • 🤖 Применение
7 класс • Технология • 45 минут

🎯 Цель урока

💡 Изучим:

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

🔄 Формула успеха:

Задача → Анализ → Выбор цикла → Реализация → Оптимизация

🧠 Зачем роботам нужны циклы?

🤖 Примеры из жизни роботов

🏠 Робот-пылесос:

while battery_level > 20%:
    scan_room()
    move_to_dirt()
    clean_area()
    check_obstacles()

🚗 Автопилот:

while destination_not_reached:
    read_sensors()
    analyze_road()
    adjust_steering()
    control_speed()

🏭 Производственный робот:

for i in range(1000):  # 1000 деталей
    pick_part()
    assemble()
    place_result()
    quality_check()

⚡ Преимущества циклов

❌ Без циклов:

move_forward()
move_forward()
move_forward()
move_forward()
move_forward()
# ...повторить 100 раз!

✅ С циклами:

for i in range(100):
    move_forward()

📊 Экономия:

  • Код: с 100 строк до 2 строк
  • Память: в 50 раз меньше
  • Время разработки: в 20 раз быстрее
  • Вероятность ошибок: в 10 раз меньше

🔄 Три типа циклов

1️⃣ Цикл с предусловием (WHILE)

🔍 Принцип: Проверяем условие ДО выполнения

while условие_истинно:
    выполнить_действие()

📊 Блок-схема:

   ┌─────────┐
   │ Условие │ ──Ложь──→ Выход
   └────┬────┘
        │Истина
   ┌─────────┐
   │ Действие│
   └────┬────┘
        └──────────┘

🤖 Пример - движение до препятствия:

while distance_sensor.value() > 10:  # пока расстояние больше 10 см
    motors.forward(50)               # двигаться вперед
motors.stop()                        # остановиться

2️⃣ Цикл с постусловием (DO-WHILE)

🔍 Принцип: Выполняем действие, ПОТОМ проверяем

do:
    выполнить_действие()
while условие_истинно

📊 Особенность: Выполняется минимум 1 раз!

🤖 Пример - поиск линии:

do:
    robot.turn_right(5)              # повернуть на 5°
    color = color_sensor.value()     # проверить цвет
while color != "black"               # пока не найдена черная линия

3️⃣ Счетный цикл (FOR)

🔍 Принцип: Повторяем ТОЧНО заданное число раз

for i in range(количество_повторений):
    выполнить_действие()

🎯 Когда использовать:

  • Известно точное число повторений
  • Нужен счетчик итераций
  • Обработка массивов данных

🤖 Пример - движение по квадрату:

for side in range(4):               # 4 стороны квадрата
    robot.forward(30)               # вперед на 30 см
    robot.turn_right(90)            # поворот на 90°

⚖️ Сравнение типов циклов

КритерийWHILEDO-WHILEFOR
Проверка условияДо выполненияПосле выполненияАвтоматически
Минимум выполнений0 раз1 раз0 раз
СчетчикРучнойРучнойАвтоматический
ПрименениеНеизвестное числоМинимум 1 разТочное число

🎯 Правило выбора:

  • Знаем точное количество → FOR
  • Нужно выполнить минимум 1 раз → DO-WHILE
  • Условие может быть ложным сразу → WHILE

🛠️ Практические примеры

🛤️ Следование по линии

Задача: Робот должен ехать по черной линии

# Основной цикл программы
while True:                          # бесконечный цикл
    color = color_sensor.value()
    
    if color == "black":            # на линии
        left_motor.run(50)
        right_motor.run(50)
    elif color == "white":          # справа от линии
        left_motor.run(30)          # левый медленнее
        right_motor.run(70)         # правый быстрее

🔧 Оптимизация с PID-регулятором:

while not finished:
    error = line_center - current_position
    correction = Kp * error
    
    left_speed = base_speed - correction
    right_speed = base_speed + correction
    
    motors.run(left_speed, right_speed)

🎯 Сортировка объектов

Задача: Рассортировать 10 цветных шариков

sorted_count = 0

while sorted_count < 10:            # пока не отсортировали все
    # Найти шарик
    while not object_detected():
        robot.search_pattern()  
    # Определить цвет
    color = color_sensor.value()   
    # Отнести в нужный контейнер
    if color == "red":
        robot.move_to_red_box()
    elif color == "blue":
        robot.move_to_blue_box()
    elif color == "green":
        robot.move_to_green_box()
    robot.drop_object()
    sorted_count += 1               # увеличить счетчик

🏃 Патрулирование территории

Задача: Робот патрулирует по заданному маршруту

waypoints = [(0,0), (100,0), (100,100), (0,100)]  # координаты точек

for patrol_round in range(5):       # 5 кругов патрулирования
    for point in waypoints:         # по каждой точке маршрута
        robot.move_to(point)
        
        # Сканирование в каждой точке
        for angle in range(0, 360, 45):  # поворот с шагом 45°
            robot.turn_to(angle)
            if obstacle_detected():
                robot.alert("Obstacle found!")
                
    robot.return_to_base()

🧮 Математика циклов

📊 Сложность алгоритмов

Временная сложность циклов: \[O(n) = \text{количество итераций} \times \text{сложность тела цикла}\]

Примеры:

  • Простой цикл: O(n)
  • Вложенные циклы: O(n²)
  • Цикл в цикле в цикле: O(n³)

⚠️ Осторожно с вложенностью!

# O(n³) - очень медленно для больших n!
for i in range(n):
    for j in range(n):
        for k in range(n):
            do_something()

⚡ Оптимизация циклов

1. Минимизация операций в теле цикла:

# ❌ Плохо - вычисление в каждой итерации
for i in range(100):
    result = expensive_calculation()  # медленная операция
    robot.move(result)

# ✅ Хорошо - вычисление один раз
result = expensive_calculation()
for i in range(100):
    robot.move(result)

2. Выбор правильного условия выхода:

# ❌ Плохо - лишние проверки
while True:
    sensor_value = sensor.read()
    if sensor_value > threshold:
        break
    robot.move()

# ✅ Хорошо - прямое условие
sensor_value = sensor.read()
while sensor_value <= threshold:
    robot.move()
    sensor_value = sensor.read()

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

📋 Задания по уровням

🟢 Базовый уровень: Создать блок-схему для робота, который:

  • Движется вперед до черной линии
  • Поворачивает на 180°
  • Возвращается в исходную точку

🟡 Средний уровень: Алгоритм для робота-охранника:

  • Патрулирует прямоугольную территорию
  • При обнаружении препятствия подает сигнал
  • Объезжает препятствие и продолжает патруль

🔴 Продвинутый уровень: Робот-исследователь лабиринта:

  • Ищет выход из лабиринта методом “правой руки”
  • Запоминает пройденный путь
  • Возвращается кратчайшим путем

⏱️ План работы (30 минут)

Этап 1: Анализ задачи (5 мин)
• Понимание требований
• Выбор типов циклов
• Планирование алгоритма

Этап 2: Создание блок-схемы (10 мин)  
• Рисование схемы алгоритма
• Проверка логики
• Оптимизация структуры

Этап 3: Программирование (10 мин)
• Перевод схемы в код
• Тестирование на роботе
• Отладка ошибок

Этап 4: Оптимизация (5 мин)
• Улучшение производительности
• Упрощение кода
• Финальная проверка

🎤 Презентация результатов

📊 Демонстрация проектов

План защиты (2 минуты на команду):

  1. Задача - что должен делать алгоритм
  2. Структура - какие циклы использованы
  3. Демо - работа робота в действии
  4. Оптимизация - как улучшили алгоритм

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

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

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

📊 Оценочная матрица:

  • Корректность блок-схемы (3 балла)
  • Правильность выбора циклов (2 балла)
  • Работоспособность программы (3 балла)
  • Оптимизация решения (2 балла)
  • Качество презентации (2 балла)

🎯 Максимум: 12 баллов

  • 11-12 баллов: “5”
  • 8-10 баллов: “4”
  • 6-7 баллов: “3”

🤔 Рефлексия

📝 Завершите предложения

“Сегодня я узнал…”

“Мне было интересно…”

“Мне было трудно…”

“Теперь я могу…”

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

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

Создать блок-схему алгоритма “Умный дом”:

Система должна использовать все 3 типа циклов:

  • FOR - проверка всех датчиков по очереди
  • WHILE - ожидание изменения освещенности
  • DO-WHILE - настройка температуры

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

  • Мониторинг температуры, освещенности, влажности
  • Автоматическое управление освещением
  • Поддержание комфортной температуры
  • Система безопасности

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

Исследование: найти примеры циклических алгоритмов в реальных роботах:

  • Промышленные роботы на заводах
  • Бытовые роботы (пылесосы, газонокосилки)
  • Роботы-исследователи (марсоходы, подводные)

🎉 Итоги урока

🏆 Что освоили

✅ Изучили:

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

🔄 Поняли:

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

🌟 Главный принцип

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

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

💡 Теперь ваши роботы умеют повторять и не повторяют ошибок!