31 марта 2025 г.

Программирование. Задание № 6 "Анализ программ с циклами" (ЕГЭ-2023)

Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 6 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.

Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Направо 90
Повтори 3 [Направо 45 Вперёд 10 Направо 45]
Направо 315 Вперёд 10
Повтори 2 [Направо 90 Вперёд 10]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.

Решение: Напишем программу на языке Phyton
#стартовые данные
import turtle as t #подключение "Черепашьей графики"
k = 20 #масштаб
t.left (90) #разворот "на север"
#1
t.right (90)
#2
for i in range (3):
  t.right (45)
  t.forward (k*10)
  t.right (45)
#3
t.right (315)
t.forward (k*10)
#4
for i in range (2):
  t.right (90)
  t.forward (k*10)
#построение сетки
for x in range (-15,8):
for y in range (-15,8):
     t.goto( x*k, y*k )  # в точку с заданными координатами
     t.dot( 2.5, 'red')  # ставим точку
done ()

Ответ: 203

21 марта 2025 г.

Программирование. Задание № 5 "Анализ алгоритмов для исполнителей"

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
  1. Строится двоичная запись числа N
  2. Далее эта запись обрабатывается по следующему правилу:
  • если сумма цифр двоичной записи чётная, то к этой записи справа дописывается 0, а два левых разряда заменяются на 10;
  • если сумма цифр двоичной записи нечётная, то к этой записи справа дописывается 1, а два левых разряда заменяются на 11.
Полученная таким образом запись является двоичной записью искомого числа R. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 50. В ответе запишите это число в десятичной системе счисления.

Решение. Напишем программу на языке Phyton

for n in range (2,25):
#1
  a = bin (n) [2:]
#2
  if a.count('1') % 2 == 0:
    a = '10' + a [2:] + '0'
  else:
    a = '11' + a [2:] + '1'
#3
  r = int(a,2)
  if r > 50:
    print (n,r)

Вывод:

19 55
21 59
22 61

Ответ: 19

16 марта 2025 г.

Программирование. Задание № 5 "Анализ алгоритмов для исполнителей"

Автомат обрабатывает десятичное натуральное число N по следующему алгоритму:

  1. Строится двоичная запись числа N.
  2. К полученному числу справа дописывается 0, если в числе единиц больше, чем нулей; иначе дописывается 1.
  3. Из середины двоичного числа убирается 2 разряда, если количество разрядов получилось четным, и 3 разряда, если нечетное.
  4. Результат переводится в десятичную систему.
Для скольких различных значений N в результате работы автомата получается число 46?

Решение. Напишtм программу на языке Phyton

k=0
for n in range (4,1000):
#1
  a = bin (n) [2:]
#2
  if a.count('1') > a.count('0'):
    a = a + '0'
  else:
    a = a + '1'
#3
  if len(a) % 2 == 0:
    d = int(len(a)/2)
    a = a [:d-1] + a [d+1:]
  else:
    d = int(len(a)//2) + 1
    a = a [:d-2] + a [d+1:]
#4
  x = int(a,2)
  if x == 46: 
    k+=1
print (k)

Ответ: 11