стоит отметить то, чтобы найти нужное кол-во повторений в 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 да, я проверил, оказалось просто задача попалась такая, что просто удачно сошлось. А на деле всё не так. Плюсом я нашёл видос который рассматривает эту тему. Как оказывается это всё бред и работает только если повезёт с задачей. Сами попробуйте очень много таких задач порешать и убедитесь. Так ещё к минусам данного способа, что нельзя почитать точки на линиях.
Не знаю, упоминалось ли где-то про 5:10, но это не так. Если построить желтую фигуру, то она все равно будет выдавать тот ответ. Насколько я понял, если в item у нас есть 6 - это означает, что мы на границе фигуры, и только из-за len(item) == 1 ваша программа работает. P.s не отсекайте эту 6,и получите программу, которая считает еще точки по краям
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм: Повтори 4 [Вперёд 12 Направо 90] Повтори 3 [Вперёд 12 Направо 120] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом: Повтори 4 [Вперёд 12 Направо 90] и находиться вне области, ограниченной линией, заданной данным алгоритмом: Повтори 3 [Вперёд 12 Направо 120]. Точки на линии учитывать не следует КАК СЛЕЛАТЬ
Если вершины многоугольника имеют целочисленные координаты, то зная площадь данного многоугольника можно посчитать количество точек с целочисленными координатами через формулу Пика.
парни как понятно сколько ставить на for x in range(?) Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз (где k - целое число).
Черепахе был дан для исполнения следующий алгоритм: Направо 315 Повтори 7 [Вперёд 16 Направо 45 Вперёд 8 Направо 135]. Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.
Здравствуйте. Возникла проблема с 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
Как насчет того, чтобы треугольник обозначить через три прямые и прогой проверять удовлетворяет ли точка трем неравенствам. Только что попробовал и этот способ очень простой по крайней мере если с профилем у вас хорошо и написать уравнение прямой не вызывает трудностей, первая прямая 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 и париться над тем, какая точка принадлежит, а какая нет, не нужно
@@sunny_reflection скажу честно, это ни капли не лишний нервяк, нам сами учителя говорили, чтобы мы шпоры с собой взяли. У меня вообще шпоры были размером с лист А4 (в принципе я и писал всё на этих листах) и просто сворачивал лист до размера носового плотного плотка и ложил туда же и брал с собой на ЕГЭ. Спокойно сдал все три экзамена. Сейчас я понятное дело уже учусь в университете и заканчиваю 1 курс
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] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Доброго времени суток! Отличный код, спасибо, по вариантам Крылова спасал, пока не дошел до 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 [Вперёд 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()
Скажите пожалуйста, вот вы объясняли на 5:20 что красный цвет имеет код "5", а как узнать код черного цвета? И вообще, можете пожалуйста подсказать, где вы взяли информацию об этих кодах
это не коды цветов, это коды самих пересекающихся элементов ( прямые, отрезки) и они лежат в item, и чтобы области пересекались это множество должно иметь ненулевую длину и соблюдать условие как в видео,( с цветом ошибка, на момент записи видео, я этого еще не знал)
(№ 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
В второй задаче про квадрат можно посчитать ведь без программы.Нам ведь не важно повернут он или нет,просто перемножаем 25 на 25 и получаем ответ - 625
Направо 135 Повтори 25 [Вперёд 250 Направо 90] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии не следует учитывать.
Что не так с кодом,выводит 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
Из-за чего код может не работать? 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("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, так как данная программа нарисует фигуру за два цикла.
Привет, возник вопрос с задачами с дугами. Пример из сборника Крылова 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 Что не так с кодом? Заранее благодарен за ответ
Ага) но формула есть волшебная, что S(площадь) = K(кол-во цел точек внутри) + M/2(кол-во цел точек на сторонах/2) - 1 . М это просто НОД от разницы координат точек)
Возник такой вопрос насчёт этой программы: в сборнике Крылова 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), чтобы быстрее работало
@@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()
А что если взять 54 номер задания 6 у Полякова, шдн используется чертёжник? Попробуй его решить таким же способом, потому что там ответ получается 62305 точек Чертёжнику был дан для исполнения следующий алгоритм: Повтори 10 раз Сместиться на (200, 100) Сместиться на (-50, -150) Сместиться на (-150, 50) конец Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии следует учитывать.
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() питон выдает ошибку, что я не так написал?
а что делать если в задаче цапля? Цапле был дан для исполнения следующий алгоритм: Повтори 5 [Дуга 5, 0, 10, 180 Дуга 10, 0, 0, 180 Дуга 5, -5, -5, 180]. какие нужно использовать команды?
Подскажите, а как с помощью этого шаблона решать подобные задачи: Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм: Повтори 4 [Вперёд 10 Направо 90] Направо 30 Повтори 5 [Вперёд 6 Направо 60 Вперёд 6 Направо 120] Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом: Повтори 4 [Вперёд 10 Направо 90] и находиться вне области, ограниченной линией, заданной данным алгоритмом: Повтори 5 [Вперёд 6 Направо 60 Вперёд 6 Направо 120]. Точки на линии учитывать не следует.
ну вообще задачи с такими маленькими числами я бы рекомендовал решать ручками в кумире, но по-моему в комментах уже есть ребята, которые делали и такие задачи, попробуй посмотреть ниже
Ох блин ненавижу что-то заучивать шаблонно, хотелось бы чтоб в школах реально изучали пайтон, а не шаблоны под ЕГЭ. Можете подсказать где можно брать нормальную информацию по пайтону?
Приветствую! Столкнулся с вот такой задачей, ответ не сходится, должен быть 85. Возможно, ошибка в сборнике? Направо 45 Повтори 9 [Вперёд 9 Направо 90] from turtle import * color('black','red') speed(100) m = 200 begin_fill() right(45) for i in range(9): forward(9*m) right(45) 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()
А можно целиком вопрос, там точки только внутри фигуры считать нужно или на границе тоже? И куда изначально смотрит Черепашка, вдоль оси x или y? Во вторых уже сразу видно опечатку у вас. В условии написано направо 90 а в вашей программе right(45) в цикле
Классная программа, вот только вопрос есть, как ей считать задания, где нужно поднять хвост черепахи, сделать что-то, опустить хвост и снова что-то сделать? это возможно?
ПОДСКАЖИТЕ ПОЖАЛУЙСТА КАК МОЖНО ОПРЕДЕЛИТЬ ОБЛАСТЬ ПЕРЕСЕЧЕНИЯ ФИГУР Черепахе был дан для исполнения следующий алгоритм: Повтори 3 [Вперёд 10 Направо 120] Поднять хвост Вперёд 10 Направо 90 Вперёд 3 Опустить хвост Повтори 4 [Вперёд 10 Направо 90] Определите, сколько точек с целочисленными координатами будут находиться внутри пересечения фигур, ограниченных заданными алгоритмом линиями, не включая точки на границах этого пересечения. мой код: from turtle import * color ('black','yellow') m=15 speed(1) begin_fill() left(90) for z in range (3): forward (10*m) right(120) pu() forward(10*m) right (90) forward (3*m) pd() for s in range (4): forward (10*m) right (90) 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 ()
я такие задачи решаю по отдельности: в кумире или на листочке сначала строишь область пересечения а потом уже задаешь полученную фигуры в прогу и считаешь точки
Проверьте, пожалуйста, что не так: задание: Повтори 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, как вы и сказали.
код хороший работает почти всегда, он в сборнике Крылова 2024 года в 15 варианте фигура очень странная, я ,вроде, все учел , но ответ прога выдаёт не верный.
@@inf99ballov как len(item) может быть больше единицы, Если пересечений точки и точки больше 1 быть никак не может? Разве в таком случае не нужно убирать второе условие, которое проверяет цвет завивки?
@@МихаилПавлов-я5п Он ищет пересечения всех объектов, прямых, заливочной части и тд. и как понятно по условию, наша точка пересечется и с заливкой и с черной границей поверх нее, поэтому длина множества будет больше 1
приветствую, вопрос всё ещё по решению через 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 [Вперёд 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 как в условии
Рекомендую нормальный масштаб использовать, чтобы фигура полностью на экран помещалась. Чтобы проверить, что фигура адекватная получилась, без ошибок. И точки тоже на экран выводить нужно для дополнительной проверки, чтобы убедиться, что диапазон верно задан, нет пустых дырок и т.д. Для этого goto (x,y) и dot(5,'blue') используйте. У вас программа сейчас просто какое-то число выводит и не понятно откуда и как оно берётся. А как проверить что вы не ошиблись нигде? Нет никакой визуализации. Визуализацию делайте. Вы должны видеть и понимать что всё правильно нарисовалось. У вас на егэ не будет возможности "сверить" ответ. Найти ошибку в программе и пересчитать вам не разрешат. А ваша программа в таком в виде сейчас не имеет защиты от ошибок.
Я сейчас прорешал задачу без масштабирования и получил неверный ответ. После этого я взял масштаб за 10, и ответ неожиданно стал верным. Думаю, что из-за маленького масштаба некоторые точки с целочисленными координатами как бы пропадают из-за нехватки пикселей на экране, иначе я это объяснить не могу
Помогите пж... пишет, что name 'canvas' is not defined Код (вторая задача из ролика): from turtle import * color('black','red') m=100 begin_fill() right(30) for i in range(4): forward(25*m) right(90) end_fill() 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() Запускал и в питоне 3.9.6, и в онлайн компиляторе, везде выводит одну и ту же ошибку
ты пропустил строчку canvas = getcanvas() вот код: from turtle import * color('black','red') m=100 speed(1000) begin_fill() right(30) for i in range(4): forward(25*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()
Кстати, заливка у черепашки адекватная. Если фигура не замкнутая, то черепашка соединит конец и начало фигуры. И даже если там будет 10 повторений, все равно должно работать)
Я эту программу показывал еще с месяц назад, на вебинаре по решению 6 задач, но всвязи с выходом сборника, решил продублировать. Придумана прога не без помощи Вани (наш преподаватель 10 класса) огромное ему спасибо, ну а что касается ютуба, я такого кода пока что ни у кого не видал.
зашёл на ваш ютуб и канал и в разборе демоверсии увидел практически такую же программу, честно сказать ваше видео я ранее не смотрел, но раз вы меня опередили, хвалю, я добавил вас в закрепленный комментарий👍
@@inf99ballov можно было просто извиниться, что код был позаимствован) Видно же, что точь в точь все совпадает практически, а на видео говорите, что это вы придумали) Не очень красиво получается)
@@ИльнарЮсупов-р2г я не заимствовал этот код. Совпадения хоть и редки, но случаются. Я никогда за все время преподавания не стеснялся говорить об авторах способов решения на своем канале, да и стал бы я записывать видео с похожим кодом, даже не изменив его? я тоже узнал об этом только после этого комментария
@@ИльнарЮсупов-р2г можете также посмотреть мой вебинар "все способы решения нового 6 задания", там я тоже решал его этим кодом в конце и все это почти месяц или уже 2 назад
Подскажите, в IDE Pycharm на Mac apple silicon программа не работает, ответ не выводится в консоль даже спустя час. В среде Thonny все работает замечательно. Проблема именно с IDE или с операционкой? Знаю точно, что на ППЭ будут машины с этой средой, не возникут ли подобные проблемы там?
привет! очень странно программа зависит от переменной m, если её поменять - получается другой ответ. всегда получается такие значения брать? или это только для вариантов Крылова? =D
Кажется, алгоритм не рабочий. Я заметил что с квадратными фигурами, где 4 рисующие команды, ответ неверный. Иногда приходится менять местами размер движения, а иногда даже это не помогает. Для примера: Вперед 5 Направо 90 Вперёд 7 Направо 90 (учитывать точки на границе) Ответ: 48 Показывает: 42
Так тебе показали шаблон решения с задачами где точки нужно находить ТОЛЬКО ВНУТРИ фигуры, БЕЗ точек на границе. Можешь посчитать их отдельно и сложить вместе с ответом шаблона, либо просто посчитать вручную. Ведь гораздо проще просто перемножить два числа нежели строчить этот код.
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 любое число...
не пойму в чем ошибка, выдает ответ 5190 from turtle import * speed(1000) color("black","red") m=100 begin_fill() left(90) for i in range(3): forward(111*m) right(120) 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()
В некоторых заданиях просят поднять хвост, если в кумире это сделать элементарно, то вот как сделать на питоне на видео не показано. Если это возможно сделать, то пожалуйста ответьте мне как.
Касаемо скорости выполнения, если вы не хотите ждать, то можно прописать 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 да, я проверил, оказалось просто задача попалась такая, что просто удачно сошлось. А на деле всё не так. Плюсом я нашёл видос который рассматривает эту тему. Как оказывается это всё бред и работает только если повезёт с задачей. Сами попробуйте очень много таких задач порешать и убедитесь. Так ещё к минусам данного способа, что нельзя почитать точки на линиях.
Не знаю, упоминалось ли где-то про 5:10, но это не так. Если построить желтую фигуру, то она все равно будет выдавать тот ответ. Насколько я понял, если в item у нас есть 6 - это означает, что мы на границе фигуры, и только из-за len(item) == 1 ваша программа работает. P.s не отсекайте эту 6,и получите программу, которая считает еще точки по краям
Отличное решение, но советую вместо item[0] == 5 использовать canvas.itemcget(item[0], 'fill') == 'red', это избавит от непредвиденных ошибок)
Каких ошибок?Все итак работает
@@kozanuch4405вы видимо не знаете питон😅
спасибо, помогло
Подскажите пожалуйста а как сделать чтобы считало не только точки внутри фигуры но и точки на границе?
Убрать and item[0] == 5
Во втором номере, где был квадрат, можно было воспользоваться формулой по нахождении площади, по сути 25*25=625.
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 12 Направо 90]
Повтори 3 [Вперёд 12 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом: Повтори 4 [Вперёд 12 Направо 90]
и находиться вне области, ограниченной линией, заданной данным алгоритмом: Повтори 3 [Вперёд 12 Направо 120]. Точки на линии учитывать не следует
КАК СЛЕЛАТЬ
посчитай точки внутри каждой из фигур, а затем вычти из большее меньшее? (хз, если работает, то отпишись. А то я не проверял мою идею)
Здравствуйте, подскажите пожалуйста что делать если фигуры две, они пересекаются и нужно найти точки на их объединении?
что необходимо добавить, чтобы посчитать кол-во точек и на линии помимо внутренней части? Просто увеличить шаг на один?
большое спасибо, теперь 6 задание не кажется таким сложным)
Если вершины многоугольника имеют целочисленные координаты, то зная площадь данного многоугольника можно посчитать количество точек с целочисленными координатами через формулу Пика.
согласен, но не во всех задачах, к сожалению, вершины в целочисленных координатах лежат🥲
братан, твой канал просто лучший, спасибо
а как найти точки на контуре пересечения??
Спасибо большое. Прям выручил
А что нужно прописать если всё же нужно посчитать точки на линии фигуры?
Хорош, никогда в тебе не сомневался, объяснил 🔥🔥🔥🔥🔥🔥
Спасибо, Даня! Способ крутой👍🏻
Благодарю! Отличная работа !!! 👍💯 🔥🔥🔥 🧠
парни как понятно сколько ставить на for x in range(?) Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен.
При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз (где k - целое число).
Черепахе был дан для исполнения следующий алгоритм:
Направо 315 Повтори 7 [Вперёд 16 Направо 45 Вперёд 8 Направо 135].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.
Ставь 15000000
спасибо, хорошее объяснение!
Здравствуйте. Возникла проблема с 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 построить эту фигуру по командам в кумире например или на листочке нарисовать
революционно. утерли нос разработчикам. спасибо 🔥🔥🔥
Утерли нос разработчикам?
А ты думаешь, что они так и хотели, чтобы мы точки считали 30 минут?
@@Совет_силы😂😂😂
Как насчет того, чтобы треугольник обозначить через три прямые и прогой проверять удовлетворяет ли точка трем неравенствам.
Только что попробовал и этот способ очень простой по крайней мере если с профилем у вас хорошо и написать уравнение прямой не вызывает трудностей, первая прямая 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 и париться над тем, какая точка принадлежит, а какая нет, не нужно
как насчет посрать верх ногами
Не получится так просто сделать, если фигура из себя представляет невыпуклый многоугольник.
Спасибо! Прога работает как часы, осталось только её не забыть
можно распечатать или написать на тетрадном листе и с собой на экзамен взять, я в принципе так русский написал и матешу
@@voice_power_yt и потом в армейке Eifersucht сделать
@@voice_power_yt так это шпора и лишний нервяк
@@sunny_reflection скажу честно, это ни капли не лишний нервяк, нам сами учителя говорили, чтобы мы шпоры с собой взяли. У меня вообще шпоры были размером с лист А4 (в принципе я и писал всё на этих листах) и просто сворачивал лист до размера носового плотного плотка и ложил туда же и брал с собой на ЕГЭ. Спокойно сдал все три экзамена. Сейчас я понятное дело уже учусь в университете и заканчиваю 1 курс
Оригинально поставить корги на фон
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]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Доброго времени суток! Отличный код, спасибо, по вариантам Крылова спасал, пока не дошел до 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. Ответ не поменялся
Большое спасибо, очень полезное и информативное видео
Данил, спасибо огромное👍💥💥💥ты лучший!
огромное спасибо за универсальное решение
Повтори 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 Спасибо, думала всё, тупик)
Есть задания где нужно учитывать точки на границе, что делать в этом случае? И ещё есть задания где 2 фигуры, как с ними?
Скажите пожалуйста, вот вы объясняли на 5:20 что красный цвет имеет код "5", а как узнать код черного цвета? И вообще, можете пожалуйста подсказать, где вы взяли информацию об этих кодах
это не коды цветов, это коды самих пересекающихся элементов ( прямые, отрезки) и они лежат в item, и чтобы области пересекались это множество должно иметь ненулевую длину и соблюдать условие как в видео,( с цветом ошибка, на момент записи видео, я этого еще не знал)
(№ 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 Спасибо, обязательно прочту.
Направо 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
В второй задаче про квадрат можно посчитать ведь без программы.Нам ведь не важно повернут он или нет,просто перемножаем 25 на 25 и получаем ответ - 625
Да согласен
Так нам не над учитывать точки, лежащие на границе
Это подходит, если фигура нарисована под углом 30 градусов, а если 45 или другой угол?
из-за тебя ошибка в 6 задании! Не верьте ему, спаси и сохрани ваши баллы
Направо 135
Повтори 25 [Вперёд 250 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии не следует учитывать.
А что надо изучать для этой программы?
Что не так с кодом,выводит 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.Что-то мы делаем не так в жизни
Осталось выучить код перед егэ, спасибо)
Из-за чего код может не работать?
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("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, так как данная программа нарисует фигуру за два цикла.
Привет, возник вопрос с задачами с дугами. Пример из сборника Крылова 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 потому что нам нужно именно такое направление радиуса, попробуй написать без минуса и увидишь в чем отличие
На листочке всё получилось, но я никак не пойму как в кумире и пайтоне изобразить такую фигуру, какие команды(
Спасибо большое, реально полезно
Ага) но формула есть волшебная, что S(площадь) = K(кол-во цел точек внутри) + M/2(кол-во цел точек на сторонах/2) - 1 . М это просто НОД от разницы координат точек)
Работает для любого многоугольника
@@mr.fridmak_play4680 координаты как найти?
@@jekeha ну ты просто представь что из нуля рисуешь, добавляй шаги эти к x и y
хороший вариант, формула пика если я не ошибаюсь, но это тоже неавтоматизированный вариант, хотя довольно неплохо ускоряет решение)
Нод?
А вы не знаете как посчитать этот идентификатор объекта, проведя некоторое количество тестов я так и не выявил закономерности в идентификаторах?
Интересно если я color не прописываю и все заливается черным цветом, то программа все равно работает не взирая на item[0]==5 как это объяснить?
потому что чел в видео не понимает как она работает, а просто скопипастил код и повторил объяснения :)
А что делать в случае, когда можно считать точки на линии? Какой код у черного цвета?
пни как ответят, я придумал величивать шаг форвард на 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'):
Используйте в самом начале tracer(0) - это функция завершит работу черепахи сразу без ожидания
может ответ неправильно выдать
лучше speed(0)
Возник такой вопрос насчёт этой программы: в сборнике Крылова 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 спасибо за отклик, попробую сделать 🤝
При повороте на 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 Спасибо!
А что делать в заданиях с дугами? Мне вот попалась в варианте дуга, не знаю что делать
А где ты рисуешь? Скинь прогу плиз))
Интересно, как сделать, чтобы после рисования ёлки, секунд через 5 графическое окно с ёлкой закрылось или вовсе питон закрыл сам себя?
А что если взять 54 номер задания 6 у Полякова, шдн используется чертёжник?
Попробуй его решить таким же способом, потому что там ответ получается 62305 точек
Чертёжнику был дан для исполнения следующий алгоритм:
Повтори 10 раз
Сместиться на (200, 100)
Сместиться на (-50, -150)
Сместиться на (-150, 50)
конец
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии следует учитывать.
А какой номер у черного цвета??
а если фигур несколько и нужно посчитать точки пересечения или же точки, которые не пересекаются
а если точки на линии тоже надо считать?
Спасибо большое!
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
а что делать если в задаче цапля?
Цапле был дан для исполнения следующий алгоритм:
Повтори 5 [Дуга 5, 0, 10, 180 Дуга 10, 0, 0, 180 Дуга 5, -5, -5, 180].
какие нужно использовать команды?
Подскажите, а как с помощью этого шаблона решать подобные задачи: Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 10 Направо 90]
Направо 30
Повтори 5 [Вперёд 6 Направо 60 Вперёд 6 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом: Повтори 4 [Вперёд 10 Направо 90] и находиться вне области, ограниченной линией, заданной данным алгоритмом: Повтори 5 [Вперёд 6 Направо 60 Вперёд 6 Направо 120]. Точки на линии учитывать не следует.
ну вообще задачи с такими маленькими числами я бы рекомендовал решать ручками в кумире, но по-моему в комментах уже есть ребята, которые делали и такие задачи, попробуй посмотреть ниже
Вопрос, а что если в задании просят учитывать точки на линиях, как посчитать их количество в таком случае?
Ох блин ненавижу что-то заучивать шаблонно, хотелось бы чтоб в школах реально изучали пайтон, а не шаблоны под ЕГЭ. Можете подсказать где можно брать нормальную информацию по пайтону?
привет, а как решать таким шаблоном задачи где пересечение фигур?
Хороший способ, но этот код заучат наизусть единицы, из которых еще несколько человек совершит ошибки, поэтому способ годится для малого числа людей
Приветствую! Столкнулся с вот такой задачей, ответ не сходится, должен быть 85. Возможно, ошибка в сборнике?
Направо 45
Повтори 9 [Вперёд 9 Направо 90]
from turtle import *
color('black','red')
speed(100)
m = 200
begin_fill()
right(45)
for i in range(9):
forward(9*m)
right(45)
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()
А можно целиком вопрос, там точки только внутри фигуры считать нужно или на границе тоже?
И куда изначально смотрит Черепашка, вдоль оси x или y?
Во вторых уже сразу видно опечатку у вас. В условии написано направо 90
а в вашей программе right(45) в цикле
Классная программа, вот только вопрос есть, как ей считать задания, где нужно поднять хвост черепахи, сделать что-то, опустить хвост и снова что-то сделать? это возможно?
ПОДСКАЖИТЕ ПОЖАЛУЙСТА КАК МОЖНО ОПРЕДЕЛИТЬ ОБЛАСТЬ ПЕРЕСЕЧЕНИЯ ФИГУР
Черепахе был дан для исполнения следующий алгоритм:
Повтори 3 [Вперёд 10 Направо 120]
Поднять хвост
Вперёд 10 Направо 90 Вперёд 3
Опустить хвост
Повтори 4 [Вперёд 10 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри пересечения фигур, ограниченных заданными алгоритмом линиями, не включая точки на границах этого пересечения.
мой код:
from turtle import *
color ('black','yellow')
m=15
speed(1)
begin_fill()
left(90)
for z in range (3):
forward (10*m)
right(120)
pu()
forward(10*m)
right (90)
forward (3*m)
pd()
for s in range (4):
forward (10*m)
right (90)
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 ()
я такие задачи решаю по отдельности: в кумире или на листочке сначала строишь область пересечения а потом уже задаешь полученную фигуры в прогу и считаешь точки
Проверьте, пожалуйста, что не так:
задание:
Повтори 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так в условии прикрепленной задачи написано НЕ УЧИТЫВАТЬ точки на линии, поэтому я так и написал)
код хороший работает почти всегда, он в сборнике Крылова 2024 года в 15 варианте фигура очень странная, я ,вроде, все учел , но ответ прога выдаёт не верный.
Можно ли как-то считать точки, которые на линии тоже учитываются???????❤❤❤
конечно, просто в условном операторе пропиши if len(item) >= 1:
и готово
@@inf99ballov как len(item) может быть больше единицы, Если пересечений точки и точки больше 1 быть никак не может? Разве в таком случае не нужно убирать второе условие, которое проверяет цвет завивки?
@@МихаилПавлов-я5п Он ищет пересечения всех объектов, прямых, заливочной части и тд. и как понятно по условию, наша точка пересечется и с заливкой и с черной границей поверх нее, поэтому длина множества будет больше 1
@@inf99ballov то есть при таком построении заливка так же накладывается на (или под, неважно) линию?
@@МихаилПавлов-я5п да, там все по хитрому
А что делать если просят посчитать и точки лежащие на линии?
Почитай в комментах других ребят, уже задавали такой вопрос))
приветствую, вопрос всё ещё по решению через turtle(старый комментарий так и не получил ответа, плюс инфа новая есть). Есть вопрос, почему мы проверяем точку через число 5? Повторюсь, мы проверяем не цвет объекта, так как при изменении фона программа всё ещё находит нужные точки, значит мы считаем какой то другой параметр. И я заметил странность: если мы начнём выводить точки, которые входят в фигуру, мы будем получать кортежи, причём их длина будет чаще всего 1-2 элемента. Но первая же точка имеет 5 элементов! Есть конечно идея, что каждая точка возвращает кол-во объектов, которые проходят через неё, но тогда почему один объект называется 5,4, и т.д., и почему в 1 точке целых 5 объектов, хотя мы используем только линии и площадь? Было бы неплохо, что бы вы прояснили этот момент. Заранее спасибо
Георгий, здравствуйте! я уже отвечал на этот вопрос кому-то в комментариях: список item наполняется не кодами цветов, а кодами самих элементов пересечения, поэтому цвета можно менять, в видео я этого еще не знал)
В документации сказано так:
find_overlapping ( x1 , y1 , x2 , y2 ) -
Возвращает каждый элемент, перекрывающий прямоугольную область, заданную x1 , y1 , x2 и y2 . должен быть верхний левый угол области и нижний правый угол. Элементы возвращаются в порядке укладки, начиная с самого нижнего элемента.(x1, y1)(x2, y2)
Даня лучший!
нужно было еще дописать внчале tracer(0), чтобы не ждать отрисовки
А для того чтобы посчитать точки на обводке есть код а желательно видео?
Повтори 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 как в условии
Рекомендую нормальный масштаб использовать, чтобы фигура полностью на экран помещалась. Чтобы проверить, что фигура адекватная получилась, без ошибок. И точки тоже на экран выводить нужно для дополнительной проверки, чтобы убедиться, что диапазон верно задан, нет пустых дырок и т.д. Для этого goto (x,y) и dot(5,'blue') используйте. У вас программа сейчас просто какое-то число выводит и не понятно откуда и как оно берётся. А как проверить что вы не ошиблись нигде? Нет никакой визуализации. Визуализацию делайте. Вы должны видеть и понимать что всё правильно нарисовалось. У вас на егэ не будет возможности "сверить" ответ. Найти ошибку в программе и пересчитать вам не разрешат. А ваша программа в таком в виде сейчас не имеет защиты от ошибок.
Я сейчас прорешал задачу без масштабирования и получил неверный ответ. После этого я взял масштаб за 10, и ответ неожиданно стал верным. Думаю, что из-за маленького масштаба некоторые точки с целочисленными координатами как бы пропадают из-за нехватки пикселей на экране, иначе я это объяснить не могу
Помогите пж...
пишет, что name 'canvas' is not defined
Код (вторая задача из ролика):
from turtle import *
color('black','red')
m=100
begin_fill()
right(30)
for i in range(4):
forward(25*m)
right(90)
end_fill()
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()
Запускал и в питоне 3.9.6, и в онлайн компиляторе, везде выводит одну и ту же ошибку
ты пропустил строчку canvas = getcanvas()
вот код:
from turtle import *
color('black','red')
m=100
speed(1000)
begin_fill()
right(30)
for i in range(4):
forward(25*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()
Кстати, заливка у черепашки адекватная. Если фигура не замкнутая, то черепашка соединит конец и начало фигуры. И даже если там будет 10 повторений, все равно должно работать)
у меня если повторений больше нужного то показывает кол-во точек 0, так что лучше ставить правильное кол
Хочется уточнить: данный код - это полностью Ваша оригинальная идея, придуманная с нуля без опоры на что-либо?
Я эту программу показывал еще с месяц назад, на вебинаре по решению 6 задач, но всвязи с выходом сборника, решил продублировать. Придумана прога не без помощи Вани (наш преподаватель 10 класса) огромное ему спасибо, ну а что касается ютуба, я такого кода пока что ни у кого не видал.
зашёл на ваш ютуб и канал и в разборе демоверсии увидел практически такую же программу, честно сказать ваше видео я ранее не смотрел, но раз вы меня опередили, хвалю, я добавил вас в закрепленный комментарий👍
@@inf99ballov можно было просто извиниться, что код был позаимствован)
Видно же, что точь в точь все совпадает практически, а на видео говорите, что это вы придумали)
Не очень красиво получается)
@@ИльнарЮсупов-р2г я не заимствовал этот код. Совпадения хоть и редки, но случаются. Я никогда за все время преподавания не стеснялся говорить об авторах способов решения на своем канале, да и стал бы я записывать видео с похожим кодом, даже не изменив его? я тоже узнал об этом только после этого комментария
@@ИльнарЮсупов-р2г можете также посмотреть мой вебинар "все способы решения нового 6 задания", там я тоже решал его этим кодом в конце и все это почти месяц или уже 2 назад
Подскажите, в IDE Pycharm на Mac apple silicon программа не работает, ответ не выводится в консоль даже спустя час. В среде Thonny все работает замечательно. Проблема именно с IDE или с операционкой? Знаю точно, что на ППЭ будут машины с этой средой, не возникут ли подобные проблемы там?
вряд ли, я бы рекомендовал еще поразбираться
потому что от интерпретатора мало что зависит
Пишите в голеньком IDLE (найти поиском во "все программы")
привет! очень странно программа зависит от переменной m, если её поменять - получается другой ответ. всегда получается такие значения брать? или это только для вариантов Крылова? =D
m - масштаб, чем он больше чем точнее рисунок, поэтому ответы и будут разными получается, масштаба в 100 достаточно для всех заданий
Какой пушистик на фоне🥺🥺🥺
А эта программа будет действовать только на треугольники или на все фигуры?
на все фигуры
@@inf99ballov понял, спасибо за уточнение. Хорошечная программа ✌️🤝
Кажется, алгоритм не рабочий. Я заметил что с квадратными фигурами, где 4 рисующие команды, ответ неверный. Иногда приходится менять местами размер движения, а иногда даже это не помогает.
Для примера:
Вперед 5
Направо 90
Вперёд 7
Направо 90
(учитывать точки на границе)
Ответ: 48
Показывает: 42
Так тебе показали шаблон решения с задачами где точки нужно находить ТОЛЬКО ВНУТРИ фигуры, БЕЗ точек на границе. Можешь посчитать их отдельно и сложить вместе с ответом шаблона, либо просто посчитать вручную. Ведь гораздо проще просто перемножить два числа нежели строчить этот код.
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 это корень из трех
не пойму в чем ошибка, выдает ответ 5190
from turtle import *
speed(1000)
color("black","red")
m=100
begin_fill()
left(90)
for i in range(3):
forward(111*m)
right(120)
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()
перебор маленький
ты идешь от -100 до 100, но треугольник рисуешь со стороной 111
поставь в обоих циклах -120 до 120
Зачем возвращать холст tkinter?
В некоторых заданиях просят поднять хвост, если в кумире это сделать элементарно, то вот как сделать на питоне на видео не показано. Если это возможно сделать, то пожалуйста ответьте мне как.
up()
down() - опустить
up() - поднять