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