Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8"/>
- <script>
- document.write('<script src="../lib/head.js?'+Math.random()+'"></sc'+'ript>');
- </script>
- <title>Линейный шаблон по шагам.</title>
- </head>
- <body>
- <script>
- document.write('<script src="../lib/init.js?'+Math.random()+'"></sc'+'ript>');
- </script>
- <div class="otstup">
- <style>
- pre {
- margin:0.5em;
- border:2px solid gray;
- padding:0.5em;
- }
- li {
- line-height:146%;
- }
- </style>
- <h1 style="color:grey">
- <i>
- Примечание: С декабря 2014 года использование om, window.vopr и т.п. -- устаревший способ.</br>
- C 19.12.2014 возможно использование только NApi и NLib
- </i>
- </h1>
- <h2>
- Вопрос: а не поздно ли мы всё это делаем? ЕГЭ-то уже прошло.
- </h2>
- <p>
- Ответ: нет, не поздно. Банк заданий по математике относительно стабилен,
- можно с высокой долей уверенности ожидать, что в следующем году часть В или не изменится,
- или просто поменяет порядок заданий (как между 2013 и 2014).
- <br/>
- <i>
- По уточнённым данным, готовится деление на профильный и базовый уровень.
- Тренажёр по проекту профильному уровню доступен через меню "Предметы".
- </i>
- </p>
- <h2>
- Инструкция
- </h2>
- <i style="color:grey">
- Примечание: Инструкция не полностью переписана под текущие реалии (т.е. под NApi и NLib), т.к. и сами NApi/NLib ещё разрабатываються
- </i>
- <br/>
- <br/>
- <a target="_blank" href="../doc/api/index.html">
- Справка по NApi и NLib
- </a>
- <ol>
- <li>
- Переходим по адресу
- <a
- target="_blank"
- href="https://www.math.vsu.ru/chas-ege/sh/otladka.html"
- >оболочки отладки (откроется в новом окне)</a>
- </li>
- <li>
- Теперь попробуем выполнить какую-нибудь программу.
- В поле "Ввести программу" (кстати, его размер можно изменить, потянув за нижний правый угол!)
- введите, например:
- <pre>
- alert('Привет!');
- </pre>
- и нажмите кнопку "Составить задание по программе" под полем ввода.
- Задание как таковое не составится, но браузер выдаст сообщение "Привет!".
- <i>
- Грабли: если выскочило сообщение "Нужно указать путь к загружаемому файлу!",
- значит, Вы нажали не ту кнопку.
- Надо нажать ту, которая под, а не ту, которая над!
- </i>
- </li>
- <li>
- Дальнейшие действия проведём на примере
- <a href="http://mathege.ru/or/ege/ShowProblems.html?protoId=77339" target="_blank">прототипа №77339</a>
- <a target="_blank" href="http://mathege.ru">Открытого банка заданий</a> (далее для краткости - Обзад)
- </li>
- <li>
- Сначала вставим в поле ввода заготовку:
- <pre>
- (function(){'use strict';
- })();
- </pre>
- Это заголовок замыкания, он ничего не делает.
- Набирать текст нашего шаблона мы будем между первой и третьей строчками:
- <pre>
- (function(){'use strict';
- /*Вот здесь!*/
- })();
- </pre>
- </li>
- <li>
- То, что окружено парами символов /* и */ - комментарий,
- на комментарии компьютер не обращает никакого внимания.
- </li>
- <li>
- После этого и каждого из следующих шагов уже можно нажимать кнопку
- "Составить задание по программе" - будет виден результат.
- <br/>
- Итак, вставим в нашу заготовку текст вопроса:
- <pre>
- (function(){'use strict';
- window.vopr.txt='В среднем за день во время конференции расходуется 70 пакетиков чая. Конференция длится 4 дня. В пачке чая 100 пакетиков. Какого наименьшего количества пачек чая хватит на все дни конференции?';
- })();
- </pre>
- Выполняем.
- Появилась задача, но ответ на неё даже нельзя проверить.
- </li>
- <li>
- Теперь добавим ответ:
- <pre>
- (function(){'use strict';
- window.vopr.txt='В среднем за день во время конференции расходуется 70 пакетиков чая. Конференция длится 4 дня. В пачке чая 100 пакетиков. Какого наименьшего количества пачек чая хватит на все дни конференции?';
- window.vopr.ver=[3];
- })();
- </pre>
- Уже лучше: после того, как задание составлено, в поле "Ответ" можно ввести ответ (Кэп!),
- и тренажёр проверить его правильность.
- Потренируйтесь вводить ответ, если нужно :-)
- </li>
- <li>
- Строка с текстом вопроса не влезает в экран :-(
- Давайте разобьём её на несколько строк.
- На следующих шагах это нам прибавит удобства.
- <pre>
- (function(){'use strict';
- window.vopr.txt='В среднем за день во время конференции расходуется 70 пакетиков чая. '+
- 'Конференция длится 4 дня. В пачке чая 100 пакетиков. '+
- 'Какого наименьшего количества пачек чая хватит на все дни конференции?';
- window.vopr.ver=[3];
- })();
- </pre>
- Обратите внимание: знак + должен находиться на верхней строке (подобно переносу в словах),
- а слева перед каждой перенесённой частью строки делается отступ (например, 4 или 8 пробелов, но лучше - таб).
- Для программиста расставить отступы - это как помыть руки перед едой.
- </li>
- <li>
- Наш шаблон генерирует всё время одинаковые задания.
- Хотелось бы, чтобы что-то всё-таки менялось, ведь именно в этом -
- одно из ключевых преимуществ "Час ЕГЭ".
- Но сначала нам нужно описать, как мы получили ответ:
- <pre>
- (function(){'use strict';
- window.vopr.txt='В среднем за день во время конференции расходуется 70 пакетиков чая. '+
- 'Конференция длится 4 дня. В пачке чая 100 пакетиков. '+
- 'Какого наименьшего количества пачек чая хватит на все дни конференции?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- Запись (число).ceil() сообщает компьютеру, что число нужно округлить в большую сторону.
- Чтобы округлить число в меньшую сторону, напишите (число).floor() ,
- а чтобы по обычным правилам округления - используйте (число).round()
- </li>
- <li>
- Теперь давайте внесём в задачу обещанное разнообразие.
- Начнём с простого: сделаем так, чтобы иногда упоминался чай, а иногда - кофе.
- Сначала "выкусим" кавчками все упоминания чая:
- <pre>
- (function(){'use strict';
- window.vopr.txt='В среднем за день во время конференции расходуется 70 пакетиков '+'чая'+'. '+
- 'Конференция длится 4 дня. В пачке '+'чая'+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+'чая'+' хватит на все дни конференции?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- </li>
- <li>
- Теперь введём переменную napitka, в которую положим строку "чая".
- В Javascript все переменные объявляются с помощью слова var,
- а типов у переменных нет:
- <pre>
- (function(){'use strict';
- var napitka='чая';
- window.vopr.txt='В среднем за день во время конференции расходуется 70 пакетиков '+'чая'+'. '+
- 'Конференция длится 4 дня. В пачке '+'чая'+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+'чая'+' хватит на все дни конференции?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- </li>
- <li>
- Заменим теперь "выкушенные" строки 'чая' на переменную napitka:
- <pre>
- (function(){'use strict';
- var napitka='чая';
- window.vopr.txt='В среднем за день во время конференции расходуется 70 пакетиков '+napitka+'. '+
- 'Конференция длится 4 дня. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни конференции?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- Пока всё осталось как есть.
- Кофе появится на следующем шаге.
- </li>
- <li>
- (Отныне комментарии пишем прямо в коде - так принято):
- <pre>
- (function(){'use strict';
- //Кстати, если в строке стоит двойная дробь // - то всё, что идёт после этой дроби и до конца строки,
- //превращается в комментарий
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- window.vopr.txt='В среднем за день во время конференции расходуется 70 пакетиков '+napitka+'. '+
- 'Конференция длится 4 дня. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни конференции?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- Здесь запись ['чая','кофе'] - это массив строк,
- а функция iz() случайным образом выбирает элемент из массива.
- </li>
- <li>
- Попробуйте несколько раз составить задание.
- Имейте в виду: генератор случайных чисел "любит пошутить",
- иногда может пять раз выпасть "чай", на шестой - "кофе"
- (а вовсе не обязательно они строго чередуются).
- </li>
- <li>
- Теперь на примере конференции научимся работать с падежами.
- "Выкусывание" и введение переменной нам уже знакомы, так что смело пишем:
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=['конференция','мероприятие','слёт'].iz();
- window.vopr.txt='В среднем за день во время '+'конференции'+' расходуется 70 пакетиков '+napitka+'. '+
- 'Конференция'+' длится 4 дня. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+'конференции'+'?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- </li>
- <li>
- Но вот незадача - конференция упоминается в разных падежах, просто строку использовать нельзя!
- У нас в проекте за склонение существительных отвечает специальный модуль - лексический.
- В его создании, кстати, достаточно активно участвовала доброволец Любовь Ерышова.
- Как правило, там, где этот модуль вызывается, упоминается буквосочетание lx.
- Превратим переменную meropr в существительное, падежи которого составит лексический модуль:
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=['конференция','мероприятие','слёт'].iz();
- meropr=sklonlxkand(meropr);
- window.vopr.txt='В среднем за день во время '+'конференции'+' расходуется 70 пакетиков '+napitka+'. '+
- 'Конференция'+' длится 4 дня. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+'конференции'+'?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- </li>
- <li>
- Обычно пишут короче:
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- window.vopr.txt='В среднем за день во время '+'конференции'+' расходуется 70 пакетиков '+napitka+'. '+
- 'Конференция'+' длится 4 дня. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+'конференции'+'?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- </li>
- <li>
- Теперь включаем переменную meropr в вопрос:
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется 70 пакетиков '+napitka+'. '+
- meropr.ie+' длится 4 дня. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- Первая буква после точки - падеж, вторая - число (транслитом).
- Т. е. meropr.re - это родительный падеж единственного числа слова, содержащегося в переменной meropr,
- и предварительно подготовленного с помощью sklonlxkand (это важно!).
- </li>
- <li>
- Внимательный доброволец заметит, что наименование мероприятия во втором предложении начинается с маленькой буквы.
- Это не дело!
- Исправим с помощью функции toZagl()
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется 70 пакетиков '+napitka+'. '+
- meropr.ie.toZagl()+' длится 4 дня. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- Обратите внимание: мы последовательно применили взятие именительного падежа и "вставку" заглавной буквы:
- meropr.ie.toZagl()
- Такой код на жаргоне называют "лапшой".
- Порядок операций важен!
- </li>
- <li>
- Самостоятельно разнообразьте, например, пачки коробками и упаковками.
- Вообще, разнооборазие слов, не относящихся к решению задачи
- (будем называть их антуражем) и данных задачи целиком и полностью
- лежит на совести человека, который пишет шаблон.
- Но чем разнообразнее - тем обычно лучше, хотя всё хорошо в меру.
- Разнообразие, в частности, усложняет гугление учащимися условий задач.
- </li>
- <li>
- Теперь пора заняться числами!
- Всё-таки задача по математике, а не по русскому языку ;-)
- "Выкусывание" чисел нужно производить вместе с "привязанными" к ним существительными
- (для филологов: да знаю я термин "синтаксически неразрывное словосочетание", но так проще и понятнее!).
- Это связано с тем, что существительное изменяется вместе с числительным:
- один гриб, два гриба, пять грибов.
- Итак, будем варьировать количество дней.
- Сначала просто "выкусываем":
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется 70 пакетиков '+napitka+'. '+
- meropr.ie.toZagl()+' длится '+'4 дня'+'. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- </li>
- <li>
- Теперь запишем с помощью функции chislitlx(число, существительное):
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется 70 пакетиков '+napitka+'. '+
- meropr.ie.toZagl()+' длится '+chislitlx(4,'день')+'. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(70*4/100).ceil()];
- })();
- </pre>
- </li>
- <li>
- Теперь вносим собственно разнообразие.
- Для этого, как несложно догадаться, нам потребуется переменная.
- Назовём её dni, присвоим ей значение 4 и везде число 4 заменим на эту переменную
- (в вопросе и в ответе!)
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- var dni=4;
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется 70 пакетиков '+napitka+'. '+
- meropr.ie.toZagl()+' длится '+chislitlx(dni,'день')+'. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(70*dni/100).ceil()];
- })();
- </pre>
- </li>
- <li>
- И, наконец, сгенерируем случайное количество дней от 2 до 10 с помощью функции sluchch(от, до):
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- var dni=sluchch(2,10);
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется 70 пакетиков '+napitka+'. '+
- meropr.ie.toZagl()+' длится '+chislitlx(dni,'день')+'. В пачке '+napitka+' 100 пакетиков. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(70*dni/100).ceil()];
- })();
- </pre>
- Помните: выбор диапазона случайных значений доверяется автору шаблона!
- Сверяйтесь с Обзадом ;-)
- </li>
- <li>
- Проделаем теперь то же самое с пакетиками:
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- var dni=sluchch(2,10);
- var pak=sluchch(50,200);
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется 70 пакетиков '+napitka+'. '+
- meropr.ie.toZagl()+' длится '+chislitlx(dni,'день')+'. В пачке '+napitka+' '+chislitlx(pak,'пакетик')+'. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(70*dni/pak).ceil()];
- })();
- </pre>
- </li>
- <li>
- И всё бы хорошо, но вряд ли какой-нибудь производитель будет класть в пачку, например, 73 пакетика.
- Укажем функции sluchch шаг случайного числа
- (пользуясь случаем, говорю Алине Широковой спасибо за обнаруженный баг):
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- var dni=sluchch(2,10);
- var pak=sluchch(50,200,10);
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется 70 пакетиков '+napitka+'. '+
- meropr.ie.toZagl()+' длится '+chislitlx(dni,'день')+'. В пачке '+napitka+' '+chislitlx(pak,'пакетик')+'. '+
- 'Какого наименьшего количества пачек '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(70*dni/pak).ceil()];
- })();
- </pre>
- </li>
- <li>
- Самостоятельно проделайте то же самое с количеством пакетиков, расходуемых в день.
- </li>
- <li>
- С учётом предыдущего задания для самостоятельного решения должно получиться нечто вроде этого:
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- var up=sklonlxkand(['пачка','коробка','упаковка'].iz())
- var dni=sluchch(2,10);
- var pak=sluchch(50,200,10);
- var rash=sluchch(20,100);
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется '+chislitlx(rash,'пакетик')+' '+napitka+'. '+
- meropr.ie.toZagl()+' длится '+chislitlx(dni,'день')+'. В '+up.pe+' '+napitka+' '+chislitlx(pak,'пакетик')+'. '+
- 'Какого наименьшего количества '+up.rm+' '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(rash*dni/pak).ceil()];
- })();
- </pre>
- </li>
- <li>
- Теперь указываем источник шаблона и автора:
- <pre>
- (function(){'use strict';
- var napitka=['чая','кофе'].iz();//Вернёт случайным образом 'чая' или 'кофе'
- var meropr=sklonlxkand(['конференция','мероприятие','слёт'].iz());
- var up=sklonlxkand(['пачка','коробка','упаковка'].iz())
- var dni=sluchch(2,10);
- var pak=sluchch(50,200,10);
- var rash=sluchch(20,100);
- window.vopr.txt='В среднем за день во время '+meropr.re+' расходуется '+chislitlx(rash,'пакетик')+' '+napitka+'. '+
- meropr.ie.toZagl()+' длится '+chislitlx(dni,'день')+'. В '+up.pe+' '+napitka+' '+chislitlx(pak,'пакетик')+'. '+
- 'Какого наименьшего количества '+up.rm+' '+napitka+' хватит на все дни '+meropr.re+'?';
- window.vopr.ver=[(rash*dni/pak).ceil()];
- })();
- //Обзад 77339
- //NickKolok
- </pre>
- Можно подписаться реальным именем, можно ником.
- </li>
- <li>
- Нажимаем кнопку "Отправить на pastebin.ru" (предварительно можно ввести имя и название - по желанию).
- Откроется новая вкладка со страницей, содержащей Ваш код.
- Ссылку на полученную страницу из адресной строки браузера отправляем мне.
- </li>
- <li>
- Спасибо!
- </li>
- </ol>
- <h2>
- Приложение 1: работаем с $\TeX$
- </h2>
- $\TeX$ - это язык записи математических формул.
- (Если быть точным, то не только формул, но нам нужны именно они.)
- В "Час ЕГЭ" для поддержки $\TeX$ используется внешняя библиотека <a href="http://mathjax.org/">MathJax</a>.
- Из-за особенностей используемых технологий при работе с $\TeX$ нужно помнить следующее:
- <ul>
- <li>
- MathJax обрабатывает только формулы, окружённые знаками <span>$</span> или двойными <span>$$</span>.
- </li>
- <li>
- Дробь \ в Javascript-коде нужно экранировать, т. е. писать \\
- </li>
- <li>
- В Открытом банке заданий при копировании текста задания, содержащего формулы,
- вместо формул копируется их $\TeX$-код.
- Вам остаётся только заменить одинарную \ на двойную \\
- и окружить формулу знаками <span>$</span>.
- <a href="https://github.com/nickkolok/chas-ege/blob/master/zdn/mat2014/B8/2.js">Пример шаблона</a>
- </li>
- <li>
- <a href="https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A4%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D1%8B">Шпаргалка</a>
- по командам $\TeX$ .
- </li>
- </ul>
- </div>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement