Краткие рекомендации по решению заданий КЕГЭ по информатике с учётом изменений 2022 года
1 Умение представлять и считывать данные в разных типах информационных моделей (схемы, карты, таблицы, графики и формулы) – задание со схемой дорог и таблицей
|
||||||||||
2 Умение строить таблицы истинности и логические схемы
Для построения таблицы истинности лучше написать небольшую программу на Питон for x in range (2): for y in range (2): for w in range (2): for z in range (2): if (((not w or not x) == (not z or y)) and (y or w)): print (x,y,w,z)
Очень важно: • если перед not стоит операция сравнения, необходимо выражение с not взять в скобки • если всё выражение истинно, можно не писать в конце «==1:» • если всё выражение ложно, необходимо взять его в скобки и в конце обязательно написать «==0:»
|
||||||||||
3 Знание о технологии хранения, поиска и сортировки информации в реляционных базах данных – задание на поиск в базе данных. Очень часто удобно использовать функцию ВПР.
|
||||||||||
4 Умение кодировать и декодировать информацию. Как правило, задача на условие Фано и лучше построить двоичное дерево
|
||||||||||
5 Формальное исполнение алгоритма, записанного на естественном языке, или умение создавать линейный алгоритм для формального исполнителя с ограниченным набором команд. 1. Если алгоритм предполагает перевод чисел из десятичной системы в двоичную и из двоичной в десятичную, то удобно воспользоваться функциями Excel (категория «Инженерные»): ДВ.В.ДЕС() и ДЕС.В.ДВ(). 2. Можно написать небольшую программу на Питон. Например, для задачи с таким условием: На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R cледующим образом. 1. Строится двоичная запись числа 4N. 2. К этой записи дописываются справа ещё два разряда по следующему правилу: а) складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 10000 преобразуется в запись 100001; б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр на 2. Полученная таким образом запись является двоичной записью искомого числа R. Укажите такое наименьшее число N, для которого результат работы алгоритма больше 241. В ответе это число запишите в десятичной системе счисления.
|
Программа может выглядеть так: for i in range(10,100): x=i*4 y=bin(x)[2:] for j in range(2): if y.count('1')%2==0: y+='0' else: y+='1' r=int(y,2) if r>241: print(i) break
|
6 Знание основных конструкций языка программирования, понятия переменной, оператора присваивания Для решения этой задачи можно устроить перебор значений (главное определиться с интервалом перебора) Задание из Демо-2020: Определите, при каком наименьшем введённом значении переменной s программа выведет число 64.
Программа: Переборное решение: s = int(input()) for i in range(10,200): n = 1 s = i while s < 51: n = 1 s = s + 5 while s < 51: n = n * 2 s = s + 5 print(n) n = n * 2 if n==64: print(i) |
7 Умение определять объём памяти, необходимый для хранения графической и звуковой информации. Важно знать главную формулу информатики 2i=N
|
8 Знание о методах измерения количества информации. Задачи на комбинаторику или кодирование слов по алфавиту, которые решаются с помощью систем счисления.
Задачи на комбинаторику можно решить также с помощью кода. Например, такое условие: Вася составляет 6-буквенные слова, в которых есть только буквы К, А, Н, Т, причём буква К используется в каждом слове ровно 2 раза. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Вася? Решение: s='KAHT' k=0 for a1 in s: for a2 in s: for a3 in s: for a4 in s: for a5 in s: for a6 in s: |
s1=a1+a2+a3+a4+a5+a6 if s1.count('K')==2: k+=1 print(k) Важно: если в условии задачи говорится, что кто-то составляет слова из слова, в котором есть повторяющиеся буквы (например, ‘МОЛОКО’), то в переменную s надо задать комбинацию для алфавита без повторений (‘МОЛК’). Обязательно следить за раскладкой клавиатуры, чтобы не перепутать русские и латинские буквы, начертание которых выглядит одинаковым, а коды – различны. |
9 Умение обрабатывать числовую информацию в электронных таблицах Надо знать основные функции ЭТ: МИН, МАКС, СРЗНАЧ, СУММ и т.д
|
10 Информационный поиск средствами операционной системы или текстового процессора Может пригодиться задать Найти -> Параметры -> Только слова целиком
|
11 Умение подсчитывать информационный объём сообщения Важно знать главную формулу информатики 2i=N
|
12 Умение анализировать результат исполнения алгоритма Если в задаче используют Исполнитель Редактор, то можно написать программку на Питон
Пример из Демо-2022: Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 70 идущих подряд цифр 8? В ответе запишите полученную строку. НАЧАЛО ПОКА нашлось (2222) ИЛИ нашлось (8888) ЕСЛИ нашлось (2222) ТО заменить (2222, 88) ИНАЧЕ заменить (8888, 22) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ Решение на Питон s='8'*70 while '2222' in s or '8888' in s: if '2222' in s: s=s.replace('2222','88',1) else: s=s.replace('8888','22',1) print(s)
Важно в методе replace задать третий параметр – 1, поскольку ищется первое вхождение подстроки в строке.
В некоторых задачах, известно какая строка будет получена на выходе и надо узнать, что подавали на вход. Например, Дана программа для редактора: НАЧАЛО ПОКА нашлось (01) ИЛИ нашлось (02) ИЛИ нашлось (03) заменить (01, 2302) заменить (02, 10) заменить (03, 201) |
КОНЕЦ ПОКА КОНЕЦ Известно, что исходная строка начиналась с нуля, а далее содержала только единицы, двойки и тройки. После выполнения данной программы получилась строка, содержащая 40 единиц, 10 двоек и 8 троек. Сколько единиц было в исходной строке? Решение на Питон for a in range(100): for b in range(100): for c in range(100): s='0'+a*'1'+b*'2'+c*'3' while '01' in s or '02' in s or '03' in s: s=s.replace('01','2302',1) s=s.replace('02','10',1) s=s.replace('03','201',1) if s.count('1')==40 and s.count('2')==10 and s.count('3')==8: print(a) |
13 Умение представлять и считывать данные в разных типах информационных моделей (схемы, карты, таблицы, графики и формулы). Задача на подсчёт количества дорог из одного пункта в другой |
14 Знание позиционных систем счисления Важно знать формулы число aN в системе счисления с основанием a записывается как единица и N нулей: aN =10K0a 123 N число aN – aM записывается в системе счисления с основанием a как N-M старших цифр этой системы счисления, за которыми стоят M нулей: aN −aM =(1a4−14)2K4(a4−31)01K230a N−M M Можно написать программу на Питон. Например, такое условие. Значение выражения 3435 – 79 + 48 записали в системе счисления с основанием 7. Сколько цифр 6 содержится в этой записи? Способ 1 Способ 2
r=343**5-7**9+48 r=343**5-7**9+48 s='' k=0 while r>0: while r>0: d=r%7 if r%7==6: s=s+str(d) k+=1 r=r//7 r=r//7 print(s.count('6')) print(k)
|
15 Знание основных понятий и законов математической логики Важно знать законы алгебры логики, таблицы истинности логических операций, законы де Моргана и формулу А→В = not A + B Эти задачи бывают разных видов. Рассмотрим некоторые из них. # Amax-? Для какого числа А? # ((x <= 9) -> (x*x <= A)) /\ ((y*y <= A) -> (y <= 9))=1
for A in range(200): k=0 for x in range(100): for y in range(100): |
if (x>9 or x*x<=A) and (y*y>A or y<=9): k+=1 if k==10000: print(A)
# Ответ: 99
# Amin-? Amax-? Конъюнкции # ( x & 25 <> 1) V ((x & 34 = 2) -> (x & A = 0))=1
for A in range(1,500): k=0 for x in range(1000): if x&25!=1 or x&34!=2 or x&A==0: k+=1 if k==1000: print(A)
# Ответ: 8 56
# Amax-? Делители # Дел(x,18)->(не Дел(x,A) -> не Дел(x,12))=1
for A in range(1,200): # ВАЖНО от 1, т.к. на 0 делить нельзя! k=0 for x in range(100): if x%18!=0 or x%A==0 or x%12!=0: k+=1 if k==100: print(A)
# Ответ: 36
Можно вместо счётчика k использовать флажок, который изначально делаем равным 0. Если выражение окажется ложным хоть один раз, присваиваем флажку единицу. Предыдущая задача без счётчика: for A in range(1,200): k=0 for x in range(100): if (x%18!=0 or x%A==0 or x%12!=0)==0: k=1 if k==0: print(A)
# Ответ: 36
|
16 Вычисление рекуррентных выражений |
Для решения этой задачи лучше написать программу (в комментариях приведено условие из Демо-2021) #F(n) = 1 при n = 1; #F(n) = n + F(n − 1), если n – чётно, #F(n) = 2 × F(n − 2), если n > 1 и при этом n – нечётно. #F(26)-?
def f(n): if n==1: return 1 elif n % 2 == 0: return n+f(n-1) else: return 2*f(n-2) print(f(26))
|
17 Умение создавать собственные программы (20–40 строк) для обработки целочисленной информации. Задание изменено в 2022 году. Ранее обрабатывались числа из известного диапазона. Теперь используют числовую последовательность из текстового файла Задание 2021 st=100001 fn=900009 m,k=0,0 for x in range(st,fn+1): if x%11==0 and x%55!=0 and (x%7+x%10==10): k+=1 m=max(m,x) print(m,k)
Задание 2022 В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, в которых хотя бы одно число делится на 3, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности Решение на Питон
f=open('17.txt') a=[] for s in f: a.append(int(s)) k=0 m=-20001
for i in range(len(a)-1): if a[i]%3==0 or a[i+1]%3==0: k+=1 m=max(m,a[i]+a[i+1]) print(k,m)
|
В приведённом решении все числа были считаны из файла в массив а. Сделать это можно было без цикла одной командой – a=list(map(int,f.readlines())) Важно: • текстовый файл с исходными данными и программа должны быть сохранены в одной папке, если при открытии файла не используется полный путь к файлу • в цикле для обработки данных (при обработке пар чисел с индексами i и i+1) следить за тем, чтобы не выйти за границы массива |
||||
18 Умение использовать электронные таблицы для обработки целочисленных данных. Чаще всего это задача про Робота, который перемещается по лабиринту. Задача решается в ЭТ
|
||||
19-21 Умение анализировать алгоритм логической игры и найти выигрышную стратегию Данная задача может быть решена в электронных таблицах. Метод, предложенный Артёмом Имаевым, можно посмотреть по ссылке: https://youtu.be/iQ8OFqML2b0
|
||||
22 Умение анализировать алгоритм, содержащий ветвление и цикл Для решения этой задачи можно устроить перебор значений (главное определиться с интервалом перебора), аналогично заданию №6 Например, ниже записана программа, которая вводит натуральное число x, выполняет преобразования, а затем выводит одно число. Укажите наименьшее возможное значение x, при вводе которого программа выведет число 120.
|
||||
23 Умение анализировать результат исполнения алгоритма Эту задачу можно решать различными способами. 1) Можно делать письменно на листке бумаги 2) Можно написать рекурсивный алгоритм 3) Можно написать вспомогательную программу с использованием массива
Например: У исполнителя есть две команды, которым присвоены номера: 1. Прибавить 1 2. Умножить на 2 Сколько существует программ, для которых при исходном числе 1 результатом является число 20, и при этом траектория вычислений содержит число 10?
Решение с использованием рекурсии
def f(x,y): if x>y: return 0 elif x==y: |
24 Умение создавать собственные программы (10–20 строк) для обработки символьной информации Задачи вида f=open('24.txt') f=open('24.txt') k=0 s=f.readline() for line in f.readlines(): k,m=1,0 if line.count('A')>line.count('E'): for i in range(1,len(s)): k+=1 if s[i-1]==s[i]: print(k) k+=1 m=max(m,k) else: k=1 print(m)
Задача из Демо-2022: Текстовый файл состоит из символов P, Q, R и S. Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых нет идущих подряд символов P.
f=open('24.txt') s=f.read() k=1 m=1 for i in range(len(s)-1): if s[i]!='P' or s[i+1]!='P': k+=1 else: m=max(m,k) k=1 print(m)
Важно: • текстовый файл с исходными данными и программа должны быть сохранены в одной папке, если при открытии файла не используется полный путь к файлу • в цикле для обработки строки (при обработке элементов с индексами i и i+1) следить за тем, чтобы не выйти за границы строки |
25 Умение создавать собственные программы (10–20 строк) для обработки целочисленной информации Задание из Демо-2022: Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение M считается равным нулю. Напишите программу, которая перебирает целые числа, бо́льшие 700 000, в порядке возрастания и ищет среди них такие, для которых значение M оканчивается на 8. Выведите первые пять найденных чисел и соответствующие им значения M. Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение М. Строки выводятся в порядке возрастания найденных чисел. Решение: k=1 ch=700001 |
while k<=5: dmin=0 dmax=0 for d in range(2,int(ch**0.5)+1): if ch%d==0: dmin=d dmax=ch//dmin break m=dmin+dmax if m%10==8: print(ch,m) k+=1 ch+=1
|
26 Умение обрабатывать целочисленную информацию с использованием сортировки
Системный администратор раз в неделю создаёт архив пользовательских файлов. Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов. Известно, какой объём занимает файл каждого пользователя. По заданной информации об объёме файлов пользователей и свободном объёме на архивном диске определите максимальное число пользователей, чьи файлы можно сохранить в архиве, а также максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей. Входные данные. В первой строке входного файла находятся два числа: S – размер свободного места на диске (натуральное число, не превышающее 10 000) и N – количество пользователей (натуральное число, не превышающее 1000). В следующих N строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке. Запишите в ответе два числа: сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив, затем максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.
f=open('26.txt') s,n=map(int,f.readline().split()) a=[] for i in range(n): a.append(int(f.readline())) a.sort() sum,i=0,0 while sum<=s: sum+=a[i] i+=1 i-=1 sum-=a[i]+a[i-1] m=i while sum+a[m]<=s: m+=1 print(i,a[m-1])
Эта задача, как правило, также легко решается в электронных таблицах
|
27 Умение создавать собственные программы (20–40 строк) для анализа числовых последовательностей |
Задача аналогичная вариантам прошлых лет. Для задачи А возможно переборное решение, которое может отработать и на файле к задаче В за более длительное время.
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар чисел, разность которых кратна 13, а произведение чётно. Входные данные. Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 12000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. Программа должна вывести в первой строке одно число: количество пар чисел, разность которых кратна 13, а произведение чётно. Если подходящих пар нет, нужно вывести “NO”.
f=open('27-A.txt') n=int(f.readline()) k=0 a=[] for i in range(n): a.append(int(f.readline())) for i in range(n-1): for j in range(i+1,n): if (a[i]-a[j]) % 13 == 0 and (a[i]*a[j]) % 2 ==0: k+=1 print(k)
Эту задачу часто можно решить с помощью электронных таблиц |
© ООО «Знанио»
С вами с 2009 года.