Форум » Циклы и ветвления » Тема 6 Задача№52 » Ответить

Тема 6 Задача№52

маша: Повтори 10 [Налево 60 Вперёд 300 Налево 60] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии следует учитывать. Программа выдает 38880, в ответе 38879. В чем ошибка? ## uses school; var k:integer; for var x:=-400 to 400 do for var y:=-400 to 400 do if (y<=tanDegrees(150)*x)and(x>=-(sqrt(sqr(300)-sqr(150))))and (y>=tanDegrees(30)*x)then k:=k+1; print(k)

Ответов - 11

Minak: Перерешал. Ответ токой же 38880.

Minak: Действительно ответ 38880. Видимо при решении не посчитал точку, которая лежит в 0, 0. Спасибо за вопрос. Написал Константину Юрьевичу, о том что нужно исправить ответ.

Поляков: Спасибо, ответ исправлен.


Замятина: Повтори 12 [Направо 60 Вперёд 1 Направо 60 Вперёд 1 Направо 270] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует. Код, рисующий фигуру: from turtle import * left(90) for i in range(12): right(60) forward(1*30) right(60) forward(1*30) right(270) penup() for x in range(8, -6,-1): for y in range(3, -10, -1): setpos(x*30, y*30) dot(4, 'red') Как подсчитать количество точек c помощью кода?

s11kai: Замятина пишет: Как подсчитать количество точек c помощью кода? если совсем просто, то можно так: [pre2] from turtle import * left(90) for i in range(12): right(60) forward(1*30) right(60) forward(1*30) right(270) penup() k=0 for x in range(4, -3,-1): for y in range(0, -7, -1): setpos(x*30, y*30) dot(4, 'red') k+=1 print(k-11) [/pre2]

Замятина: Объясните, пожалуйста, почему при выводе результата мы записываем print(k-11)

s11kai: Замятина пишет: почему при выводе результата мы записываем print(k-11) Тем самым мы исключаем те точки, которые лежат вне контура, к сожалению их все же нужно будет подсчитать! Если считать нет желания, можно поручить это программе, например такой: [pre2] k=0 for x in range(-100, 100): for y in range(-100, 100): if (y < 3**0.5 / 3 * x + 31) and (y < -(3**0.5) / 3 * x + 62) and (y > -(3**0.5) / 3 * x) and (y > 3**0.5 / 3 * x - 31) and (x > 0) and (x < 31 * 3**0.5): k=k+1 print('Ответ:',k) Ответ: 2476 [/pre2] Правда для составления уравнения потребуется знать не только питон, но и алгебру и т.д...

Замятина: Должно получиться 38. Первый вариант выдавал правильный результат Спасибо, буду разбираться

s11kai: Замятина пишет: Должно получиться 38 Последний код я привел лишь в качестве иллюстрации того, каким будет решение для шестиугольника, полученного по алгоритму: Повтори 21 [Вперёд 31 Направо 60] Представляете, сколь длинным будет условие, если попытаться решить таким образом многоугольник, предложенный вами! Замятина пишет: Спасибо, буду разбираться Удачи!

Замятина: Спасибо большое. Разобралась. Все получилось!

s11kai: Замятина пишет: Разобралась. Все получилось! А я и не сомневался что у вас получиться!



полная версия страницы