Олимпиады по информатике являются по сути своей олимпиадами по программированию. Как вы понимаете, хорошее знание школьного курса информатики абсолютно не гарантирует успешного выступления на олимпиадах. Соответственно, заниматься с учащимися необходимо во внеурочное время. Решение олимпиадных задач представляет собой вполне самостоятельный учебный раздел с обширными теоретической и практической частями.
Одним из важнейших показателей развития отечественного образования и работы с одаренными школьниками в стране являются результаты международных предметных олимпиад. Олимпиады являются одним из эффективных и проверенных на практике педагогических механизмов выявления и развития творческих способностей школьников, важной составляющей профильного обучения, обеспечивающей высокую мотивацию к образовательной и научной деятельности. Немаловажным является и то обстоятельство, что олимпиады стимулируют педагогов-наставников к повышению профессионального уровня и качества работы. Методика подготовки к интеллектуальным соревнованиям, содержание заданий, их типы, критерии оценки привлекают пристальное внимание и интерес не только участников олимпиады, но и ученых, педагогов, методистов, родителей учащихся.
Олимпиады по информатике постоянно совершенствуются как с точки зрения расширения и усложнения содержания олимпиадных задач, так и с точки зрения использования более совершенных технических средств и информационных технологий, определяющих условия их проведения.
Важную роль в подготовке играют олимпиадные задачи. Они строятся таким образом, чтобы как можно больше раскрыть творческий потенциал ребенка во время соревнований и помочь ему развивать свои способности в процессе подготовки к олимпиадам. Кроме того, баланс составляющих олимпиадной задачи учитывает возрастные особенности ребенка, определяющие зону ближайшего развития и горизонт развития школьника.
Этим требованиям в полной мере удовлетворяют многоуровневые олимпиадные задачи, которые составлены таким образом, чтобы в процессе их решения каждый школьник смог сделать для себя небольшое открытие и в полной мере раскрыть имеющийся у него творческий потенциал, независимо от класса обучения и уровня подготовки.
Поскольку олимпиадные задачи по информатике носят не традиционный характер, то и методика их проверки и оценивания также существенно отличается от методик, которые часто используются на олимпиадах по другим предметам. Проверка решений участников осуществляется с использованием комплекта тестов, и они разрабатываются таким образом, чтобы можно было в максимальной степени оценить все возможные типы алгоритмов, которые могут быть использованы в решениях участников, и продифференцировать полученные участниками решения по степени их сложности, корректности и эффективности.
Ошибки, с которыми сталкиваются наши дети при выполнении олимпиадных заданий.
Первая ошибка. Если вы обращали внимание, очень часто бывает так, что ученик вроде как решил задачу на олимпиаде, прогнал по тестовым исходным данным, получил верный результат, а выставленный бал оказался невысоким. В чем дело? Если мы посмотрим в автоматизированной системе проверки олимпиадных заданий, увидим, что программа ученика прогоняется несколько раз с разными исходными данными. По одним строкам мы видим положительный результат, а по другим различные ошибки. В чем дело? А все дело в том, что при решении задачи не обратили внимание на диапазон исходных данных. В большинстве случаев дети уже привыкли оперировать определенными типами данных, например, когда речь идет о целочисленном типе данных они сразу, не задумываясь используют тип «integer». У переменной типа «integer» область допустимых значений от -32768 до 32767. А в олимпиадных задачах диапазон данных которые принимают те или иные переменные довольно велик. И получается, как только значение переменной выходит на диапазон допустимых значений система выдает ошибку и задача получает низкую оценку. Чтобы исключить эту ошибку необходимо внимательно прочитать условие задачи, обратить особое внимание на область значений, которые могут принимать исходные данные, после составления алгоритма решения задачи выявить возможные предельные значения вычисляемых переменных и на основе этих данных объявлять переменные в программе.
Вторая ошибка. При решение задач с большим количеством переборов, часто исполнение программы не укладывается во временные промежутки данные по условию задачи. С чем это связано?
Эта ошибка связано с нерациональной компоновкой программного кода. А также с использование ресурсоемких операций.
Например для того чтобы проверить является ли число X простым нам необходимо в цикле поделить это число на все числа от 2 до (X-1) (обозначим эти числа Y). И если в этом промежутке найдется число, на которое число X делится без остатка, то X не является простым.
Число операций деления можно на порядок сократить, если знать что для решения данной задачи достаточно проверить делимость числа X на числа от 2 до корень(Х).
Находить, делится ли X на У, нужно с помощью целочисленной операции mod. Вещественные операции (деление «/», frac, int) выполняются намного дольше.
Нужно прекращать проверять число на простоту, как только оно на что-то поделилось. Например, программа
isPrime := true;
for i := 2 to trunc(sqrt(x)) do
if x mod i = 0 then
isPrime := false;
работает намного дольше отведенного времени потому, что она делит на все числа до корня. И это при том, что каждое второе число четное, то есть то, что оно не простое, выясняется после первой же проверки.
Вычисление корня числа — довольно долгая операция, намного дольше, чем сравнение, сложение или mod. Поэтому для каждого числа от М до N корень нужно находить только один раз. Например, фрагмент программы
isPrime := true;
divisor.: = 2;
while (divisor <= trunc(sqrt(x))) and isPrime do begin
if х mod divisor = 0 then
isPrime := false;
divisor := divisor + 1;
end;
работает намного больше отведенного времени потому, что корень из числа вычисляется столько раз, сколько проверок условия цикла проводится. Это особенность циклов whilen repeat — условие вычисляется каждый раз заново.
Чтобы достичь нормального быстродействия, используя эти циклы, нужно вычислить корень заранее и занести в отдельную переменную, которую затем и использовать в условии цикла. В цикле же for границы вычисляются один раз — при входе в него. Поэтому для цикла for выражение trunc(sqrt(x)) не требуется хранить в отдельной переменной.
Если в исходном тексте программы написать директиву {$N+, Е -}, то все вещественные операции (извлечение корня, округление) будут выполняться значительно быстрее.
Например, программа
var
i. t : longint:
begin
for i := 1 to 2000000 do
t := trunc(sqrt(i));
end.
на Intel Celeron 400 с ключами по умолчанию работает 24,5 с, а с директивой {$N+,E-}-l,3c.
Третья ошибка, которую часто допускают ученики – это способ ввода исходных данных и вывода результатов. В олимпиадных задания предусмотрен ввод/вывод из текстового файла. А ученики зачастую используют консольный ввод/вывод данных (клавиатура/монитор). Т.е. участник олимпиады должен уметь работать с файлами данных.
Наиболее простой способ организации работы с файлами, указанными в условии задачи, следующий: сразу после begin в главной программе нужно написать:
assign(input,'filename.in');
reset(input);
assign(output,'filename.out');
rewrite(output);
где filename - название файлов задачи. После этого можно вводить данные из файла так, как вы вводили бы их с клавиатуры, и писать в файлы так, как вы писали бы на экран (не указывая в качестве первого параметра процедур read и write файловую переменную). Чтение из входного файла значения переменной х — просто rеаd(х),запись значения переменной у в выходной файл – просто write(y), проверка конца строки входного файла — просто eoln.
Задания для проведения олимпиад по информатике и подготовки к ним ищите в высыпающемся меню.
Частные мастера Частные Мастера-Плиточники
Ванная под ключ - https://plitochniki.com.ua
Правильное создание сайтов в Киеве https://atempl.com/r/