стоит отметить то, чтобы найти нужное кол-во повторений в for i in range(x) можно прибегнуть к формуле 360/(угол поворота), например для треугольника угол поворота по условию 120, значит 360/120 = 3 - то, что нужно записать в range(x) вместо x
Дописываем в начале строчку speed(1000) и программа работает практически мгновенно! p.s. за комментарий спасибо makar on Также выражаю благодарность каналу /dev/inf (кстати, не забудьте подписаться) за оперативность и креативность! Признаю, похоже в создании этого кода меня опередили 😅
Забавный факт, если для ускорения отрисовки использовать tracer(0) и не использовать update() перед циклом подсчёта точек, то получится близкое значение, но неверное. Но если обновить экран перед проверкой, то результат будет такой же, как и без использования tracer().
СПАСИБО! Объясняю чем помогло: Стираем item[0] == 5 И len(item) == 1 исправляем на item >= 1 Профит: теперь прога считает И точки НА ЛИНИИ, т.е. на границе
@@merka239 ? он говорит про все точки внутри, точки на линии НЕ считаются за точки внутри фигуры. К тому же твой коммент не имеет смысла, автор писал как считать с точками на линии. К тому же до этого можно и додуматься если умеешь хоть чу-чуть думать головой.
@@kozanuch4405 да, я проверил, оказалось просто задача попалась такая, что просто удачно сошлось. А на деле всё не так. Плюсом я нашёл видос который рассматривает эту тему. Как оказывается это всё бред и работает только если повезёт с задачей. Сами попробуйте очень много таких задач порешать и убедитесь. Так ещё к минусам данного способа, что нельзя почитать точки на линиях.
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм: Повтори 4 [Вперёд 12 Направо 90] Повтори 3 [Вперёд 12 Направо 120] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом: Повтори 4 [Вперёд 12 Направо 90] и находиться вне области, ограниченной линией, заданной данным алгоритмом: Повтори 3 [Вперёд 12 Направо 120]. Точки на линии учитывать не следует КАК СЛЕЛАТЬ
@@sunny_reflection скажу честно, это ни капли не лишний нервяк, нам сами учителя говорили, чтобы мы шпоры с собой взяли. У меня вообще шпоры были размером с лист А4 (в принципе я и писал всё на этих листах) и просто сворачивал лист до размера носового плотного плотка и ложил туда же и брал с собой на ЕГЭ. Спокойно сдал все три экзамена. Сейчас я понятное дело уже учусь в университете и заканчиваю 1 курс
Если вершины многоугольника имеют целочисленные координаты, то зная площадь данного многоугольника можно посчитать количество точек с целочисленными координатами через формулу Пика.
Не знаю, упоминалось ли где-то про 5:10, но это не так. Если построить желтую фигуру, то она все равно будет выдавать тот ответ. Насколько я понял, если в item у нас есть 6 - это означает, что мы на границе фигуры, и только из-за len(item) == 1 ваша программа работает. P.s не отсекайте эту 6,и получите программу, которая считает еще точки по краям
Доброго времени суток! Отличный код, спасибо, по вариантам Крылова спасал, пока не дошел до 6. вроде максимально просто по условию . Повтори 10[вперед 123 направо 120] точки внутри области. Мой код: from turtle import * color('black','red') speed(100) m = 200 begin_fill() left(90) for i in range(10): forward(123*m) right(120) end_fill() canvas = getcanvas() cnt = 0 for y in range(-200*m, 200*m, m): for x in range(-200*m, 200*m, m): item = canvas.find_overlapping(x, y, x, y) if len(item) == 1 and item[0] == 5: cnt += 1 print(cnt) done() exit() P.S. Я знаю, что за фигура и лишний диапазон(range) убирал, но как не крути ответ не подходит... Вывод: 6488 А должен быть по ответам Крылова: 7156 Прошу помочь разобраться.
@@inf99ballov меня тоже беспокоит именно эта задача. уж слишком громко звучит то, что в сборнике опечатка. сборник то официальный, вряд ли там так накосячить могли. где можно убедиться в том, что там и правда ошибка?
у тебя в цикле цифра десять, но он рисует треугольник. Он же сказал, что лучше новые линии поверх фигуры лучше не печатать. Там 3 должно быть в fot i in range(3):
@@shinratensei580 я считал другими способами через уравнение прямых. Не доверяйте официальным сборникам на 100 процентов - говорю по своему опыту . В сборниках за 21 и за 22 год тоже были опечатки. А в этом году опечатки в 6 задачах мы нашли уже штуки 4 а то и больше
Здравствуйте. Возникла проблема с 6 заданием. Пример из демоверсии ФИПИ 2023 года. Черепахе был дан для исполнения следующий алгоритм: Повтори 2 [Вперёд 10 Направо 90 Вперёд 20 Направо 90] Поднять хвост Вперёд 3 Направо 90 Вперёд 5 Налево 90 Опустить хвост Повтори 2 [Вперёд 70 Направо 90 Вперёд 80 Направо 90] Определите, сколько точек с целочисленными координатами будут находиться внутри пересечения фигур, ограниченных заданными алгоритмом линиями, ВКЛЮЧАЯ точки на границах этого пересечения. from turtle import * color('black', 'red') m = 100 speed(1000) begin_fill() left(90) for i in range(2): forward(10*m) right(90) forward(20*m) right(90) pu() forward(3*m) right(90) forward(5*m) left(90) pd() for i in range(2): forward(70*m) right(90) forward(80*m) right(90) end_fill() canvas = getcanvas() cnt = 0 for y in range(-100*m, 100*m, m): for x in range(-100*m, 100*m, m): item = canvas.find_overlapping(x, y, x, y) if len(item) == 1: # and item[0] == 5: cnt += 1 print(cnt) done() exit() У меня получается 5521, в ответе 128
тут нужно сначала понять что за область будет получаться при пересечении фигур, а потом уже построить ее в программу: это будет прямоугольник 7 на 15: from turtle import * color('black', 'red') m = 100 speed(1000) begin_fill() left(90) for i in range(2): forward(7*m) right(90) forward(15*m) right(90) end_fill() canvas = getcanvas() cnt = 0 for y in range(-100*m, 100*m, m): for x in range(-100*m, 100*m, m): item = canvas.find_overlapping(x, y, x, y) if len(item) >= 1: cnt += 1 print(cnt) done() exit() Ответ 128
В второй задаче про квадрат можно посчитать ведь без программы.Нам ведь не важно повернут он или нет,просто перемножаем 25 на 25 и получаем ответ - 625
Как насчет того, чтобы треугольник обозначить через три прямые и прогой проверять удовлетворяет ли точка трем неравенствам. Только что попробовал и этот способ очень простой по крайней мере если с профилем у вас хорошо и написать уравнение прямой не вызывает трудностей, первая прямая x=0, вторая y = 111-tg30x, третья y=tg30x k = 0 for x in range(120): for y in range(120): if x>0 and ytg30x k +=1 print(k) Ответ 5280 и париться над тем, какая точка принадлежит, а какая нет, не нужно
Ага) но формула есть волшебная, что S(площадь) = K(кол-во цел точек внутри) + M/2(кол-во цел точек на сторонах/2) - 1 . М это просто НОД от разницы координат точек)
Направо 135 Повтори 25 [Вперёд 250 Направо 90] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии не следует учитывать.
парни как понятно сколько ставить на for x in range(?) Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз (где k - целое число).
Черепахе был дан для исполнения следующий алгоритм: Направо 315 Повтори 7 [Вперёд 16 Направо 45 Вперёд 8 Направо 135]. Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.
from turtle import * color("black","red") m = 100 begin_fill() speed(0) left(90) for i in range(4): forward(9*m) right(90) forward(7*m) right(90) end_fill() canvas = getcanvas() ccount = 0 for x in range(-120*m, 120*m, m): for y in range(-120*m, 120*m, m): item = canvas.find_overlapping(x,y,x,y) if len(item)==1 and item == 0: ccount = ccount + 1 print(ccount) done() exit() В чем может быть проблема?
@@chlen_tvoi Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм: Повтори 4 [Вперёд 9 Направо 90 Вперёд 7 Направо 90] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
(№ 5600) (А. Минак) Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси абсцисс, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует три команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, и Налево m (где m - целое число), вызывающая изменение направления движения на m градусов против часовой стрелки. Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм: Повтори 40 [Налево 45 Вперёд 400 Направо 90] Определите, сколько точек с целыми положительными координатами (x, y) будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует. Что я делаю не так? from turtle import * color("black", "red") speed(1000) m=100 begin_fill() for i in range(8): left(45) forward(400*m) right(90) end_fill() canvas=getcanvas() cnt=0 for x in range(1*m,1000*m,m): for y in range(1*m,1000*m,m): item=canvas.find_overlapping(x,y,x,y) if len(item)==1 and item[0]==5: cnt+=1 print(cnt) done() exit()
Координаты инвертированы, вот так верно: from turtle import * color("black", "red") speed(1000) m=50 begin_fill() left(90) for i in range(8): left(45) forward(400*m) right(90) end_fill() canvas=getcanvas() cnt=0 for x in range(-1200*m,0,m): for y in range(-1200*m,0,m): item=canvas.find_overlapping(x,y,x,y) if len(item)==1 and item[0]==5: cnt+=1 print(cnt) done() exit()
@@inf99ballov Не могли бы Вы пояснить, почему for x in range(-1200*m,0,m): ? И почему черепаха сначала делает команду left(90), если по условию она смотрит вдоль оси абцисс?
@@olgapiv ахх, дико извиняюсь, не увидал, что вдоль оси абсцисс смотрит🥲 Тогда вот так будет выглядеть прога from turtle import * color("black", "red") speed(1000) m=50 begin_fill() for i in range(8): left(45) forward(400*m) right(90) end_fill() canvas=getcanvas() cnt=0 for x in range(0,1200*m,m): for y in range(-1200*m,0,m): item=canvas.find_overlapping(x,y,x,y) if len(item)==1 and item[0]==5: cnt+=1 print(cnt) done() exit() Просто нумерация координат немного по-другому работает в turtle,а не как мы привыкли что первая четверть оба положительные, на словах в комментарии будет сложно объяснить, поэтому рекомендую вам прочитать документацию к модулю
Направо 300, повтори 6 раз, [вперед 5 направо 120 вперед 5 направо 330] from turtle import* color ("black", "red") m=100 begin fill() right (300) for i in range (4): forward (10) right (120) forward (10) right (330) end fill () canvas=getcanvas () cnt=0 for x in range (-1000*m, 1000*m, m): for y in range (-1000*m, 1000*m, m): item=canvas.find_overlapping (x, y, x, y) if len(item)==1 and item[0]==5: cnt+ 1 print (cnt) done () exit() Получается 0, а должно 269
from turtle import * color("black", "red") m = 100 begin_fill() left(90) for i in range(2): forward(10*m) right(90) forward(18*m) right(90) penup() forward(5*m) right(90) forward(7*m) left(90) pendown() for i in range(2): forward(10*m) right(90) forward(7*m) right(90) end_fill() canvas = getcanvas() cnt = 0 for x in range(-120*m,120*m, m): for y in range(-120*m,120*m, m): item = canvas.find_overlapping(x, y, x, y) if len(item) >= 1 and item[0] == 5: cnt += 1 print (cnt) done() exit() привет,скорее всего ты не ответишь,но не знаешь почему задача выдает неправильный ответ,нужно найти точки внутри объединения фигур включая точки на линиях должно быть 249 у меня 196 или 197
k=0 for x in range(1,14): for y in range(1,14): if -x/(3**0.5)+14>y>x/(3**0.5): k+=1 print(k) 14 - сторона треугольника вариант 10 6 задание ответ 78 сразу выходит Решу ЕГЭ через графики ...ставишь вместо 14 любое число...
Возник такой вопрос насчёт этой программы: в сборнике Крылова 9-10 вариант даны такие условия: направо 30 повтори 10(9 вариант) и почему черепаха может крутиться на одном месте и выдавать в итоге 0?
@@inf99ballov Момент: условие из 9 варианта (Направо 30 [Вперёд 30 Направо 60 Вперёд 30 Направо 120] и условие из 10 варианта: (Повтори 10 [Направо 120 Вперёд 12 Направо 60 Вперёд 12] Код для 10 варианта: from turtle import * color('black', 'red') m = 100 begin_fill() left(90) for i in range(4): right(120) forward(12*m) right(60) forward(12*m) end_fill() canvas = getcanvas() cnt = 0 for x in range(-130*m, 130*m, m): for y in range(-130*m, 130*m, m): item = canvas.find_overlapping(x,y,x,y) if len(item) == 1 and item[0] == 5: cnt += 1 print(cnt) done() ext() Код для 9 варианта: from turtle import * color('black' 'red') m = 100 begin_fill() right(30) left(60) for i in range(4): forward(30*m) right(60) forward(30*m) right(120) end_fill() canvas = getcanvas() cnt = 0 for x in range(-130*m, 130*m, m): for y in range(-130*m, 130*m, m): item = canvas.find_overlapping(x,y,x,y) if len(item) == 1 and item[0] == 5: cnt += 1 print(cnt) done() ext()
@@k_o_l_d_iplay9360 в коде для 9в. у тебя в color нет запятой между цветами, left должно быть 90, а не 60, в for достаточно range(2) для полной фигуры, так как с 4 у тебя черепашка дважды рисует фигуру, ещё в конце ext() вместо exit() написано. ответ вроде 750. в 10в. также вместо range(4) нужно range(2) и вместо ext() нужно exit(), но второе особо на программу не влияет. ответ 120 вроде. п.с. и ещё это не обязательно, но рекомендую добавить speed(1000), чтобы быстрее работало
Кстати, заливка у черепашки адекватная. Если фигура не замкнутая, то черепашка соединит конец и начало фигуры. И даже если там будет 10 повторений, все равно должно работать)
@@inf99ballov Голова направлена вдоль положительного направления оси ординат. Алгоритм: Вперед 100 Направо 90 Вперед 100 Направо 45 Опусти Повтори 10 [ Вперед 30 Направо 90]. Ответ 882, получается 924. Эту часть пропускаю (Вперед 100 Направо 90 Вперед 100 ), т.к если сделать left(90) forward(100*m) right (90) forward(100*m) черепашка все равно будет стоять в положении Направо 90. from turtle import * color ("black", "red") m = 100 tracer(0) begin_fill() right(45) for i in range(4): forward(30*m) right(90) end_fill() canvas = getcanvas() count = 0 for y in range(-100*m, 100*m, m): for x in range(-100*m, 100*m, m): item = canvas.find_overlapping(x,y,x,y) if len(item) == 1 and item[0] == 5: count +=1 print(count) update() done() exit()
@@ИринаЧупракова-м9ф забавно, я нашел ошибку в операции tracer(0)! дело в том, что если не отслеживать путь черепашки, то она не будет рисовать линию черного цвета, чтобы эти точки мы не считали раз они лежат на границе фигуры, поэтому заменяем строчку tracer(0) на speed(1000) и все окей from turtle import * color ("black", "red") m = 100 speed(1000) begin_fill() right(45) for i in range(4): forward(30*m) right(90) end_fill() canvas = getcanvas() count = 0 for y in range(-100*m, 100*m, m): for x in range(-100*m, 100*m, m): item = canvas.find_overlapping(x,y,x,y) if len(item) == 1 and item[0] == 5: count +=1 print(count) done() exit()
Рекомендую нормальный масштаб использовать, чтобы фигура полностью на экран помещалась. Чтобы проверить, что фигура адекватная получилась, без ошибок. И точки тоже на экран выводить нужно для дополнительной проверки, чтобы убедиться, что диапазон верно задан, нет пустых дырок и т.д. Для этого goto (x,y) и dot(5,'blue') используйте. У вас программа сейчас просто какое-то число выводит и не понятно откуда и как оно берётся. А как проверить что вы не ошиблись нигде? Нет никакой визуализации. Визуализацию делайте. Вы должны видеть и понимать что всё правильно нарисовалось. У вас на егэ не будет возможности "сверить" ответ. Найти ошибку в программе и пересчитать вам не разрешат. А ваша программа в таком в виде сейчас не имеет защиты от ошибок.
Я сейчас прорешал задачу без масштабирования и получил неверный ответ. После этого я взял масштаб за 10, и ответ неожиданно стал верным. Думаю, что из-за маленького масштаба некоторые точки с целочисленными координатами как бы пропадают из-за нехватки пикселей на экране, иначе я это объяснить не могу
Повтори 6 [Вперёд 10 Направо 60] Определите количество точек с целочисленными координатами, лежащих внутри или на границе области, которую ограничивает заданная алгоритмом линия. как посчитать количество точек на линии?
Здравствуйте, решал задача и по условию надо найти все точки и внутри фигуры , и на линии: Повтори 5 [Вперёд 7 Направо 90 Вперёд 4 Направо 90] Определите количество точек с целочисленными координатами, лежащих внутри или на границе области, которую ограничивает заданная алгоритмом линия. Мой код: from turtle import * color('black','red') m=100 begin_fill() left(90) for i in range(2): forward(7*m) right(90) forward(4*m) right(90) end_fill() canvas=getcanvas() c=0 for x in range(-100*m,100*m,m): for y in range(-100 * m, 100 * m, m): item=canvas.find_overlapping(x,y,x,y) if len(item)==1 and item[0]==5 : c+=1 print(c) done() exit() Выводит 18, должно быть 40. Буду благодарен за помощь
легче легкого, дружище) Чтобы считать точки на границе фигуры достаточно условие в if сделать len(item)>=1 from turtle import * color('black','red') m=100 speed(1000) begin_fill() left(90) for i in range(2): forward(7*m) right(90) forward(4*m) right(90) end_fill() canvas=getcanvas() c=0 for x in range(-100*m,100*m,m): for y in range(-100*m, 100*m, m): item=canvas.find_overlapping(x,y,x,y) if len(item)>=1: c+=1 print(c) done() exit()
Я эту программу показывал еще с месяц назад, на вебинаре по решению 6 задач, но всвязи с выходом сборника, решил продублировать. Придумана прога не без помощи Вани (наш преподаватель 10 класса) огромное ему спасибо, ну а что касается ютуба, я такого кода пока что ни у кого не видал.
зашёл на ваш ютуб и канал и в разборе демоверсии увидел практически такую же программу, честно сказать ваше видео я ранее не смотрел, но раз вы меня опередили, хвалю, я добавил вас в закрепленный комментарий👍
@@inf99ballov можно было просто извиниться, что код был позаимствован) Видно же, что точь в точь все совпадает практически, а на видео говорите, что это вы придумали) Не очень красиво получается)
@@ИльнарЮсупов-р2г я не заимствовал этот код. Совпадения хоть и редки, но случаются. Я никогда за все время преподавания не стеснялся говорить об авторах способов решения на своем канале, да и стал бы я записывать видео с похожим кодом, даже не изменив его? я тоже узнал об этом только после этого комментария
@@ИльнарЮсупов-р2г можете также посмотреть мой вебинар "все способы решения нового 6 задания", там я тоже решал его этим кодом в конце и все это почти месяц или уже 2 назад
@@inf99ballov как len(item) может быть больше единицы, Если пересечений точки и точки больше 1 быть никак не может? Разве в таком случае не нужно убирать второе условие, которое проверяет цвет завивки?
@@МихаилПавлов-я5п Он ищет пересечения всех объектов, прямых, заливочной части и тд. и как понятно по условию, наша точка пересечется и с заливкой и с черной границей поверх нее, поэтому длина множества будет больше 1
Привет, возник вопрос с задачами с дугами. Пример из сборника Крылова 2023 16 вариант: Направо 180 Вперед 3 Направо 90 Вперед 48 Направо 90 Вперед 3 Повтори 6 [Дуга 4, 4, 0, 180] . Точки на линии не учитываем. Найти количество точек внутри фигуры. Мой код: from turtle import * color("black","red") m =1000 speed(1000) begin_fill() left(90) right(180) forward(3*m) right(90) forward(48*m) right(90) forward(3*m) for i in range(6): circle(-4*m,180) right(180) end_fill() canvas = getcanvas() cnt = 0 for x in range(-500*m,500*m,m): for y in range(-500*m,500*m,m): item = canvas.find_overlapping(x,y,x,y) if len(item) == 1 and item[0] == 5: cnt += 1 print(cnt) done() exit() Мой код выдает: 250 Правильный ответ: 136 Что не так с кодом? Заранее благодарен за ответ
from turtle import * color("black", "red") m = 50 begin_fill() left(45) for i in range(4): forward(8*m) right(135) forward(9*m) right(45) speed(100) end_fill() canvas = getcanvas() cnt = 0 for y in range(-100*m, 100*m, m): for x in range(-100 * m, 100 * m, m): item = canvas.find_overlapping(x, y, x, y) if len(item) == 1 and item[0] == 5: cnt += 1 print(cnt) done() exit() Какая ошибка тут и почему при выполнение программы не происходит закраска фигуры?
Фигура закрашивается, но выводится 0 это значит что заливка была сделана неправильно , чтобы это исправить в for i in range(4) 2 надо поставить, тогда выведет ответ 40. Надо ставить 2, так как данная программа нарисует фигуру за два цикла.
Ох блин ненавижу что-то заучивать шаблонно, хотелось бы чтоб в школах реально изучали пайтон, а не шаблоны под ЕГЭ. Можете подсказать где можно брать нормальную информацию по пайтону?
А что если взять 54 номер задания 6 у Полякова, шдн используется чертёжник? Попробуй его решить таким же способом, потому что там ответ получается 62305 точек Чертёжнику был дан для исполнения следующий алгоритм: Повтори 10 раз Сместиться на (200, 100) Сместиться на (-50, -150) Сместиться на (-150, 50) конец Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии следует учитывать.
Классная программа, вот только вопрос есть, как ей считать задания, где нужно поднять хвост черепахи, сделать что-то, опустить хвост и снова что-то сделать? это возможно?
а что делать если в задаче цапля? Цапле был дан для исполнения следующий алгоритм: Повтори 5 [Дуга 5, 0, 10, 180 Дуга 10, 0, 0, 180 Дуга 5, -5, -5, 180]. какие нужно использовать команды?
код хороший работает почти всегда, он в сборнике Крылова 2024 года в 15 варианте фигура очень странная, я ,вроде, все учел , но ответ прога выдаёт не верный.
Из-за чего код может не работать? from turtle import * color("black", "red") m = 100 tracer(0) begin_fill() left(90) forward(10*m) right(120) forward(10*m) right(120) forward(10*m) right(120) end_fill() cnt = 0 canvas = getcanvas() for y in range(-20*m, 20*m, 1*m): for x in range(-20*m, -20*m, 1*m): abc = canvas.find_overlapping(x,y,x,y) print(x,y) if len(abc) == 1 and abc[0] == 5: cnt += 1 print(cnt) done() exit()
from turtle import * color("black", "red") m = 100 tracer(0) begin_fill() left(90) forward(10*m) right(120) forward(10*m) right(120) forward(10*m) right(120) end_fill() cnt = 0 canvas = getcanvas() for y in range(-20*m, 20*m, 1*m): for x in range(-20*m, 20*m, 1*m): # исправлено здесь abc = canvas.find_overlapping(x, y, x, y) if len(abc) == 1 and abc[0] == 5: cnt += 1 print(cnt) done()
from turtle import * color("blak", "red") m = 100 begin_fill() left(90) for i in range(3): forward(111 * m) right(120) end_fill() canvas = getcanvas() cnt = 0 for x in range(-120 * m, 120 * m, m): for y in range(-120 * m, 120 * m, m): item = canvas.find_overlapping(x, y, x, y) if len(item) == 1 and item[0] == 5: cnt += 1 print(cnt) done() exit() питон выдает ошибку, что я не так написал?
Что не так с кодом,выводит 0,Крылов 2023,4 вариант from turtle import * color("black", "red") m=100 begin_fill() right(30) for i in range(4): forward(20*m) right(90) forward(30*m) right(90) end_fill() canvas=getcanvas() cnt=0 for y in range(-100*m, 100*m, m): for x in range(-100*m, 100*m, m): item=canvas.find_overlapping(x, y, x, y) if len(item)==1 and item[0]==5: cnt+=1 print(cnt) done() exit()
for i in range(4): forward(20*m) right(90) forward(30*m) right(90) В этом месте необходимо брать такое количество повторений , чтобы фигура замыкалась лишь один раз, точка начала и конца цикла должны совпадать(было 4, а нужно брать 2).Получается ответ - 598
@@abracadabra18 from turtle import * color("black", "red") m=100 begin_fill() right(30) for i in range(4): forward(20*m) right(90) forward(30*m) right(90) end_fill() canvas=getcanvas() cnt=0 for y in range(-100*m, 100*m, m): for x in range(-100*m, 100*m, m): item=canvas.find_overlapping(x, y, x, y) if len(item)==1 and item[0]==5: cnt+=1 print(cnt) done() exit() У меня ответ получается 598
Повтори 4 [Вперёд 9 Направо 90 Вперёд 7 Направо 90] Почему тут, если range(4) ставлю, то выдает ноль, а если range(2) то верное число? for i in range(4): forward(9*m) right(90) forward(7 * m) right(90)
потому что это прямоугольник и за один проход ты рисуешь сразу две его стороны. Значит для замыкания фигуры нужно всего 2 повторения, а не 4 как в условии
Подскажите, в IDE Pycharm на Mac apple silicon программа не работает, ответ не выводится в консоль даже спустя час. В среде Thonny все работает замечательно. Проблема именно с IDE или с операционкой? Знаю точно, что на ППЭ будут машины с этой средой, не возникут ли подобные проблемы там?
В некоторых заданиях просят поднять хвост, если в кумире это сделать элементарно, то вот как сделать на питоне на видео не показано. Если это возможно сделать, то пожалуйста ответьте мне как.
приветствую, вопрос всё ещё по решению через turtle(старый комментарий так и не получил ответа, плюс инфа новая есть). Есть вопрос, почему мы проверяем точку через число 5? Повторюсь, мы проверяем не цвет объекта, так как при изменении фона программа всё ещё находит нужные точки, значит мы считаем какой то другой параметр. И я заметил странность: если мы начнём выводить точки, которые входят в фигуру, мы будем получать кортежи, причём их длина будет чаще всего 1-2 элемента. Но первая же точка имеет 5 элементов! Есть конечно идея, что каждая точка возвращает кол-во объектов, которые проходят через неё, но тогда почему один объект называется 5,4, и т.д., и почему в 1 точке целых 5 объектов, хотя мы используем только линии и площадь? Было бы неплохо, что бы вы прояснили этот момент. Заранее спасибо
Георгий, здравствуйте! я уже отвечал на этот вопрос кому-то в комментариях: список item наполняется не кодами цветов, а кодами самих элементов пересечения, поэтому цвета можно менять, в видео я этого еще не знал) В документации сказано так: find_overlapping ( x1 , y1 , x2 , y2 ) - Возвращает каждый элемент, перекрывающий прямоугольную область, заданную x1 , y1 , x2 и y2 . должен быть верхний левый угол области и нижний правый угол. Элементы возвращаются в порядке укладки, начиная с самого нижнего элемента.(x1, y1)(x2, y2)
Проверьте, пожалуйста, что не так: задание: Повтори 4 [Вперёд 5 Направо 90 Вперёд 10 Направо 90] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует. код: from turtle import* color('black', 'red') m=100 speed(1000) begin_fill() left(90) for i in range(4): forward(5*m) right(90) forward(10*m) right(90) end_fill() canvas=getcanvas() cnt=0 for y in range(-100*m, 100*m,m): for x in range(-100*m, 100*m, m): item=canvas.find_overlapping(x, y, x, y) if len(item)==1 and item[0]==5: cnt+=1 print(cnt) done() exit() вообще не понимаю, где ошибка(
неправильно выбрано количество повторений в цикле. Для того, чтобы отрисовался прямоугольник нужно выполнить команды отрисовки всего 2 раза, а не 4 как в условии, поэтому программа должна выглядеть так: from turtle import* color('black', 'red') m=100 speed(1000) begin_fill() left(90) for i in range(2): forward(5*m) right(90) forward(10*m) right(90) end_fill() canvas=getcanvas() cnt=0 for y in range(-100*m, 100*m,m): for x in range(-100*m, 100*m, m): item=canvas.find_overlapping(x, y, x, y) if len(item)==1 and item[0]==5: cnt+=1 print(cnt) done() exit()
@@SkxrdyStickers значит ошибка в ответах попробуй нарисуй эту фигуру в тетрадке и посчитать - получится 36, это прямоугольник со сторонами 5 на 10, там не может быть 66 точек
@@inf99ballov вы отчасти не правы. Если учитывать границы, как раз 66 точек (5+1=6 точек в длину и 10+1=11 точек в высоту 6*11=66) Для подсчета же без границы должно выйти 66-30=36, как вы и сказали.
Касаемо скорости выполнения, если вы не хотите ждать, то можно прописать speed(1000) и она не будет уже не черепашкой, а зайчиком :)
ахах, спасибо)
Или tracer(False), тогда анимация отключается вообще
А еще лучше прописать speed(0). Это самая быстрая скорость по дефолту)
@@ДмитрийМаков-ы6т а еще лучше на c++ / c# написать
@@ДмитрийМаков-ы6т полностью согласен, работать не будет
Классная подача материала. Как раз не понимала, как решать задания с большими числами. Теперь все ясно
Спасибо огромное! Долго тупила, как можно сделать автоподсчёт точек. Ваше видео просто спасло)
стоит отметить то, чтобы найти нужное кол-во повторений в for i in range(x) можно прибегнуть к формуле 360/(угол поворота), например для треугольника угол поворота по условию 120, значит 360/120 = 3 - то, что нужно записать в range(x) вместо x
Дописываем в начале строчку speed(1000) и программа работает практически мгновенно!
p.s. за комментарий спасибо makar on
Также выражаю благодарность каналу /dev/inf (кстати, не забудьте подписаться) за оперативность и креативность! Признаю, похоже в создании этого кода меня опередили 😅
так speed(0) это же максимальная скорость, разве нет?
@@setqbyte да там чел где-то увидел прогу, записал, а документацию к модулю даже не пробовал изучить
tracer(0) и update()
шутка?
hideturtle() еще можно
есть вопрос касаемо неправильного ответа, куда можно написать?
классное объяснение, не понимала как написать прогу, сейчас кажется все легко, спасибо большое!!!!
Можно ещё проще сделать. В начале перед begin_still пишем "tracer(0)", затем в конце перед done пишем "update()"
почему-то ответ получается другой
Забавный факт, если для ускорения отрисовки использовать tracer(0) и не использовать update() перед циклом подсчёта точек, то получится близкое значение, но неверное. Но если обновить экран перед проверкой, то результат будет такой же, как и без использования
tracer().
лучший чемпик
Спасибо!!! Я думал почему не выходит
Прошу заметить, что для нахождения всех точек внутри стоит написать item >= 1
Нет, код и без этого работает как надо
СПАСИБО!
Объясняю чем помогло:
Стираем item[0] == 5
И len(item) == 1 исправляем на item >= 1
Профит: теперь прога считает И точки НА ЛИНИИ, т.е. на границе
@@merka239 ? он говорит про все точки внутри, точки на линии НЕ считаются за точки внутри фигуры.
К тому же твой коммент не имеет смысла, автор писал как считать с точками на линии. К тому же до этого можно и додуматься если умеешь хоть чу-чуть думать головой.
@@kozanuch4405 да, я проверил, оказалось просто задача попалась такая, что просто удачно сошлось. А на деле всё не так. Плюсом я нашёл видос который рассматривает эту тему. Как оказывается это всё бред и работает только если повезёт с задачей. Сами попробуйте очень много таких задач порешать и убедитесь. Так ещё к минусам данного способа, что нельзя почитать точки на линиях.
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 12 Направо 90]
Повтори 3 [Вперёд 12 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом: Повтори 4 [Вперёд 12 Направо 90]
и находиться вне области, ограниченной линией, заданной данным алгоритмом: Повтори 3 [Вперёд 12 Направо 120]. Точки на линии учитывать не следует
КАК СЛЕЛАТЬ
посчитай точки внутри каждой из фигур, а затем вычти из большее меньшее? (хз, если работает, то отпишись. А то я не проверял мою идею)
Отличное решение, но советую вместо item[0] == 5 использовать canvas.itemcget(item[0], 'fill') == 'red', это избавит от непредвиденных ошибок)
Каких ошибок?Все итак работает
@@kozanuch4405вы видимо не знаете питон😅
спасибо, помогло
Во втором номере, где был квадрат, можно было воспользоваться формулой по нахождении площади, по сути 25*25=625.
Здравствуйте, подскажите пожалуйста что делать если фигуры две, они пересекаются и нужно найти точки на их объединении?
Подскажите пожалуйста а как сделать чтобы считало не только точки внутри фигуры но и точки на границе?
Убрать and item[0] == 5
большое спасибо, теперь 6 задание не кажется таким сложным)
революционно. утерли нос разработчикам. спасибо 🔥🔥🔥
Утерли нос разработчикам?
А ты думаешь, что они так и хотели, чтобы мы точки считали 30 минут?
@@Megadown-x6n😂😂😂
из-за тебя ошибка в 6 задании! Не верьте ему, спаси и сохрани ваши баллы
Хорош, никогда в тебе не сомневался, объяснил 🔥🔥🔥🔥🔥🔥
Благодарю! Отличная работа !!! 👍💯 🔥🔥🔥 🧠
что необходимо добавить, чтобы посчитать кол-во точек и на линии помимо внутренней части? Просто увеличить шаг на один?
Спасибо большое. Прям выручил
Спасибо! Прога работает как часы, осталось только её не забыть
можно распечатать или написать на тетрадном листе и с собой на экзамен взять, я в принципе так русский написал и матешу
@@voice_power_yt и потом в армейке Eifersucht сделать
@@voice_power_yt так это шпора и лишний нервяк
@@sunny_reflection скажу честно, это ни капли не лишний нервяк, нам сами учителя говорили, чтобы мы шпоры с собой взяли. У меня вообще шпоры были размером с лист А4 (в принципе я и писал всё на этих листах) и просто сворачивал лист до размера носового плотного плотка и ложил туда же и брал с собой на ЕГЭ. Спокойно сдал все три экзамена. Сейчас я понятное дело уже учусь в университете и заканчиваю 1 курс
Данил, спасибо огромное👍💥💥💥ты лучший!
братан, твой канал просто лучший, спасибо
Если вершины многоугольника имеют целочисленные координаты, то зная площадь данного многоугольника можно посчитать количество точек с целочисленными координатами через формулу Пика.
согласен, но не во всех задачах, к сожалению, вершины в целочисленных координатах лежат🥲
Не знаю, упоминалось ли где-то про 5:10, но это не так. Если построить желтую фигуру, то она все равно будет выдавать тот ответ. Насколько я понял, если в item у нас есть 6 - это означает, что мы на границе фигуры, и только из-за len(item) == 1 ваша программа работает. P.s не отсекайте эту 6,и получите программу, которая считает еще точки по краям
Спасибо, Даня! Способ крутой👍🏻
Доброго времени суток! Отличный код, спасибо, по вариантам Крылова спасал, пока не дошел до 6.
вроде максимально просто по условию . Повтори 10[вперед 123 направо 120] точки внутри области.
Мой код:
from turtle import *
color('black','red')
speed(100)
m = 200
begin_fill()
left(90)
for i in range(10):
forward(123*m)
right(120)
end_fill()
canvas = getcanvas()
cnt = 0
for y in range(-200*m, 200*m, m):
for x in range(-200*m, 200*m, m):
item = canvas.find_overlapping(x, y, x, y)
if len(item) == 1 and item[0] == 5:
cnt += 1
print(cnt)
done()
exit()
P.S. Я знаю, что за фигура и лишний диапазон(range) убирал, но как не крути ответ не подходит...
Вывод: 6488
А должен быть по ответам Крылова: 7156
Прошу помочь разобраться.
проверил вторым способом, ответ 6488 правильный
в сбонике опечатка
@@inf99ballov меня тоже беспокоит именно эта задача. уж слишком громко звучит то, что в сборнике опечатка. сборник то официальный, вряд ли там так накосячить могли. где можно убедиться в том, что там и правда ошибка?
у тебя в цикле цифра десять, но он рисует треугольник. Он же сказал, что лучше новые линии поверх фигуры лучше не печатать. Там 3 должно быть в fot i in range(3):
@@shinratensei580 я считал другими способами через уравнение прямых. Не доверяйте официальным сборникам на 100 процентов - говорю по своему опыту . В сборниках за 21 и за 22 год тоже были опечатки. А в этом году опечатки в 6 задачах мы нашли уже штуки 4 а то и больше
@@qpjlekcep7592 делал этот же алгоритм, но с цифрой 3. Ответ не поменялся
Оригинально поставить корги на фон
А что нужно прописать если всё же нужно посчитать точки на линии фигуры?
а как найти точки на контуре пересечения??
Хороший способ, но этот код заучат наизусть единицы, из которых еще несколько человек совершит ошибки, поэтому способ годится для малого числа людей
огромное спасибо за универсальное решение
спасибо, хорошее объяснение!
Осталось выучить код перед егэ, спасибо)
Используйте в самом начале tracer(0) - это функция завершит работу черепахи сразу без ожидания
может ответ неправильно выдать
лучше speed(0)
Здравствуйте. Возникла проблема с 6 заданием. Пример из демоверсии ФИПИ 2023 года. Черепахе был дан для исполнения следующий алгоритм:
Повтори 2 [Вперёд 10 Направо 90 Вперёд 20 Направо 90]
Поднять хвост
Вперёд 3 Направо 90 Вперёд 5 Налево 90
Опустить хвост
Повтори 2 [Вперёд 70 Направо 90 Вперёд 80 Направо 90]
Определите, сколько точек с целочисленными координатами будут
находиться внутри пересечения фигур, ограниченных заданными
алгоритмом линиями, ВКЛЮЧАЯ точки на границах этого пересечения.
from turtle import *
color('black', 'red')
m = 100
speed(1000)
begin_fill()
left(90)
for i in range(2):
forward(10*m)
right(90)
forward(20*m)
right(90)
pu()
forward(3*m)
right(90)
forward(5*m)
left(90)
pd()
for i in range(2):
forward(70*m)
right(90)
forward(80*m)
right(90)
end_fill()
canvas = getcanvas()
cnt = 0
for y in range(-100*m, 100*m, m):
for x in range(-100*m, 100*m, m):
item = canvas.find_overlapping(x, y, x, y)
if len(item) == 1: # and item[0] == 5:
cnt += 1
print(cnt)
done()
exit()
У меня получается 5521, в ответе 128
тут нужно сначала понять что за область будет получаться при пересечении фигур, а потом уже построить ее в программу: это будет прямоугольник 7 на 15:
from turtle import *
color('black', 'red')
m = 100
speed(1000)
begin_fill()
left(90)
for i in range(2):
forward(7*m)
right(90)
forward(15*m)
right(90)
end_fill()
canvas = getcanvas()
cnt = 0
for y in range(-100*m, 100*m, m):
for x in range(-100*m, 100*m, m):
item = canvas.find_overlapping(x, y, x, y)
if len(item) >= 1:
cnt += 1
print(cnt)
done()
exit()
Ответ 128
@@inf99ballov Спасибо большое, понял, просто невнимательно читал условие)
@@inf99ballov как получить 7 и 15?
@@artzef построить эту фигуру по командам в кумире например или на листочке нарисовать
Большое спасибо, очень полезное и информативное видео
В второй задаче про квадрат можно посчитать ведь без программы.Нам ведь не важно повернут он или нет,просто перемножаем 25 на 25 и получаем ответ - 625
Да согласен
Так нам не над учитывать точки, лежащие на границе
Это подходит, если фигура нарисована под углом 30 градусов, а если 45 или другой угол?
Как насчет того, чтобы треугольник обозначить через три прямые и прогой проверять удовлетворяет ли точка трем неравенствам.
Только что попробовал и этот способ очень простой по крайней мере если с профилем у вас хорошо и написать уравнение прямой не вызывает трудностей, первая прямая x=0, вторая y = 111-tg30x, третья y=tg30x
k = 0
for x in range(120):
for y in range(120):
if x>0 and ytg30x
k +=1
print(k)
Ответ 5280 и париться над тем, какая точка принадлежит, а какая нет, не нужно
как насчет посрать верх ногами
Не получится так просто сделать, если фигура из себя представляет невыпуклый многоугольник.
Есть задания где нужно учитывать точки на границе, что делать в этом случае? И ещё есть задания где 2 фигуры, как с ними?
Ага) но формула есть волшебная, что S(площадь) = K(кол-во цел точек внутри) + M/2(кол-во цел точек на сторонах/2) - 1 . М это просто НОД от разницы координат точек)
Работает для любого многоугольника
@@mr.fridmak_play4680 координаты как найти?
@@jekeha ну ты просто представь что из нуля рисуешь, добавляй шаги эти к x и y
хороший вариант, формула пика если я не ошибаюсь, но это тоже неавтоматизированный вариант, хотя довольно неплохо ускоряет решение)
Нод?
Направо 135
Повтори 25 [Вперёд 250 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии не следует учитывать.
парни как понятно сколько ставить на for x in range(?) Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен.
При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз (где k - целое число).
Черепахе был дан для исполнения следующий алгоритм:
Направо 315 Повтори 7 [Вперёд 16 Направо 45 Вперёд 8 Направо 135].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.
Ставь 15000000
from turtle import *
color("black","red")
m = 100
begin_fill()
speed(0)
left(90)
for i in range(4):
forward(9*m)
right(90)
forward(7*m)
right(90)
end_fill()
canvas = getcanvas()
ccount = 0
for x in range(-120*m, 120*m, m):
for y in range(-120*m, 120*m, m):
item = canvas.find_overlapping(x,y,x,y)
if len(item)==1 and item == 0:
ccount = ccount + 1
print(ccount)
done()
exit()
В чем может быть проблема?
Проблема почти в самом конце. В строке if len(item)==1....
if len(item)==1 and item[0]==5: (вот так должно быть) или так if len(item)>=1: (если нужно посчитать точки еще и на контуре фигуры )
@@chlen_tvoi Все равно в консоли выводится 0
@@rebellion255 Скинь условие задачи если есть
@@chlen_tvoi Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 9 Направо 90 Вперёд 7 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
(№ 5600) (А. Минак) Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси абсцисс, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует три команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, и Налево m (где m - целое число), вызывающая изменение направления движения на m градусов против часовой стрелки. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 40 [Налево 45 Вперёд 400 Направо 90]
Определите, сколько точек с целыми положительными координатами (x, y) будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Что я делаю не так?
from turtle import *
color("black", "red")
speed(1000)
m=100
begin_fill()
for i in range(8):
left(45)
forward(400*m)
right(90)
end_fill()
canvas=getcanvas()
cnt=0
for x in range(1*m,1000*m,m):
for y in range(1*m,1000*m,m):
item=canvas.find_overlapping(x,y,x,y)
if len(item)==1 and item[0]==5:
cnt+=1
print(cnt)
done()
exit()
Координаты инвертированы, вот так верно:
from turtle import *
color("black", "red")
speed(1000)
m=50
begin_fill()
left(90)
for i in range(8):
left(45)
forward(400*m)
right(90)
end_fill()
canvas=getcanvas()
cnt=0
for x in range(-1200*m,0,m):
for y in range(-1200*m,0,m):
item=canvas.find_overlapping(x,y,x,y)
if len(item)==1 and item[0]==5:
cnt+=1
print(cnt)
done()
exit()
@@inf99ballov Не могли бы Вы пояснить, почему for x in range(-1200*m,0,m): ? И почему черепаха сначала делает команду left(90), если по условию она смотрит вдоль оси абцисс?
@@olgapiv ахх, дико извиняюсь, не увидал, что вдоль оси абсцисс смотрит🥲
Тогда вот так будет выглядеть прога
from turtle import *
color("black", "red")
speed(1000)
m=50
begin_fill()
for i in range(8):
left(45)
forward(400*m)
right(90)
end_fill()
canvas=getcanvas()
cnt=0
for x in range(0,1200*m,m):
for y in range(-1200*m,0,m):
item=canvas.find_overlapping(x,y,x,y)
if len(item)==1 and item[0]==5:
cnt+=1
print(cnt)
done()
exit()
Просто нумерация координат немного по-другому работает в turtle,а не как мы привыкли что первая четверть оба положительные, на словах в комментарии будет сложно объяснить, поэтому рекомендую вам прочитать документацию к модулю
@@inf99ballov Спасибо, обязательно прочту.
нужно было еще дописать внчале tracer(0), чтобы не ждать отрисовки
Направо 300, повтори 6 раз, [вперед 5 направо 120 вперед 5 направо 330]
from turtle import*
color ("black", "red")
m=100
begin fill()
right (300)
for i in range (4):
forward (10)
right (120)
forward (10)
right (330)
end fill ()
canvas=getcanvas ()
cnt=0
for x in range (-1000*m, 1000*m, m):
for y in range (-1000*m, 1000*m, m):
item=canvas.find_overlapping (x, y, x, y)
if len(item)==1 and item[0]==5:
cnt+ 1
print (cnt)
done ()
exit()
Получается 0, а должно 269
а почему у тебя вместо знаков равенства стоят минусы? и пропущены некоторые знаки умножения?
@@inf99ballov ой, я просто копировал с фотографии и текст распознался не так как надо. Так то у меня всё как в шаблоне, но ответ 0
from turtle import *
color("black", "red")
m = 100
begin_fill()
left(90)
for i in range(2):
forward(10*m)
right(90)
forward(18*m)
right(90)
penup()
forward(5*m)
right(90)
forward(7*m)
left(90)
pendown()
for i in range(2):
forward(10*m)
right(90)
forward(7*m)
right(90)
end_fill()
canvas = getcanvas()
cnt = 0
for x in range(-120*m,120*m, m):
for y in range(-120*m,120*m, m):
item = canvas.find_overlapping(x, y, x, y)
if len(item) >= 1 and item[0] == 5:
cnt += 1
print (cnt)
done()
exit()
привет,скорее всего ты не ответишь,но не знаешь почему задача выдает неправильный ответ,нужно найти точки внутри объединения фигур включая точки на линиях
должно быть 249 у меня 196 или 197
k=0
for x in range(1,14):
for y in range(1,14):
if -x/(3**0.5)+14>y>x/(3**0.5):
k+=1
print(k)
14 - сторона треугольника вариант 10 6 задание ответ 78 сразу выходит Решу ЕГЭ через графики ...ставишь вместо 14 любое число...
работает онли на треугольник
@@tatarskiy_ejik6836 это дело можно поместить в функцию и передать параметром количество углов (Те "3" Это ведь количество углов? )
@@shadowdragon5185 не ко мне вопрос
@@tatarskiy_ejik6836 по коду это и не было вопросом. Вопрос только с этой цифрой 3
@@shadowdragon5185 нет, 3**0.5 это корень из трех
предлагаю строить треугольник в 10 раз меньше заданного, то есть если стороны 100, то мы задаем 10 для легкого счета точек внутри фигуры
с масштабом 10 тоже можно, но 100 для уверенности)
Подскажите пожалуйста зачем мы увеличиваем масштаб?
@@Ксю-р6ш уже ответил на такой вопрос)
@@inf99ballov c масштабом 10 у меня 6 точек недостаёт !!! так что надо брать 100
А что делать в случае, когда можно считать точки на линии? Какой код у черного цвета?
пни как ответят, я придумал величивать шаг форвард на 2 еденицы тогда будет считать правильно
вместо len(item) == 1 and item[0] == 5: надо писать len(item) >= 1: и все
@@loco9312 пинаю, на 2 единицы увеличивать нельзя, не правильно это
еще лучше придумал:
if len(item)>=1 and (canvas.itemcget(item[0], 'fill') == 'red' or canvas.itemcget(item[0], 'fill') == 'black'):
Спасибо большое, реально полезно
Возник такой вопрос насчёт этой программы: в сборнике Крылова 9-10 вариант даны такие условия: направо 30 повтори 10(9 вариант) и почему черепаха может крутиться на одном месте и выдавать в итоге 0?
Пришли пожалуйста свой код, наверняка ошибочка там
@@inf99ballov Момент: условие из 9 варианта (Направо 30 [Вперёд 30 Направо 60 Вперёд 30 Направо 120] и условие из 10 варианта: (Повтори 10 [Направо 120 Вперёд 12 Направо 60 Вперёд 12]
Код для 10 варианта:
from turtle import *
color('black', 'red')
m = 100
begin_fill()
left(90)
for i in range(4):
right(120)
forward(12*m)
right(60)
forward(12*m)
end_fill()
canvas = getcanvas()
cnt = 0
for x in range(-130*m, 130*m, m):
for y in range(-130*m, 130*m, m):
item = canvas.find_overlapping(x,y,x,y)
if len(item) == 1 and item[0] == 5:
cnt += 1
print(cnt)
done()
ext()
Код для 9 варианта:
from turtle import *
color('black' 'red')
m = 100
begin_fill()
right(30)
left(60)
for i in range(4):
forward(30*m)
right(60)
forward(30*m)
right(120)
end_fill()
canvas = getcanvas()
cnt = 0
for x in range(-130*m, 130*m, m):
for y in range(-130*m, 130*m, m):
item = canvas.find_overlapping(x,y,x,y)
if len(item) == 1 and item[0] == 5:
cnt += 1
print(cnt)
done()
ext()
@@inf99ballov в ожидании ответа 🙃
@@k_o_l_d_iplay9360 в коде для 9в. у тебя в color нет запятой между цветами,
left должно быть 90, а не 60,
в for достаточно range(2) для полной фигуры, так как с 4 у тебя черепашка дважды рисует фигуру,
ещё в конце ext() вместо exit() написано.
ответ вроде 750.
в 10в. также вместо range(4) нужно range(2) и вместо ext() нужно exit(), но второе особо на программу не влияет.
ответ 120 вроде.
п.с. и ещё это не обязательно, но рекомендую добавить speed(1000), чтобы быстрее работало
@@kimine2270 спасибо за отклик, попробую сделать 🤝
Кстати, заливка у черепашки адекватная. Если фигура не замкнутая, то черепашка соединит конец и начало фигуры. И даже если там будет 10 повторений, все равно должно работать)
у меня если повторений больше нужного то показывает кол-во точек 0, так что лучше ставить правильное кол
Интересно если я color не прописываю и все заливается черным цветом, то программа все равно работает не взирая на item[0]==5 как это объяснить?
потому что чел в видео не понимает как она работает, а просто скопипастил код и повторил объяснения :)
Интересно, как сделать, чтобы после рисования ёлки, секунд через 5 графическое окно с ёлкой закрылось или вовсе питон закрыл сам себя?
При повороте на 45 градусов программа считает точки некорректно, кто-то сталкивался с такой проблемой?
Отправь пожалуйста задачу и свой код. Наверняка ошибка в чем-то другом
@@inf99ballov Голова направлена вдоль положительного направления оси ординат. Алгоритм: Вперед 100 Направо 90 Вперед 100 Направо 45 Опусти Повтори 10 [ Вперед 30 Направо 90].
Ответ 882, получается 924.
Эту часть пропускаю (Вперед 100 Направо 90 Вперед 100 ), т.к если сделать left(90) forward(100*m) right (90) forward(100*m) черепашка все равно будет стоять в положении Направо 90.
from turtle import *
color ("black", "red")
m = 100
tracer(0)
begin_fill()
right(45)
for i in range(4):
forward(30*m)
right(90)
end_fill()
canvas = getcanvas()
count = 0
for y in range(-100*m, 100*m, m):
for x in range(-100*m, 100*m, m):
item = canvas.find_overlapping(x,y,x,y)
if len(item) == 1 and item[0] == 5:
count +=1
print(count)
update()
done()
exit()
@@ИринаЧупракова-м9ф забавно, я нашел ошибку в операции tracer(0)! дело в том, что если не отслеживать путь черепашки, то она не будет рисовать линию черного цвета, чтобы эти точки мы не считали раз они лежат на границе фигуры, поэтому заменяем строчку tracer(0) на speed(1000) и все окей
from turtle import *
color ("black", "red")
m = 100
speed(1000)
begin_fill()
right(45)
for i in range(4):
forward(30*m)
right(90)
end_fill()
canvas = getcanvas()
count = 0
for y in range(-100*m, 100*m, m):
for x in range(-100*m, 100*m, m):
item = canvas.find_overlapping(x,y,x,y)
if len(item) == 1 and item[0] == 5:
count +=1
print(count)
done()
exit()
@@inf99ballov Спасибо!
Рекомендую нормальный масштаб использовать, чтобы фигура полностью на экран помещалась. Чтобы проверить, что фигура адекватная получилась, без ошибок. И точки тоже на экран выводить нужно для дополнительной проверки, чтобы убедиться, что диапазон верно задан, нет пустых дырок и т.д. Для этого goto (x,y) и dot(5,'blue') используйте. У вас программа сейчас просто какое-то число выводит и не понятно откуда и как оно берётся. А как проверить что вы не ошиблись нигде? Нет никакой визуализации. Визуализацию делайте. Вы должны видеть и понимать что всё правильно нарисовалось. У вас на егэ не будет возможности "сверить" ответ. Найти ошибку в программе и пересчитать вам не разрешат. А ваша программа в таком в виде сейчас не имеет защиты от ошибок.
Я сейчас прорешал задачу без масштабирования и получил неверный ответ. После этого я взял масштаб за 10, и ответ неожиданно стал верным. Думаю, что из-за маленького масштаба некоторые точки с целочисленными координатами как бы пропадают из-за нехватки пикселей на экране, иначе я это объяснить не могу
привет, а как решать таким шаблоном задачи где пересечение фигур?
а если фигур несколько и нужно посчитать точки пересечения или же точки, которые не пересекаются
А что надо изучать для этой программы?
Повтори 6 [Вперёд 10 Направо 60]
Определите количество точек с целочисленными координатами, лежащих внутри или на границе области, которую ограничивает заданная алгоритмом линия.
как посчитать количество точек на линии?
ручками
@@МихаилМитник там получается 268 точек, а прога выдает 267, посчитаешь ручками?
Здравствуйте, решал задача и по условию надо найти все точки и внутри фигуры , и на линии: Повтори 5 [Вперёд 7 Направо 90 Вперёд 4 Направо 90]
Определите количество точек с целочисленными координатами, лежащих внутри или на границе области, которую ограничивает заданная алгоритмом линия.
Мой код:
from turtle import *
color('black','red')
m=100
begin_fill()
left(90)
for i in range(2):
forward(7*m)
right(90)
forward(4*m)
right(90)
end_fill()
canvas=getcanvas()
c=0
for x in range(-100*m,100*m,m):
for y in range(-100 * m, 100 * m, m):
item=canvas.find_overlapping(x,y,x,y)
if len(item)==1 and item[0]==5 :
c+=1
print(c)
done()
exit()
Выводит 18, должно быть 40. Буду благодарен за помощь
легче легкого, дружище) Чтобы считать точки на границе фигуры достаточно условие в if сделать len(item)>=1
from turtle import *
color('black','red')
m=100
speed(1000)
begin_fill()
left(90)
for i in range(2):
forward(7*m)
right(90)
forward(4*m)
right(90)
end_fill()
canvas=getcanvas()
c=0
for x in range(-100*m,100*m,m):
for y in range(-100*m, 100*m, m):
item=canvas.find_overlapping(x,y,x,y)
if len(item)>=1:
c+=1
print(c)
done()
exit()
@@inf99ballov А ПОЧЕМУ 2 А НЕ 4 for i in range(2):
@@inf99ballov Спасибо, думала всё, тупик)
А что делать в заданиях с дугами? Мне вот попалась в варианте дуга, не знаю что делать
В 6ом номере и цапля и кузнечик и кролик есть, там нужны уже мозги, а не только шаблон)
Хочется уточнить: данный код - это полностью Ваша оригинальная идея, придуманная с нуля без опоры на что-либо?
Я эту программу показывал еще с месяц назад, на вебинаре по решению 6 задач, но всвязи с выходом сборника, решил продублировать. Придумана прога не без помощи Вани (наш преподаватель 10 класса) огромное ему спасибо, ну а что касается ютуба, я такого кода пока что ни у кого не видал.
зашёл на ваш ютуб и канал и в разборе демоверсии увидел практически такую же программу, честно сказать ваше видео я ранее не смотрел, но раз вы меня опередили, хвалю, я добавил вас в закрепленный комментарий👍
@@inf99ballov можно было просто извиниться, что код был позаимствован)
Видно же, что точь в точь все совпадает практически, а на видео говорите, что это вы придумали)
Не очень красиво получается)
@@ИльнарЮсупов-р2г я не заимствовал этот код. Совпадения хоть и редки, но случаются. Я никогда за все время преподавания не стеснялся говорить об авторах способов решения на своем канале, да и стал бы я записывать видео с похожим кодом, даже не изменив его? я тоже узнал об этом только после этого комментария
@@ИльнарЮсупов-р2г можете также посмотреть мой вебинар "все способы решения нового 6 задания", там я тоже решал его этим кодом в конце и все это почти месяц или уже 2 назад
Можно ли как-то считать точки, которые на линии тоже учитываются???????❤❤❤
конечно, просто в условном операторе пропиши if len(item) >= 1:
и готово
@@inf99ballov как len(item) может быть больше единицы, Если пересечений точки и точки больше 1 быть никак не может? Разве в таком случае не нужно убирать второе условие, которое проверяет цвет завивки?
@@МихаилПавлов-я5п Он ищет пересечения всех объектов, прямых, заливочной части и тд. и как понятно по условию, наша точка пересечется и с заливкой и с черной границей поверх нее, поэтому длина множества будет больше 1
@@inf99ballov то есть при таком построении заливка так же накладывается на (или под, неважно) линию?
@@МихаилПавлов-я5п да, там все по хитрому
Вопрос, а что если в задании просят учитывать точки на линиях, как посчитать их количество в таком случае?
Привет, возник вопрос с задачами с дугами. Пример из сборника Крылова 2023 16 вариант: Направо 180 Вперед 3 Направо 90 Вперед 48 Направо 90 Вперед 3 Повтори 6 [Дуга 4, 4, 0, 180] . Точки на линии не учитываем. Найти количество точек внутри фигуры.
Мой код:
from turtle import *
color("black","red")
m =1000
speed(1000)
begin_fill()
left(90)
right(180)
forward(3*m)
right(90)
forward(48*m)
right(90)
forward(3*m)
for i in range(6):
circle(-4*m,180)
right(180)
end_fill()
canvas = getcanvas()
cnt = 0
for x in range(-500*m,500*m,m):
for y in range(-500*m,500*m,m):
item = canvas.find_overlapping(x,y,x,y)
if len(item) == 1 and item[0] == 5:
cnt += 1
print(cnt)
done()
exit()
Мой код выдает: 250
Правильный ответ: 136
Что не так с кодом?
Заранее благодарен за ответ
проверил ручным способом - тоже получил 250, вывод - код верный, а вот в сборнике очередная ошибка
@@inf99ballov почему в 14 строке -4*m?
@@artzef потому что нам нужно именно такое направление радиуса, попробуй написать без минуса и увидишь в чем отличие
На листочке всё получилось, но я никак не пойму как в кумире и пайтоне изобразить такую фигуру, какие команды(
from turtle import *
color("black", "red")
m = 50
begin_fill()
left(45)
for i in range(4):
forward(8*m)
right(135)
forward(9*m)
right(45)
speed(100)
end_fill()
canvas = getcanvas()
cnt = 0
for y in range(-100*m, 100*m, m):
for x in range(-100 * m, 100 * m, m):
item = canvas.find_overlapping(x, y, x, y)
if len(item) == 1 and item[0] == 5:
cnt += 1
print(cnt)
done()
exit()
Какая ошибка тут и почему при выполнение программы не происходит закраска фигуры?
Фигура закрашивается, но выводится 0 это значит что заливка была сделана неправильно , чтобы это исправить в for i in range(4) 2 надо поставить, тогда выведет ответ 40. Надо ставить 2, так как данная программа нарисует фигуру за два цикла.
Ох блин ненавижу что-то заучивать шаблонно, хотелось бы чтоб в школах реально изучали пайтон, а не шаблоны под ЕГЭ. Можете подсказать где можно брать нормальную информацию по пайтону?
А что если взять 54 номер задания 6 у Полякова, шдн используется чертёжник?
Попробуй его решить таким же способом, потому что там ответ получается 62305 точек
Чертёжнику был дан для исполнения следующий алгоритм:
Повтори 10 раз
Сместиться на (200, 100)
Сместиться на (-50, -150)
Сместиться на (-150, 50)
конец
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии следует учитывать.
Классная программа, вот только вопрос есть, как ей считать задания, где нужно поднять хвост черепахи, сделать что-то, опустить хвост и снова что-то сделать? это возможно?
а что делать если в задаче цапля?
Цапле был дан для исполнения следующий алгоритм:
Повтори 5 [Дуга 5, 0, 10, 180 Дуга 10, 0, 0, 180 Дуга 5, -5, -5, 180].
какие нужно использовать команды?
Спасибо большое!
Даня лучший!
А вы не знаете как посчитать этот идентификатор объекта, проведя некоторое количество тестов я так и не выявил закономерности в идентификаторах?
код хороший работает почти всегда, он в сборнике Крылова 2024 года в 15 варианте фигура очень странная, я ,вроде, все учел , но ответ прога выдаёт не верный.
Из-за чего код может не работать?
from turtle import *
color("black", "red")
m = 100
tracer(0)
begin_fill()
left(90)
forward(10*m)
right(120)
forward(10*m)
right(120)
forward(10*m)
right(120)
end_fill()
cnt = 0
canvas = getcanvas()
for y in range(-20*m, 20*m, 1*m):
for x in range(-20*m, -20*m, 1*m):
abc = canvas.find_overlapping(x,y,x,y)
print(x,y)
if len(abc) == 1 and abc[0] == 5:
cnt += 1
print(cnt)
done()
exit()
у тебя во втором форе стоит диапазон от -20 до -20
ошибка
поставь от -20 до +20 и все будет окей
@@inf99ballov спасибо
from turtle import *
color("black", "red")
m = 100
tracer(0)
begin_fill()
left(90)
forward(10*m)
right(120)
forward(10*m)
right(120)
forward(10*m)
right(120)
end_fill()
cnt = 0
canvas = getcanvas()
for y in range(-20*m, 20*m, 1*m):
for x in range(-20*m, 20*m, 1*m): # исправлено здесь
abc = canvas.find_overlapping(x, y, x, y)
if len(abc) == 1 and abc[0] == 5:
cnt += 1
print(cnt)
done()
А какой номер у черного цвета??
А где ты рисуешь? Скинь прогу плиз))
from turtle import *
color("blak", "red")
m = 100
begin_fill()
left(90)
for i in range(3):
forward(111 * m)
right(120)
end_fill()
canvas = getcanvas()
cnt = 0
for x in range(-120 * m, 120 * m, m):
for y in range(-120 * m, 120 * m, m):
item = canvas.find_overlapping(x, y, x, y)
if len(item) == 1 and item[0] == 5:
cnt += 1
print(cnt)
done()
exit()
питон выдает ошибку, что я не так написал?
blak а надо black
А эта программа будет действовать только на треугольники или на все фигуры?
на все фигуры
@@inf99ballov понял, спасибо за уточнение. Хорошечная программа ✌️🤝
Какой пушистик на фоне🥺🥺🥺
А что делать если просят посчитать и точки лежащие на линии?
Почитай в комментах других ребят, уже задавали такой вопрос))
А для того чтобы посчитать точки на обводке есть код а желательно видео?
tracer(0) в начале и прога работает мгновенно
проблема трасера в том, что обводка при нем не рисуется, а значит прога в некоторых условиях может работать неверно
Что не так с кодом,выводит 0,Крылов 2023,4 вариант
from turtle import *
color("black", "red")
m=100
begin_fill()
right(30)
for i in range(4):
forward(20*m)
right(90)
forward(30*m)
right(90)
end_fill()
canvas=getcanvas()
cnt=0
for y in range(-100*m, 100*m, m):
for x in range(-100*m, 100*m, m):
item=canvas.find_overlapping(x, y, x, y)
if len(item)==1 and item[0]==5:
cnt+=1
print(cnt)
done()
exit()
for i in range(4):
forward(20*m)
right(90)
forward(30*m)
right(90)
В этом месте необходимо брать такое количество повторений , чтобы фигура замыкалась лишь один раз, точка начала и конца цикла должны совпадать(было 4, а нужно брать 2).Получается ответ - 598
@@rerediska6268 for i in range(2)? Если да, то я пробовал вышло 600, а правильный ответ 588
@@abracadabra18 у меня получается 598
@@abracadabra18
from turtle import *
color("black", "red")
m=100
begin_fill()
right(30)
for i in range(4):
forward(20*m)
right(90)
forward(30*m)
right(90)
end_fill()
canvas=getcanvas()
cnt=0
for y in range(-100*m, 100*m, m):
for x in range(-100*m, 100*m, m):
item=canvas.find_overlapping(x, y, x, y)
if len(item)==1 and item[0]==5:
cnt+=1
print(cnt)
done()
exit()
У меня ответ получается 598
@@rerediska6268 с range(2) выводит 600, у тебя 598, ответ 588.Что-то мы делаем не так в жизни
Повтори 4 [Вперёд 9 Направо 90 Вперёд 7 Направо 90]
Почему тут, если range(4) ставлю, то выдает ноль, а если range(2) то верное число?
for i in range(4):
forward(9*m)
right(90)
forward(7 * m)
right(90)
потому что это прямоугольник и за один проход ты рисуешь сразу две его стороны. Значит для замыкания фигуры нужно всего 2 повторения, а не 4 как в условии
а если точки на линии тоже надо считать?
Интеграл ? И формула Пика в связке , вполне достойный метод
не во всех задачах фигура будет попадать в целочисленные точки своими вершинами, а формула пика работает только при таком условии
Подскажите, в IDE Pycharm на Mac apple silicon программа не работает, ответ не выводится в консоль даже спустя час. В среде Thonny все работает замечательно. Проблема именно с IDE или с операционкой? Знаю точно, что на ППЭ будут машины с этой средой, не возникут ли подобные проблемы там?
вряд ли, я бы рекомендовал еще поразбираться
потому что от интерпретатора мало что зависит
Пишите в голеньком IDLE (найти поиском во "все программы")
В некоторых заданиях просят поднять хвост, если в кумире это сделать элементарно, то вот как сделать на питоне на видео не показано. Если это возможно сделать, то пожалуйста ответьте мне как.
up()
down() - опустить
up() - поднять
приветствую, вопрос всё ещё по решению через turtle(старый комментарий так и не получил ответа, плюс инфа новая есть). Есть вопрос, почему мы проверяем точку через число 5? Повторюсь, мы проверяем не цвет объекта, так как при изменении фона программа всё ещё находит нужные точки, значит мы считаем какой то другой параметр. И я заметил странность: если мы начнём выводить точки, которые входят в фигуру, мы будем получать кортежи, причём их длина будет чаще всего 1-2 элемента. Но первая же точка имеет 5 элементов! Есть конечно идея, что каждая точка возвращает кол-во объектов, которые проходят через неё, но тогда почему один объект называется 5,4, и т.д., и почему в 1 точке целых 5 объектов, хотя мы используем только линии и площадь? Было бы неплохо, что бы вы прояснили этот момент. Заранее спасибо
Георгий, здравствуйте! я уже отвечал на этот вопрос кому-то в комментариях: список item наполняется не кодами цветов, а кодами самих элементов пересечения, поэтому цвета можно менять, в видео я этого еще не знал)
В документации сказано так:
find_overlapping ( x1 , y1 , x2 , y2 ) -
Возвращает каждый элемент, перекрывающий прямоугольную область, заданную x1 , y1 , x2 и y2 . должен быть верхний левый угол области и нижний правый угол. Элементы возвращаются в порядке укладки, начиная с самого нижнего элемента.(x1, y1)(x2, y2)
даня подскажи пожалуйста как определить количество сторон у фигуры
Мне кажется в таком случае ее легче построить в кумире и просто посчитать
@@inf99ballovокей спасибо
всё шикарно, осталось запомнить код
не стоит зубрить код , нужно понимать как он работает )
@@einshtein2184 ну у меня не настолько высокий уровень в программировании, так что хотя бы запомнить
@@kizirayukio281 абсолютно каждый может понять программирование (тем более питон, который является самым лёгким языком)
Спасибо!
Проверьте, пожалуйста, что не так:
задание:
Повтори 4 [Вперёд 5 Направо 90 Вперёд 10 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
код:
from turtle import*
color('black', 'red')
m=100
speed(1000)
begin_fill()
left(90)
for i in range(4):
forward(5*m)
right(90)
forward(10*m)
right(90)
end_fill()
canvas=getcanvas()
cnt=0
for y in range(-100*m, 100*m,m):
for x in range(-100*m, 100*m, m):
item=canvas.find_overlapping(x, y, x, y)
if len(item)==1 and item[0]==5:
cnt+=1
print(cnt)
done()
exit()
вообще не понимаю, где ошибка(
неправильно выбрано количество повторений в цикле. Для того, чтобы отрисовался прямоугольник нужно выполнить команды отрисовки всего 2 раза, а не 4 как в условии, поэтому программа должна выглядеть так:
from turtle import*
color('black', 'red')
m=100
speed(1000)
begin_fill()
left(90)
for i in range(2):
forward(5*m)
right(90)
forward(10*m)
right(90)
end_fill()
canvas=getcanvas()
cnt=0
for y in range(-100*m, 100*m,m):
for x in range(-100*m, 100*m, m):
item=canvas.find_overlapping(x, y, x, y)
if len(item)==1 and item[0]==5:
cnt+=1
print(cnt)
done()
exit()
@@inf99ballov Не сходится, питон выдает 36 точек, а в ответах 66
@@SkxrdyStickers значит ошибка в ответах
попробуй нарисуй эту фигуру в тетрадке и посчитать - получится 36, это прямоугольник со сторонами 5 на 10, там не может быть 66 точек
@@inf99ballov вы отчасти не правы. Если учитывать границы, как раз 66 точек (5+1=6 точек в длину и 10+1=11 точек в высоту 6*11=66)
Для подсчета же без границы должно выйти 66-30=36, как вы и сказали.
@@gifi5844так в условии прикрепленной задачи написано НЕ УЧИТЫВАТЬ точки на линии, поэтому я так и написал)
Спасибо, бро.