Разбор задания 27 ЕГЭ по информатике

  • pdf
  • 08.02.2025
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Разбор-27-задания.pdf

РАЗБОР 27 ЗАДАНИЯ

ЗАДАНИИ ВЗЯТЫ С САЙТА

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=27&cat161=on&cat183=on _____________________________________________________________________________________

 27) (№ 7581) (Демо-2025) Учёный решил провести кластеризацию некоторого множества звёзд по их расположению на карте звёздного неба. Кластер звёзд – это набор звёзд (точек) на графике. Каждая звезда обязательно принадлежит только одному из кластеров. Центр кластера, или центроид, – это одна из звёзд на графике, сумма расстояний от которой до всех остальных звёзд кластера минимальна. Расстояние между двумя точками A(x1, y1) и B(x2, y2) вычисляется по формуле:

Даны два входных файла (файл A и файл Б). В файле A

хранятся данные о звёздах двух кластеров. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (в условных единицах). Известно, что количество звёзд не превышает 1000. В файле Б хранятся данные о звёздах трёх кластеров. Известно, что количество звёзд не превышает 10 000. Структура хранения информации о звездах в файле Б аналогична файлу А. Возможные данные одного из файлов иллюстрированы графиком.

Для каждого файла определите координаты центра каждого кластера, затем вычислите два числа: Px – среднее арифметическое абсцисс центров кластеров, и Py – среднее арифметическое ординат центров кластеров. В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px×10 000, затем целую часть произведения Py×10 000 для файла А, во второй строке – аналогичные данные для файла Б. 

 

Решение 

Если данные даны в текстовом документе, то есть формате .txt, то для анализа данных необходимо скопировать эти данные и вставить в электронную таблицу, то есть в EXCEL.

Испайханов Л. Л.

В текстовом формате

 

В формате EXCEL

 

Далее необходимо построить точечную диаграмму.

Для этого выделяем столбец А, столбец В  >  ВСТАВКА> ДИАГРАММЫ > ТОЧЕЧНАЯ

 

 

В файле А находиться два кластера, а в файле Б находиться три кластера как сказано в условии.

 

Визуально можем видит, что первый кластер находится ниже тройки по Y, а второй кластер выше тройки по Y.

Теперь после анализа данных можем перейти написанию кода.

Чтобы извлечь данные из файла, необходимо чтобы файл формате .py и файл в формате .txt были в одной папке или указать путь к файлу .txt.

 

В ОТВЕТЕ ПРИШЕМ ТОЛЬКО ЦЕЛУЮ ЧАСТЬ, ТО ЕСТЬ

10730 30730 

# открываем файл

file = open('27_A.txt')

# пропускаем первую строку

next(file)

# создаем кластер 1 и кластер 2 в виде пустого списка klaster1, klaster2 = [], []

 

for line in file:

    # с помощью функции replace заменяем все запятые на точки

    # так как python считывает вещественные числа только с точкой

    # с помощью функции split разделяем точки х и у

    # с помощью функции map изменяем формат с строки на формат float

    x, y = map(float, line.replace(',', '.').split())

    # если у < 3 то добавляем точки х и у klaster1 иначе klaster2     if y < 3:

        klaster1.append([x, y])     else:

        klaster2.append([x, y])

        

# создаем функцию dist как в условии def dist(x1, y1, x2, y2):

    return ((x2 - x1)**2 + (y2 - y1)**2)**0.5

 

# создаем функцию для нахождения центроида def centroid(klaster):

    # точки x_centr, y_centr центроида

    x_centr, y_centr = 0, 0

    # минимальное расстояние центроида     minim = 10**10

    

    # помощью цикла перебираем все точки центроида то есть кластера

    for i in range(len(klaster)):

        # res промежуточный результат         res = 0         for j in range(len(klaster)):             # первая точка кластера             x1, y1 = klaster[i]

            #  вторая точка кластера

            x2, y2 = klaster[j]

            # находим промежуточный результат

            res += dist(x2, y2, x1, y1)

        # если промежуточный результат меньше минимального расстояния центроида         if res < minim:

            # минимальному расстоянию центроида присваиваем промежуточный результат

            minim = res

            # точкам цетроида присваиваем первые точки

минимального расстояния центроида

            x_centr, y_centr = x1, y1

    # возвращаем точки цетроида

    return [x_centr, y_centr]

 

# для переменных x1, y1, x2, y2 с помощью функции centroid находим координаты(точки) # для перевого и второго кластера

x1, y1 = centroid(klaster1) x2, y2 = centroid(klaster2)

# находим среднее арифметическое этих точек px, py px = (x1 + x2) / 2 py = (y1 + y2) / 2

# выводим  px, py умноженные на 10000 по условию  print(px*10_000, py*10_000)

 

 

 

 

ТЕПЕРЬ ФАЙЛ Б 

выделяем столбец А, столбец В  >  ВСТАВКА> ДИАГРАММЫ > ТОЧЕЧНАЯ

 

Нажав на ОСЬ У можем поменять формат оси для точного анализа меняем с двойки на единицу

 

 

Визуально разделяем кластеры:

если по х больше 5, то это первый кластер иначе если по у больше 6, то это второй кластер иначе если по у меньше 6, то это третий кластер Для файла Б код изменяется незначительно:

1)   Добавляется третий кластер

2)   условия разделения на кластеры

3)   добавляется х3, у3 для третьего кластера

4)   рх и ру 

В ответе пишем

10730

30730

37522  

51277

 

ВАЖНО!!! НЕОБХОДИМО ПРОВЕРИТЬ В ДАННЫХ ФАЙЛАХ ВПЕРВОЙ СТРОКЕ ЕСТЬ ЛИ Х И У, ЕСЛИ НЕТ,

ТО next(file) В КОДЕ НЕ ПИШЕТСЯ

 

 

В ОТВЕТЕ ПРИШЕМ ТОЛЬКО ЦЕЛУЮ ЧАСТЬ, ТО ЕСТЬ

37522 51277

file = open('27_B.txt') next(file)

klaster1, klaster2, klaster3 = [], [], []

 

for line in file:

    x, y = map(float, line.replace(',', '.').split())     if x > 5:

        klaster1.append([x, y])     else:         if y > 6:

            klaster2.append([x, y])         else:

            klaster3.append([x, y])

        

def dist(x1, y1, x2, y2):

    return ((x2 - x1)**2 + (y2 - y1)**2)**0.5

 

def centroid(klaster):        x_centr, y_centr = 0, 0

    minim = 10**10

    

    for i in range(len(klaster)):

        res = 0         for j in range(len(klaster)):             x1, y1 = klaster[i]             x2, y2 = klaster[j]             res += dist(x2, y2, x1, y1)         if res < minim:             minim = res             x_centr, y_centr = x1, y1

    return [x_centr, y_centr]

 

x1, y1 = centroid(klaster1) x2, y2 = centroid(klaster2) x3, y3 = centroid(klaster3) px = (x1 + x2 + x3) / 3

py = (y1 + y2 + y3) / 3

 

print(px*10_000, py*10_000)

 

 

 

27) (№ 7583) Учёный решил провести кластеризацию некоторого множества звёзд по их расположению на карте звёздного неба. Кластер звёзд – это набор звёзд (точек) на графике. Каждая звезда обязательно принадлежит только одному из кластеров. Центр кластера, или центроид, – это одна из звёзд на графике, сумма расстояний от которой до всех остальных звёзд кластера минимальна. Расстояние между двумя точками A(x1, y1) и B(x2, y2) вычисляется по формуле:

Даны два входных файла (файл A и файл Б). В

файле A хранятся данные о звёздах двух кластеров. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (в условных единицах). Известно, что количество звёзд не превышает 1000. В файле Б хранятся данные о звёздах трёх кластеров. Известно, что количество звёзд не превышает 10 000. Структура хранения информации о звездах в файле Б аналогична файлу А. Возможные данные одного из файлов иллюстрированы графиком.

Для каждого файла определите координаты центра каждого кластера, затем вычислите два числа: Px – среднее арифметическое абсцисс центров кластеров, и Py – среднее арифметическое ординат центров кластеров. В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px×10 000, затем целую часть произведения Py×10 000 для файла А, во второй строке – аналогичные данные для файла Б. 

 

 

 

 

Решение

Файл А

 

Как предыдущем задаче по х и по у определить кластеры не получиться. Чтобы определить рисуем прямую:  y = kx + b

Находим прямую по формуле: (𝒚𝟏−𝒚𝟎)=𝒌(𝒙𝟏−𝒙𝟎) 

При х = 0, b = -1    =>   y = kx – 1,  возьмем точку (-1, 0)

 0 = -1k - 1   =>   k =  - 1  отсюда получаем уравнение: y = – x – 1  Тогда 

если y > -x – 1, то это первый кластер иначе второй кластер

 

751 -9101

 

 

file = open('27_A_7583.txt')

next(file)

klaster1, klaster2 = [], []

 

for line in file:

    x, y = map(float, line.replace(',', '.').split())     if y > -x-1:

        klaster1.append([x, y])     else:

        klaster2.append([x, y])

        

def dist(x1, y1, x2, y2):

    return ((x2 - x1)**2 + (y2 - y1)**2)**0.5

 

def centroid(klaster):        x_centr, y_centr = 0, 0

    minim = 10**10

    

    for i in range(len(klaster)):

        res = 0         for j in range(len(klaster)):             x1, y1 = klaster[i]             x2, y2 = klaster[j]             res += dist(x2, y2, x1, y1)         if res < minim:             minim = res             x_centr, y_centr = x1, y1

    return [x_centr, y_centr]

 

x1, y1 = centroid(klaster1) x2, y2 = centroid(klaster2)

 

px = (x1 + x2) / 2

py = (y1 + y2) / 2

print(px*10_000, py*10_000)

 

 

Файл Б

 

В файле Б находятся три кластера и можно разделить как показано на рисунке, но можно и через прямые

 

Первый вариант удобнее разделить кластеры, но можно и по второму варианту

 

Первый вариант:

Если у больше -1, то это первый кластер

Иначе если х меньше 4, то это второй кластер

Иначе если х больше 4, то это третий кластер

Второй вариант:  y = x – 7,   y = -x + 2

Если у меньше х – 7, то это первый кластер

Иначе если у больше – х+2, то это второй кластер

Иначе если у меньше – х+2, то это третий кластер 

 

36881 -14309

 

 

file = open('27_B_7583.txt')

next(file) klaster1, klaster2, klaster3 = [], [], [] for line in file:     x, y = map(float, line.replace(',', '.').split())     if y > -1:

        klaster1.append([x, y])     else:         if x < 4:

            klaster2.append([x, y])         else:

            klaster3.append([x, y])

        

def dist(x1, y1, x2, y2):

    return ((x2 - x1)**2 + (y2 - y1)**2)**0.5

 

def centroid(klaster):        x_centr, y_centr = 0, 0     minim = 10**10     for i in range(len(klaster)):

        res = 0         for j in range(len(klaster)):

            x1, y1 = klaster[i]             x2, y2 = klaster[j]             res += dist(x2, y2, x1, y1)         if res < minim:             minim = res             x_centr, y_centr = x1, y1

    return [x_centr, y_centr]

 

x1, y1 = centroid(klaster1) x2, y2 = centroid(klaster2) x3, y3 = centroid(klaster3) px = (x1 + x2 + x3) / 3

py = (y1 + y2 + y3) / 3

print(px*10_000, py*10_000)

 

В ОТВЕТЕ ПРИШЕМ ТОЛЬКО ЦЕЛУЮ ЧАСТЬ:

751 

-9101

36881

 -14309

 

ВАЖНО!!! НА ЭКЗАМЕНЕ В ОТВЕТАХ ОТРИЦАТЕЛЬНОГО ЧИСЛА НЕ ДОЛЖНО ПОЛУЧИТЬСЯ, ЕСЛИ ПОЛУЧИЛИ ОТРИЦАТЕЛЬНОЕ ЧИСЛО, ЗНАЧИТ ГДЕ-ТО ЕСТЬ ОШИБКА

27) (№ 7644) (В. Шубинкин) В ходе эксперимента были зафиксированы очаги радиации. Чтобы изучить данное явление, решили провести кластеризацию источников излучения. Кластер – это набор источников (точек) на графике, лежащий внутри прямоугольника высотой H и шириной W. Каждая точка обязательно принадлежит только одному из кластеров. Истинный центр кластера, или центроид, – это одна из точек на графике, сумма расстояний от которой до всех остальных точек кластера минимальна. Расстояние между двумя точками A(x1, y1) и B(x2, y2) вычисляется по формуле:

Аномалиями назовём совокупности из не более

чем 10 точек, каждая из которых находится на расстоянии более одной условной единицы от точек кластеров. Аномалии в расчётах не учитываются. Даны два входных файла (файл A и файл Б). В файле A хранятся данные о точках двух кластеров. В каждой строке записана информация о расположении одной точки: сначала координата x, затем координата y (в условных единицах). Известно, что количество точек не превышает 1000. В файле Б той же структуры хранятся данные о трёх кластерах. Известно, что количество точек не превышает 10 000. Структура хранения информации о точках в файле Б аналогична файлу А. Возможные данные одного из файлов иллюстрированы графиком.

Для каждого файла определите координаты центра каждого кластера, затем вычислите два числа: Px – среднее арифметическое абсцисс центров кластеров, и Py – среднее арифметическое ординат центров кластеров. В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px×100 000, затем целую часть произведения Py×100 000 для файла А, во второй строке – аналогичные данные для файла Б. 

 

Решение 

Файл А

 

Если y > x+1 and y < 4,5 and x > -3,5, то это первый кластер

Иначе если y < x-1 and x < 4 and y > -3, то это второй кластер

АНОМАЛИИ НЕ ВХОДЯТЬ В КЛАСТЕРА

 

Ответ на файл А 

19615 69089

ФАЙЛ Б

 

Если -3.5 < y < 1 and -3.5 < x < -0.5, то это первый кластер

Иначе если -3.5 < y < 1.5 and x > 0.5, то это второй кластер

Иначе если y > 1.5 and -1.5 < x < 3.5, то это третий кластер

 

Ответ на файл Б

67799 17717

Чтобы лучше понять разбор 27 задания рекомендую посмотреть видео

1)   https://rutube.ru/video/cb3160dd13c74933be5a086d50d7171d/

2)   https://www.youtube.com/watch?v=QHqUCVI80XE&t=23s  3) https://www.youtube.com/watch?v=jTytrUQT-Ew  

4) https://www.youtube.com/watch?v=aJuVDirgEXg&t=2275s