Появившееся со времени введения в школьный курс предмета информатика в общем почти не претерпели изменений. Но появились достаточно специализированные вопросы использования, которые могут быть достаточно интересны для практики учителя.
Но прежде всего давайте остановимся на других вопросах, которые предшествуют проведению олимпиад.
Я даже возьму на себя смелость утверждать, что на сегодняшний день, олимпиады по информатике напоминают задачу "Буквоед" из известного пакета "Роботландия", изданную еще 12 лет назад. Напомню - Буквоед - это гипотетическое программируемое устройство, предназначенное для игры в "черные" ящики. Суть игры в следующем: в Буквоед закладывается программа, а цель игрока отгадать алгоритм ее работы.
В процессе игры можно:
проводить с Буквоедом опыты, т.е. подавать на вход данные и наблюдать результат их обработки;
анализировать заданный протокол работы с Буквоедом (дневник);
совмещать собственные опыты с анализом заданного дневника;
сдавать "экзамен", после которого Буквоед делает вывод о правильности гипотезы игрока;
(Фрагмент документации к пакету)
Прочитали?
А теперь посмотрим на типовую задачу из олимпиад по информатике.
XI краевая олимпиада школьников по информатикеКрасноярск, 9 января 1998 годаI тур
Задача 3. “АБРАКАДАБРА”
Последовательность из латинских букв строится следующим образом. Вначале она пуста. На каждом последующем шаге последовательность удваивается, после чего к ней слева дописывается очередная буква латинского алфавита (a, b, c, ...). Ниже приведены первые шаги построения последовательности:
Задача состоит в том, что по заданному числу N определить символ, который стоит на N-ом месте в последовательности, получившейся после 26-го шага.
Технические требования:
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT.
Ограничение времени: 20 секунд.
Формат входных данных
Во входном файле записано одно натуральное число N (1<=N<226).
Формат выходных данных
Запишите в выходной файл символ, стоящий в позиции N получившейся последовательности.
Пример файлов входных и выходных данных
INPUT.TXT
OUTPUT.TXT
4
w
Ну, а теперь давайте сравним!
Что получили? То-то же! Стандартный "черный ящик". Даже ничего доделывать не надо. Все похоже. Только способ решения более трудный. А в остальном все нормально.
Так почему учителя, которые с детьми изучали и данную программу, да и самим можно придумать множество соответствующих "черных ящиков". И кстати, с точки зрения методики даже никакой компьютер не нужен. Игра по сути бесконечна, также как и недавно увиденные мною художественные кляксы Роршаха (Психологи поспособствовали! Огромное им спасибо!). Вот и получается, что в "Буквоеда" мы играем с упоением, а перенести эту задачу на олимпиады по информатике мы уже не в состоянии?
А ведь ничего трудного здесь нет.
А теперь конкретика!
Несмотря на то, что за последние 8 лет правила проведения олимпиад не изменились, учителя готовящие детей к олимпиадам допускают вполне стандартные ошибки. Мне не хочется этого утверждать, но разница между так называемой строковой переменной и концом строки в файле не имеет ничего общего. В частности для школьных задач строкового типа данных вполне достаточно. Но не для олимпиад, да и вообще не для задач обработки любого вида информации. Например, все учителя информатики, да и просто пользователи работающие с Microsoft Office, уже я думаю привыкли к понятию "абзаца". Возьму смелость напомнить - любая последовательность символов, завершенная нажатием клавиши Enter. Вот так мы и получаем, что строка данных завершается двумя кодами (например в Windows) <CR><LF>. Причем почти все системы программирования достаточно умело используют это свойство.
Например - Есть текстовой файл input.txt данные в котором располагаются по следующему правилу: первая строка - количество чисел, вторая строка - сами числа. Можно предложить следующий файл данных:
15
1 2 3 4 5 6 7 8 -98 0 87 655 787 555 666
Рассмотрим фрагмент программы, позволяющий найти! (трудно придумать что-нибудь значимое), сумму этих чисел. Пример программы приведем на языке Pascal.
Program task1 (input.txt, output.txt); {Вот именно здесь мы ссылаемся на файлы!} Var Summa, A, I : Integer; Begin Readln (A); {А теперь читаем первую строку данных. } For I:=1 To A Do Begin Read(B); {А теперь по одному числу читаем данные из второй строки.}
{ И нам абсолютно не важно в каком виде записаны эти числа.
Пусть система делает все за нас!
Фактически минимальные знания систем программирования. }
Summa := Summa + B; End; End.
И кстати, нам не надо заботиться о выводе данных в файл. Уже в первой строке программы мы указали куда будет выводиться информация. Догадались?
Правильно, в файл с именем output.txt!
А теперь можно взять любую олимпиадную задачу и попробовать на ней этот простой фокус.
А ведь без использования данного приема решение этой задачи может превратиться в сущий ад. Вот здесь-то ребенку и потребуются специфические знания об особенностях систем программирования.
Чему мы учим...
Буквоед - это гипотетическое программируемое устройство, предназначенное для игры в "черные" ящики. Суть игры в следующем: в Буквоед закладывается программа, а цель игрока отгадать алгоритм ее работы.
В процессе игры можно:
Шаг 2. baa
Шаг 3. cbaabaa
Шаг 4. dcbaabaacbaabaa.
....................................................................
1 2 3 4 5 6 7 8 -98 0 87 655 787 555 666
Var Summa, A, I : Integer;
Begin
Readln (A); {А теперь читаем первую строку данных. }
For I:=1 To A Do
Begin
Read(B); {А теперь по одному числу читаем данные из второй строки.}
{ И нам абсолютно не важно в каком виде записаны эти числа.
Пусть система делает все за нас!
Фактически минимальные знания систем программирования. }
Summa := Summa + B;
End;
End.
И кстати, нам не надо заботиться о выводе данных в файл. Уже в первой строке программы мы указали куда будет выводиться информация. Догадались?
Правильно, в файл с именем output.txt!
А ведь без использования данного приема решение этой задачи может превратиться в сущий ад. Вот здесь-то ребенку и потребуются специфические знания об особенностях систем программирования.
Удалов Василий Аркадьевич