Решите известную задачу из области информатики за кратчайшее время.
В соревновательном программировании задачи не носят исследовательский характер. Эти задачи были решены, как минимум их составителями.
Решить олимпиадную задачу - значит активизировать все свои познания в области информатики для получения кода программы, способного пройти тесты, подготовленные авторами задачи.
Соревновательный компонент олимпиады - необходимость решить предложенные задачи за ограниченное время.
Решение задач - не самоцель.
Основная задача олимпиадного программирования - раскрыть творческий потенциал учащегося, расширить их зону ближайшего развития.
Зачастую олимпиадная задача по программированию состоит из следующих частей:
Художественное описание - история, служащая мотивацией к решению задачи. Задача учащегося: отфильтровать лишнее, выделить главное.
Описание входных и выходных данных - формат ввода/вывода, ограничения.
Примеры тестовых данных - авторы задач приводят примеры тривиальных тестовых данных. Пограничные случаи должен обнаружить участник.
Используйте архивы прошедших олимпиад для тренировки. Такие задачи могут содержать примеры решений или туториалы - теорию, необходимую для решения задачи.
Используйте архивы задач с автоматической проверкой отправленных решений:
Этапы решения задачи по программированию
Определить, что дано и что нужно найти.
Определить типы входных и выходных данных и как эти данные будут представлены в программе.
Подобрать конкретные входные данные и найти способ получить для них выходные значения.
Обстрагироваться от конкретных данных и обобщить алгоритм решения для произвольных значений.
При необходимости уточнить типы данных, выбранные на этапе постановки задачи.
Описать алгоритм решения задачи на естественном языке: перечислить шаги, благодаря которым были получены выходные значения для каждого конкретного примера.
Обратить внимание на общие для каждого примера шаги - повторяющиеся шаблоны.
Обобщённый алгоритм записать на естественном языке, псевдокоде или в форме блок-схемы.
Уделяем особое внимание фразам-маякам в описании алгоритма: “для каждого элемента …”, “сложить значения …”, “найти сумму …” и т.д.
Закодировать алгоритм решения на языке программирования.
Тестирование: выполняется ли программа так, как задумывалось и верен ли результат её выполнения.
Отладка программы: исправление найденных на этапе тестирования ошибок.
Дан список температур за неделю. Подсчитать количество дней с отрицательной температурой и сумму модулей отрицательных значений температур.
Определим входные и выходные данные:
входные данные: список вещественных чисел temps;
выходные данные: количество дней с отрицательной температурой count - целое число, сумма модулей отрицательных температур summ - вещественное число.
Конкретный пример: список [5, -2, 0, -5, 3, 1, -1].
В этом случае количество равно 3, а сумма модулей температур равна 8.0.
Спроектируем алгоритм.
В начале счётчик и сумма равны нулю.
Чтобы посчитать количество и сумму, нужно перебрать все элементы списка.
Для каждого элемента проверяем, меньше ли он 0.
Если это так, то к счётчику прибавим 1, а к сумме прибавим модуль значения этого элемента.
Выведем значения счётчика и суммы на экран.
Блок-схема
Реализуем алгоритм на Python:
Скачивание с официального сайта python.org.
Среды программирования:
Python - интерпретируемый язык программирования. В Python не нужно указывать тип переменной (объекта) при её инициализации.
Динамическая типизация – тип значения определяется автоматически при создании этого значения (объекта).
Сильная типизация – над значением можно выполнять только те операции, которые допустимы для его типа.
Данные в языке Python представлены в виде объектов стандартного либо описанного программистом типа.
int: -2, -1, 0, 1float: 0.5, 1.0, 1.25str: 'Суббота', "Привет!", """2026 год"""list: [0, 1, 1, 2, 3, "пять"]Операторы по приоритету выполнения:
() скобки: 3 * (4 - 1) = 9** возведение в степень : 2 ** 3 = 8* умножение, / деление, // целочисленное деление , % остаток от деления+ сложение , - вычитание% - остаток от деления.
Переменная - это имя, которое ссылается на значение.
Имена в Python регистрозависимые. student и Student для Python разные имена.
Правила именования переменных:
_ ;Оператор присваивания = связывает имя переменной с её значением.
В Python не нужно заранее указывать тип переменной. Значения обладают типом, имена переменных - нет.
Стандартная:
Позиционное:
Групповое:
Комбинированное:
mathИмпорт модуля в скрипт:
print()Формы записи функции print:
Для форматированого вывода используются f-строки:
Пример:
input()Для ввода значений используется функция input():
Функция input() всегда возвращает значение строкового типа str.
Функций для преобразования значения одного типа в другой:
int()float()str()Вычислите среднее арифметическое двух чисел.
print("Среднее арифметическое двух чисел")
# ввод первого числа
num1 = float(input("Введите первое число "))
# ввод второго числа
num2 = float(input("Введите второе число "))
'''
вычисление среднего арифметического
чтобы сложение выполнилось раньше деления
слагаемые помещены в скобки
'''
average = (num1 + num2) / 2
print(f"Ответ: {average}")Объявление функции с параметрами:
В Python вложенность инструкций определяется отступами. Блок инструкций начинается после двоеточия :
Дополнительная информация по оформлению кода - PEP8
Чтобы вернуть значение из функции используется инструкция return.