03.11.2014 Views

Выпуск 5 - Российский государственный профессионально ...

Выпуск 5 - Российский государственный профессионально ...

Выпуск 5 - Российский государственный профессионально ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

d := (d + 1) mod 7;<br />

end<br />

end;<br />

writeln('black friday<br />

in XX century = ', black);<br />

end.<br />

Замечание 1. Такое решение ученики 9–11-х классов<br />

воспринимают с трудом. Но если методически правильно<br />

выстроить систему заданий, то задачи подобного типа<br />

школьники смогут решать или по крайней мере смогут по<br />

тексту программы понять, как решается задача.<br />

В чем трудность приведенного решения? Что<br />

смущает, останавливает школьников при разборе<br />

такого способа решения?<br />

1) отсутствие навыков работы с операцией mod;<br />

непонимание сути этой операции;<br />

2) построение формулы перехода от 13-го числа<br />

одного месяца к 13-му числу следующего месяца;<br />

формула, реализованная через оператор case, дает<br />

сразу день недели, на который приходится 13-е число<br />

(связка “день недели — день месяца” многих путает).<br />

Ставим перед собой две методических цели:<br />

• в принципе научить школьников решать подобные<br />

задачи;<br />

• научить школьников использовать операцию<br />

mod так, чтобы построить эффективный алгоритм.<br />

Будем использовать методический прием, который<br />

схематично можно изобразить так:<br />

через массивы<br />

к операции mod<br />

Необычность методического приема состоит в<br />

том, что мы вроде бы через сложные типы данных<br />

(массивы) приходим к использованию “простых”<br />

операций. Но для достижения поставленных целей<br />

хороши любые (законные ☺) методы.<br />

В итоге, для того чтобы научить школьников писать<br />

и, как минимум, читать такие программы, мы<br />

разработали следующую систему задач:<br />

Задача 2. Подсчитать число пятниц, приходящихся<br />

на 13-е числа в 2012 году, если известно, что<br />

1 января 2012 года было воскресенье.<br />

Задача 3. Посчитать, сколько раз в XXI веке<br />

23 февраля приходится на воскресенье. Известно,<br />

что 1 января 2001 года — понедельник.<br />

Задача 4. Посчитать, сколько раз в XXI веке<br />

8 марта приходится на воскресенье. Известно, что<br />

1 января 2001 года — понедельник.<br />

Задача 5. Посчитать, сколько раз в XXI веке<br />

8 марта приходится на будний день. Известно, что<br />

1 января 2001 года — понедельник.<br />

Задача 6. Посчитать, сколько раз в XXI веке<br />

23 февраля приходится на будний день. Известно,<br />

что 1 января 2001 года — понедельник.<br />

Задача 7. Посчитать, сколько раз в 2012 году месяц<br />

начинался с воскресенья (понедельника, вторника,<br />

среды и т.д.). Известно, что 1 января 2012<br />

года пришлось на воскресенье.<br />

Задача 8. Посчитать, в каком году — в 2012-м<br />

или 2013-м — больше месяцев, которые начинаются<br />

с воскресенья (понедельника, вторника,<br />

среды и т.д.). Известно, что 1 января 2012 года —<br />

воскресенье.<br />

Для достижения поставленных целей предлагается<br />

следующий порядок действий:<br />

• сначала решаем Задачу 2 с использованием<br />

массивов;<br />

• затем решаем задачи 3, 4, 5, 6; показываем, что<br />

можно и целесообразнее обойтись без использования<br />

массивов;<br />

• решаем Задачу 1 без массивов.<br />

Подсчет “черных пятниц” с использованием<br />

массивов<br />

Задача 2. Подсчитать число пятниц, приходящихся<br />

на 13-е числа в 2012 году, если известно, что<br />

1 января 2012 года было воскресенье.<br />

Решение с использованием массивов. Задачи, аналогичные<br />

Задаче 2, мы предлагаем школьникам в<br />

теме “Обработка массивов”. Известно, что школьники<br />

практически всегда пытаются решить задачу теми<br />

способами, которые рассматривались на ближайших<br />

уроках. Плохо это или хорошо — это вопрос отдельного<br />

рассмотрения. Мы это примем как факт.<br />

После того как задача предложена школьникам<br />

и они некоторое время подумают над ее решением,<br />

мы приступаем к обсуждению алгоритма. Если<br />

систематизировать высказывания ребят, то общий<br />

алгоритм таков: каким-то способом сделать электронный<br />

календарь на весь год и смотреть, на какие<br />

дни недели приходится очередная пятница.<br />

В результате уточнения получается следующий<br />

укрупненный алгоритм:<br />

1) в отдельном массиве Days будем хранить очередной<br />

месяц года следующим образом: в элементе<br />

Days[i], соответствующем i-му дню месяца, будем<br />

хранить номер дня недели (1 — понедельник, 2 —<br />

вторник и т.д.), на который этот день приходится.<br />

Практически полный аналог календаря;<br />

2) если в Days[13] находится число “5”, то это<br />

“черная пятница”, и мы увеличиваем счетчик “черных<br />

пятниц” на единицу;<br />

3) действия 1 и 2 выполняем для всех месяцев<br />

года.<br />

Школьники уточняют, что программа “должна<br />

знать”, сколько дней в каком месяце.<br />

Так как мы учим школьников выполнять декомпозицию<br />

задачи и писать программу способом “достраивания”<br />

необходимых блоков к уже работающей<br />

программе, то в результате обсуждения получаем<br />

следующее деление на блоки:<br />

1) ввода данных в программе нет;<br />

2) определяем количество дней в очередном месяце;<br />

3) заполняем очередной “лист календаря” (массив<br />

days);<br />

4) распечатываем заполненный “лист календаря”;<br />

5) выполняем подсчет “черных пятниц”;<br />

6) действия 2–5 повторяем для всех 12 месяцев.<br />

25<br />

май 2012 / ИНФОРМАТИКА

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!