Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 0
Регистрация: 29.06.2024
Сообщений: 18

Сколько точек с целочисленными координатами будут находиться внутри объединения фигур, ограниченных заданными алгоритмом линиями, ...

10.07.2025, 12:38. Показов 1551. Ответов 5
Метки нет (Все метки)

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

Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.

Черепахе был дан для исполнения следующий алгоритм:

Направо 45
Повтори 10 раз [ Направо 45 Вперед 203 Направо 45 ]
Поднять хвост
Назад 40
Направо 45
Опустить хвост
Повтори 5 раз [ Вперед 20 Налево 90 ]
Определите, сколько точек с целочисленными координатами будут находиться внутри объединения фигур, ограниченных заданными алгоритмом линиями, не включая точки на линиях.
Написала такой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from turtle import *
tracer(0)
screensize(3000,3000)
cnt = 0
k = 1
left(90)
rt(45)
begin_fill()
for _ in range(10):
    rt(45)
    fd(203*k)
    rt(45)
end_fill()
pu()
back(40*k)
rt(45)
pendown()
begin_fill()
for _ in range (5):
    fd(20*k)
    lt(90)
pu()
end_fill()
update()
canvas = getcanvas()
for x in range (-300, 300):
    for y in range (-300, 300):
        info = canvas.find_overlapping(x*k, y*k, x*k, y*k)
        if len(info) == 1 and info[0] == 5:
            cnt+=1
print(cnt)
Однако результат программы и правильный ответ задачи (41204) не совпадают. Подскажите, пожалуйста, где тут моя ошибка?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2025, 12:38
Ответы с готовыми решениями:

Сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией
Определите, сколько точек с целочисленными координатами будут находиться внутри области,...

Сколько точек с целочисленными координатами окажутся внутри замкнутых треугольных областей
Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник...

Вычислите площадь фигуры, ограниченную заданными линиями, с помощью двойного интеграла
Здравствуйте, помогите пожалуйста Вычислите площадь фигуры, ограниченную заданными линиями, с...

5
Вирусоборец
 Аватар для thyrex
14434 / 7476 / 1579
Регистрация: 06.09.2009
Сообщений: 27,112
10.07.2025, 14:35
Присваивать k = 1 смысла никакого не имеет, вы же потом зачем-то на эту 1 умножаете и все.
Зачем меняете стандартные размеры, закрашиваете нарисованное тоже непонятно. Причем закрашено,если уж это делать, должно быть все.

Первая часть рисует квадрат со стороной 204 пикселя. Стало быть его внутренняя часть - квадрат со стороной 202 пикселя, а его площадь 202х202 = 40804.

Вторая часть рисует квадрат со стороной 21 пиксель, внутренняя его часть - квадрат со стороной 19 пикселей, а его площадь 19х19 = 361.

Суммируем и получаем, что ответ должен быть 40804+361=40165. А тот ответ, что в системе в итоге тоже неправильный
2
3 / 3 / 0
Регистрация: 29.06.2024
Сообщений: 18
10.07.2025, 15:16  [ТС]
thyrex, я просто на этой задаче хотела отработать именно способ автоматического подсчёта, т.к. на экзамене может попасться какая-нибудь сложная фигура, в которой сложно будет подсчитывать самой. Поэтому хотела решить эту задачу именно таким методом, хотя тут действительно можно решить гораздо проще.
0
 Аватар для Storm Screamer
4838 / 1405 / 115
Регистрация: 21.04.2013
Сообщений: 8,564
10.07.2025, 17:11
Первая часть вроде звезда. Расчет для звезды дает 40401 точек внутри большого квадрата (201x201), а для малого квадрата - 361. Если они не пересекаются, то суммарно 40401 + 361 = 40762.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import math
import matplotlib.pyplot as plt
from matplotlib.path import Path
 
def main():
    # Инициализация начального состояния Черепахи
    x, y = 0.0, 0.0
    angle = 90.0  # Направление вдоль положительной оси Y
    pen_down = True
    vertices = []
    
    if pen_down:
        vertices.append((x, y))
    
    # Функция для добавления текущей позиции, если перо опущено
    def update_vertices():
        if pen_down:
            vertices.append((x, y))
    
    # Команда Направо m
    def right(m):
        nonlocal angle
        angle -= m
    
    # Команда Вперед n
    def forward(n):
        nonlocal x, y
        rad = math.radians(angle)
        x += n * math.cos(rad)
        y += n * math.sin(rad)
        update_vertices()
    
    # Команда Налево m
    def left(m):
        nonlocal angle
        angle += m
    
    # Команда Назад n
    def backward(n):
        nonlocal x, y
        rad = math.radians(angle)
        x -= n * math.cos(rad)
        y -= n * math.sin(rad)
        update_vertices()
    
    # Выполнение алгоритма
    right(45)
    for _ in range(10):
        right(45)
        forward(203)
        right(45)
    
    pen_down = False
    backward(40)
    right(45)
    pen_down = True
    for _ in range(5):
        forward(20)
        left(90)
    
    # Построение пути
    path = Path(vertices)
    
    # Определение границ для поиска целочисленных точек
    min_x = min(v[0] for v in vertices)
    max_x = max(v[0] for v in vertices)
    min_y = min(v[1] for v in vertices)
    max_y = max(v[1] for v in vertices)
    
    # Поиск целочисленных точек внутри фигуры
    count = 0
    inside_points = []
    
    for x_int in range(int(math.floor(min_x)), int(math.ceil(max_x)) + 1):
        for y_int in range(int(math.floor(min_y)), int(math.ceil(max_y)) + 1):
            if path.contains_point((x_int, y_int)):
                # Проверка, что точка не лежит на границе
                on_boundary = False
                for i in range(len(vertices)):
                    x1, y1 = vertices[i]
                    x2, y2 = vertices[(i + 1) % len(vertices)]
                    # Проверка, лежит ли точка на отрезке между вершинами
                    if (min(x1, x2) <= x_int <= max(x1, x2) and 
                        min(y1, y2) <= y_int <= max(y1, y2)):
                        # Уравнение прямой (x - x1)(y2 - y1) == (y - y1)(x2 - x1)
                        if (x_int - x1) * (y2 - y1) == (y_int - y1) * (x2 - x1):
                            on_boundary = True
                            break
                if not on_boundary:
                    count += 1
                    inside_points.append((x_int, y_int))
    
    print(f"Количество целочисленных точек внутри фигуры: {count}")
    
    # Визуализация (опционально)
    plt.figure(figsize=(10, 10))
    plt.plot([v[0] for v in vertices], [v[1] for v in vertices], 'b-')
    plt.scatter([p[0] for p in inside_points], [p[1] for p in inside_points], color='red', s=1)
    plt.gca().set_aspect('equal', adjustable='box')
    plt.title('Траектория Черепахи и целочисленные точки внутри фигуры')
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.grid()
    plt.show()
 
if __name__ == "__main__":
    main()
0
Вирусоборец
 Аватар для thyrex
14434 / 7476 / 1579
Регистрация: 06.09.2009
Сообщений: 27,112
10.07.2025, 17:36
Цитата Сообщение от Storm Screamer Посмотреть сообщение
Первая часть вроде звезда
запустить программу автора темы, убрав заливку и расчеты, не пробовали?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from turtle import *
left(90)
a = [pos()] # координаты вершин большого квадрата
right(45)
for _ in range(10):
    right(45)
    forward(203)
    if not pos() in a:
        a.append(pos())
    right(45)
print(a)
right(45)
penup()
backward(40)
c = [pos()]  # координаты вершин малого квадрата
pendown()
for _ in range(5):
    forward(20)
    if not pos() in c:
        c.append(pos())
    left(90)
penup()
print(c)
done() # нужно для нормальной работы в Wing 101
Bash
1
2
[(0.00,0.00), (203.00,0.00), (203.00,-203.00), (0.00,-203.00)]
[(243.00,-203.00), (223.00,-203.00), (223.00,-223.00), (243.00,-223.00)]
1
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,752
11.07.2025, 06:41
thyrex, у вас ошибка: 12 и 14 строки надо поменять местами. Тогда будет так:
Code
1
2
[(0.00,0.00), (203.00,0.00), (203.00,-203.00), (0.00,-203.00)]
[(231.28,-174.72), (211.28,-174.72), (211.28,-194.72), (231.28,-194.72)]
Добавлено через 7 минут
Цитата Сообщение от thyrex Посмотреть сообщение
торая часть рисует квадрат со стороной 21 пиксель, внутренняя его часть - квадрат со стороной 19 пикселей, а его площадь 19х19 = 361.
Внутренняя часть этого квадрата 20х20 =400, т.к. его вершины не совпадают у узлами целочисленной решетки.
Так что ответ правильный 41204=202х202+20х20
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2025, 06:41
Помогаю со студенческими работами здесь

Дан список точек плоскости с целочисленными координатами. Необходимо определить: 1) номер координатной четверти K, в к
Дан список точек плоскости с целочисленными координатами. Необходимо определить: 1) номер...

turtle подсчет целочисленных точек внутри и на границе фигуры
Дается фигура в декартовой системе координат и нужно посчитать количество целочисленных координат...

Составить программу, определяющую,которая из точек находиться ближе к началу координат
Даны две точки A(x1,y1) и B(x2,y2).Составить программу, определяющую,которая из точек находиться...

Дано множество A из N точек (точки заданы своими координатами x, y). Среди всех точек этого множества, лежащих во второй
можно сделать на питоне пожалуйста Дано множество A из N точек (точки заданы своими...

Определите, попадает ли точка А в область, ограниченной линиями
Введите с клавиатуры координаты точки А(x, y). Определите, попадает ли точка А в область,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru