Блог по программированию

Заметили ошибку ?
Выделите это место и нажмите Ctrl + Q

ЕГЭ по информатике 2021 - Задание 24 (Обработка символьной информации)



Привет! Сегодня будем учится решать 24 задание из ЕГЭ по информатике 2021.


Двадцать четвёртое задание из ЕГЭ по информатике нацелено на обработку символьной информации.


В этом уроке будем решать задачи 24 задания с помощью языка программирования Pascal.


Перейдём к Демонстрационному варианту из ЕГЭ по информатике 2021.


Задача (Задание 24, Демонстрационный вариант 2021)

Текстовый файл состоит не более чем из 106 символов X, Y и Z.

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

Для выполнения этого задания следует написать программу.


Скачать файл

Решение:

В начале посмотрим, как считать посимвольно файл.


var
    f: file of char;
    c: char; 
begin
    assign (f, 'c:\24.txt');
    reset (f);
  
    while not eof (f) do begin
        read(f, c);
        writeln(c);
    end;
    
    close (f);
end.

В данном примере сам текстовый файл должен находиться по адресу: "c:\24.txt".


В цикле while с помощью команды read(f, c) считывается из файла очередной символ в переменную c и распечатывается на экран с помощью команды writeln(c).


Т.к. количество символов большое в этом файле, убедившись, что считывание происходит нормально, можно нажать на кнопку "Завершить".


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


Пример:


ЕГЭ по информатике 2021 - задание 24 (Демонстрационная версия)

Алгоритм будет следующий: Берём символ, сравниваем его со следующим, если они разные, то добавляем к счётчику 1. Счётчик начинает работать с 1, чтобы засчитать самый первый символ. Если символы одинаковые, то сбрасываем счётчик на 1 (первоначальное значение).


Таким образом, у нас будет разная длина цепочек не повторяющихся символов в нашем файле. Но нам нужно в ответе написать наибольшую длину. Для этого мы будем использовать механизм для нахождения максимального значения, который был описан в статье по 17 заданию из ЕГЭ по информатике 2021.


Напишем программу на языке Pascal, которая решает нашу задачу.


var
    f: file of char;
    c1, c2: char; 
    count, max : integer; 
begin
    assign (f, 'c:\24.txt');
    reset (f);
  
    count := 1; 
    max := 0; 
    
    read (f, c1); // Считываем самый первый символ.

    while not eof (f) do begin // Главный ЦИКЛ программы. 
        read (f, c2); // Считываем очередной символ в цикле.
 
        if c1 <> c2 then begin // Основная проверка двух символов. 
          count := count + 1; 
          if count > max then max := count;                                     
        end
        else begin  
          count := 1; 
        end;
        
        c1:=c2;  // В переменную с1 идёт символ с2,
                 // а в с2 считается новый символ из файла.
    end; 
    
    Writeln(max); 
 
    close (f);
end.

После запуска программы на экране высветится число 35.


Ответ: 35



Следующая тренировочная задача из 24 задания ЕГЭ по информатике 2021.


Задача (Последовательность одного символа)

Текстовый файл состоит не более чем из 106 символов L, D и R. Определите длину самой длинной последовательности, состоящей из символов R. Хотя бы один символ R находится в последовательности.

Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.


Скачать файл

Решение:

Напишем программу:


var
    f: file of char;
    c1: char; 
    count, max : integer; 
begin
    assign (f, 'c:\24_1.txt');
    reset (f);
  
    count := 0; 
    max := 0; 

    while not eof (f) do begin // Главный ЦИКЛ программы. 
        read (f, c1); 
 
        if c1 = 'R' then begin
          count := count + 1; 
          if count > max then max := count;                                     
        end
        else begin  
          count := 0; 
        end;
        
    end; 
    
    Writeln(max); 
 
    close (f);
end.

Здесь логика следующая: В цикле считываем очередной символ. Если это символ R, то к счётчику прибавляем 1. Если встретили не символ R, то счётчик сбрасываем на ноль. Попутно в переменной max сохраняем максимальное значение для счётчика.


Ответ: 7



Ещё одна задача на понимание из 24 задания ЕГЭ по информатике 2021.


Задача (Последовательность трёх символов)

Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ... (составленной из фрагментов XYZ, последний фрагмент может быть неполным).

Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.


Скачать файл

Решение:

Пусть в начале показания счётчика равно нулю. Если мы находим нужный нам символ в нужной последовательности, то прибавляем к счётчику 1. Если последовательность сбивается, то ставим счётчик в ноль.


На рисунке представлен данный алгоритм. В нижней строке указано показание счётчика в момент анализа символа.


ЕГЭ по информатике 2021 - задание 24 (Цепочка символов)

На данном рисунке максимальная длина цепочки нужных символов равна 9.


Видим, что для символа X, когда он находится на своём месте, остаток от деления значения счётчика на 3 равен 0.


Для символа Y, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 1.


Для символа Z, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 2.


Мы смотрим остаток от деления на 3, потому что у нас длина звена равна трём (XYZ).


Таким образом, мы и наш анализ очередного символа привяжем к показанию счётчика:


var
    f: file of char;
    c1: char; 
    count, max : integer; 
begin
    assign (f, 'c:\24_2.txt');
    reset (f);
  
    count := 0; 
    max := 0; 

    while not eof (f) do begin // Главный ЦИКЛ программы. 
        read (f, c1); 
 
        if ((c1 = 'X') and (count mod 3 = 0)) or
           ((c1 = 'Y') and (count mod 3 = 1)) or 
           ((c1 = 'Z') and (count mod 3 = 2))  then begin
          count := count + 1; 
          if count > max then max := count;                                     
        end
        else begin 
            if c1='X' then count := 1 else
                count := 0; 
        end;
        
    end; 
    
    Writeln(max); 
 
    close (f);
end.

Важный момент: Если нужную цепочку прервал символ X, то нужно счётчик сразу выставить в 1, иначе может произойти такая ошибка:


ЕГЭ по информатике 2021 - задание 24 (Цепочка символов 2)

Т.е. первые три нужных символа в цепочке алгоритм не засчитал.


Поэтому мы не просто сбрасываем счётчик в ноль, а прописываем условие:


 if c1='X' then count := 1 else
      count := 0; 

Ответ: 13

Продолжаем набирать обороты в 24 задании из ЕГЭ по информатике 2021.


Задача (Проверяем соседей символа)

Текстовый файл состоит не более чем из 106 символов A, B и C.

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

Для выполнения этого задания следует написать программу.


Скачать файл

Решение:

Напишем программу:


var
    f: file of char;
    c1, c2, c3: char; 
    count, max : integer; 
begin
    assign (f, 'c:\24_3.txt');
    reset (f);
  
    count := 0; 
    max := 0; 
    
    read (f, c1); // Считываем самый первый символ.
    read (f, c2); // Считываем второй символ.

    while not eof (f) do begin // Главный ЦИКЛ программы. 
        read (f, c3); // Считываем очередной символ в цикле.
 
        if (c2 <> c1) and (c2 <> c3) then begin // Основная проверка двух символов. 
          count := count + 1; 
          if count > max then max := count;                                     
        end
        else begin  
          count := 0; 
        end;
        
        c1 := c2;
        c2 := c3;       
  
    end; 
    
    Writeln(max); 
 
    close (f);
end.

Задача похожа на демонстрационный вариант. Здесь три символа участвуют в каждой итерации.


Ответ: 22

Посмотрим ещё не маловажные примеры из 24 задания ЕГЭ по информатике 2021.


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

В файле хранится строка из символов. Длина строки не более 106.

Сколько пар символов в строке являются симметричными? Симметричной парой называют такие два символа, которые расположены на одинаковом удалении от концов строки.

Например, в строке mdtdeeftkm три симметричных пары – mm, tt и ee.


Скачать файл

Решение:

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


var s: string;
var i: integer;
begin
 
  assign(input, 'c:\24_4.txt');
  readln(s);

  for i:=1 to Length(s) do begin
    WriteLn(s[i]);
 end;

end.

Здесь есть строка s, в которой находятся все символы из нашего файла. В цикле for можно перебрать каждый символ и проанализировать его.


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


К строке можно обращаться, как к массиву. Тогда в a[1] - Будет первый символ строки, в a[2] - второй и т.д.


Чтобы посмотреть последний символ строки, нужно обратиться к элементу a[Length(s)].


Теперь легко написать программу для нашей задачи:


var s: string;
var i, count: integer;

begin
  
  assign(input, 'c:\24_4.txt');
  readln(s);
  
  count:=0;

  for i:=1 to Length(s) div 2 do begin
    
    if s[i] = s[Length(s)+1-i] then 
      count := count + 1;
     
  end;

  WriteLn(count);
  
end.

Проходим в цикле for до половины строки (Length(s) div 2) и анализируем симметричные символы с обеих концов строки.


Если символы равны, то прибавляем к счётчику 1.


Ответ: 19101


Задача (Количество строк)

Текстовый файл состоит не более чем из 106 заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых встречается комбинация F?O, где вопросительный знак обозначает один любой символ.


Скачать файл

Решение:

Чтобы считать файл построчно, можно использовать следующий шаблон:


var
    f: text; // Обратите внимание на тип переменной f
    s: string;
begin

    assign(f, 'c:\24_5.txt');
    reset(f);
     
    while not eof (f) do begin // Главный ЦИКЛ программы. 
        
        readln(f, s); // Считываем очередную строку.
        writeln(s);
        
    end; 
     
    close (f);
end.

Данный фрагмент кода будет печатать поочерёдно все строки из файла c:\24_5.txt.


Обратите внимание в данном шаблоне на тип данных переменной f.


Когда мы считывали по одному символу, для переменной f был тип данных file of char.


Когда мы считываем построчно, для переменной f тип данных выбираем text.


Так же команда для считывания строки становится readln(f, s);. Переменная s имеет тип string.


Напишем решение для данной задачи:


var
    f: text;
    s: string;
    count, i : integer; 
begin
    assign(f, 'c:\24_5.txt');
    reset(f);
  
    count := 0;     

    while not eof (f) do begin // Главный ЦИКЛ программы. 
        
        readln(f, s); // Считываем очередную строку.
        
        for i:=1 to Length(s)-2 do begin
          if (s[i]='F') and (s[i+2]='O') then begin
            count := count + 1;
            break;
          end;
        end;

    end; 
    
    Writeln(count); 
 
    close (f);
end.

После считывания очередной строки, мы проверяем с помощью цикла for, есть ли комбинация указанных символов. Если есть, прибавляем к счётчику 1 и выходим из цикла for с помощью команды break.


Ответ: 757

На этом всё! Удачи на ЕГЭ по информатике.






21-12-2020 в 12:05:42







Похожая статья:

ЕГЭ по информатике 2021 - Задание 14 (Чемпионская подготовка)

Мы подошли к 14 заданию из ЕГЭ по информатике 2021. Оно связано с разл...

Категория: ЕГЭ  Подкатегория: -
Дата: 15-01-2018 в 16:47:34 0


Комментарии:

ваш сайт - просто спасение. очень здорово объясняете, все понятно, спасибо огромное!!
ученик 31-12-2020 в 23:15:42

Спасибо! ))
Калужский Александр 31-12-2020 в 23:17:16

Здравствуйте, Александр, будете ли вы разбирать номера 25,26,27 ?
Den4ik 04-01-2021 в 19:54:54

Здравствуйте! Будут разборы!
Калужский Александр 04-01-2021 в 21:08:26

жду 25 26 27!
иван 06-01-2021 в 14:57:16

Подскажите, пожалуйста, как посчитать количество самых коротких цепочек слов в строке?
Елена 14-02-2021 в 22:24:57

vay klass
dlbb 20-02-2021 в 09:43:24

Ваш сайт лучший, всё очень понято, лучше чем в школе!!!!!
Анастасия 20-02-2021 в 09:55:42

Здравствуйте , А как решать подобный тип задач : Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите символ, который чаще всего встречается в файле между двумя одинаковыми символами. Например, в тексте CBCABABACCC есть комбинации CBC, ABA (два раза), BAB и CCC. Чаще всего — 3 раза — между двумя одинаковыми символами стоит B, в ответе для этого случая надо написать B. Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма. Самого файла с символами не знаю как прикрепить,но на сайте РешуЕгэ можно найти
Влад 24-03-2021 в 16:54:12

Буду благодарен за помощь )
Влад 24-03-2021 в 16:55:10



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:


Последние
видео:



Шифр Цезаря на C#
Алгоритм Евклида на C#





Давайте
дружить!


Группа Вконтакте Code-Enjoy

Твиттер Александра Калужского

YouTube канал Code-Enjoy