Scientific journal
Modern high technologies
ISSN 1812-7320
"Перечень" ВАК
ИФ РИНЦ = 1,021

Наибольшие трудности среди учащихся при решении заданий Единого государственного экзамена по дисциплине "Информатика и информационно-коммуникационные технологии" вызывает часть "С". Во всех билетах этой части содержится четыре задания, первое из которых повышенного уровня сложности, а остальные три - высокого уровня сложности. Большинство этих заданий требуют самостоятельного написания программы (в некоторых случаях содержащих до пятидесяти строк программного кода). В литературе, касающейся подготовки к ЕГЭ, составление программ приводится весьма лаконично и, часто, школьникам достаточно трудно разобраться в приводимых программных конструкциях. В заданиях части "С" для пояснения и выработки у учащихся навыков самостоятельного написания программ очень эффективно использовать блок-схемы. В этой статье рассматривается технология решения одного типичного задания Единого государственного экзамена высокого уровня сложности, при этом пояснение дается с помощью блок-схемы.

Итак, приведем формулировку одного из заданий ЕГЭ по информатике 2009 года. На вход программе подаются сведения об учениках некоторой средней школы. В первой строке сообщается количество учеников N, каждая из следующих вводимых строк имеет следующий формат:

<Фамилия><Имя><Класс>,

где <Фамилия> - строка, содержащую не более 20 символов; <Имя> - строка содержащая не более 15 символов; <Класс> - год обучения (от 1 до 11) и заглавная буква (от "А" до "Я") без пробела. При этом <Фамилия> и <Имя>, а также <Имя> и <Класс> разделены одним пробелом. Пример входной строки выглядит так: Иванов Петр 10Б.

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

30

1 7 11

В рассматриваемой задаче информация о фамилиях и именах учащихся для анализа и вывода нам не требуется, и, следовательно, выделять память для хранения этой информации мы не будем. Основная трудность связана с тем, что из названия класса необходимо выделить только числовую часть (отбросить букву), которую далее следует перевести в числовой формат. Блок-схему алгоритма мы приведем в трех частях (начало, основная вычислительная составляющая и, завершающая часть, которая касается вывода данных). Соединение частей поясняется соответствующими пометками "Вход..." и "Выход". На рис. 1 представлено начало алгоритма.

Рис. 1

Для подсчета учеников в каждой параллели мы создали масcив с именем Mass, в элементы которого изначально занесли нули. После основной части алгоритма в элементах этого массива будут сформированы необходимые данные (число учащихся в параллелях). Так, в элементе Mass[1] будет размещаться число учеников в первой параллели, в элементе Mass[2] будет размещаться число учеников во второй параллели и т.д. Блок-схема этой основной составляющая алгоритма приведена на рис. 2.

Рис. 2.

В соответствии с рис. 2 последовательно считываются и анализируются N строк. Учитывая, что фамилия и имя для данной задачи интереса не представляет, то мы просто считываем символы до обнаружения двух пробелов, которые завершают фамилию и имя учащегося. Далее в оставшейся части строки нас интересуют одна или две цифры (в зависимости от номера параллели). При этом учитывается, что если цифр две, то вес первой цифры равен 10, а второй 1. В результате при выполнении каждого прохода цикла по J в определенный элемент массива  Mass добавляется единица, и после завершения фрагмента на рис. 2 мы получим заполненный необходимыми данными массив. Теперь осталось найти минимальное значение в массиве Mass и вывести номера соответствующих параллелей на экран. Это уже несложная техническая часть алгоритма, которая реализуется с помощью завершающего фрагмента, представленного на рис. 3.

На листинге 1 приведена программная реализация задачи на языке Паскаль. Этот язык программирования наиболее распространен в школах, поэтому в примере мы и выбрали его. Рассмотрению подобных заданий много внимания уделяется в книге [1], которую могу порекомендовать как педагогам, так и учащимся, собирающимся готовиться к ЕГЭ по информатике самостоятельно.

Рис. 3

Листинг 1. Извлечение информации о параллелях

program primer;

var

  Mass: array[1..11] of integer;

  N,J,I,Dl,Min,Paral,Ves:integer;

  S:string[3];

  C:char;

begin

  readln(N);

  for J:=1 to 11 do

    Mass[J]:=0;

  for J:=1 to N do

   begin

      repeat

         read(C);

      until C=´ ´;

     { Считана фамилия }

      repeat

         read(C);

      until C=´ ´;

     { Считано имя }

      read(S);

     { Извлечена оставшаяся часть строки }

      Dl:=Length(S);

      Paral:=0;

      Ves:=1;

      for I:=Dl-1 downto 1 do

        begin

         Paral:=Paral+ (Ord(S[I])-Ord(´0´))*Ves;

          Ves:=Ves*10;

        end;

      Mass[Paral]:= Mass[Paral]+1;

   end;

   Min:=Mass[1];

   for J:=2 to 11 do

     if Mass[J] < Min then

          Min:= Mass[J];

   writeln(Min);

   for J:=1 to 11 do

      if Mass[J]=Min then

          write(J,´ ´);

end.

В программе на листинге 1 мы воспользовались типовыми операторами и стандартными функциями. Основная трудность программы заключается в преобразовании текстовой информации в числовую. Это необходимо для того, чтобы выбрать соответствующий элемент массива Mass. Для решения данной проблемы мы воспользовались функцией Ord, которая выдает в качестве своего значения код символа задаваемого в качестве параметра. Учитывая, что коды цифр располагаются последовательно и плотно, то программная конструкция

Ord(S[I])-Ord(´0´)

приводит к формированию одной цифры в номере параллели. Если номер параллели состоит из двух цифр, то первая цифра умножается на 10 (вес цифры разряда десятков в десятичной системе счисления).

В целом по итогам статьи, можно предложить две рекомендации. Во-первых, следует посоветовать педагогам активнее использовать блок-схемы для задач части "С" ЕГЭ по информатике. А, во-вторых, порекомендовать книгу [1], где с использованием блок-схем приводится большое количество подобных программных разработок.

СПИСОК ЛИТЕРАТУРЫ

1. Кашаев С.М. Шерстнева Л.В. Самостоятельная подготовка к ЕГЭ по информатике. Необходимая теория и достаточная практика. -  СПб.: БХВ-Петербург, 2009.

2. Сафронов И.К. Готовимся к ЕГЭ. Информатика. - 2-е изд. перераб. и доп. -  СПб.: БХВ-Петербург, 2009.

3. Ушаков Д.М., Юркова Т.А. Паскаль для школьников. - СПб.:Питер, 2008.