Как делать 6 задание егэ по информатике на питоне
Перейти к содержимому

Как делать 6 задание егэ по информатике на питоне

  • автор:

Как делать 6 задание егэ по информатике на питоне

Скачай курс
в приложении

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

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

1. Как решать задание ЕГЭ

7. Задание проверяет умение составить алгоритм обработки числовой последовательности и записать его в виде простой программы на языке программирования.

Пример задания (демоверсия \(2022\))

демо1.png

Рис. \(1\). Пример задания
Что нужно знать?
1. Как считать данные из файла в список.
Для работы с файлом удобно использовать конструкцию with :
with open (file) as f:
инструкции

Эта конструкция определяет для открытого файла переменную \(f\) и выполняет набор инструкций. После их выполнения файл автоматически закрывается. Метод readlines() прочитает и вернёт все строки в файле в виде списка.

Для работы с данными файла мы будем использовать следующий программный код:
with open (\(’17.txt’\)) as f:
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]
2. Основные операторы для работы со списками (массивами).

В Python для того, чтобы работать с большим количеством данных, используется структура данных под названием список . Список представляет собой последовательность (набор) элементов, пронумерованных от \(0\).

Чтобы объявить список, нужно в квадратных скобках перечислить его элементы через запятую:

Элементы списка могут быть разных типов в отличие от элементов массива, но, как правило, используются списки из элементов одного типа.

Методы списков

\(a.append (x)\) добавляет элемент \(x\) в конец списка \(a\)
\(a.count (x)\) возвращает количество элементов списка \(a\) со значением \(x\)
\(а.sort ()\) сортирует список \(a\) в порядке возрастания
\(а.reverse ()\) разворачивает список \(a\) в обратном порядке
\(a.clear ()\) очищает список \(a\)

Функции для работы со списками

\(len(a)\) возвращает длину списка \(a\) (количество элементов списка \(a\))
\(min(a)\) возвращает наименьший элемент списка \(a\)
\(max(a)\) возвращает наибольший элемент списка \(a\)
\(sum(a)\) возвращает сумму элементов списка \(a\)

Решение задачи можно разбить на этапы.

1. Считать данные из текстового файла в массив (список). Важно, чтобы программа решения и текстовый файл лежали в одной папке (или необходимо указать полный путь для считывания файла).

with open (\(’17.txt’\)) as\(f\):
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]

2. Необходимо в массиве найти максимальное число, кратное \(3\). Для этого инициализируем пустой массив \(b\). Затем с помощью цикла \(for\) переберём все элементы массива \(a\). Если элемент кратен \(3\), то запишем его в массив \(b\). После выполнения цикла в переменную \(m\) запишем максимальное значение массива \(b\).

\(b=[]\)
for \(i\) in range (\(0,len(a)\)):
if \(a[i]\) % \(3= =0\):
b.append\((a[i])\)
\(m=max(b)\)

3. Определим количество подходящих пар. Для этого очистим массив \(b\). Затем с помощью цикла \(for\) переберём все элементы массива \(a\). Если хотя бы один элемент пары делится на \(3\) и сумма элементов пары не больше \(m\), то запишем эту сумму в массив \(b\).

\(b=[]\)
for \(i\) in range (\(0\),\(len(a)-1\)):
if (\(a[i]\) % \(3= =0\) or \(a[i+1]\) % \(3= =0\)) and (\(a[i]+a[i+1] <=m\)):
b.append (\(a[i]+a[i+1]\))

4. Выведем на экран количество элементов массива \(b\) — оно равно количеству подходящих пар — и максимальную сумму:

print (\(len(b), max(b)\))
Получилась программа:

with open (\(’17.txt’\)) as\(f\):
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]
\(b=[]\)
for \(i\) in range (\(0,len(a)\)):
if \(a[i]\) % \(3= =0\):
b.append (\(a[i]\))
\(m=max(b)\)

\(b=[]\)
for \(i\) in range (\(0,len(a)-1\)):
if (\(a[i]\) % \(3= =0\) or \(a[i+1]\) % \(3= =0\)) and (\(a[i]+a[i+1] <=m\)):
b.append (\(a[i]+a[i+1]\))

ЕГЭ по информатике 2023 — Задание 6 (Задачи с Черепахой)

Привет! Сегодня разберём новый тип 6 задания из ЕГЭ по информатике 2023! Добавим недостающий пазл в видеокурс по подготовке к ЕГЭ по информатике.

Так же Вы можете посмотреть разбор 6 задания из ДЕМОВЕРСИИ 2023.

На мой взгляд, на экзамене скорее всего будет задача, похожая именно на демонстрационный вариант. Т.к. это задание нового образца, то выпускникам необходимо привыкнуть к нему.

Вспомним, когда в прошлом году была введена новая формулировка для 3 задания, то на экзамене дали очень похожую задачу на ту, которая была в демоверсии.

Рассмотрим первую тренировочную задачу из 6 задания ЕГЭ по информатике 2023.

Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись

Повтори k [Команда1 Команда2 … КомандаS]

означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:

Повтори 15 [Вперёд 15 Направо 120]

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

В начале нужно понять, какая фигура получится в результате действий Исполнителя Черепахи.

Черепаха идёт вверх на 15 единиц. Потом поворачивает направо на 120 градусов. Потом идёт на 15 единиц по заданному курсу и снова поворачивает на 120 градусов, идёт на 15 единиц ещё и попадает в исходную точку. В итоге получается равносторонний треугольник! Дальнейшие повторения не имеют смысла, т.к. нового больше ничего не нарисуется.

ЕГЭ по информатике 2023 - Задание 6 Черепаха исполнитель (равносторонний треугольник)

Проведём перпендикуляры от каждой точки с целыми координатами на оси Y внутри треугольника.

ЕГЭ по информатике 2023 - Задание 6 (Проводим перпендикуляры)

Для каждой точки на оси Y мы можем найти этот перпендикуляр. Это и есть искомое количество точек на каждой такой линии, если округлить это значение в меньшую сторону.

Посмотрим, как найти такой перпендикуляр, если точка на оси Y находится до середины стороны. Пусть есть точка (0, yn), а dn — это перпендикуляр для этой точки. Тогда

Для второй половины длины перпендикуляров будут такие же.

Напишем программу на Питоне, которая подсчитает все точки.

import math s=0 for y in range(0, 8): s = s + int(math.tan(math.pi / 3) * y ) s = 2*s print(s)

Нам необходимо взять первые 7 точек, дальше ситуация симметричная. Пишем в цикле for 8, потому что последнее число не проходится в Питоне.

Вычисляем по формуле длину каждого перпендикуляра. Тангенс вычисляется с помощью функции math.tan. Для неё нужна математическая библиотека math. Функция должна получить градусы в радианах, поэтому ей передаём π /3 = 60 o .

В цикле суммируем все точки для каждой линии. Результат нужно умножить на 2, чтобы учесть вторую половину треугольника.

Задача(Считаем точки вручную)

Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки. Запись

Повтори k [Команда1 Команда2 … КомандаS]

означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм:

Повтори 16 [Налево 36 Вперёд 4 Налево 36]

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

В это задачке достаточно не просто составить уравнения прямых полученной фигуры. В таких случаях можно попробовать вручную посчитать точки с помощью известной программы Кумир от НИИСИ РАН. Скачать её можно с официального сайта НИИСИ РАН.

Вероятно, это программа окажется на компьютере на экзамене.

Запустим программу Кумир-Стандарт. В начале нужно подключить модуль Черепаха.

ЕГЭ по информатике 2023 - Задание 6 (Настройка программы Кумир-Стандарт)

После того, как модуль Черепаха подключён, можно написать программу на языке Кумир.

использовать Черепаха алг нач опустить хвост нц 16 раз влево(36) вперед(4) влево(36) кц кон 

В начале нужно подключить модуль Черепаха. Слово алг обозначает начало алгоритма. Слово нач — это начало программы.

Опускаем хвост у Черепахи. Цикл пишем с помощью команды нц — начало цикла. Команда кц — это конец цикла. Команда влево — это аналог команды Налево (видим, что эти команды пишутся по-разному). Аналогично есть команда вправо в программе Кумир. Команда вперед пишется без буквы ё.

После того, как алгоритм перенесли в программу Кумир, запускаем программу, нажав на кнопку F9 (или кнопка плей в виде треугольника).

После этого появится окно в правом нижнем углу. Это окно можно расширить до приемлемых размеров, чтобы нам было удобно анализировать рисунок.

ЕГЭ по информатике 2023 - Задание 6 (Рисунок в программе Кумир)

Необходимо настроить масштабирование на 1.

ЕГЭ по информатике 2023 - Задание 6 (Рисунок в программе Кумир масштабирование)

После этого можно сделать скриншот и перенести рисунок в программу Paint, где и посчитать точки вручную.

ЕГЭ по информатике 2023 - Задание 6 (Рисунок в программе Кумир, подсчитываем точки)

Получается в ответе 31 точка. Обратите внимание, что в этой задачи просили подсчитать точки, которые находятся на линиях в том числе.

Даже если нет программы Кумир, можно подсчитать точки вручную через Python. Напишем программу.

from turtle import * left(90) for i in range(16): left(36) forward(4*40) left(36) penup() for x in range(-10, 10): for y in range(-10, 10): setpos(x*40, y*40) dot(4, 'red')

Программа выведет такую картину.

ЕГЭ по информатике 2023 - Задание 6 (Подсчёт точек вручную на Python)

В программе подключаем модуль turtle. В начале повернём Черепаху на 90 градусов налево, с помощью команды left. Это делается из-за того, в Python Черепаха смотрит вдоль положительного направления оси абсцисс.

Далее идёт цикл, который указан в задаче. Он должен повторится 16 раз. Внутри цикла пишем программу для Черепахи. Команда left() — поворот налево (аналогично right() — поворот направо), команда forward() — это движение верёд.

4 единицы внутри команды forward() умножаются на 40. Число 40 — это коэффициент размера нашего рисунка. Попробуйте «поиграть» с этим числом, чтобы посмотреть эффект уменьшения или увеличения рисунка.

Команда penup() позволяет поднять кисть, чтобы проставить точки, которые будут символизировать точки с целыми координатами.

Далее идут вложенные циклы, с помощью них мы проставим точки с целыми координатами. Выбираем диапазон, чтобы наша фигура точно уместилась.

Команда setpos() ставим точки. Умножаем координаты x и y на тот же коэффициент, что использовали ранее.

Команда dot() устанавливает жирность и цвет точки.

Задача (Составляем уравнения)

Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост поднят. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует три команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке; Опусти, принуждающая Черепаху опустить хвост.

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

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

Вперёд 100 Направо 90 Вперёд 100 Направо 30 Опусти Повтори 10 [Вперёд 25 Направо 90]

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

Нарисуем общий рисунок.

ЕГЭ по информатике 2023 - Задание 6 (Общий рисунок)

Здесь уже не очень удобно пользоваться элегантным способом. Составим уравнения прямых, которые образуют квадрат. Общий вид уравнения прямой выглядит так:

y=k *x+b

Коэффициент k — это тангенс угла наклона α к оси X ( 0 ≤ α π , но α ≠ π /2). Число b — это смещение прямой по оси Y относительно нуля.

Для прямой AE k1=tan(60 o )=√3. Так же она проходит через точку (100, 100).

Найдём число b. Подставим в общее уравнение координаты точки (100, 100):

y = k*x+b = √3*100 + b = 100
b=100*(1 — √3)

Получается уравнение прямой AE:

y= √3*x + 100(1 — √3)

Найдём на сколько смещена FC по оси Y относительно AE.

ЕГЭ по информатике 2023 - Задание 6 (Общий рисунок 2)

cos(60 o ) = 25 (сторона квадрата) / AB
AB = 25 / cos(60 o ) = 25 / 0,5 = 50

Получается, что уравнение для прямой FC:

y=√3*x + 100(1 — √3) — 50

Для прямой EC k2=-tan(30 o ) = — √3/3. Эта прямая тоже проходит через точку (100, 100). Подставим эти координаты в уравнение и найдём b.

y = (-√3/3) * x + b = (-√3/3) * 100 + b = 100
b = 100(1 + √3/3)

Тогда уравнение для прямой EC получается:

y = (-√3/3) * x + 100(1 + √3/3)

Найдём на сколько смещена прямая AF относительно EC по оси Y.

cos(30 o ) = 25 (длина стороны) / CD
CD = 25 / cos(30 o ) = 25 / (√3/2) = 50/√3

Тогда для прямой AF:

y = (- √3/3) * x + 100(1 + √3/3) — 50/√3

Пробежимся с помощью Питона для переменной x от 0 до 150. Для переменной y от 0 до 100. Чтобы получить точку, используем вложенные циклы!

s=0 for x in range(1, 200): for y in range(1, 200): if (y < (3**0.5)*x + 100*(1-3**0.5)) and (y > (3**0.5)*x + 100*(1-3**0.5) - 50) and (y < (- 3**0.5 / 3)*x + 100*(1+ 3**0.5 / 3)) and (y > (-3**0.5/3)*x + 100*(1 + 3**0.5 /3) - 50 / 3**0.5 ): s=s+1 print(s)

Точки, которые лежат в квадрате должны удовлетворять следующим условиям:

Точки должны быть ниже прямых AE и EC, но выше AF и FC

Проверить выше или ниже некоторая точка M(xm, ym), чем прямая y=k*x+b, можно следующим образом:

ЕГЭ по информатике 2023 - Задание 6 (Шестиугольник)

Если ym > k*xm + b, то точка лежит выше прямой.
Если ym

Получается правильный шестиугольник. Угол ∠СВА = 120 o . Как раз угол правильного n-угольника равен (n-2)*180 o /n. Для шестиугольника получается (6-2)*180 o /6 = 120 o .

Будем решать методом составления уравнений.

ЕГЭ по информатике 2023 - Задание 6 (Шестиугольник 2)

Рассмотрим прямую BC. Если провести от точки B прямую параллельную оси X, то мы увидим, что угол наклона прямой BC равен 30 o .

y = tan(30 o )*x + 31
y = (√3/3) * x + 31

Прямая DC имеет угол наклона -30 o к оси X. Она расположена выше, чем BC на МВ. Треугольник BCM равносторонний. Значит, МВ=31. Тогда уравнение для DC будет:

y = -(√3/3) * x + 62

Уравнение для AF будет:

Прямая EF имеет угол наклона 30 o относительно оси X. Смещена она вниз на AP. Треугольник AFP так же является равносторонним. Следовательно, AP = 31. Тогда для EF получается:

y=tan(30 o )*x — 31
y=(√3/3)*x — 31

Прямая AB это x=0. Найдём так же ED.

ЕГЭ по информатике 2023 - Задание 6 (Шестиугольник)

cos(30 o ) = BQ / BC
BQ = BC * cos(30 o )
BQ = 31 * (√3/2)
BD = 2 * BQ = 2 * 31 * (√3/2) = 31 * √3

Значит, уравнение для ED: x = 31 * √3.

Когда уравнения готовы, можно написать программу.

k=0 for x in range(-100, 100): for y in range(-100, 100): if (y < 3**0.5 / 3 * x + 31) and (y < -(3**0.5) / 3 * x + 62) and (y > -(3**0.5) / 3 * x) and (y > 3**0.5 / 3 * x - 31) and (x > 0) and (x < 31 * 3**0.5): k=k+1 print(k)

Точки должны быть ниже прямых BC и CD, но выше прямых AF и EF. Так же координаты x должны быть 0

ЕГЭ по информатике 2022 — Задание 6 (Метод перебора)

Сегодня посмотрим 6 задание из ЕГЭ по информатике 2022.

В этом уроке мы будем использовать метод перебора для решения различных задач из 6 задания ЕГЭ по информатике 2022.

Решать задачи будем на языке Python.

Определите, при каком наименьшем введённом значении переменной s программа выведет число 23. Для Вашего удобства программа представлена на трёх языках программирования.

var s, n: integer; begin readln(s); n := 50; while s > 0 do begin s := s div 2; n := n - 3 end; writeln(n) end. 
s = int(input()) n = 50 while s > 0: s = s // 2 n = n - 3 print(n)
#include using namespace std; int main() < int s, n = 50; cin >> s; while (s > 0) < s = s / 2; n = n - 3; > cout endl; return 0; >

Решим задачу с помощью перебора.

Будем подставлять каждое число в диапазоне от 1 до 1000 в наш алгоритм с помощью цикла for. Узнаем, при каких значениях на выходе программа будет печатать число 23.

for i in range(1, 1001): s = i n = 50 while s > 0: s = s // 2 n = n - 3 if n==23: print(i)

Вместо команды input() присваиваем в переменную n очередное число. В конце программы вместо команды print() пишем условие. Печатаем только те значения переменной i, которые приводят к тому, что в переменной n будет нужный результат (число 23).

Программа напечатает следующие числа:

Самое маленькое число, которое подходит, это 256.

Ещё одна задача-ловушка из 6 задания ЕГЭ по информатике 2022.

Определите, сколько существует целых положительных значений, подаваемых на вход программе, при которых программа выведет 27.

var s, n: integer; begin readln(s); n := 3; while s*n < 243 do begin s := s div 3; n := n * 9 end; writeln(n) end. 
s = int(input()) n = 3 while s*n < 243: s = s // 3 n = n * 9 print(n)
#include using namespace std; int main() < int s, n = 3; cin >> s; while (s*n < 243) < s = s / 3; n = n * 9; > cout endl; return 0; >

В этой программе подвох заключается в том, что, если мы будем перебирать числа от 1 до 1000, то программа зависнет и ничего не напечатает.

В таких случаях можно попробовать перебрать числа с 1000 до 1.

for i in range(1000, 0, -1): s = i n = 3 while s*n < 243: s = s // 3 n = n * 9 if n==27: print(i)

Третий параметр «-1» для цикла for означает, что мы перебираем числа с 1000 до 1 в обратном порядке.

Программа напечатает числа с 80 до 27.

Если проверить на небольших числа, то мы должны прибавить 1 к разнице двух чисел.

Закрепим метод перебора в 6 задании из ЕГЭ по информатике 2022.

(А.Г. Минак) Определите, при каком введённом значении переменной s программа выведет число 16.

var s, n: integer; begin readln(s); n := 0; while s*s < 101 do begin s := s + 1; n := n + 2 end; writeln(n) end. 
s = int(input()) n = 0 while s*s < 101: s = s + 1 n = n + 2 print(n)
#include using namespace std; int main() < int s, n = 0; cin >> s; while (s*s < 101) < s = s + 1; n = n + 2; > cout endl; return 0; >

Здесь справляется стандартный перебор от 1 до 1000.

for i in range(1, 1001): s = i n = 0 while s*s < 101: s = s + 1 n = n + 2 if n==16: print(i)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *