3.9. Практическая работа — Информатика 6 класс, Кадыркулов: разбор и ответы
Ookul.kz · разбор уроков

Разберём любой номер вместе!

3.9. Практическая работа

Информатика, 6 класс. Учебник: Кадыркулов Р. А., Нурмуханбетова Г. К. (Алматыкітап баспасы, 2023). Раздел 3: Программирование на языке Python. Страницы 101–105.

Чему научишься

  • Вычислять выражения с //, %, **, round, int, abs и определять тип результата.
  • Записывать математические выражения на Python, не забывая про скобки и знак *.
  • Составлять линейные программы по условию, по блок-схеме и по рисунку.
  • Проверять программу на примерах из условия.

Разминка

  • Чем отличаются / и //? / даёт обычное деление с дробной частью (7 / 2 = 3.5), // только целую часть (7 // 2 = 3).
  • Что делает %? Находит остаток от деления: 7 % 2 = 1.
  • Как записать степень? Через **: 3 ** 2 это 9.
  • Как превратить строку в число? int('35') даёт 35, float('3.5') даёт 3.5.

Разбираемся

Операции Python в одной таблице

запись что делает пример результат
+, -, * сложение, вычитание, умножение 7 * 3 21
/ деление (всегда дробное) 85 / 17 5.0
// целая часть от деления 19 // 4 4
% остаток от деления 19 % 4 3
** степень 2 ** 5 32
abs(x) модуль числа abs(-4) 4
round(x) округление до целого round(40.598) 41
int(x) целая часть, дробь отбрасывается int(40.598) 40
str(x) превращает в строку str(40) '40'

⚠️ Частая ошибка. round и int не одно и то же. round(40.598) даёт 41 (ближайшее целое), а int(40.598) даёт 40 (дробь просто отрезана). Ещё одна странность: round(2.5) даёт 2, а round(3.5) даёт 4. При «ровно половине» Python выбирает ближайшее чётное число.

Кто первый: порядок действий

Python считает, как в математике: сначала скобки и **, потом *, /, //, % слева направо, и только потом + и -. У *, // и % приоритет одинаковый, поэтому они идут по очереди.

Тип результата

Если в выражении есть дробное число (16.5), то и результат // и % будет дробным: 16.5 // 4 это 4.0, а не 4. round и int дают целое число (int), str даёт строку.

Как записывать формулы

В математике знак умножения часто пропускают: bx это b · x. В Python так нельзя: bx станет новым именем переменной. Всегда пиши b * x.

Дробь в Python это деление, а числитель и знаменатель берут в скобки:

Например, $\dfrac{a+b}{c}$ записывается как (a + b) / c.

🌟 Следующий раздел учебника, четвёртый, про работу с текстовыми документами: сноски, гиперссылки, оглавление, реферат, авторское право и плагиат. Кода там не будет, зато привычка работать по шагам пригодится и там.

👨‍👩‍👧 Родителю. Этот урок целиком из практики. Не подсказывайте готовый ответ: попросите ребёнка сначала вычислить выражение на бумаге, а потом проверить запуском в Python. Если результат не совпал, это лучший момент, чтобы разобраться в порядке действий.

Проверь себя

  • Какие шаги включает разработка программы по линейному алгоритму? Данные и их типы, результат и его тип, блоки ввода-вычисления-вывода, проверка на разных данных.
  • Чем руководствоваться при записи линейных алгоритмов на Python? Условием задачи, порядком действий и правилами записи: * ставим всегда, дробь в скобках, степень через **.
  • Как выбрать тип переменных? По данным: целые числа int, дробные float, текст str. Например, монеты и количество предметов это int, цена со «сдачей» может быть float.

Решаем упражнения

№ 1

(Задания, № 1.) Вычисли значения выражений: 1) round(14.141 - 5.45); 2) print(round(25.14 + 15.458)); 3) print(int(25.14 + 15.458)); 4) print(85 / 17); 5) print(round(3.2 + 8.2) // 4); 6) print((16.5 // 4) % 7); 7) print((19.5 // 4) % 7); 8) 3 * 7 // 2 % 7.

Как думать. Считай изнутри наружу: сначала скобки, потом функции, потом остальное. Помни про тип: где есть дробь, там и результат дробный.

Решение.

№ вычисления результат
1 14.141 − 5.45 = 8.691, round даёт ближайшее целое 9
2 25.14 + 15.458 = 40.598, round 41
3 то же число, но int отрезает дробь 40
4 85 / 17 = 5, деление всегда дробное 5.0
5 3.2 + 8.2 = 11.4, round даёт 11, затем 11 // 4 2
6 16.5 // 4 = 4.0, затем 4.0 % 7 4.0
7 19.5 // 4 = 4.0, затем 4.0 % 7 4.0
8 3 * 7 = 21, 21 // 2 = 10, 10 % 7 3

Выражения 1 и 8 записаны без print. В программе из файла они ничего не покажут, а в оболочке IDLE результат появится сам.

Ответ: 9; 41; 40; 5.0; 2; 4.0; 4.0; 3.

№ 2

(Задания, № 2.) Вычисли значения выражений и определи тип результата: 1) round(14.141 - 5.45); 2) 128.5 % 10; 3) int(25.14 + 15.458); 4) round(856 / 177); 5) str(int(25.14 + 15.458)); 6) (16.5 // 4) % 7; 7) 3 + ((19.5 // 4) % 7); 8) '35' + str(3 * 7 // 2 % 7).

Как думать. Каждое действие даёт значение определённого типа. Дробь в операции с // или % делает результат float, а склеивание строк даёт str.

Решение.

№ значение тип
1 9 int
2 8.5 (128.5 = 12 · 10 + 8.5) float
3 40 int
4 856 / 177 ≈ 4.84, значит round даёт 5 int
5 '40' (это текст, а не число) str
6 4.0 float
7 3 + 4.0 = 7.0 float
8 3 * 7 // 2 % 7 = 3, потом str даёт '3', склеиваем: '353' str

Ответ: 9 (int); 8.5 (float); 40 (int); 5 (int); '40' (str); 4.0 (float); 7.0 (float); '353' (str).

№ 3

(Задания, № 3.) Найди математическое выражение, запиши выражения на языке Python. Даны 8 выражений.

Как думать. Выражения записаны в стиле Python (*, /, **, abs). Читай их как программист и переводи в обычную математику: ** степень, abs(...) модуль. Помни: a / b * c это (a / b) · c, а не a / (b · c).

Решение.

  1. (p + k * 4) / (4 * t) - 4 * p * k / (3 - 2 * b) это $\dfrac{p+4k}{4t}-\dfrac{4pk}{3-2b}$.
  2. abs(4 * x) + (3 - 3 * x) / 5 * y это $|4x|+\dfrac{3-3x}{5}\cdot y$.
  3. 3 * x * (x ** 3 - 47 + 2 * y) / abs(x - 4) это $\dfrac{3x(x^3-47+2y)}{|x-4|}$.
  4. a / b * 52 / 35 это $\dfrac{a}{b}\cdot\dfrac{52}{35}=\dfrac{52a}{35b}$.
  5. (x ** 3 - y ** 3) - (x ** 3 - 2) это $(x^3-y^3)-(x^3-2)=2-y^3$. Кубы $x^3$ сокращаются.
  6. abs(3 - x) + x ** 3 / y ** 2 это $|3-x|+\dfrac{x^3}{y^2}$.
  7. y - 2 * x + 78 - 32 % 10 это $y-2x+78-2=y-2x+76$, потому что 32 % 10 равно 2.
  8. 89 // 65 % 34: сначала 89 // 65 = 1, затем 1 % 34 = 1. Выражение всегда равно 1.

⚠️ Частая ошибка. В пункте 2 деление идёт только на 5, а не на 5 * y: действия / и * выполняются слева направо.

Ответ: записи в математическом виде выше; выражение 5 упрощается до 2 − y³, выражение 7 до y − 2x + 76, выражение 8 равно 1.

№ 4

(Задания, № 4.) Запиши на Python математические выражения: а) $a + bx + cyz$; б) $[(ax - b)x + c]x - d$; в) $\dfrac{a+b}{c}+\dfrac{c}{ab}$.

Как думать. Везде ставь *. Квадратные скобки в Python заняты под списки, поэтому в программах используют только круглые: ((a * x - b) * x + c) * x - d. Дробь это деление, числитель и знаменатель в скобках.

Решение.

# а) a + bx + cyz
r1 = a + b * x + c * y * z

# б) [(ax - b)x + c]x - d  (все скобки круглые)
r2 = ((a * x - b) * x + c) * x - d

# в) (a + b) / c  +  c / (a * b)
r3 = (a + b) / c + c / (a * b)

Особенно внимательно со знаменателем: c / a * b означало бы $\dfrac{c}{a}\cdot b$, а нам нужно $\dfrac{c}{ab}$. Поэтому a * b в скобках.

Ответ: а) a + b * x + c * y * z; б) ((a * x - b) * x + c) * x - d; в) (a + b) / c + c / (a * b).

№ 5

(Задания, № 5.) Игра в баскетбол из 4 периодов. После каждого периода показаны очки обеих команд. Выведи итоговый счёт в нужном формате. Пример: ввод 15 7, 12 18, 25 33, 19 15, вывод 71 : 73.

Как думать. В каждой строке два числа: очки первой и второй команды за период. Нужны 8 переменных (по две на период) и две суммы. Формат вывода «71 : 73» даёт sep=' : '.

Решение.

a1, b1 = map(int, input().split())    # 15 7
a2, b2 = map(int, input().split())    # 12 18
a3, b3 = map(int, input().split())    # 25 33
a4, b4 = map(int, input().split())    # 19 15
print(a1 + a2 + a3 + a4, b1 + b2 + b3 + b4, sep=' : ')   # 71 : 73

Ответ: программа выше; для примера выводит 71 : 73.

№ 6

(Задания, № 6.) Карта с историей Отрара: нужно помочь Рамазану составить алгоритм из команд «вперёд», «назад», «вправо», «влево» и количества шагов, чтобы дойти до места, где спрятана сокровищница (рис. 1 в учебнике).

Как думать. На карте пунктирная линия показывает путь. Идём от крестика у большого дерева внизу и читаем подписи на каждом отрезке. «Вперёд» это вверх по карте, «вправо» это вправо. Метры берём из подписей.

Решение. Читаем карту снизу вверх (начало у крестика рядом с деревом внизу, конец у сундука с сокровищами):

  1. вправо 15 м
  2. вперёд 20 м
  3. вправо 17 м
  4. вперёд 22 м
  5. (путь через мостик: на карте длина не подписана)
  6. влево 30 м
  7. вперёд 40 м
  8. вправо 15 м
  9. (короткий спуск назад: длина не подписана)
  10. вправо 40 м
  11. вперёд 12 м: сокровищница

Общая длина всех подписанных отрезков посчитаем программой:

print(15 + 20 + 17 + 22 + 30 + 40 + 15 + 40 + 12)   # 211

Ответ: алгоритм из команд выше; сумма подписанных отрезков 211 м (два участка без подписи не учитываются).

№ 7

(Задания, № 7.) Как заплатить сумму S тенге наименьшим количеством монет номиналом K, P и N тенге? Составь блок-схему и программу. Примеры: 217 10 5 1 даёт 24 (21 + 1 + 2); 345 100 10 5 даёт 8 (3 + 4 + 1).

Как думать. Это та же задача, что про монеты в уроке 3.8, только номиналы не 1, 5, 10, 50, 100, а вводятся с клавиатуры. Берём самую крупную монету K, потом P, потом N. Блок-схема: Начало → ввод S, K, P, N → вычисления → вывод → Конец.

Решение.

S, K, P, N = map(int, input().split())   # 217 10 5 1
c = S // K          # сколько монет по K: 21
S = S % K           # осталось: 7
c = c + S // P      # плюс монеты по P: 1
S = S % P           # осталось: 2
c = c + S // N      # плюс монеты по N: 2
print(c)            # 24

Проверка второго примера: 345 // 100 = 3, остаток 45; 45 // 10 = 4, остаток 5; 5 // 5 = 1; сумма 3 + 4 + 1 = 8.

💡 Такой «жадный» способ работает, когда каждый номинал делится на следующий (как 100, 10, 5 или 10, 5, 1). Для странных наборов монет, например 1, 6 и 10, он может промахнуться: 12 тенге выйдет 10 + 1 + 1 (3 монеты), хотя можно 6 + 6 (2 монеты). В нашей задаче такого нет.

Ответ: программа выше; ответы 24 и 8.

№ 8

(Задания, № 8.) Напиши программы по блок-схемам (рис. 2 и 3) и вычисли результат при заданных значениях.

Рис. 2: t = (a + b + c) % 10, k = (a * t) // 5, n = k + c, вывод n. Значения: а) a = 1, b = 2, c = 5; б) a = 2, b = 4, c = 3.

Рис. 3: m = (a + b) % 10 + (c + d) // 10, k = round((a + b + c + d)…, n = k ** 2 + 2 * m, вывод n. Значения: а) a = 5, b = 2, c = 6, d = 3; б) a = 1, b = 1, c = 2, d = 2.

📕 В блок-схеме на рис. 3 напечатано k = round((a + b + c + d): скобки не закрыты, и по такой записи Python выдаст ошибку. Часть выражения потерялась. Судя по четырём числам, скорее всего там среднее: round((a + b + c + d) / 4).

Как думать. Блок-схема даёт формулы. Порядок: ввод, вычисления сверху вниз, вывод. Подставляй значения и считай по шагам, не забывая про % и //.

Решение.

Рис. 2 (программа):

a, b, c = map(int, input().split())
t = (a + b + c) % 10
k = (a * t) // 5
n = k + c
print(n)
  • а) a = 1, b = 2, c = 5: t = 8 % 10 = 8; k = (1 · 8) // 5 = 1; n = 1 + 5 = 6.
  • б) a = 2, b = 4, c = 3: t = 9; k = (2 · 9) // 5 = 3; n = 3 + 3 = 6.

Рис. 3 (программа, с исправленной скобкой в предположении «среднее»):

a, b, c, d = map(int, input().split())
m = (a + b) % 10 + (c + d) // 10
k = round((a + b + c + d) / 4)
n = k ** 2 + 2 * m
print(n)
  • а) a = 5, b = 2, c = 6, d = 3: m = 7 % 10 + 9 // 10 = 7 + 0 = 7; сумма 16, k = round(4.0) = 4; n = 16 + 14 = 30.
  • б) a = 1, b = 1, c = 2, d = 2: m = 2 + 0 = 2; сумма 6, k = round(1.5) = 2; n = 4 + 4 = 8.

Ответ: рис. 2: а) 6, б) 6. Рис. 3 (при делении на 4): а) 30, б) 8.

№ 9

(Задания, № 9.) Составь текст задачи с переменными a, b, c по рисунку 4 (три корзины: яблоки, апельсины, груши). Составь программу и блок-схему по этому условию.

Как думать. На рисунке три корзины с фруктами, на каждой своя буква. Придумай вопрос к задаче: сколько всего фруктов или как их поделить.

Решение.

Условие. В одной корзине лежит a яблок, во второй b апельсинов, в вазе c груш. Все фрукты разложили поровну на три тарелки для гостей. Сколько фруктов на каждой тарелке и сколько останется?

Блок-схема по шагам:

a = int(input())          # яблоки
b = int(input())          # апельсины
c = int(input())          # груши
s = a + b + c             # всего фруктов
print(s // 3, s % 3)      # на тарелке и остаток

Проверка: 7, 4, 6 даёт s = 17, на тарелке 5, остаётся 2, и программа выведет 5 2.

Ответ: любая похожая задача с программой и блок-схемой; пример выше.

№ 10

(Задания, № 10.) Составь условие задачи с переменными v₁, v₂, t, s по рисунку 5 (два велосипедиста на дороге, скорости v₁ = a и v₂ = b, время t, расстояние S). Составь программу и блок-схему.

Как думать. На рисунке два велосипедиста едут навстречу друг другу, между ними расстояние S. Связь простая: за время t они вместе сближаются на (v₁ + v₂) · t.

Решение.

Условие. Два велосипедиста едут навстречу друг другу по прямой дороге. Сейчас между ними S км. Скорость первого v₁ км/ч, второго v₂ км/ч. Какое расстояние будет между ними через t часов (они ещё не встретились) и через сколько часов они встретятся?

Блок-схема: Начало → ввод S, v₁, v₂, t → вычисления (d = S − (v₁ + v₂) · t, T = S / (v₁ + v₂)) → вывод d и T → Конец.

S, v1, v2, t = map(int, input().split())   # 60 12 18 1
d = S - (v1 + v2) * t        # расстояние через t часов: 30
T = S / (v1 + v2)            # время до встречи: 2.0
print(d, T)                  # 30 2.0

Проверка: за час они сближаются на 12 + 18 = 30 км, осталось 60 − 30 = 30 км, а встретятся через 60 / 30 = 2 часа.

Ответ: программа выше; для S = 60, v₁ = 12, v₂ = 18, t = 1 выводит 30 2.0.

Шпаргалка

  • В Python знак умножения всегда пишем: b * x, а не bx.
  • Дробь записываем делением со скобками: (a + b) / c.
  • Сумма монет: // считает монеты, % оставшиеся деньги.
  • Квадратные скобки из математической записи в Python заменяй круглыми.

Мини-тест

← 3.8. Программирование линейных алгоритмов · 4.1. Сноски →