Проанализируйте программный код задания (рис. 1). Проверьте вручную, задав переменным следующие значения: а=7, b=20,c=9 и a= 13,b=11,c=0. Запишите результат выполнения каждой из команд в программе при вводе этих значений. Анализируя полученные результаты, выясните, какой алгоритм программно решить данную задачу.
2. Данную задачу решить линейный алгоритм (с ветвлениями if). Мы подставляли текущие значения переменных, тем самым определяли, выполнится командный блок if или нет. Если выполняется - также подставляли значения переменных, и находили новые значения. Мы выполняли код последовательно и были в роли программы, которая считывает написанный код и также выполняет эти же действия.
Объяснение:
Код с объяснениями:
a, b, c = map(int, input().split()) # вводятся значения a, b, c с клавиатуры, через пробел
t = k = h = p = s = 0 # регистрируются переменные, равные нулю
if (a + b + c) % 3 == 0: # если сумма a, b, c кратна трём, то...
k = (a + b + c) // 3 # ...присвоить переменной k значение: целая часть от деления (a + b + c) на 3
t = a - k; p = b - k; h = c - k # ...выполнить данные действия
if t > 0: # если t больше нуля...
s = s + t #...то переменную s увеличить на t
if p > 0: # если p больше нуля...
s = s + p # ...то переменную s увеличить на p
if h > 0: # если h больше нуля...
s = s + h # ...то переменную s увеличить на h
print(s) # вывести значение переменной s
else: # если сумма a, b, c НЕ кратна трём, то...
print(-1) # ...вывести -1
Код с промежуточными результатами при a = 7, b = 20, c = 9:
a, b, c = 7, 20, 9
t = k = h = p = s = 0
if (a + b + c) % 3 == 0: # true. (7 + 20 + 9) % 3 = 36 % 3 = 0 (цел.часть 12)
k = (a + b + c) // 3 # k = 36 // 3 = 12
t = a - k; p = b - k; h = c - k # t = 7 - 12 = -5; p = 20 - 12 = 8; h = 9 - 12 = -3
if t > 0: # false
s = s + t
if p > 0: # true. s = 0 + 8 = 8
s = s + p
if h > 0: # false
s = s + h
print(s) # вывод: 8
else: # не выполнится
print(-1)
Код с промежуточными результатами при a = 13, b = 11, c = 0:
a, b, c = 13, 11, 0
t = k = h = p = s = 0
if (a + b + c) % 3 == 0: # true. (13 + 11 + 0) % 3 = 24 % 3 = 0 (цел.часть 8)
k = (a + b + c) // 3 # k = 24 // 3 = 8
t = a - k; p = b - k; h = c - k # t = 13 - 8 = 5; p = 11 - 8 = 3; h = 0 - 8 = -8
1. Результаты выполнения каждой команды ниже.
2. Данную задачу решить линейный алгоритм (с ветвлениями if). Мы подставляли текущие значения переменных, тем самым определяли, выполнится командный блок if или нет. Если выполняется - также подставляли значения переменных, и находили новые значения. Мы выполняли код последовательно и были в роли программы, которая считывает написанный код и также выполняет эти же действия.
Объяснение:
Код с объяснениями:
a, b, c = map(int, input().split()) # вводятся значения a, b, c с клавиатуры, через пробел
t = k = h = p = s = 0 # регистрируются переменные, равные нулю
if (a + b + c) % 3 == 0: # если сумма a, b, c кратна трём, то...
k = (a + b + c) // 3 # ...присвоить переменной k значение: целая часть от деления (a + b + c) на 3
t = a - k; p = b - k; h = c - k # ...выполнить данные действия
if t > 0: # если t больше нуля...
s = s + t #...то переменную s увеличить на t
if p > 0: # если p больше нуля...
s = s + p # ...то переменную s увеличить на p
if h > 0: # если h больше нуля...
s = s + h # ...то переменную s увеличить на h
print(s) # вывести значение переменной s
else: # если сумма a, b, c НЕ кратна трём, то...
print(-1) # ...вывести -1
Код с промежуточными результатами при a = 7, b = 20, c = 9:
a, b, c = 7, 20, 9
t = k = h = p = s = 0
if (a + b + c) % 3 == 0: # true. (7 + 20 + 9) % 3 = 36 % 3 = 0 (цел.часть 12)
k = (a + b + c) // 3 # k = 36 // 3 = 12
t = a - k; p = b - k; h = c - k # t = 7 - 12 = -5; p = 20 - 12 = 8; h = 9 - 12 = -3
if t > 0: # false
s = s + t
if p > 0: # true. s = 0 + 8 = 8
s = s + p
if h > 0: # false
s = s + h
print(s) # вывод: 8
else: # не выполнится
print(-1)
Код с промежуточными результатами при a = 13, b = 11, c = 0:
a, b, c = 13, 11, 0
t = k = h = p = s = 0
if (a + b + c) % 3 == 0: # true. (13 + 11 + 0) % 3 = 24 % 3 = 0 (цел.часть 8)
k = (a + b + c) // 3 # k = 24 // 3 = 8
t = a - k; p = b - k; h = c - k # t = 13 - 8 = 5; p = 11 - 8 = 3; h = 0 - 8 = -8
if t > 0: # true. s = 0 + 5 = 5
s = s + t
if p > 0: # true. s = 5 + 3 = 8
s = s + p
if h > 0: # false
s = s + h
print(s) # вывод: 8
else: # не выполнится
print(-1)