Перейти к содержанию
Educora
Средний9–11 классы25 мин37 / 59

Написание программ: письменные задания

Письменные задания 89 и 90 по информатике: как их оценивают, как читать таблицу *Giriş / Çıxış*, 10 образцовых решений по семействам задач 2025–2026 годов и ошибки, которые стоят баллов.

Проверь себя
В этом уроке ты узнаешь
  • Знать место письменных заданий в работе, их вес и шкалу оценки (0, ⅓, ½, ⅔, 1).
  • Извлекать из таблицы Giriş / Çıxış формат ввода, вид вывода и особый случай (yoxdur).
  • Писать полную программу по готовому каркасу для пяти семейств задач: числа в промежутке и делители, классы остатков, списки, цифры, строки.
  • Проверять программу на примерах и находить типичные ошибки, из-за которых теряются баллы.

В конце части по информатике в листе ответов ждут пустое поле и одна фраза: «…напишите на языке Python программу, которая выводит… Например:» — и рядом маленькая таблица Giriş / Çıxış (ввод / вывод). Вариантов ответа нет, написанную программу оценивают проверяющие (маркеры). Есть и хорошая новость: все восемь письменных заданий по Python на четырёх экзаменах 2025–2026 годов относятся к нескольким семействам. Если знаешь каркас каждого семейства, задание сводится к тому, чтобы «написать условие».

Как выглядит письменное задание и как его оценивают

Часть по информатике — это задания 61–90: 22 закрытых (61–82), 5 с кодируемым ответом (83–87) и 3 письменных (88–90). В задании 88 строится блок-схема (см. урок «Построение блок-схем: письменные задания»), в заданиях 89 и 90 пишется программа на Python. Письменные задания проверяют маркеры по критериям и ставят за каждое 0, ⅓, ½, ⅔ или 1 балл. Подробные критерии DİM не публикует, поэтому цель простая: полная, правильная и понятная программа, в которой на месте каждая часть — ввод, вычисление и вывод.

NBa = (Dkod + 2 · Dyazılı) · 100 / 33NBa = (Dkod + 2 · Dyazılı) · 100 / 33
где:
  • NBaотносительный балл за открытые задания
  • Dkodчисло верных кодируемых ответов (0–5)
  • Dyazılıсумма баллов за письменные задания (0–3)

Закрытая часть добавляет 100/33 · (Dq − Yq/4); максимум по предмету — 100. Письменное задание весит столько же, сколько два задания с кодируемым ответом.

Расчёт балла

Лейла верно решила 4 из 5 заданий с кодируемым ответом, а за письменные задания получила 1, ⅔ и ½ балла. Каков её относительный балл за открытые задания? Сколько баллов «стоит» полностью решённое письменное задание?

Показать решение
Dyazılı = 1 + ⅔ + ½ = 13/6.
NBa = (4 + 2 · 13/6) · 100/33 = (4 + 13/3) · 100/33 = 25/3 · 100/33 ≈ 25,3.
Полностью решённое письменное задание даёт 2 · 100/33 ≈ 6,1 балла, а ⅓ от него ≈ 2,0 балла (по 100-балльной шкале). В подгруппе Rİ весовой коэффициент информатики равен 1, поэтому эти баллы входят в общий балл без изменений.
Вывод: верно начатая, но незаконченная программа тоже может принести баллы — пустое поле никогда.

Самая ценная часть задания — таблица Giriş / Çıxış. Левый столбец показывает то, что набирается на клавиатуре, — каждая строка это один вызов input(). Правый столбец точно показывает, что программа должна вывести: число, слово, список в квадратных скобках или несколько строк. Читай таблицу так:

  1. 1
    Посчитай строки

    Сколько строк ввода в одном примере? Если первая строка — n и за ней идут ровно n строк, сначала прочитай n, затем в цикле n чисел.

  2. 2
    Выбери тип

    Целое число — int(input()); текст — input(); несколько значений в одной строке через пробел — input().split(' ').

  3. 3
    Посмотри на вид вывода

    Одно число — один print после цикла; [15, 6, 7] — print(b); каждое число на своей строке — print внутри цикла.

  4. 4
    Проверь правило

    Посчитай один пример вручную: почему получается именно этот ответ? Следи за разницей между «больше» и «больше или равно», «количество» и «сумма».

  5. 5
    Найди особый случай

    Если в выводе вместо числа стоит слово (yoxdur — по-азербайджански «нет»), после цикла нужен if–else.

В столбце GirişВ программе
одно числоn = int(input())
два числа в двух строкахa = int(input()), b = int(input())
n, затем n чисел, каждое на своей строкеfor i in range(0, n): a.append(int(input()))
значения в одной строке через пробелa = input().split(' ') — элементы являются строками
одна строка текстаs = input()

Каркас программы: ввод → обработка → вывод

Каждая экзаменационная программа состоит из трёх частей, которые всегда пишутся в таком порядке. Ввод: все строки с input() в начале. Обработка: счётчик или сумма обнуляются до цикла (k = 0, s = 0, b = []), цикл проверяет условие и накапливает результат. Вывод: без отступа, после цикла — при необходимости с веткой yoxdur. Десять примеров ниже делятся на пять семейств; первое решение каждого семейства — каркас для всего семейства.

Образцовые решения: пять семейств, десять задач

Семейство 1 — числа в промежутке и делители. Цикл идёт по range(a, b + 1) или range(1, n + 1), при выполнении условия растёт счётчик или сумма. В 2025–2026 годах из этого семейства были задания типа «квадраты нечётных чисел на отрезке» и «сумма нечётных делителей».

1. Чётные полные квадраты

Напишите на Python программу, которая для введённых с клавиатуры натуральных чисел a и b (a < b) выводит сумму чётных полных квадратов (4, 16, 36, …) на отрезке [a; b], а если таких чисел нет — слово yoxdur.
Giriş → Çıxış (a и b на отдельных строках)
10, 70 → 116
50, 60 → yoxdur
1, 4 → 4

Показать решение
Оба конца входят → range(a, b + 1).
Проверка на полный квадрат: r = int(x ** 0.5) и r * r == x — точная, так как работает с целыми числами.
Чётность: x % 2 == 0. Сумма s до цикла равна 0.
Сумма натуральных чисел равна 0, только если ни одно число не найдено, поэтому после цикла if s == 0: → yoxdur.
Проверка: [10; 70]: 16 + 36 + 64 = 116 ✓.
Python
a = int(input())
b = int(input())
s = 0
for x in range(a, b + 1):
    r = int(x ** 0.5)
    if x % 2 == 0 and r * r == x:
        s = s + x
if s == 0:
    print('yoxdur')
else:
    print(s)
2. Чётные делители

Напишите программу, которая выводит в одной строке через пробел количество и сумму чётных делителей введённого натурального числа n.
Giriş → Çıxış
36 → 6 78
15 → 0 0
8 → 3 14

Показать решение
Делителем может быть и само n → range(1, n + 1).
Условие из двух частей: n % d == 0 (делитель) и d % 2 == 0 (чётный), соединённых через and.
Оба результата накапливаются в одном цикле; print(k, s) выводит их через пробел.
Проверка: чётные делители 36 — 2, 4, 6, 12, 18, 36 → 6 чисел, сумма 78 ✓.
Python
n = int(input())
k = 0
s = 0
for d in range(1, n + 1):
    if n % d == 0 and d % 2 == 0:
        k = k + 1
        s = s + d
print(k, s)

Семейство 2 — классы остатков. Числа записываются в таблицу «змейкой», и спрашивается, в каком столбце стоит число. Две строки таблицы образуют период: при 3 столбцах период 6, при 4 — 8. В 2025 году из этого семейства была таблица с тремя столбцами.

3. Таблица-змейка

Натуральные числа записаны в столбцы A, B, C, D так: 1-я строка 1 2 3 4, 2-я строка 8 7 6 5, 3-я строка 9 10 11 12, 4-я строка 16 15 14 13 и т. д. Напишите программу, которая выводит столбец введённого числа a.
Giriş → Çıxış
7 → B
12 → D
16 → A
30 → C

Показать решение
Выпиши остатки одного периода (двух строк): a % 8 = 1, 2, 3, 4 → A, B, C, D; 5, 6, 7, 0 → D, C, B, A.
Значит: A — остаток 1 или 0; B — 2 или 7; C — 3 или 6; D — 4 или 5.
У чисел 8, 16, 24, … остаток 0, и они стоят в столбце A — не забудь этот случай.
Проверка: 30 % 8 = 6 → C ✓ (8-я строка: 32 31 30 29).
Python
a = int(input())
r = a % 8
if r == 1 or r == 0:
    print('A')
elif r == 2 or r == 7:
    print('B')
elif r == 3 or r == 6:
    print('C')
else:
    print('D')

Семейство 3 — n чисел, введённых в список. Сначала читается n, затем n чисел, которые собираются в пустой список; потом список обрабатывается целиком (min, max, sum) или поэлементно. В 2026 году из этого семейства были задания типа «каждый элемент плюс наименьший элемент» и «файлы, занимающие целые кластеры».

4. Разность с наибольшим элементом

n целых чисел вводятся с клавиатуры в пустой список. Напишите программу, которая выводит новый список, элементы которого — разности между наибольшим элементом исходного списка и каждым элементом.
Giriş → Çıxış (первое число — n, каждое число на своей строке)
4, 3, 10, −2, 7 → [7, 0, 12, 3]
3, 5, 5, 1 → [0, 0, 4]

Показать решение
Каркас: n = int(input()), a = [], в цикле a.append(int(input())).
m = max(a) вычисляется один раз, до второго цикла.
Новый список b строится с пустого: b.append(m - x).
Вывод в квадратных скобках → print(b).
Проверка: max = 10 → 10 − 3, 10 − 10, 10 − (−2), 10 − 7 = [7, 0, 12, 3] ✓.
Python
n = int(input())
a = []
for i in range(0, n):
    a.append(int(input()))
m = max(a)
b = []
for x in a:
    b.append(m - x)
print(b)
5. Кластеры

Объёмы n файлов папки в Кбайтах вводятся в пустой список. Размер кластера 8 Кбайт. Напишите программу, которая выводит общее место (в Кбайтах), занимаемое файлами на диске.
Giriş → Çıxış
3, 20, 8, 1 → 40
4, 16, 17, 7, 40 → 88

Показать решение
Файл занимает на диске только целые кластеры: даже если последний кластер заполнен частично, он считается занятым (см. урок «Файловые системы и место на диске»).
Число кластеров: x // 8, плюс 1, если есть остаток (округление вверх).
20 Кбайт → 3 кластера = 24 Кбайт; 8 → 8; 1 → 8. Всего 40 ✓.
Проверка 2: 16 + 24 + 8 + 40 = 88 ✓.
Python
n = int(input())
a = []
for i in range(0, n):
    a.append(int(input()))
s = 0
for x in a:
    k = x // 8
    if x % 8 != 0:
        k = k + 1
    s = s + k * 8
print(s)
6. Больше среднего

n целых чисел вводятся в пустой список. Напишите программу, которая выводит количество элементов, больших среднего арифметического.
Giriş → Çıxış
5, 4, 9, 1, 6, 10 → 2
3, 5, 5, 5 → 0

Показать решение
Среднее m = sum(a) / n вычисляется до цикла; / даёт дробь (6.0) — для сравнения это не помеха.
Условие строгое: «больше» → x > m, а не >=.
Проверка: (4 + 9 + 1 + 6 + 10) / 5 = 6; больше 6 — числа 9 и 10 → 2 ✓. Если все элементы равны, ни один не больше среднего → 0.
Python
n = int(input())
a = []
for i in range(0, n):
    a.append(int(input()))
m = sum(a) / n
k = 0
for x in a:
    if x > m:
        k = k + 1
print(k)

Семейство 4 — цифры каждого числа. Цифры каждого числа проверяются отдельно; это удобно вынести во вспомогательную функцию (см. урок «Функция: def, параметры и return»). В 2026 году задание «числа, все цифры которых нечётные» было из этого семейства.

7. Все цифры чётные

Напишите программу, которая из n введённых с клавиатуры натуральных чисел выводит (каждое на своей строке) те, у которых все цифры чётные, а если таких нет — слово yoxdur.
Giriş → Çıxış
4, 248, 1234, 60, 7 → 248 и 60 (в двух строках)
2, 13, 5 → yoxdur

Показать решение
Функция even_digits(n) проверяет цифры по одной с конца: как только найдена нечётная цифра — return False; если цикл закончился — return True.
Подходящее число выводится внутри цикла (в выводе несколько строк), а счётчик k нужен для yoxdur.
Проверка: 248 → 8, 4, 2 чётные ✓; 1234 → 4 чётная, 3 нечётная ✗; 60 ✓; 7 ✗.
Python
def even_digits(n):
    while n > 0:
        if n % 10 % 2 == 1:
            return False
        n = n // 10
    return True

n = int(input())
a = []
for i in range(0, n):
    a.append(int(input()))
k = 0
for x in a:
    if even_digits(x):
        print(x)
        k = k + 1
if k == 0:
    print('yoxdur')
8. Палиндромы

Для натуральных чисел a и b (a < b) напишите программу, которая выводит количество чисел-палиндромов (как 121, 44, 7 — не меняются при чтении справа налево) на отрезке [a; b].
Giriş → Çıxış
10, 60 → 5
100, 130 → 3
1, 9 → 9

Показать решение
Самый короткий путь — превратить число в строку: str(x) == str(x)[::-1] — строка совпадает со своим обращением.
Можно написать и x == rev(x) с функцией rev из урока «Функция: def, параметры и return».
Проверка: [100; 130]: 101, 111, 121 → 3 ✓. Все однозначные числа — палиндромы.
Python
a = int(input())
b = int(input())
k = 0
for x in range(a, b + 1):
    if str(x) == str(x)[::-1]:
        k = k + 1
print(k)

Семейство 5 — строки. Строка либо читается целиком (s = input()) и обходится посимвольно, либо разрезается на части через split(' '). В 2025 году из этого семейства были задания типа «количество различных символов в строке» и «сумма индексов элементов, которые начинаются с 3 и заканчиваются на 6».

9. Символы, встречающиеся один раз

Напишите программу, которая выводит количество символов, встречающихся ровно один раз во введённой с клавиатуры строке.
Giriş → Çıxış
abracadabra → 2
python → 6
10 + 20 = 30 → 5

Показать решение
Для каждого символа ch проверяется s.count(ch) == 1; пробел — тоже символ.
«10 + 20 = 30»: 0 встречается три раза, пробел — четыре; один раз встречаются 1, +, 2, =, 3 → 5 ✓.
Другой вопрос — «количество различных символов» — это другой каркас: добавляй каждый символ в новую строку или список только один раз и в конце выведи len.
Python
s = input()
k = 0
for ch in s:
    if s.count(ch) == 1:
        k = k + 1
print(k)
10. Первый и последний символ

Элементы списка вводятся в одной строке через один пробел. Напишите программу, которая выводит список индексов элементов, у которых первый и последний символы совпадают, а если таких нет — слово yoxdur.
Giriş → Çıxış
aba 12 x 707 ab 55 → [0, 2, 3, 5]
ab cd → yoxdur

Показать решение
a = input().split(' ') даёт элементы в виде строк — переводить в числа не нужно, ведь сравниваются символы.
Нужны индексы → for i in range(0, len(a)); элемент w = a[i], первый символ w[0], последний w[-1].
Для односимвольного «x» w[0] и w[-1] — один и тот же символ → подходит.
Проверка: aba (0), x (2), 707 (3), 55 (5) → [0, 2, 3, 5] ✓.
Python
a = input().split(' ')
b = []
for i in range(0, len(a)):
    w = a[i]
    if w[0] == w[-1]:
        b.append(i)
if len(b) == 0:
    print('yoxdur')
else:
    print(b)

Ошибки, которые стоят баллов, и самопроверка

ОшибкаЧто происходитИсправление
нет int: a = input()строки склеиваются: '12' + '5' = '125'; сравнение идёт по алфавиту: '9' > '10'a = int(input())
range(1, n)само n не проверяется: теряется делитель n или конец отрезка brange(1, n + 1)
print внутри цикламного строк вместо одного числапиши print после цикла, без отступа
нет ветки yoxdurесли подходящих чисел нет, выводится 0 или пустой списокпосле цикла if k == 0: → print('yoxdur')
лишний текст в выводеinput('n='), print('k =', k) — вывод не совпадает со столбцом Çıxışinput() и print только того, что требуется
счётчик не обнулёнNameError или неверная суммаk = 0, s = 0, b = [] до цикла
синтаксис: if x = 5, пропущено :, сбит отступпрограмма вообще не запускается== сравнивает, = присваивает; 4 пробела на блок
  1. 1
    Прогони примеры

    Прогони каждый пример Giriş через программу с таблицей переменных; результат должен совпасть со столбцом Çıxış буква в букву.

  2. 2
    Проверь границы

    Случай без подходящих элементов (yoxdur), список из одного элемента, сами концы отрезка a и b.

  3. 3
    Проверь вид вывода

    Один print после цикла? Список в скобках? Слово точно как в задании (yoxdur)?

  4. 4
    Проверь синтаксис

    Двоеточия, отступы, == в условиях, две пары скобок в int(input()).

  5. 5
    Перечитай условие

    «количество» или «сумму»? «нечётные» или «чётные»? «больше» или «больше или равно»?

Python
def solve(a, b):
    s = 0
    for x in range(a, b + 1):
        r = int(x ** 0.5)
        if x % 2 == 0 and r * r == x:
            s = s + x
    if s == 0:
        return 'yoxdur'
    return s

tests = [(10, 70, 116), (50, 60, 'yoxdur'), (1, 4, 4)]
for a, b, expected in tests:
    got = solve(a, b)
    print(a, b, got, got == expected)
▸ Ожидаемый результат
10 70 116 True
50 60 yoxdur True
1 4 4 True

Готовясь дома, проверяй программу так: преврати вычисление в функцию и запусти сразу все примеры задания. Затем замени b + 1 на b и запусти снова — третий тест даст False. Так выглядит тест, который ловит ошибку: правый конец отрезка (b = 4) сам является ответом.

Задание

На экзамене a и b читались бы с клавиатуры (a = int(input()), b = int(input())); здесь они заданы. Выведи количество чисел на отрезке [a; b] с суммой цифр 9, а если таких нет — слово yoxdur.

Задание · Python
a = 20
b = 60
# exam version: a = int(input()) and b = int(input())
▸ Ожидаемый результат
4
Задание

Элементы вводятся в одной строке через один пробел (на экзамене line = input()). Выведи сумму индексов элементов, которые больше предыдущего элемента (перед элементом с индексом 0 элемента нет).

Задание · Python
line = '7 12 5 30 8'
# exam version: line = input()
▸ Ожидаемый результат
4

Лучший способ подготовиться к письменным заданиям — написать по одной задаче каждого семейства на бумаге на время, а затем проверить её на компьютере на примерах. Чтение программ (закрытые задания и задания с кодируемым ответом) отрабатывается в уроке «Анализ программы: от результата к входным данным», а блок-схема задания 88 — в уроке «Построение блок-схем: письменные задания».

Главное

  • Задания 89 и 90 — программы на Python; маркеры ставят 0, ⅓, ½, ⅔ или 1 балл, одно письменное задание весит как два задания с кодируемым ответом.
  • Столбец Giriş показывает вызовы input(), столбец Çıxış — точно то, что нужно вывести.
  • Каркас всегда одинаков: ввод → счётчик, сумма или пустой список → цикл и условие → вывод после цикла.
  • Вывод слова (yoxdur) требует if–else после цикла.
  • Больше всего баллов стоят ошибки: нет int, range(1, n), print внутри цикла, лишний текст в выводе.

Проверь себя

Вопросов: 12. Каждый правильный ответ приносит XP.

1 / 12
Как оцениваются письменные задания по информатике?