🔁 Итерации • 📊 Условия • ⚡ Оптимизация • 🤖 Применение
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()
📊 Экономия:
🔍 Принцип: Проверяем условие ДО выполнения
while условие_истинно:
выполнить_действие()
📊 Блок-схема:
┌─────────┐
│ Условие │ ──Ложь──→ Выход
└────┬────┘
│Истина
▼
┌─────────┐
│ Действие│
└────┬────┘
│
└──────────┘
🤖 Пример - движение до препятствия:
while distance_sensor.value() > 10: # пока расстояние больше 10 см
motors.forward(50) # двигаться вперед
motors.stop() # остановиться
🔍 Принцип: Выполняем действие, ПОТОМ проверяем
do:
выполнить_действие()
while условие_истинно
📊 Особенность: Выполняется минимум 1 раз!
🤖 Пример - поиск линии:
do:
robot.turn_right(5) # повернуть на 5°
color = color_sensor.value() # проверить цвет
while color != "black" # пока не найдена черная линия
🔍 Принцип: Повторяем ТОЧНО заданное число раз
for i in range(количество_повторений):
выполнить_действие()
🎯 Когда использовать:
🤖 Пример - движение по квадрату:
for side in range(4): # 4 стороны квадрата
robot.forward(30) # вперед на 30 см
robot.turn_right(90) # поворот на 90°
| Критерий | WHILE | DO-WHILE | FOR |
|---|---|---|---|
| Проверка условия | До выполнения | После выполнения | Автоматически |
| Минимум выполнений | 0 раз | 1 раз | 0 раз |
| Счетчик | Ручной | Ручной | Автоматический |
| Применение | Неизвестное число | Минимум 1 раз | Точное число |
🎯 Правило выбора:
Задача: Робот должен ехать по черной линии
# Основной цикл программы
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³) - очень медленно для больших 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()
🟢 Базовый уровень: Создать блок-схему для робота, который:
🟡 Средний уровень: Алгоритм для робота-охранника:
🔴 Продвинутый уровень: Робот-исследователь лабиринта:
Этап 1: Анализ задачи (5 мин)
• Понимание требований
• Выбор типов циклов
• Планирование алгоритма
Этап 2: Создание блок-схемы (10 мин)
• Рисование схемы алгоритма
• Проверка логики
• Оптимизация структуры
Этап 3: Программирование (10 мин)
• Перевод схемы в код
• Тестирование на роботе
• Отладка ошибок
Этап 4: Оптимизация (5 мин)
• Улучшение производительности
• Упрощение кода
• Финальная проверка
План защиты (2 минуты на команду):
❓ Вопросы для обсуждения:
📊 Оценочная матрица:
🎯 Максимум: 12 баллов
“Сегодня я узнал…”
“Мне было интересно…”
“Мне было трудно…”
“Теперь я могу…”
Создать блок-схему алгоритма “Умный дом”:
Система должна использовать все 3 типа циклов:
📋 Требования:
Исследование: найти примеры циклических алгоритмов в реальных роботах:
✅ Изучили:
🔄 Поняли:
“Хороший цикл - это цикл, который завершается в нужный момент и выполняет именно то, что требуется”
🚀 Следующий шаг: Изучение сложных алгоритмических структур и их комбинирование
💡 Теперь ваши роботы умеют повторять и не повторяют ошибок!