На уроке рассмотрен материал для подготовки к ЕГЭ по информатике, разбор 24 задания. Объясняется тема о программной обработке символьной информации.
Содержание:
- ЕГЭ по информатике 24 задание объяснение
- Выполнение 24 задания ЕГЭ
- Последовательности (цепочки) символов
- Работа с числами (цифрами) в текстовом файле
- Работа с отдельными строками файла
24-е задание: «Программная обработка символьной информации»
Уровень сложности
— повышенный,
Требуется использование специализированного программного обеспечения
— нет,
Максимальный балл
— 1,
Примерное время выполнения
— 8 минут.
Проверяемые элементы содержания: Умение создавать собственные программы (10–20 строк) для обработки символьной информации
Выполнение 24 задания ЕГЭ
Плейлист видеоразборов задания на YouTube:
Задание демонстрационного варианта 2022 года ФИПИ
Последовательности (цепочки) символов
24_1: Демоверсия варианта ЕГЭ по информатике 2021, ФИПИ:
Задание выполняется с использованием прилагаемых файлов
Текстовый файл состоит не более чем из 106 символов X, Y и Z.
Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
Для выполнения этого задания следует написать программу.
Ответ: 35
✍ Решение:
-
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
var f: text; i, k, max: integer; s: string; begin assign(f, 'D:24.txt'); reset(f); readln(f, s); max := 1; k := 1; // кол-во подряд идущих for i := 2 to length(s) do begin if s[i] <> s[i - 1] then begin inc(k); if k > max then max := k; end else k := 1; end; write(max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 |
f=open('D:/24.txt') s=f.readline() m=1 k=1 for i in range(1,len(s)): if s[i]!=s[i-1]: k+=1 m=max(k,m) else: k=1 print(m) |
📹 Видеоразбор:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
24_2:
Задание выполняется с использованием прилагаемых файлов
В текстовом файле (выше по ссылке) находится цепочка из символов латинского алфавита A, B, C.
Найдите длину самой длинной подцепочки, состоящей из символов C.
Ответ: 0
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 |
begin assign(input, 'k7-0.txt'); var s: string; var c: string; read(s); c := 'C'; while c in s do c := c + 'C'; print(length(c) - 1) end. |
Python:
способ 1:
1 2 3 4 5 6 7 8 |
with open("k7-0.txt") as Fin: s = Fin.readline() c = 'C' while c in s: # ищем CC, потом CCC и т.д c += 'C' print(len(c)-1 ) # минус 1, чтобы убрать лишнюю (последнюю добавленную С) |
способ 2:
1 2 3 4 5 6 7 8 9 10 11 |
f=open('k7-0.txt') s = f.readline() # считали строку m = 0 # макс длина цепочки l = 0 # начальная длина цепочки for i in range(0,len(s)): if s[i]=='C': l+=1 m = max(l,m) # перезаписали Макс длину else: l = 0 # сбрасываем счетчик print(m) |
24_3:
Задание выполняется с использованием прилагаемых файлов
В текстовом файле (выше по ссылке) находится цепочка из символов латинского алфавита A, B, C, D, E.
Найдите длину самой длинной подцепочки, состоящей из символов A, B или C (в произвольном порядке).
Ответ: 16
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
begin assign(input, 'k7a-1.txt'); var s: string; read(s); var k := 0; var maxim := 0; for var i := 1 to length(s) do if s[i] in 'ABC' then begin k += 1; if k > maxim then maxim := k end else k := 0 ; write(maxim) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 |
f = open('k7a-1.txt') s = f.readline() # считали строку m = 0 # макс длина цепочки из "A,B,С" l = 0 # начальная длина цепочки из "A,B,С" for i in range(0,len(s)): if s[i] in'ABC': l+=1 m = max(l,m) # перезаписали Макс длину else: l = 0 # другая буква - сбрасываем счетчик print(m) |
24_4:
Задание выполняется с использованием прилагаемых файлов
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E, F.
Найдите длину самой длинной подцепочки, не содержащей гласных букв.
Ответ: 20
✍ Решение:
-
PascalABC.net:
Вариант 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
begin assign(input, 'k7a-6.txt'); var s: string; read(s); var k := 0; var maxim := 0; for var i := 1 to length(s) do if s[i] in 'BCDF' then begin k += 1; if k > maxim then maxim := k end else k := 0 ; write(maxim) end. |
Вариант 2:
1 2 3 4 5 6 7 8 9 10 11 12 |
begin var s := readAllText('d:k7a-6.txt').Trim; var (k, max) := (0, 0); foreach var c in s do if not (c in 'AE') then begin k += 1; if k > max then max := k; end else k := 0; print(max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
with open("k7a-6.txt") as F: s = F.readline() # считали строку k = 0 # начальная длина цепочки из "B,C,D,F" Max = 0 # макс длина цепочки из "B,C,D,F" for c in s: if c in 'BCDF': k += 1 if k > Max: Max = k # перезаписали Макс длину else: k = 0 # другая буква - сбрасываем счетчик print(Max) |
24_5:
Задание выполняется с использованием прилагаемых файлов
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E.
Найдите максимальную длину цепочки вида EABEABEABE… (состоящей из фрагментов EAB, последний фрагмент может быть неполным).
Ответ: 7
✍ Решение:
-
PascalABC.net:
- 1 тип = ..EABE — неполный последний фрагмент
- 2 тип = ..EABEB — неполный последний фрагмент
- 3 тип = ..EAB — полный последний фрагмент
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
begin assign(input, 'k7b-1.txt'); var s: string; read(s); var c := 'EAB'; while c in s do begin if c[length(c)] = 'B' then c += 'E' else if c[length(c)] = 'A' then c += 'B' else if c[length(c)] = 'E' then c += 'A'; end; print(length(c) - 1) end. |
Python:
Способ 1:
1 2 3 4 5 6 7 8 9 |
with open("k7b-1.txt") as Fin: s = Fin.readline() c = 'EAB' while c in s: # ищем EAB, потом EABE и т.д if c[-1]=="B": c +="E" elif c[-1]=="A": c +="B" elif c[-1]=="E": c +="A" print(len(c)-1) |
Постоянно повторяется фрагмент EAB, поэтому возможны 3 варианта окончания строки:
Способ 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
f=open('k7b-1.txt') s = f.readline() m = 0 i = 0 for char in s: if (char == 'E' and i%3 == 0) or (char == 'A' and i%3 == 1) or (char == 'B'and i%3 == 2): i += 1 m = max(i,m) elif char == 'E': i = 1 else: i = 0 print(m) |
24_6:
Задание выполняется с использованием прилагаемых файлов
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E.
Найдите количество цепочек длины 3, удовлетворяющих следующим условиям:
Ответ: 1280
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
begin assign(input, 'k7c-1.txt'); var s: string; read(s); // весь текст файла var k := 0; var c1 := 'BCD'; var c2 := 'BDE'; var c3 := 'BCE'; for var i := 1 to length(s) - 2 do begin if (s[i] in c1) and (s[i + 1] in c2) and (s[i + 2] in c3) and (s[i] <> s[i + 1]) and (s[i + 1] <> s[i + 2]) then k += 1 end; print(k) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 |
with open("k7c-1.txt") as Fin: s = Fin.readline() k = 0 c1 = 'BCD'# строка проверки первого символа c2 = 'BDE'# строка проверки второго символа c3 = 'BCE'# строка проверки третьего символа for i in range(len(s)-2): if s[i] in c1 and s[i+1] in c2 and s[i+2] in c3 and s[i]!=s[i+1] and s[i+1]!=s[i+2]: # проверка повтора символов k += 1 print(k) |
24_7:
Задание выполняется с использованием прилагаемых файлов
В текстовом файле (по ссылке выше) находится цепочка из символов, в которую могут входить заглавные буквы латинского алфавита A…Z
и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из одинаковых символов. Если в файле несколько цепочек одинаковой длины, нужно взять первую из них. Выведите сначала символ, из которого строится эта подцепочка, а затем через пробел – длину этой подцепочки.
Ответ: 2 3
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
begin assign(input, 'D:/k8-0.txt'); var s: string; read(s); // весь текст файла var k := 1; //длина текущей цепочки одинаковых символов var max := 0; // макс длина цепочки одинаковых символов var c := s[1]; //символ, из которого строится самая длинная подцепочка for var i := 1 to length(s) - 1 do begin if s[i] = s[i + 1] then begin k += 1; if k > max then begin max := k; c := s[i]; // запомнили новый символ end end else k := 1; end; print(c, max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
f=open('k8-0.txt') s=f.readline() k=1 m=0 for i in range (1,len(s)): if s[i]==s[i-1] : k+=1 if k>m: m=k symb=s[i] else: k=1 print(symb,m) |
📹 Видеоразбор:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
24_8:
Задание выполняется с использованием прилагаемых файлов
Текстовый файл (по ссылке выше) содержит последовательность из строчных и заглавных букв английского алфавита и цифр, всего не более 106 символов. Определите длину наибольшей убывающей подпоследовательности.
🎦 Видеоразбор
Ответ: 3
✍ Решение:
-
Общая идея:
- В цикле сравнивается текущий элемент с предыдущим (цикл начинается со второго символа строки и заканчивается длиной строки).
- Если текущий элемент меньше предыдущего, то последовательность убывает, — увеличиваем счетчик длины последовательности.
- Начальное значение счетчика длины последовательности должно быть = 1, так как в цикле сравниваются два элемента, и при истинности условия в последовательность уже должна быть равна двум, а не единице (в случае если счетчик обнуляется).
- Увеличивая счетчик, сразу же необходимо сравнивать его значение с максимумом, и выполнять переприсваивание максимума, если это требуется.
- В случае, если условие убывающей последовательности ложно, переходим в блок Иначе (
else
) и сбрасываем счетчик для работы со следующей последовательностью. Счетчик присваиваем единице! - После цикла выводим максимальное значение.
for var i := 2 to length(s) do begin if s[i] < s[i - 1] then
... if k > max then max := k;
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
begin assign(input, 'D:/24.txt'); var s: string; read(s); // весь текст файла var k := 1; //длина текущей бывающей последовательности символов var max := 0; // макс длина for var i := 2 to length(s) do begin if s[i] < s[i - 1] then begin k += 1; // увеличиваем счетчик длины последовательности if k > max then max := k; end else k := 1; // сбрасываем счетчик для работы со след. последовательностью end; print(max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 |
F= open("24.txt") s = F.readline() # считали строку (весь текст файла в одной строке) k = 1 maxim = 0 for i in range(1, len(s)): if s[i] < s[i - 1]: k += 1 # увеличиваем счетчик длины последовательности if k > maxim: maxim = k else: k = 1 # сбрасываем счетчик для работы со след. последовательностью print(maxim) |
Работа с числами (цифрами) в текстовом файле
24_8:
Задание выполняется с использованием прилагаемых файлов
Текстовый файл (по ссылке выше) состоит не более чем из 106 символов. Определите максимальное нечётное число, записанное в этом файле.
🎦 Видеоразбор
Ответ: 7642289
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
begin assign(input, '24-1.txt'); var s: string; var b:integer; read(s); // весь текст файла находится в s var max := 0; // для максимального нечётного числа var num:integer; var strnum:string; // накапливает строковое представление числа strnum:=''; for var i := 1 to length(s)-1 do begin if s[i].IsDigit() then // проверяем очередной символ - цифра ли это strnum += s[i] //добавляем очередную цифру в число else if (strnum <> '') then //если встретилась не цифра, а strnum не пустая строка begin Val(strnum, num, b); // переводим в число if (num mod 2 <> 0) and (num > max) then // условие для поиска макс четного max := num; strnum:=''; // сбрасываем на начальное значение, чтобы накапливать новое число end; end; // проверка на случай, если самое большое нечётное в самом конце строки if (s[length(s)].isdigit()) then begin Val(strnum, num, b); if (num mod 2 <> 0) and (num > max) then max:= num; end; print(max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
F = open("24-1.txt") s = F.readline() # считали строку strnum = '' #пустая строка, strnum накапливает строковое представление числа maxim = 0 # для максимального нечётного числа for sym in s: if sym.isdigit(): # проверяем очередной символ - цифра ли это strnum += sym # добавляем очередную цифру в число elif strnum: # если встретилась не цифра, а strnum не пустая строка num = int(strnum) # переводим в число и сохраняем в num if num % 2 and num > maxim: # условие для поиска макс четного maxim = num strnum = '' # сбрасываем на начальное значение, чтобы накапливать новое число # проверка на случай, если самое большое нечётное в самом конце строки if s[-1].isdigit(): num = int(strnum) if num % 2 and num > maxim: maxim = num print(maxim) |
Работа с отдельными строками файла
24_9:
Задание выполняется с использованием прилагаемых файлов
Текстовый файл (по ссылке выше) состоит не более чем из 106 заглавных латинских букв (A..Z
). Текст разбит на строки различной длины.
Определите количество строк, в которых буква J
встречается чаще, чем буква E
.
Ответ: 482
✍ Решение:
-
Общая идея:
- Так как текст разбит на строки, то используем бесконечный цикл для считывания каждой строки.
- Если строка пустая (т.е. достигнут конец файла), используем досрочный выход из цикла (оператор
break
). - Для подсчета количества встреченных символов используем строковый метод
count()
, который возвращает количество найденных вхождений символа (или сочетания символов), заданного аргументом.
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
begin assign(input, '24-s1.txt'); var s: string; var k := 0; while true do // бесконечный цикл begin readln(s); // считываем очередную строку if s = '' then break; // если строка пустая (т.е. достигнут конец файла), выходим if s.Count(c -> c = 'J') > s.Count(c -> c = 'E') then k += 1; end; print(k) end. |
Python:
1 2 3 4 5 6 7 8 |
f= open("24-s1.txt") k = 0 # счетчик строк while True: # бесконечный цикл s = f.readline() # считываем очередную строку if not s: break # если строка пустая (т.е. достигнут конец файла), выходим if s.count("J") > s.count("E"): k +=1 print(k) |
Сегодня посмотрим одно из самых интересных заданий из ЕГЭ по информатике 2023. Будем решать 24 задание. В этом задании нужно работать с файлами.
Все решения задач из задания 24 ЕГЭ по информатике 2023 будут приведены на языке программирования Python (Питон).
Поехали!
Задача (Самая простая)
Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальное количество идущих подряд символов B. Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Решение:
Решим данную задачу на языке Python.
f=open('24_1.txt') s=f.read() k=0 kmax=0 for i in range(0, len(s)): if s[i]=='B': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax)
С помощью команды open() подвязываемся к файлу. Чтобы не прописывать полный путь, файл должен лежать в той же папке, что и программа.
С помощью команды .read() зачитываем в переменную s всё содержимое файла.
Переменная k — это текущий счётчик символов «B». Задача переменной kmax сохранить максимальное значение k.
С помощью цикла for перебираем все символы из строки s. Переменная i пробегается по номерам всех симолов. Счёт символов начинается в строке с нуля. В начале берём нулевой символ, потом первый и т.д. Конструкция for i in range(0, len(s)) позволяет пройтись по всем символам строки до конца.
Если нам встретился нужный символ «B», то мы счётчик прибавляем на 1. Это значит, что мы подсчитываем текущую цепочку. Если будет стоять 3 символа «B» подряд, значит, счёт k покажет значение 3. Как только встретится дургой символ, то это означает, что цепочка прервалась и счётчик переводится в первоначальное положение 0.
При любом увеличении счётчика происходит анализ этого счётчика на максимальность. Функция max выбирает максимальное значение из старого значения kmax и нового показания счётчика k. Если счётчику k удалось победить kmax, то его значение будет считаться максимальным на данный момент времени.
В ответ идёт значение kmax. Это и есть длина максимальной цепочки. В этой задачке ответ получается 11.
Ответ: 11
Закрепим это простое задание из ЕГЭ по информатике 2023.
Задача (Простая, закрепление)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых нет символа Z. Для выполнения этого задания следует написать программу.
Решение:
Решение похоже на предыдущее.
f=open('24_2.txt') s=f.read() k=0 kmax=0 for i in range(0, len(s)): if s[i]!='Z': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax)
Если нет символов «Z», то подсчитываем, иначе сбрасываем.
Задача (Обращаемся к соседу)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, расположенных в алфавитном порядке (возможно с повторением симолов). Для выполнения этого задания следует написать программу.
Решение:
f=open('24_2.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if s[i]<=s[i+1]: k=k+1 kmax=max(k, kmax) else: k=1 print(kmax)
В ответе получается 15. Символы можно сравнивать между собой с помощью знаков «>» или меньше «<» ( а так же «>=» или «<=»), причём это сравнение происходит в алфавитном порядке. Например, символ «B» будет больше, чем «A» и т.п. Теперь нам нужно уже обратится к соседу, уже важна связь между соседними символами. Раз мы обращаемся к следующему символу, то должны пробегать до len(s)-1, иначе куда мы будем обращаться, когда дойдём до последнего символа?
В самом начале цепочки мы анализируем два символа, а к счётчику прибавляем всего лишь 1. Чтобы это учесть, в начале счётчику (переменной k) присваиваем 1. Затем, по мере продвижения по цепочке, мы добавляем в наш анализ 1 новый символ, и к счётчику добавляется одна 1. Дальше уже таких проблем нет.
Раз мы присвоили в переменную k единицу, то и сбрасывать в ветке else мы тоже должны на 1. Эти значения обычно взаимосвязаны.
Если мы обращаемся к соседнему символу, как правило, счётчик и сброс устанавливаются в 1. Это не стопроцентная истина, но иметь ввиду это нужно.
Ответ: 15
Задача (Обращаемся к соседу, закрепление)
Текстовый файл состоит не более чем из 106 символов арабских цифр (0, 1, …,9). Определите максимальное количество идущих подряд цифр, среди которых каждые две соседние различны. Для выполнения этого задания следует написать программу.
Решение:
f=open('24_3.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if s[i]!=s[i+1]: k=k+1 kmax=max(k, kmax) else: k=1 print(kmax)
Если соседи различны, мы подсчитываем, иначе сбрасываем.
Ответ: 120
Задача (Обращаемся к соседу, ещё сложнее)
Текстовый файл состоит не более чем из 106 символов арабских цифр (0, 1, …,9). Определите максимальное количество идущих подряд нечётных цифр, расположенных в неубывающем порядке. Для выполнения этого задания следует написать программу.
Решение:
f=open('24_3.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if s[i]<=s[i+1] and s[i] in '13579' and s[i+1] in '13579' : k=k+1 kmax=max(k, kmax) else: k=1 print(kmax)
Здесь опять можно применить знаки сравнения прям к символам. Удобно проверить принадлежность к нечётным цифрам конструкцией s[i] in ‘13579’. Нечётной цифрой должна быть как текущая, так и следующая.
Ответ: 8
Решим ещё одну тренировочную задачу из ЕГЭ по информатике 2023.
Задача (Обращаемся к соседу, ещё сложнее, закрепление)
Текстовый файл состоит не более чем из 106 символов 1, 2, 3, A, B, С. Определите максимальное количество идущих подряд символов, среди которых никакие две буквы и никакие две цифры не стоят рядом. Для выполнения этого задания следует написать программу.
Решение:
f=open('24_4.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if (s[i] in '123' and s[i+1] in 'ABC') or (s[i] in 'ABC' and s[i+1] in '123') : k=k+1 kmax=max(k, kmax) else: k=1 print(kmax)
В этой задаче цифры и буквы должны чередоваться. Если у нас цифра, то следующая должны быть буква, или наоборот, если у нас буква, то следующая должна быть цифра. В этих двух случаях прибавляем к счётчику 1.
Ответ: 20
Задача (Исключаем строку из 2-х символов, демо 2022)
Текстовый файл состоит из символов P, Q, R и S.
Определите максимальное количество идущих подряд символов
в прилагаемом файле, среди которых нет идущих подряд символов P.
Для выполнения этого задания следует написать программу.
Решение:
Напишем решение на языке Python.
f=open('24_5.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if s[i]=='P' and s[i+1]=='P': k=1 else: k=k+1 kmax = max(k, kmax) print(kmax)
Подсчитываем символы, пока не встретилась комбинация двух P подряд. Как только встретилась данная комбинация, сбрасываем счётчик на 1. Здесь мы сбрасываем счётчик на значение 1, чтобы учесть один символ, которые находится в самой комбинации PP. И в начале мы тоже устанавливаем счётчик в значение 1 по этой же причине.
Мы проходим в цикле for до длины строки минус один. Значение 1 в счётчике при сбросе и в начале программы так же компенсирует и тот момент, что мы не подсчитываем последний символ!
При изменении счётчика, сохраняем максимальное значение в переменной mx
Если бы у нас была вместо PP другая комбинация, состоящая к примеру из 5 символов, то мы бы тогда в начале и при сбросе писали в счётчик значение 5-1=4.
Здесь тоже работает негласное правило, обращаемся к соседу, значит, счётчик устанавливаем в 1.
В этой задаче получается ответ 188.
Ответ: 188
Задача (Исключаем подстроку из 3-х символов)
Текстовый файл состоит из символов арабских цифр(0, 1, …,9).
Определите максимальное количество идущих подряд символов
в прилагаемом файле, среди которых нет трёх символов 0, стоящих рядом.
Для выполнения этого задания следует написать программу.
Решение:
Напишем решение на языке Python.
f=open('24_6.txt') s=f.read() k=2 kmax=0 for i in range(0, len(s)-2): if s[i]=='0' and s[i+1]=='0' and s[i+2]=='0': k=2 else: k=k+1 kmax = max(k, kmax) print(kmax)
Чтобы понять это решение, нужно посмотреть предыдущую задачу. Мы здесь обращаемся к двум соседям, значит, счётчик устанавливаем в 2. Так же проходим в цикле до len(s)-2. Нежелательная строка может состоять не только из одинаковых символов. Может быть строка «XYYZ», к примеру.
Ответ: 7684
Задача (Не более одного символа Z)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых символ Z встречается не более одного раза.
Решение:
В нашей цепочке один раз можно встретиь символ Z, а два раза уже нельзя. Здесь мы применим функцию .split(). Как работает эта фнкция? Напишем тестовую программу.
s='sadqttqtreq' a=s.split('q') print(a)
Результат данной программы будет следующим:
[‘sad’, ‘tt’, ‘tre’, »]
Команда split «разрезает» строку по символу «q». В результате мы получаем массив с кусочками этой строки.
Решение нашей задачи.
f=open('24_7.txt') s=f.read() a=s.split('Z') k=0 kmax=0 for i in range(0, len(a)-1): k = len(a[i]) + 1 + len(a[i+1]) kmax = max(k, kmax) print(kmax)
Разрезаем нашу строку по символу «Z». Пробегаемся уже по массиву a. Цепочка-кандидат это текущий кусочек (a[i]), символ Z (1) и следующий кусочек (a[i+1]).
Каждого кандитата проверяем сразу на максимальность.
Ответ: 43
Задача (Не более двух символов Z)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых символ Z встречается не более двух раз.
Решение:
Решение аналогично предыдущему.
f=open('24_7.txt') s=f.read() a=s.split('Z') k=0 kmax=0 for i in range(0, len(a)-2): k = len(a[i]) + 1 + len(a[i+1]) + 1 + len(a[i+2]) kmax = max(k, kmax) print(kmax)
Ответ: 50
Задача (Звенья)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки символов, состоящей из повторяющихся фрагментов XYZ. Цепочка должна начинаться с символа X и заканчиваться символом Z. Например, для строки ZZZXYZXYZXZZZ длина цепочки равна 6: XYZ+XYZ
Решение:
Если мы подсчитаем количество идущих подряд звеньев XYZ, то, можно сказать, дело сделано.
f=open('24_8.txt') s=f.read() s=s.replace('XYZ', '1') k=0 kmax=0 for i in range(0, len(s)): if s[i]=='1': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax*3)
Мы с помощью команды replace заменили звенья на «1» (на символ, которого точно нет в файле). Теперь задача свелась к самой простой, которую мы рассматривали в начале статьи. Нужно просто подсчитать количество идущих поряд единиц.
В ответе нас просили указать количество символов, а не звеньев, поэтому переменную kmax умножаем на 3.
Ответ: 66
Задача (Звенья, закрепление)
Текстовый файл состоит не более, чем из 106 символов из набора A, B, С. Найдите максимальное количество идущих пар символов AC или AB. Искомая подстрока может включать только пары AB, только пары AC или содержать одновременно как пары AC, так и пары AB.
Решение:
f=open('24_9.txt') s=f.read() s=s.replace('AB', '1') s=s.replace('AC', '1') k=0 kmax=0 for i in range(0, len(s)): if s[i]=='1': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax)
Здесь нам подходит звено, как и AB, так и AC. В ответе нужно указать количество пар, поэтому не на что умножать переменную kmax не нужно.
Ответ: 19
Задача (Звенья, основная волна 20.06.22)
Текстовый файл состоит из символов A, B, C, D и O. Определите максимальное количество идущих подряд пар символов вида согласная + гласная в прилагаемом файле. Для выполенения этого задания следует написать программу.
Решение:
f=open('24_10.txt') s=f.read() s=s.replace('BA', '1') s=s.replace('CA', '1') s=s.replace('DA', '1') s=s.replace('BO', '1') s=s.replace('CO', '1') s=s.replace('DO', '1') k=0 kmax=0 for i in range(0, len(s)): if s[i]=='1': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax)
Ответ: 174
Задача (Звенья, последнее звено неполное)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ… (составленной из фрагментов XYZ, последний фрагмент может быть неполным). Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Решение:
Т.к. последнее звено может быть неполным, здесь удобно применить другой алгоритм.
Пусть в начале показания счётчика равно нулю. Если мы находим нужный нам символ в нужной последовательности, то прибавляем к счётчику 1. Если последовательность сбивается, то ставим счётчик в ноль.
На рисунке представлен данный алгоритм. В нижней строке указано показание счётчика в момент анализа символа.
На данном рисунке максимальная длина цепочки нужных символов равна 9.
Видим, что для символа X, когда он находится на своём месте, остаток от деления значения счётчика на 3 равен 0.
Для символа Y, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 1.
Для символа Z, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 2.
Мы смотрим остаток от деления на 3, потому что у нас длина звена равна трём (XYZ).
Таким образом, мы и наш анализ очередного символа привяжем к показанию счётчика:
f=open('24_11.txt') s=f.read() k=0 kmax=0 for i in range(0, len(s)): if (s[i]=='X' and k%3==0) or (s[i]=='Y' and k%3==1) or (s[i]=='Z' and k%3==2): k=k+1 kmax = max(k, kmax) else: if s[i]=='X': k=1 else: k=0 print(kmax)
Важный момент: Если нужную цепочку прервал символ X, то нужно счётчик сразу выставить в 1, иначе может произойти такая ошибка:
Т.е. первые три нужных символа в цепочке алгоритм не засчитал.
Поэтому мы не просто сбрасываем счётчик в ноль, а прописываем условие:
if s[i]=='X': k=1 else: k=0
Ответ: 13
Задача (Полезный приём)
Текстовый файл 24-157.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). Определите символ, который чаще всего встречается в файле между двумя одинаковыми символами. Например, в тексте CCBAABABCBC есть комбинации ABA, BAB, BCB и CBC. Чаще всего – 2 раза – между двумя одинаковыми символами стоит B, в ответе для этого случая надо написать B2 (без пробелов и других разделителей). Если таких символов несколько, выведите тот, который стоит раньше в алфавите.
Решение:
f=open('24-157.txt') s=f.read() a=[0]*150 for i in range(0, len(s)-2): if s[i]==s[i+2]: a[ord(s[i+1])] = a[ord(s[i+1])] + 1 ch='' mx=0 for i in range(0, 150): if a[i]>mx: mx=a[i] ch=chr(i) print(ch, mx)
Здесь мы заводим массив a. Индексы этого массива — это коды ANSI всех букв латинского алфавита (ABC…Z). Ведь, как мы знаем, каждая буква кодируется определённым числом (кодом ANSI). Вот часть этой таблицы.
Например, буква A кодируется кодом 65. Коды увеличиваются в алфавитном порядке на 1. Буква Z кодируется числом 90. Таким образом, 150 ячеек точно хватит для нашего алфавита. Здесь берём с запасом, потому что на экзамене можно точно не вспомнить коды, но достаточно запомнить, что 150 ячеек вполне хватит для заглавных и строчных букв латинского алфавита.
Значит, ячейка 65 отвечает за букву A, ячейка 66 отвечает за букву B и т.д. Если мы встретили букву между двумя одинаковыми буквами, то её ячейка увеличивается на 1.
Функция ord() превращает символ в код ANSI.
После того, как мы прошли всю строку и собрали информацию о наших буквах, нужно пройти массив a и найти наибольшее число в нём.
Здесь мы уже не пользуемся функцией max, а используем условие, потому что нужно кроме максимального числа тянуть ещё один параметр — сам код (переменную i). Функция chr() превращает код ANSI обратно в символ.
Ответ: W1608
Задача (Строки различной длины)
Текстовый файл 24-164.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). Текст разбит на строки различной длины. Необходимо найти строку, содержащую самую длинную цепочку стоящих подряд одинаковых букв. Если таких строк несколько, надо взять ту, которая в файле встретилась раньше. Определите, какая буква встречается в этой строке чаще всего. Если таких букв несколько, надо взять ту, которая стоит раньше в алфавите. Запишите в ответе эту букву, а затем – сколько раз она встречается во всем файле.
Пример. Исходный файл:
ZZQABA
ZALAAC
QRAQUT
В этом примере в первой и второй строках наибольшая длина цепочек одинаковых буквы равна 2 (ZZ в первой строке, AA во второй), в третьей – 1. Берём первую строку, т.к. она находится в файле раньше. В этой строке чаще других встречаются буквы Z и A (по 2 раза), выбираем букву A, т. к. она стоит раньше в алфавите. В ответе для этого примера надо записать A6, так как во всех строках файла буква A встречается 6 раз.
Решение:
Для считывания построчно файла, будем использовать конструкцию, как в задании 17. В начале найдём строчку, содержащую самую длинную цепочку стоящих подряд одинаковых букв.
f=open('24-164.txt') kmax=0 count=0 n=-1 for s in f.readlines(): count=count+1 k=1 for i in range(0, len(s)-1): if s[i]==s[i+1]: k=k+1 if k>kmax: kmax=k n=count else: k=1 print(n)
Получается строка под номером 162. Переменная count считает строки по порядку. В переменную n сохраняем номер нужной строки. Опять пользуемся условием, а не функцией max, т.к. здесь нужно и обновлять kmax, и сохранять значение n. У нас условие строгое k>kmax, значит, сохранится первая строка с наибольшей искомой цепочкой.
f=open('24-164.txt') count=0 a=[0]*150 for s in f.readlines(): count=count+1 k=1 if count==162: for i in range(0, len(s)): a[ord(s[i])] = a[ord(s[i])] + 1 ch='' mx=0 for i in range(0, 150): if a[i] > mx: mx=a[i] ch=chr(i) print(ch)
Теперь нас интересует только строка под номером 162. Далее используем приём из прошлой задачи. Заводим массив a из 150 ячеек и используем таблицу кодов ANSI. Так определяем какая буква встретилась чаще всего в строке под номером 162. Получается буква K.
f=open('24-164.txt') s=f.read() print(s.count('K'))
Осталось найти количестов букв K во всём файле. Для этого используем функцию .count()
Ответ: K36582
В задаче 15 «Задача (Полезный приём)», созданы переменные k и kmax — напрасно, они не используются.
Убрал, по привычке написал.
Пройти тестирование по этим заданиям
Вернуться к каталогу заданий
Версия для печати и копирования в MS Word
1
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Задание 24
Источник: Демонстрационная версия ЕГЭ−2021 по информатике
2
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите длину самой длинной последовательности, состоящей из символов X. Хотя бы один символ X находится в последовательности.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Задание 24
3
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите длину самой длинной последовательности, состоящей из символов Y. Хотя бы один символ Y находится в последовательности.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Задание 24
4
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите длину самой длинной последовательности, состоящей из символов Z. Хотя бы один символ Z находится в последовательности.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Задание 24
5
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ… (составленной из фрагментов XYZ, последний фрагмент может быть неполным).
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Задание 24
Пройти тестирование по этим заданиям
ЕГЭ информатика 24 задание разбор, теория, как решать.
Создание программы для обработки символьной информации, (В) — 1 балл
Е24.34 Определите максимальное количество идущих подряд пар символов вида согласная + гласная
Текстовый файл состоит из символов A, C, D, F и O. Определите максимальное количество идущих подряд пар символов вида согласная + гласная в прилагаемом файле. Для выполнения этого задания следует написать программу. Ответ: TXT ZIP Демонстрационный вариант ЕГЭ 2023 г. – задание №24
Читать далее
Е24.33 Определите количество групп из идущих подряд не менее 10 символов
Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите количество групп из идущих подряд не менее 10 символов, которые начинаются и заканчиваются буквой D, не содержат других букв D (кроме первой и последней) и содержат не меньше двух букв C. Ответ: TXT ZIP СтатГрад Вариант ИН2110402 30.03.2022 – задание №24
Читать далее
Е24.32 Определите максимальное количество идущих подряд пар символов AB или CB в прилагаемом файле
Текстовый файл состоит из символов A, B и C. Определите максимальное количество идущих подряд пар символов AB или CB в прилагаемом файле. Искомая подпоследовательность должна состоять только из пар AB, или только из пар CB, или только из пар AB и CB в произвольном порядке следования этих пар. Для выполнения этого задания следует написать программу. …
Читать далее
Е24.31 Определите максимальное количество идущих подряд пар символов АВ или АС
Текстовый файл состоит из символов А, В и С. Определите максимальное количество идущих подряд пар символов АВ или АС в прилагаемом файле. Для выполнения этого задания следует написать программу. TXT ZIP Апробация ЕГЭ по информатике 19 февраля 2022 – задание №24 Тренировочный экзамен по информатике и ИКТ (КЕГЭ) в компьютерной форме
Читать далее
Е24.30 не содержат других букв E (кроме первой и последней) и букв F
Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите количество групп из идущих подряд не менее 12 символов, которые начинаются и заканчиваются буквой E и не содержат других букв E (кроме первой и последней) и букв F. TXT СтатГрад Вариант ИН2110301 08.02.2022 – задание №24
Читать далее
Е24.29 максимальное количество идущих подряд символов, среди которых не более двух букв D
Текстовый файл содержит только заглавные буквы латинского алфавита(ABC…Z). Определите максимальное количество идущих подряд символов, среди которых не более двух букв D. Ответ: TXT «Некрыловские варианты» от Евгения Джобса — Вариант 5
Читать далее
Е24.28 среди которых нет ни одной буквы B и при этом не менее трёх букв A.
Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите максимальное количество идущих подряд символов, среди которых нет ни одной буквы B и при этом не менее трёх букв A. Ответ: TXT informatikaexpert.ru
Читать далее
Е24.27 Необходимо найти строку, содержащую наименьшее количество букв N
Текстовый файл содержит строки различной длины. Общий объём файла не превышает 1 Мбайт. Строки содержат только заглавные буквы латинского алфавита (ABC…Z). Необходимо найти строку, содержащую наименьшее количество букв N (если таких строк несколько, надо взять ту, которая находится в файле раньше), и определить, какая буква встречается в этой строке чаще всего. Если таких букв несколько, …
Читать далее
Е24.26 максимальное расстояние между одинаковыми буквами в одной строке
Текстовый файл содержит строки различной длины. Общий объём файла не превышает 1 Мбайт. Строки содержат только заглавные буквы латинского алфавита (ABC…Z). В строках, содержащих менее 25 букв A, нужно определить и вывести максимальное расстояние между одинаковыми буквами в одной строке. Пример. Исходный файл: GIGA GABLAB NOTEBOOK AGAAA В этом примере во всех строках меньше 25 …
Читать далее
Е24.25 среди которых не более одной буквы A.
Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите максимальное количество идущих подряд символов, среди которых не более одной буквы A. Ответ: 24.TXT СтатГрад Вариант ИН2110101 27.10.2021– задание №24
Читать далее
За это задание ты можешь получить 1 балл. На решение дается около 30 минут. Уровень сложности: повышенный.
Средний процент выполнения: 52.2%
Ответом к заданию 24 по информатике может быть развернутый ответ (полная запись решения с обоснованием выполненных действий).
Разбор сложных заданий в тг-канале
Задачи для практики
Задача 1
Текстовый файл состоит из символов A, B и D.
Определите максимальное количество символов последовательности в прилагаемом файле, среди которых нет пар символов BD или среди которых нет пар BA. только один вид из этих пар может присутствовать в подпоследовательности.
Для выполнения этого задания следует написать программу.
Решение
Для решения этого номера нужно написать программу, приведём пример решения на языке Python
f = open('24_ABD.txt', 'r') s = f.readline().strip() s1 = s.replace('BD', 'B D') s2 = s.replace('BA', 'B A') x = s1.split() y = s1.split() max_not_bd = len(max(x, key=len)) max_not_ba = len(max(y, key=len)) print(max(max_not_ba, max_not_bd))
Другой способ решения
f = open('24_ABD.txt', 'r') s = f.readline().strip() max_len = 0 cur_len_notBA = 1 cur_len_notBD = 1 for i in range(len(s) - 1): if s[i] == 'B' and s[i + 1] == 'A': cur_len_notBA = 1 cur_len_notBD += 1 elif s[i] == 'B' and s[i + 1] == 'D': cur_len_notBA += 1 cur_len_notBD = 1 else: cur_len_notBA += 1 cur_len_notBD += 1 max_len = max(max_len, cur_len_notBA, cur_len_notBD) print(max_len)
Ответ: 96
Ответ: 96
Задача 2
Текстовый файл состоит из символов A, B и D.
Определите самую длинную последовательность символов в которой нет символа B. В ответе запишите количество символов в такой последовательности.
Искомая подпоследовательность должна состоять только из символов А или D.
Для выполнения этого задания следует написать программу.
Решение
Для решения этого номера нужно написать программу, приведём пример решения на языке Python
f = open('24_ABD.txt', 'r') s = f.readline().strip() max_s = 0 k = 0 for i in range(len(s)): if s[i] != 'B': k += 1 max_s = max(k, max_s) else: k = 0 print(max_s)
Другой способ решения:
f = open('24_ABD.txt', 'r') s = f.readline().strip() s = s.replace('B', ' ') x = s.split() print(len(max(x, key=len)))
Ответ: 12
Ответ:
Задача 3
Текстовый файл состоит из символов A, B и D.
Определите каких пар символов BD или BA больше в прилагаемом файле.
В ответе укажите количество таких пар и саму пару, без пробелов. Например: 143BD
Для выполнения этого задания следует написать программу.
Решение
Для решения этого номера нужно написать программу, приведём пример решения на языке Python
f = open('24_4.txt', 'r') s = f.readline().strip() bd = s.count('BD') ba = s.count('BA') if bd > ba: print(f'{bd}BD') else: print(f'{ba}BA')
Ответ: 1025593BD
Ответ:
Задача 4
Текстовый файл состоит из символов A, B и D.
Определите максимальное количество идущих подряд пар символов или BD или BA в прилагаемом файле.
Искомая подпоследовательность должна состоять только из пар BA, или только из пар BD.
Для выполнения этого задания следует написать программу.
Решение
Для решения этого номера нужно написать программу, приведём пример решения на языке Python
f = open('24.txt', 'r') s = f.readline().strip() s = s.replace('BD', '1') s = s.replace('BA', '2') x1 = s.replace('A', '2') x1 = x1.replace('B', '2') x1 = x1.replace('D', '2') x2 = s.replace('A', '1') x2 = x2.replace('B', '1') x2 = x2.replace('D', '1') x = x1.split('2') max_s = len(max(x, key=len)) x = x2.split('1') max_s = max(max_s, len(max(x, key=len))) print(max_s)
Ответ: 16
Ответ:
Задача 5
Текстовый файл состоит из символов A, B и D.
Определите максимальное количество идущих подряд пар символов BD или BA в прилагаемом файле.
Искомая подпоследовательность должна состоять только из пар BA, или только из пар BD, или только из пар BD и BA в произвольном порядке следования этих пар.
Для выполнения этого задания следует написать программу.
Решение
Для решения этого номера нужно написать программу, приведём пример решения на языке Python
f = open('24.txt', 'r') s = f.readline().strip() s = s.replace('BD', '1') s = s.replace('BA', '2') s = s.replace('A', ' ') s = s.replace('B', ' ') s = s.replace('D', ' ') x = s.split() print(len(max(x, key=len)))
Ответ: 64
Ответ:
Задача 6
ДЛЯ 2022
Текстовый файл состоит из символов A, B и D.
Определите максимальное количество идущих подряд пар символов BD или BA в прилагаемом файле.
Искомая подпоследовательность должна состоять только из пар BA, или только из пар BD, или только из пар BD и BA в произвольном порядке следования этих пар.
Для выполнения этого задания следует написать программу.
Решение
Для решения этого номера нужно написать программу, приведём пример решения на языке Python
f = open('24.txt', 'r') s = f.readline().strip() s = s.replace('BD', '1') s = s.replace('BA', '2') s = s.replace('A', ' ') s = s.replace('B', ' ') s = s.replace('D', ' ') x = s.split() print(len(max(x, key=len)))
ОТВЕТ: 64
Ответ:
Задача 7
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B и C.
Определите длину самой длинной цепочки, в которой каждые два соседних символа различны.
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (ABC4).txt»)
st = f.read()
f.close()
prev1 = «Z»
cur_len = 0
max_len = 0
for x in st:
if x != prev1 and prev1 != «Z»:
cur_len += 1
if cur_len > max_len:
max_len = cur_len
else:
cur_len = 1
prev1 = x
print(max_len)
Для данного по условию файла программа должна вывести ответ 35.
Ответ:
Задача 8
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B, C и D.
Определите длину самой длинной цепочки, состоящей из одинаковых символов.
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (ABCD3).txt»)
st = f.read()
f.close()
prev1 = «Z»
cur_len = 0
max_len = 0
for x in st:
if x == prev1:
cur_len += 1
if cur_len > max_len:
max_len = cur_len
else:
cur_len = 1
prev1 = x
print(max_len)
Пример решения задачи на С++:
#include <iostream>
#include <fstream>using namespace std;
int main() {
ifstream file("Задание 24 (ABCD3).txt");
if (file.is_open()){
string text;
file >> text;
int maxCount = 0, currentCount = 1;
for (int i = 1; i < text.length(); ++i) {
if (text[i - 1] == text[i]) {
currentCount += 1;
if (currentCount > maxCount)
maxCount = currentCount;
} else
currentCount = 1;
}
cout << maxCount;
} else {
cout << "File isn not opened.";
}
return 0;
}
Для данного по условию файла программа должна вывести ответ 10.
Ответ:
Задача 9
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B, C и D.
Определите количество цепочек, состоящих из 4-х символов, где каждые 2 соседних символа различны.
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (ABCD2).txt»)
st = f.read()
f.close()
count = 0
prev1 = «Z»
prev2 = «Z»
prev3 = «Z»
for x in st:
if (prev3 != «Z» and x != prev1 and
prev1 != prev2 and prev2 != prev3):
count += 1
prev3 = prev2
prev2 = prev1
prev1 = x
print(count)
Пример решения задачи на C++:
#include <iostream>
#include <fstream>using namespace std;
int main() {
ifstream file("D:\DOWNLOADS\num3.txt");
int count = 0;
if (file.is_open()){
string text;
file >> text;
for (int i = 3; i < text.length(); ++i)
if ((text[i - 3] != text[i - 2])
&& (text[i - 2] != text[i - 1])
&& (text[i - 1] != text[i]))
count++;
cout << count;
} else cout << "File is not opened.";
return 0;
}
Для данного по условию файла программа должна вывести ответ 422169.
Ответ:
Задача 10
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B и C.
Сколько раз в файле встречается последовательность «CAB»?.
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open("file.txt")
st = f.read()
f.close()
count = 0
prev1 = "Z"
prev2 = "Z"
for x in st:
if prev2 == "C" and prev1 == "A" and x == "B":
count += 1
prev2 = prev1
prev1 = x
print(count)
Пример решения задачи на C++:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream file("D:\YandexDisk\YandexDisk\ДОКУМЕНТЫ\РЕПЕТИТОР\ТУРБОПОДГОТОВКА\Файлы для задач\№24\Задание 24 (ABC1).txt");
if (file.is_open()){
string text;
file >> text;
int count = 0;
for (int i = 2; i < text.length(); ++i){
if (text[i - 2] == 'C' && text[i - 1] == 'A' && text[i] == 'B')
count++;
}
cout << count;
} else cout << "File is not opened.";
return 0;
}
Для данного по условию файла программа должна вывести ответ 37166.
Ответ:
Задача 11
Скачайте текстовый файл, состоящий не более чем из $10^6$ прописных символов английского алфавита от A до Z.
Определите длину самой длинной цепочки, состоящей только из символов A, B и C.
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (AZ3).txt»)
st = f.read()
f.close()
count = 0
Max = 0
for x in st:
if x in [«A», «B», «C»]:
count += 1
if count > Max:
Max = count
else:
count = 0
print(Max)
Для данного по условию файла программа должна вывести ответ 5.
Ответ:
Задача 12
Скачайте текстовый файл, состоящий не более чем из $10^6$ прописных символов английского алфавита от A до Z.
Определите длину самой длинной цепочки, состоящей только из символов A, B и C.
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (AZ1).txt»)
st = f.read()
f.close()
count = 0
Max = 0
for x in st:
if x in [«A», «B», «C»]:
count += 1
if count > Max:
Max = count
else:
count = 0
print(Max)
Для данного по условию файла программа должна вывести ответ 6.
Ответ:
Задача 13
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B, C и D.
Определите количество цепочек длины 4, где все четыре символа различны.
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (ABCD3).txt»)
st = f.read()
f.close()
count = 0
pred1_x = «Z»
pred2_x = «Z»
pred3_x = «Z»
for x in st:
if (x != pred1_x and x != pred2_x and
x != pred3_x and pred1_x != pred2_x and
pred1_x != pred3_x and pred2_x != pred3_x
and pred3_x != «Z»):
count += 1
pred3_x = pred2_x
pred2_x = pred1_x
pred1_x = x
print(count)
Пример решения задачи на C++:
#include <iostream>
#include <fstream>using namespace std;
bool check(string text){
for (int i = 0; i < text.length() - 1; i++)
for (int j = i + 1; j < text.length(); j++)
if (text[i] == text[j])
return false;
return true;
}int main() {
ifstream file("D:\DOWNLOADS\num4.txt");
int count = 0;
if (file.is_open()){
string text;
file >> text;
for (int i = 3; i < text.length(); ++i)
if ((text[i - 3] != text[i - 2])
&& (text[i - 3] != text[i - 1])
&& (text[i - 3] != text[i])
&& (text[i - 2] != text[i - 1])
&& (text[i - 2] != text[i])
&& (text[i - 1] != text[i]))
// if(check(text.substr(i - 4, 4)))
count++;
cout << count;
} else cout << "File is not opened.";
return 0;
}
Пояснение к коду на C++: реализовано два варианта решения:
1) через проверку различия каждого из 4 символов, окружающих текущий (с номером i)
2) через функцию проверки различия всех символов в подстроке. На вход подаётся строка, циклы производят перебор всех символов и, если хотя бы пара символов равны, функция возвращает false. В функции main вызов этой функции закомментирован.
Для данного по условию файла программа должна вывести ответ 93896.
Ответ:
Задача 14
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B и C.
Определите количество цепочек-палиндромов длиной от 3 до 4 символов. Цепочка-палиндром — это такая цепочка, которая читается одинаково слева направо и справа налево.
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (ABC2).txt»)
st = f.read()
palind_count = 0
pred1_x = «Z»
pred2_x = «Y»
pred3_x = «X»
for x in st:
if x == pred2_x:
palind_count += 1
if x == pred3_x and pred1_x == pred2_x:
palind_count += 1
pred3_x = pred2_x
pred2_x = pred1_x
pred1_x = x
print(palind_count)
f.close()
Пример решения задачи на С++:
#include <iostream>
#include <fstream>using namespace std;
int main() {
ifstream file("D:\DOWNLOADS\num5.txt");
int count = 0;
if (file.is_open()){
string text;
file >> text;
for (int i = 3; i < text.length(); ++i){
if ((text[i - 3] == text[i])
&& (text[i - 2] == text[i - 1]))
count++;
if (text[i - 2] == text[i])
count++;
}
cout << count;
} else cout << "File is not opened.";
return 0;
}
Для данного по условию файла программа должна вывести ответ 445333.
Ответ:
Задача 15
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B и C.
Определите количество символов в самой длинной «восходящей» цепочке. Назовём цепочку «восходящей», если в ней сначала идёт любое (>0) количество символов A, затем любое (>0) количество символов B, а потом любое (>0) количество символов C, например «AABBBBC».
Для выполнения этого задания напишите программу.
Решение
Решение на Python:
f = open("file.txt")
max_len = 0
cur_len = 0
st = f.read()
pred_x = "X"
for x in st:
if ((x == pred_x and cur_len > 0) or
(x == "B" and pred_x == "A")
or (x == "C" and pred_x == "B" and cur_len > 0)):
cur_len += 1
else:
if x == "A":
cur_len = 1
else:
cur_len = 0
if x == "C" and cur_len > max_len:
max_len = cur_len
pred_x = x
print(max_len)
f.close()
Решение на С++:
Основано на том, что у каждого символа есть код и в восходящей цепочке у каждого следующего символа значение кода должно бытьт больше или рано коду предыдущего
#include <iostream>
#include <fstream>using namespace std;
int main(){
ifstream file ("file.txt");
string text;
file >> text;
int maxLength = 0, curLength = 1;
for (int i = 1; i < text.length(); ++i) {
if (text[i-1] <= text[i]) {
curLength++;
if (curLength > maxLength)
maxLength = curLength;
} else
curLength = 1;
}
cout << maxLength;
return 0;
}
Для данного по условию файла программа должна вывести ответ 19.
Ответ:
Задача 16
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B и C.
Определите количество символов в самой длинной «восходящей» цепочке. Назовём цепочку «восходящей», если в ней сначала идёт любое (>0) количество символов A, затем любое (>0) количество символов B, а потом любое (>0) количество символов C, например «AABBBBC».
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (ABC2).txt»)
max_len = 0
cur_len = 0
st = f.read()
pred_x = «X»
for x in st:
if ((x == pred_x and cur_len > 0) or
(x == «B» and pred_x == «A»)
or (x == «C» and pred_x == «B» and cur_len > 0)):
cur_len += 1
else:
if x == «A»:
cur_len = 1
else:
cur_len = 0
if x == «C» and cur_len > max_len:
max_len = cur_len
pred_x = x
print(max_len)
f.close()
Для данного по условию файла программа должна вывести ответ 16.
Ответ:
Задача 17
Скачайте текстовый файл, состоящий не более чем из $10^6$ символов A, B и C.
Определите количество символов в самой длинной «нисходящей» цепочке. Назовём цепочку «нисходящей», если в ней сначала идёт любое (>0) количество символов C, затем любое (>0) количество символов B, а потом любое (>0) количество символов А, например «CCBAAAAA».
Для выполнения этого задания напишите программу.
Решение
Пример решения задачи на Python:
f = open(«Задание 24 (ABC3).txt»)
max_len = 0
cur_len = 0
st = f.read()
pred_x = «X»
for x in st:
if ((x == pred_x and cur_len > 0) or
(x == «B» and pred_x == «C»)
or (x == «A» and pred_x == «B» and cur_len > 0)):
cur_len += 1
else:
if x == «C»:
cur_len = 1
else:
cur_len = 0
if x == «A» and cur_len > max_len:
max_len = cur_len
pred_x = x
print(max_len)
f.close()
Для данного по условию файла программа должна вывести ответ 17.
Ответ:
Рекомендуемые курсы подготовки
Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
- 2
- 14
- 16
- 17
- 18
- 19
- 23
- 24
- 25
- 26
- 27
Задание 24. Пример 1
Текстовый файл состоит из нескольких строк, содержащих буквы латинского алфавита. Определите максимальное количество идущих подряд совпадающих символов. Для выполнения этого задания следует написать программу.
Текстовый файл 2
Показать решение…
Задание 24. Пример 2
Текстовый файл состоит из нескольких строк, содержащих буквы латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны. Для выполнения этого задания следует написать программу.
Текстовый файл 1
Текстовый файл 2
Показать решение…
Задание 24. 1
Текстовый файл состоит из нескольких строк, содержащих буквы латинского алфавита. Определите сколько раз в исходном файле встречается символ, стоящий в файле на первом месте. Для выполнения этого задания следует написать программу.
Текстовый файл 1
Текстовый файл 2
Показать решение…
Задание 24. 2
Текстовый файл состоит из нескольких строк, содержащих буквы латинского алфавита. Определите сколько раз в исходном файле встречается конкретный символ (должен быть параметром в программе, либо вводиться с клавиатуры). Для проверки правильности используйте файл-приложение к демоверсии «24.txt» и символ «Z».
Текстовый файл 1
Показать решение…
Задание 24. 3
Текстовый файл состоит из нескольких строк, содержащих буквы латинского алфавита. Определите сколько раз в исходном файле встречается подстрока, состоящая из трёх одинаковых символов. Для выполнения этого задания следует написать программу.
Текстовый файл 2
Показать решение…
Автор материалов — Лада Борисовна Есакова.
Самая распространенная ошибка, которую нужно найти и исправить – это неправильное использование вложенных условных операторов. Для усложнения поиска возможно неправильное форматирование текста (неправильно поставленные отступы).
Для того, чтобы найти ошибку, нужно поставить в соответствие друг другу все части условного оператора if и else.
Помним, что часть else относится к ближайшему if. При этом наличие части else не обязательно.
Кроме того, часто присутствует ошибка при вводе или выводе. Обязательно нужно проверить, та ли информация выводится на экран.
Особого внимания требует инициализация переменных.
Формат книги не позволяет рассмотреть все основные типы задач 2 части, рассмотрим лишь те, которые встречались на проверочных и экзаменационных работах последних двух лет.
Пример 1.
На обработку поступает положительное целое число, не превышающее 109. Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик |
Python |
DIM N, DIGIT, SUM AS LONG
INPUT N SUM = 0 WHILE N > 0 DIGIT = N MOD 10 IF DIGIT < 7 THEN SUM = SUM + 1 END IF N = N 10 WEND PRINT DIGIT |
N = int(input())
sum = 0 while N > 0: digit = N % 10 if digit < 7: sum = sum + 1 N = N // 10 print(digit) |
Паскаль |
Алгоритмический язык |
var N, digit, sum: longint;
begin readln(N); sum := 0; while N > 0 do begin digit := N mod 10; if digit < 7 then sum := sum + 1; N := N div 10; end; writeln(digit) end. |
алг
нач цел N, digit, sum ввод N sum := 0 нц пока N > 0 digit := mod(N,10) если digit < 7 то sum := sum + 1 все N := div(N,10) кц вывод digit кон |
Си |
|
#include
int main() { int N, digit, sum; scanf(«%d», &N); sum = 0; while (N > 0) { digit = N % 10; if (digit < 7) sum = sum + 1; N = N / 10; } printf(«%d»,digit); return0; } |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 456.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
Решение использует запись программы на Паскале. Допускается использование программы на любом из четырёх других языков.
1. Программа выведет число 4.
2. Пример числа, при вводе которого программа выдаёт верный ответ: 835.
Программа работает неправильно из-за неверной выводимой на экран переменной и неверного увеличения суммы. Соответственно, программа будет работать верно, если в числе старшая цифра (крайняя левая) равна сумме цифр, меньших 7.
3. В программе есть две ошибки.
Первая ошибка. Неверное увеличение суммы.
Строка с ошибкой:
sum := sum + 1;
Верное исправление:
sum := sum + digit;
Вторая ошибка. Неверный вывод ответа на экран.
Строка с ошибкой:
writeln(digit)
Верное исправление:
writeln(sum)
Пример 2.
Для заданного положительного вещественного числа A необходимо найти максимальное целое число K, при котором выполняется неравенство
(при K = 0 сумма считается равной 0).
Для решения этой задачи ученик написал такую программу.
Бейсик |
Python |
DIM A, S AS DOUBLE
DIM K AS INTEGER INPUT A K = 1 S = 1 WHILE S < A S = S + 1.0/K K = K + 1 WEND PRINT K END |
a = float(input())
k = 1 s = 1 while s < a: s = s + 1.0/k k = k + 1 print(k) |
Алгоритмический язык |
Паскаль |
алг
нач вещ a, s цел k ввод a k := 1 s := 1 нц пока s<a s := s + 1.0/k k := k + 1 кц вывод k кон |
var a, s: real;
k: integer; begin read(a); k := 1; s := 1; while s<a do begin s := s + 1.0/k; k := k + 1; end; write(k); end. |
Си |
|
#include <stdio.h>
int main(){ double a, s; int k; scanf(«%lf»,&a); k = 1; s = 1; while (s<a) { s = s + 1.0/k; k = k + 1; } printf(«%d», k); return 0; } |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.2.
2. Приведите пример числа, при вводе которого программа даст верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только исправлять ошибочные строки; удалять строки или добавлять новые строки нельзя. Постарайтесь также не внести новые ошибки – за это оценка снижается.
Решение:
Решение использует запись программы на Паскале. Допускается использование программы на других языках.
1. При вводе числа 1.2 программа выведет число 2.
2. Примеры чисел, при вводе которых программа выводит верный ответ: 1.6, 2.05.
Программа содержит две ошибки, одна из которых приводит к увеличению ответа, другая – к уменьшению.
В некоторых случаях эти ошибки компенсируют друг друга, и ответ оказывается правильным. Это происходит, если значение A попадает в один из следующих диапазонов: 1.5 < A < 1.83, 2 < A < 2.08.
3. Программа содержит две ошибки.
1) Неверная инициализация. Начальное значение S должно быть равно нулю.
В приведённом варианте вычисленная сумма оказывается на 1 больше правильного значения.
Строка с ошибкой:
s := 1;
Правильная строка:
s := 0;
2) Неверное определение ответа. Приведённая программа находит не максимальное K, при котором выполняется неравенство, а минимальное, при котором оно не выполняется, то есть увеличивает верное значение на 1.
Кроме того, использованный порядок действий в цикле (увеличение K после увеличения S) приводит к увеличению ещё на 1. Это можно было бы исправить, изменив порядок действий в цикле и уменьшив K после завершения цикла, но эти действия не разрешены по условию задачи.
Поэтому для исправления ошибки можно просто скорректировать значение при выводе.
Строка с ошибкой:
write(k);
Правильная строка:
write(k-2);
Благодарим за то, что пользуйтесь нашими статьями.
Информация на странице «Задача №24. Исправление ошибок в программе.» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к ЕГЭ и ОГЭ.
Чтобы успешно сдать нужные и поступить в ВУЗ или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
Также вы можете воспользоваться другими материалами из данного раздела.
Публикация обновлена:
09.03.2023