Хранение,
поиск и сортировка информации в базах данных
Успешное
решение заданий по этой теме обусловлено знании
ем принципов организации табличных
(реляционных) баз данных,
владением понятиями «таблица», «запись таблицы», «поле
записи», «значение поля». Важно понимать, что
каждая, строка таблицы базы данных (БД) представляет собой
целостный объект,
объединяющий элементы с разными, как правило, типами
данных —
запись, с которым можно производить действия путем
запросов к БД. Нужно отличать общие для всех записей таблицы
наименования полей от их значений в отдельных записях.
Основными операциями, встречающимися в заданиях этой
темы,
являются отбор (поиск) записей по некоторым условиям и их
сортировка.
Пример (№ 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 требуется
написать программу для решения
определенной
задачи. Поскольку подробное изложение методики
написания учебных программ выходит за рамки данного пособия,
дадим лишь некоторые рекомендации.
Перед тем как приступать к
написанию программного кода,
необходимо спроектировать программу, т.е.
осознать постановку
задачи и разработать алгоритм решения без
привязки к конкретному
языку программирования. Разработанный алгоритм желательно
зафиксировать в виде схемы или словесного описания.
В процессе написания
программы следует активно использовать
комментарии для пояснения существенных моментов алгоритма,
это помогает при самопроверке и внесении исправлений
в текст.
Кроме того, это способствует эффективности экспертной
проверки.
Текст программы (да и всех
ответов на задания части С) следует стараться писать как
можно разборчивее и аккуратнее, проявляя,
тем самым, уважение к труду экспертов.