Разбор заданий
 
 

раздел I

информационные процессы и системы

 
 

~

 
 

раздел II

информационные технологии

 
 

~

 
  коммуникационные технологии  
 

  Хранение, поиск и сортировка информации в базах данных

   

    Успешное решение заданий по этой теме обусловлено знании ем принципов организации табличных (реляционных) баз данных, владением понятиями «таблица», «запись таблицы», «поле записи», «значение поля». Важно понимать, что каждая, строка таблицы базы данных (БД) представляет собой целостный объект, объединяющий элементы с разными, как правило, типами данных — запись, с которым можно производить действия путем запросов к БД. Нужно отличать общие для всех записей табли­цы наименования полей от их значений в отдельных записях. Основными операциями, встречающимися в заданиях этой темы, являются отбор (поиск) записей по некоторым условиям и их сортировка.

 

Пример (№ 1)

 

    Далее в табличной форме представлен фрагмент базы данных о результатах тестирования учащихся (используется стобалльная шкала): 

 

Фамилия

Пол

Мате­матика

Русский язык

Химия

Информатика

Биология

Аганян

ж

82

56

46

32

70

Воронин

м

43

62

45

74

23

Григорчук

м

54

 74

68

75

83

Роднина

ж

71

63

56

82

79

Сергеенко

Ж

33

25

74

38

46

Черепанова

ж

18

92

83

.28

61

 

    Сколько записей в данном фрагменте удовлетворяют условию «Пол='м' ИЛИ Химия > Биология»?

 

1)5

2)2

3)3

4)4

Решение:  Решая данную задачу, надо последовательно применять условие к каждой строке таблицы. Условию удовлетворяют учащиеся: Воронин, Григорчук, Сергеенко и Черепанова. У Аганян и Родниной не соответствует условию ни пол, ни соотношение баллов по химии и биологии.

Ответ: 4.

 

Телекоммуникационные технологии

 

    В этой теме можно выделить две наиболее актуальные компоненты — адресация и поиск информации в Интернете.

 

   Основные ошибки при выполнении заданий первой компоненты связаны с недостаточно глубоким пониманием частью учащихся правил адресации с использованием обычных уни­фицированных указателей ресурсов (URL Uniformed Resource Locator), иначе говоря, URL-адресов.

 

Пример (№ 2)

 

    Доступ к файлу uk.net, находящемуся на сервере org.de, осуществляется по протоколу ftp. В таблице фрагменты адреса фай­ла закодированы буквами от А до Ж. Запишите последователь­ность этих букв, кодирующую адрес указанного файла в сети Интернет.

 

 

А

Б

В

Г

Д

Е

Ж

org

uk

.de

.net

://

ftp

/

 

    Решение: Адрес ресурса начинается с названия протокола, в данном случае — это ftp (буква Е). Имя протокола должно отделяться от имени сервера двоеточием и двумя наклонными чертами (Д). Имя сервера — org.de кодируется буквами А и В. После имени сервера следует наклонная черта (Ж), отде­ляющая его от имени файла (Б,Г). Итак, полный путь к файлу: ftp://org.de/uk.net, соответствующая последовательность букв: ЕДАВЖБГ.

 

Ответ: ЕДАВЖБГ.

 

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

 

Пример (№ 3)

 

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

 

   Для обозначения логической операции "ИЛИ" в запросе используется символ |, а для логической операции "И" — &.

 

А

волейбол | баскетбол | подача

Б

волейбол | баскетбол | подача | блок

В

волейбол | баскетбол

Г

волейбол & баскетбол & подача

 

      Решение Способ 1:   Связка И между двумя словами в поисковом запросе означает, что требуется найти web-страницы, содержащие одновре­менно и первое, и второе слово. Связка ИЛИ — что ищутся стра­ницы, включающие хотя бы одно из указанных слов. Поэтому больше всего страниц будет найдено по запросу Б, так как в искомое множество страниц попадут все страницы, каждая из которых содержит хотя бы одно (любое) слово из поискового запроса.

 

    Меньше всего страниц будет найдено по запросу Г, поскольку он требует присутствия на искомой странице всех трех слов одновременно.

   

    По запросу А будет найдено больше страниц, чем по запросу В, из-за этого в результаты запроса А войдут страницы, со­держащие слово «подача», которые не попадут в результаты вы­полнения запроса В, если в них не будет слов «волейбол» и «ба­скетбол». Так, например, если на странице есть словосочетание «подача в теннисе», но нет ни слова про волейбол и баскетбол, то она будет найдена по запросам А и Б, но не будет найдена по запросам В и Г.

 

Ответ: ГВАБ.

   Решение Способ 2: Рассмотрим множества web-страниц, содержащие каждое из искомых слов. Запросу X&Y будет соответствовать пересечение множеств X и Y, а запросу X|Y — их объединение. Воспользуемся графическим представлением действий над множествами. Множество страниц, содержащих некоторое слово, будем обозна­чать эллипсом. Множество, получившееся в результате запроса будем закрашивать серым цветом. 

Диаграмма для запроса А будет выглядеть следующим образом: 

Диаграмма для запроса Б:

Диаграмма для запроса В:    

 

Диаграмма для запроса Г:

 

Получается, что результаты запроса возрастают в порядке ГВАБ.

Ответ: ГВАБ.

 

 

Технологии программирования

 

     Знания учащихся по технологии программирования в 2006 г. проверялись при помощи двух заданий с развернутым ответом. Одно задание повышенного уровня сложности (С1) предполагало поиск и устранение ошибок в фрагменте программы, другое (С4) предполагало самостоятельное написание программы для ренте ния оригинальной задачи (высокий уровень сложности). Средний первичный балл при выполнении задания на поиск ошибок составил в июне 1,44, в июле 0,56, при максимально возможном пер­вичном балле 3,0. Средний первичный балл при максимальном 4,.О за задачу на самостоятельное программирование составил в июне 0,47, в июле — 0,12. При этом совершенно не справились с выполнением задания на поиск ошибок (получили 0 баллов) в июне 25% экзаменуемых, в июле 49%. За задание на програм­мирование в июне 0 баллов получило 76% приступивших к вы­полнению этого задания, в июле — 71%. Доля приступивших к выполнению последней задачи от общего количества участников экзамена составила в июне 93,5%, в июле — 27,9%. При этом к выполнению заданий части С приступили в июле только 82,3% абитуриентов. Следует отметить, что приемные комиссии вузов указывают, что именно задачи на программирование являются для них определяющими при принятии решения о приеме аби­туриента на обучение. Высокая доля участников июньского экза­мена, приступивших к решению задач части С (93,5%), связана с тем, что их существенная часть пришла из профильных школ, где обучению программированию уделяется большое внимание.

 

    Учителя школ часто заявляют о недостатке времени на изучение программирования в школе. Вузы во многом интересуют только результаты выполнения заданий по этому разделу. Еди­ный государственный экзамен еще раз выявил разрыв в требова­ниях школ и вузов к результатам обучения в средней школе.

 

       Рассмотрим более подробно методику выполнения задания С1.

 

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

 

     Не стоит пытаться искать синтаксические ошибки, т.е. ошибки в написании служебных слов языка программирования или в расстановке разделительных знаков, а также ошибки вы полнения, которые могут возникнуть из-за конкретной машинной реализации языка (переполнение регистров при умножении и т.д.). Речь идет только об ошибках в логике алгоритма. Если не удается сразу их найти, то можно попробовать выполнить программу для различных исходных данных на черновике, при необходимости предварительно составив блок-схему программы. Создание блоксхемы позволяет абстрагироваться от конкретного языка програм­мирования и сосредоточиться на анализе алгоритма.

 

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

После исправления текста следует убедиться, что программа стала правильно работать на тех исходных данных, для которых она неправильно работала, и при этом не утратила способности правильно работать на тех данных, с которыми она верно работала и до внесения исправлений.

 

   При подборе тестовых исходных данных следует руководствоваться следующими правилами:

 

Обязательно следует рассматривать нулевые, граничные и прочие «критические» значения исходных данных (если такие значения могут иметь место).

 

     Тестовые данные должны включать такие комбинации исходных данных, чтобы обеспечивалось выполнение всех исполняе­мых операторов программы, в том числе ветвлений и циклов.

 

Пример (№ 4)

   Требовалось написать программу, которая решает неравенство «ах+b > 0 » относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Програм­мист торопился и неправильно написал программу.


 

Программа на Паскале

Программа на Бейсике

Программа на Си

var a,b,x: real;

begin

readln(a,b,x);

if a =0 then

write('любое число'

else

if a > 0 then

write('x > ',-b/a)

else

write('x:< ', -b/a);

end.

INPUT a, b, x

IF a =0 THEN

PRINT "любое число'

ELSE

IF a>0 THEN

PRINT "x>",-b/a

ELSE

PRINT "x<",-b/a

END

 

void main(void)

{ float a,b,x;

scanf("%f%f%f",&a,&b,&x); if (a=0)

printf(«любое число»); else

if (a>0) printf("x>%f",-b/a);

printf ("л; <%f ",-&/«); }

 


Последовательно выполните три задания:

 

1)  Приведите пример таких чисел а, b, х, при которых про­
грамма неверно решает поставленную задачу.

2)  Укажите, какая часть программы является липшей.

3)  Укажите, как надо доработать программу, чтобы не было
случаев ее неправильной работы. (Это можно сделать нескольки­
ми способами, поэтому можно указать любой способ доработки
исходной программы.)

 

Решение: Рассмотрим текст программы на языке Паскаль. Составим блок-схему этой программы.

 

 

   По созданной блок-схеме можно сделать следующие выводы о логических ошибках в программе:

 

   Ввод значения х является излишним, так как впоследствии х либо заново вычисляется, либо не используется, поскольку от­носится к выходным, а не входным данным.

 

    В случае а = 0 не анализируется знак переменной b, поэтому при любом неположительном значении b программа будет давать неверный ответ.

Один из вариантов доработки программы:

 

readln(a,b);

if a=0 then

if b>0 then

write( любое число')

else

write('нет решений')

else

if a > 0 then

write('x>', -b/a)

else

write('x<', -b/a);

 

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

 

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

 

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

 

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

    В процессе написания программы следует активно использовать комментарии для пояснения существенных моментов алго­ритма, это помогает при самопроверке и внесении исправлений в текст. Кроме того, это способствует эффективности экспертной проверки.

   Текст программы (да и всех ответов на задания части С) следует стараться писать как можно разборчивее и аккуратнее, про­являя, тем самым, уважение к труду экспертов.