Инструменты пользователя

Инструменты сайта


10i_2025_algo

Это старая версия документа!


Содержание

10И Введение в робототехнику

Мобильные роботы на базе платы Arduino

Подключите к Arduino кнопку и три светодиода (макет светофора) и кнопку. Напиши код обработки нажатия кнопки. Каждый раз нажатием по кнопке светофор будет переключаться в следующее состояние. С красного на желтый, с желтого на зеленый, с зеленого на красный, и т.д.

КИБЕР-БОЙ

Тренировочное задание

Первый этап

Второй этап

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

Третий этап

Вспомогательные ресурсы:

Справочник по функциям C++ для Arduino

Виртуальные модели в Workwi

Программирование микроконтроллеров на Arduino

Бегущие огни

int pin_0 = 7;
int n = 0;
void setup()
{
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
}
 
void loop()
{
digitalWrite(pin_0 - n, 1);
  delay(100);
digitalWrite( pin_0 - n, 0);
 n = (n + 1) % 3;
delay(900);
}

Подключение кнопки с учетом борьбы с дребезгом кнопок

// switch...case
switch (var) {
  case 1:
    //do something when var equals 1
    break;
  case 2:
    //do something when var equals 2
    break;
  default:
    // if nothing else matches, do the default
    // default is optional
    break;
}

Дополнительные учебные курсы по Arduino

Программирование ТРИК на Python!!!

Виртуальные лаборатории МЭШ

Алгоритмы и структуры данных на языке программирования Python

Ресурсы

Яндекс Учебник

Международная платформа с элементами игрофикации

Учебные курсы

Программа

Работа с исполнителем Робот на языке Python (перемещение робота в среде исполнителя)

  • Составные условия, операторы (Python), Цикл FOR (Python), Цикл While (Python)
  • Решение задач с помощью циклов (Python)
  • Задачи с исполнителем Робот

Строки в Python

  • Индексы и срезы строк
  • Сравнение строк, методв строк

Вещественные числа

  • Вещественные числа и тип float. Округление

Массивы

  • Массивы и основные операции с ними. Добавление элементов в массив
  • Индексы элементов массива, срезы.Два типа циклов по массиву.
  • Задачи поиска элемента в массиве. Решение и разбор задач

Методы списков/строк

  • Методы: join(), split(), index(), count(), pop(), remove(), insert()
  • Встроенные операторы и функции: in, not in, max, min
  • Использование массивов для решения задач

Функции и модули

  • Функции, основные понятия. Параметры функций
  • Стандартная библиотека Python. Модули
  • Рефакторинг
  • Рекурсия
  • Решение задач при помощи рекурсивных функций
  • Чтение и запись данных в файл на Python

Задачи на алгоритмы

  • Сложность алгоритмов
  • Двумерные списки (массивы)
  • Словари и множества
  • НОД и НОК. Разбор и решение задач
  • Простые числа и разложение на простые множители
  • Сортировка. Задачи на сортировку
  • Делители натурального числа
  • Переборные алгоритмы
  • Библиотека itertools для решения переборных и комбинаторных задач
  • Динамическое программирование ч.1
  • Динамическое программирование ч.2
  • Кластерный анализ ч.1
  • Кластерный анализ ч.1
  • Алгоритмические задачи

Алгоритмы для исполнителя Черепаха

  • Алгоритмы для исполнителя Черепаха ч.1
  • Алгоритмы для исполнителя Черепаха ч.2

Алгоритмы из Codingame

# Автор: Леднёв Алексей
a = [i for i in input().split()]
k = len(a)*2-1
s = [[0 for i in range(k)]for i in range(k)]
for l in range(len(a)) :
    for i in range(l,k-l) :
        for j in range(l,k-l) :
            if i == l or i == k-(l+1) or j == l or j == k-(l+1) :
                s[i][j] = a[l] 
 
for i in s :
    print(*i)
 
'''
input
1 2 3
output
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
'''
n = int(input())
r = sum([int(input()) for i in range(n)])
print(f'{["Foo", "Bar"][r<0]} & {["Qux", "Baz"][r%2 == 0]}')

Codingame

08.10.24

10.10.24

15.10.2024

17.10.2024

22.10.2024

24.10.2024

const int LM_s1 = 10; // левый мотор вход 1
const int LM_s2 = 9; // левый мотор вход 2
const int RM_s1 = 5; // правый мотор вход 1
const int RM_s2 = 6; // правый мотор вход 2
 
int led_pin = 13;
// Укажем пины для подключения УЗ датчика
int trigPin = 12; 
int echoPin = 11;  
int s_for_obj = 0; 
// текущее состояние системы
int state = 0; // начальное состояние
 
void setup(){
 Serial.begin(9600);
 
 //правый
    pinMode(RM_s1, OUTPUT);
    pinMode(RM_s2, OUTPUT);
 //левый
    pinMode(LM_s1, OUTPUT);
    pinMode(LM_s2, OUTPUT);
// УЗ
    pinMode(trigPin, OUTPUT); 
    pinMode(echoPin, INPUT); 
// светодиод
    pinMode(led_pin, OUTPUT);
}
 
 
int dist() // функция для вычисления расстояния
{
  int t,s; // локальные переменные время, расстояние
  // установить высокий уровень на пине Trig
  digitalWrite(trigPin, 1);
  // подождать 10 мс 
  delay(10/16); 
  digitalWrite(trigPin, 0); 
  // узнаем время
  t = pulseIn(echoPin, 1); 
  // вычисляем расстояние
  s = t * 0.034/2; 
  return (s);
}
 
 
 
void loop() {
    s_for_obj = dist();
    //Serial.println(s_for_obj );// вывод измеренного расстояния в окно сообщений
    //delay(20/16); 
Serial.println(state);
switch (state) {
  case 0: // начальное состояние: вперёд до первого препятствия
  case 2: // после первого поворота: вперёд до второго препятствия
    if (s_for_obj == 0 || s_for_obj > 68){
         moveForward();
    } else {
         stopMotors();
         state ++;
    }
    break;
 
  case 1: // перед первым препятствием: левый поворот
  case 3: // перед вторым препятствием: левый поворот
    turnLeft();
    delay(2970/16);
    state ++;
    stopMotors();
    break;
 
  case 4: // после второго поворота: прямолинейный путь до остановки
    moveForward();
    delay(23000/16); // время прямолинейного движения до остановки
    state ++;
    stopMotors();
    break;
 
  case 5: // после остановки на площадке: включить светодиод на 4 секунды
    digitalWrite(led_pin, 1);
    delay(4000/16);
    digitalWrite(led_pin, 0);
    state ++;
    break;
  case 6: // 
    stopMotors();
    break;
  default:
     stopMotors();
  break;
 }
}
 
void moveForward() {
     //Serial.println("up");
    digitalWrite(LM_s1, 1);
    digitalWrite(LM_s2, 0);
    digitalWrite(RM_s1, 1);
    digitalWrite(RM_s2, 0);
 delay(20);
}
 
void moveBackward() {
    //Serial.println("down");
 
    digitalWrite(LM_s1, 0);
    digitalWrite(LM_s2, 1);
    digitalWrite(RM_s1, 0);
    digitalWrite(RM_s2, 1);
 delay(20);
}
 
void turnLeft() {
    digitalWrite(LM_s1, LOW);
    digitalWrite(LM_s2, HIGH);
    digitalWrite(RM_s1, HIGH);
   digitalWrite(RM_s2, LOW);
 delay(20);
}
 
void turnRight() {
    digitalWrite(LM_s1, HIGH);
    digitalWrite(LM_s2, LOW);
    digitalWrite(RM_s1, LOW);
   digitalWrite(RM_s2, HIGH);
 delay(20);
}
 
void stopMotors() {
    digitalWrite(LM_s1, LOW);
    digitalWrite(LM_s2, LOW);
    digitalWrite(RM_s1, LOW);
   digitalWrite(RM_s2, LOW);
 //delay(20);
}

РОБОТ МФТИ

http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html РОБОТ

  • robot-tasks-master_.zip - Архив с файлами робота (модификация: в файле pyrob/api.py добавлен, приведенный ниже код, упрощающий написание команд (инструкций) управления роботом)
ml = move_left	#Пройти n клеток влево (по умолчанию n = 1)
mr = move_right	#Пройти n клеток вправо (по умолчанию n = 1)
mu = move_up  	#Пройти n клеток вверх (по умолчанию n = 1)
md = move_down 	#Пройти n клеток вниз (по умолчанию n = 1)
wu = wall_is_above 	#если сверху стена, возвращает True, иначе — False
wd =  wall_is_beneath 	#если снизу стена, возвращает True, иначе — False
wl = wall_is_on_the_left 	#если слева стена, возвращает True, иначе — False
wr = wall_is_on_the_right 	#если справа стена, возвращает True, иначе — False
fill = fill_cell 	#Закрасить текущую клетку
#cell_is_filled 	#Возвращает True, если текущая клетка закрашена
#mov 	#Поместить значение v в регистр r

Пример решения первой задачи

#!/usr/bin/python3
 
from pyrob.api import *
 
 
@task
def task_1_1():
    #pass
    mr(2) # Пройти 2 клетки вправо или: move_right(2)
    md(1) # Пройти 1 клетку вниз или:   move_down(2)
 
 
if __name__ == '__main__':
    run_tasks()
10i_2025_algo.1740746491.txt.gz · Последние изменения: 2025/02/28 15:41 — super_admin