Универсальный генератор задач Math-o-Gen
Приложение 2 к странице «Упражнения и задачи»
Краткое описание
С практической точки зрения, Math-o-Gen — это большая коллекция файлов-генераторов, предназначенных для автоматического создания сборников типовых упражнений по математике (и, как оказалось, не только по математике, но и по грамматике русского, немецкого, французского и английского языков). К упражнениям на отдельных страницах прилагаются ответы. Каждый файл-генератор имеет расширение .dot и представляет собой, фактически, шаблон документа редактора Microsoft Word. Все эти файлы объединяет то, что они содержат один и тот же макрос под названием Mathogen, который, собственно, и осуществляет автоматическую генерацию упражнений и который вызывается нажатием комбинации клавиш <Ctrl>+<Alt>+0.
Подробная инструкция по генерации задач в редакторе Word
1. Старые версии MS Word (2000, 2003): В редакторе MS Word перейти в раздел меню
Сервис/Макрос/Безопасность
и выбрать уровень безопасности «средняя», после чего выйти из редактора.
В новых версиях (2007, 2010) ничего такого делать не нужно: требуемый уровень безопасности уже установлен по умолчанию — макросы при открытии файлов отключены, но есть возможность их активировать.
Замечание. Если, однако, впоследствии выяснится, что при попытке вызвать макрос появляется сообщение: «Макросы деактивированы» («The macros in this project are disabled»), то придется вернуться к этому пункту и проделать следующее. В основном окне редактора Word открыть слева вверху вкладку с символом Microsoft Office (версия 2007) или вкладку «Файл» (2010). В окрывшемся окне выбрать пункт «Параметры» (слева почти в самом низу). Далее в списке слева выбрать нижний пункт «Центр управления безопасностью». Нажать справа внизу кнопку «Параметры центра управления безопасностью». В списке слева выбрать «Параметры макросов». В списке справа выбрать пункт «Отключить все макросы с уведомлением». После чего нажать «OK» и выйти из редактора.
2. С помощью двойного щелчка мыши открыть в редакторе Word подходящий файл-генератор, например, вот этот:
1op-01.mg.dot.
При этом фактически открывается не сам файл-генератор (который представляет собой шаблон документа Word), а новый файл на его основе. Файл-генератор можно предварительно скачать на компьютер, но можно открыть и непосредственно в браузере (щелкнув по ссылке левой кнопкой мыши и выбрав «Открыть в Microsoft Word»). На появляющиеся предупреждения о том, что файл содержит потенциальную опасность, так как скачан из интернета и содержит макросы, отвечать в том смысле, что редактирование файла разрешено и макросы должны быть активированы (конкретная форма предупреждений зависит от версии редактора Word).
3. Нажать комбинацию клавиш <Ctrl>+<Alt>+0; при этом вызывается макрос Mathogen, который создает новый файл, записывает туда условие сгенерированных задач и — на отдельной странице — ответы к ним. Для генерации новой порции задач нажать клавиши <Ctrl>+<Alt>+0 повторно (при этом новый файл уже не создается). Количество задач, генерируемых за один раз, задается в настройках (см. ниже). Для удаления последней сгенерированной задачи предусмотрен макрос DeleteLast, вызываемый нажатием клавиш <Ctrl>+<Alt>+<Backspace>. По завершению работы вначале следует закрыть (и сохранить) файл со сгенерированными задачами, и только потом — файл с заготовками.
Примечание. Для генерации большого количества задач за один раз макросу требуется заметное время. При этом редактор Word может как бы зависнуть. Это зависание носит кажущийся и временный характер: оно проходит после того, как макрос завершает свою работу.
4. Только для старых версий (2000, 2003): Перед окончательным выходом из редактора Word перейти в раздел меню
Сервис/Макрос/Безопасность
и восстановить прежний уровень безопасности (рекомендуется «высокая»).
Примечание. Некоторые генераторы настроены на создание файлов в формате LaTeX. Генерация задач происходит обычным образом с помощью макроса Mathogen (<Ctrl>+<Alt>+0), но после того, как желаемое количество задач будет сгенерировано, следует напоследок вызвать еще один макрос — ToTeX (комбинация клавиш <Ctrl>+<Alt>+2). В результате будет создан полноценный tex-документ, который следует сохранить с расширением .tex как кодированный текст в кириллической кодировке, принятой в системе Windows. Перевести полученный tex-файл в pdf-формат можно, например, с помощью программного пакета MiKTeX.
Полная коллекция базовых файлов-генераторов
Помимо макроса Mathogen, каждый файл-генератор содержит заготовки задач — этакие «полуфабрикаты», на основе которых макрос генерирует полноценные условия задач — и иструкцию, в которой макросу на особом языке даются указания, что надо делать, чтобы из заготовки получить задачу. В этой инструкции, среди прочего, имеются параметры, изменяя которые пользователь может настроить файл-генератор под свои нужды: например, задать, будут ли в примерах по арифметике фигурировать однозначные или шестизначные числа.
Если читатель уже побывал на странице «Упражнения и задачи», то он знает, что там выставлены файлы-генераторы, каждый из которых заранее настроен на тот или иной уровень обучающегося. При этом два расположенных по соседству файла-генератора могут отличаться значением лишь одного-единственного настроечного параметра. Коллекция же файлов-генераторов, представленная ниже в этом подразделе, собрана совсем по другому принципу. Здесь каждый файл-генератор принципиально отличается от своих соседей по набору заготовок и сопроводительной инструкции. Эта коллекция представляет собой как бы минимальный базовый набор, на основе которого можно быстро, меняя лишь одну настройку параметров, получить любой другой файл-генератор семейства Math-o-gen. Эта коллекция будет полезна тем, кто захочет проводить настройку самостоятельно или же, вообще, писать собственные файлы-генераторы. О том, как это делается, написано ниже на этой странице.
Примеры на умножение и деление из таблицы умножения: mult-table.mg.dot
Простые примеры на сложение, вычитание, умножение и деление: 1op-00.mg.dot
Задачи в одно арифметическое действие, часть 1 (формальные): 1op-01.mg.dot
То же с параметрами: 1op-01p.mg.dot
Задачи в одно арифметическое действие, часть 2 (более жизненные): 1op-02.mg.dot
То же с параметрами: 1op-02p.mg.dot
Задачи в одно арифметическое действие, часть 3 (с возможным дополнительным прибавлением или вычитанием единицы): 1op-03.mg.dot
То же с параметрами: 1op-03p.mg.dot
Округление чисел и приближенные вычисления: round.mg.dot
Упражнения на быстрое нахождение арифметических ошибок: check.mg.dot
Простейшие упражнения на перевод единиц измерения: units-01.mg.dot
Простейшие упражнения на сложение, вычитание и сравнение цен и длин: units-op-01.mg.dot
Примеры в два-три действия, которые становятся особенно легкими при изменении порядка действий: operation-order.mg.dot
Раскрытие скобок в выражениях типа (a+b)+(c+d): brackets-01.mg.dot
Раскрытие скобок в выражениях типа (ab)(cd): brackets-02.mg.dot
Параллель между сложением-вычитанием и умножением-делением в упражнениях на раскрытие скобок: brackets-paral.mg.dot
Более сложные упражнения на раскрытие скобок и подстановки: brackets-uni.mg.dot
Раскрытие скобок в выражениях типа (a+b)(c+d): brackets-03.mg.dot
Примеры, состоящие из произвольного числа арифметических действий: N-operations.mg.dot
То же в формате LaTeX: N-operations.tex.mg.dot
Примеры в несколько действий с десятичными дробями: N-operations.frac.mg.dot
То же в формате LaTeX: N-operations.frac.tex.mg.dot
Примеры на приближенные вычисления в несколько действий с десятичными дробями: N-operations.round.mg.dot
То же в формате LaTeX: N-operations.round.tex.mg.dot
Простые задачи в несколько арифметических действий: problems-simple-01.mg.dot
То же с параметрами: problems-simple-01p.mg.dot
Уравнения первой степени: eq-01.mg.dot
То же с параметром: eq-01p.mg.dot
Разложение чисел на простые множители: factorization.mg.dot
Арифметические операции с дробями: fractions.mg.dot
То же в формате LaTeX: fractions.tex.mg.dot
Упражнения на построение отрицаний: nego.mg.dot
То же с кванторами: nego-qu.mg.dot
Упражнения на доли и проценты: percents.mg.dot
Преобразование выражений, содержащих квадрат суммы, разности и т.п. square-of-sum.mg.doc
А также:
Английский язык: упражнения на спряжение неправильных глаголов и образование времен. Вариант 1: english-01.mg.dot
То же. Вариант 2: english-02.mg.dot
Немецкий язык: упражнения на спряжение сильных и неправильных глаголов и образование времен: deutsch.mg.dot
Французский язык: упражнения на спряжение глаголов и образование времен: fr.mg.dot
Русский язык: упражнения на склонение имен числительных, прилагательных и существительных: russ.mg.dot
Пустой файл с последней версией макроса (1.41):
mathogen.1-41.dot
Простейшее редактирование файла с заготовками
Каждая заготовка задачи занимает ровно один абзац, которому присвоен стиль Question. Эти абзацы образуют нумерованный список. Избавиться от ненужной заготовки можно следующими способами:
1. Полностью удалить соответствующий абзац.
2. Присвоить абзацу любой другой стиль, кроме Question.
3. Поставить в начале абзаца восклицательный знак «!» или сдвоенный восклицательный знак «!!» (разница в том, что одинарные начальные восклицательные знаки можно убрать специальным макросом RemoveExclam (см. ниже), а сдвоенные — только вручную).
Кроме того, в настройках (см. ниже) можно задать диапазон используемых задач.
Простейшая настройка
Параметры, задающие работу генератора, находятся в файле с заготовками и выделены синим цветом. (Для генератора важно, что все они находятся в одном абзаце стиля Options и отделены друг от друга либо символом «&», либо разрывом строки.)
Параметры {first} и {last} имеют следующий смысл. При генерации задач используются только те заготовки, номера которых находятся в диапазоне от {first} до {last}. Если эти параметры равны нулю, то используются все заготовки — от первой до последней (при условии, что им присвоен стиль Question и они не начинаются с символа «!»).
Параметр {packet} задает число задач, генерируемых за один раз.
Параметр {random} определяет порядок использования заготовок. Если {random} = 0, то заготовки задач берутся последовательно одна за другой в порядке возрастания их номеров. Если {random} = 1, то заготовки берутся в случайном порядке. Если {random} = 2, то заготовки также берутся в случайном порядке, однако использованная заготовка помечается символом «!», что исключает ее дальнейшее использование. Убрать все расставленные таким образом символы «!» можно с помощью макроса RemoveExclam, вызываемого комбинацией клавиш <Ctrl>+<Alt>+1. Этот макрос, однако, не трогает сдвоенный восклицательный знак «!!».
Параметр {qnum} предусмотрен для того, чтобы можно было установить, из какой конкретно заготовки была сгенерирована та или иная задача. Он может принимать значения 0 или 1. Если этот параметр задан явно и равен единице, то к ответам задач приписывается номер соответствующей заготовки в квадратных скобках.
Параметр {title} позволяет задавать текст, который будет напечатан в верхнем колонтитуле наряду с номером страницы.
Менять остальные параметры ({limit}, {info}, {reform}, {cap}, {before}, {after}) может понадобиться только при написании своих собственных заготовок. О них речь пойдет ниже.
«Синие» параметры имеют одинаковый предопределенный смысл для всех файлов-генераторов. Помимо этого в файле-генераторе могут присутствовать еще «красные» параметры (т.е. те, которые выделены красным цветом). Они специфичны для данного файла и обычно снабжены комментарием, поясняющим их смысл.
Этих сведений, собственно, совершенно достаточно для работы с существующими заготовками. Дальнейшее описание предназначено для тех, кто хочет создавать свои собственные заготовки.
Общий принцип работы генератора и структура файла с заготовками
Всякая заготовка состоит из трех частей, отделенных друг от друга символом «|». В первой части находится программа, написанная на специальном языке Math-o-Gen, в которой задается, как надлежит обрабатывать дальнейший текст. Во второй части содержится заготовка условия задачи. В третьей — заготовка ответа. Например:
A = 5 & B = 10 & C = A + B | Сколько будет A плюс B? | A + B = C.
В программе определяются переменные (в данном примере это A, B и C) и задаются их значения (соответственно 5, 10 и 15). Как только в тексте условия или ответа встретится заданная переменная, она будет автоматически заменена генератором на свое значение. В данном примере условие примет вид:
Сколько будет 5 плюс 10?
— а ответ:
5 + 10 = 15.
В реальности, программа может быть значительно сложнее и осмысленнее. В этом случае ее удобно вынести (полностью или частично) в отдельный абзац, предшествующий заготовке задачи. Этот абзац должен иметь стиль Definitions (его можно отличить по начальной жирной точке). Генератор просматривает все абзацы указанного стиля от начала файла до данной заготовки и составляет программу из первого такого абзаца и последнего. После этого он подстыковывает третью часть программы непосредственно из заготовки.
На практике это может выглядеть следующим образом. В начале файла имеется длинный абзац стиля Definitions, в котором написан большой кусок программы, общий для всех последующих заготовок. Заготовки могут быть разбиты на группы, и каждой такой группе предшествует свой абзац стиля Definitions с куском программы, общим для этой группы. Последний кусок программы, специфичный для данной конкретной заготовки, находится в самой заготовке.
Язык Math-o-Gen
Программы написаны на особом языке и состоят из последовательности команд. Команды отделены друг от друга символом «&» или разрывом строки. Каждая команда имеет вид равенства. Слева от знака «=» находится имя переменной, а справа — задается ее значение. Например:
{Первое слагаемое} = 10
Если на месте команды стоит последовательность символов, не содержащая знака равенства, то такая последовательность игнорируется. Также игнорируется команда, начинающаяся с символа «!». Имя переменной может содержать любые символы, кроме «&» и «=». В том числе разрешены внутренние пробелы (если же пробелы предшествуют имени переменной или следуют за ним, то они игнорируются). По сути, команды задают правила контекстной замены при обработке текста заготовки. Генератор ищет в тексте последовательность символов, определенную как имя переменной, и заменяет ее на соответствующее значение. Порядок замены таков, что первой заменяется та переменная, которая была определена последней.
Ключевым моментом является то, что генератор преобразует правую часть равенства по определенным правилам, прежде чем она становится значением переменной. Рассмотрим, например, такую программу:
{Делимое} = 120
{Частное} = {Делимое} / 3
Если в тексте заготовки встретится последовательность символов «{Частное}», то она будет заменена не на последовательность «{Делимое} / 3», а на последовательность «40». Правила преобразования значений таковы. Во-первых, происходит замена ранее определенных переменных на их значение. Так, во второй строке примера, переменная «{Делимое}» будет заменена на «120», и последовательность символов справа от знака равенства превратится в «120 / 3». Далее, выполняются арифметические и другие операции (в результате чего переменной «{Частное}» присвоится значение «40»).
Генератор распознает следующие операции
1. a + b (сумма чисел a и b).
2. a − b (разность чисел a и b).
3. a * b (произведение чисел a и b).
4. a / b (частное чисел a и b).
5. a : b (частное чисел a и b с отброшенной дробной частью).
6. a % b (остаток от деления чисел a и b).
7. a ^ b (число a в степени b).
8. a < b (= 1, если число a меньше числа b; = 0 в противном случае).
9. a > b (= 1, если число a больше числа b; = 0 в противном случае).
10. a = b (= 1, если число a равно числу b; = 0 в противном случае).
11. a [to] b (случайное целое число в диапазоне от числа a до числа b).
12. a [and] b (= 1, если оба числа a и b отличны от 0; = 0 в противном случае).
13. a [or] b (= 1, если хотя бы одно из чисел a и b отлично от 0; = 0 в противном случае).
14. [not] a (= 1, если число a равно 0; = 0 в противном случае).
15. a [round] n (число а, округленное до разряда n, где n — целое число; причем значению n = 0 соответствует разряд единиц, значению n = 1 — разряд десятков, значению n = -1 — разряд десятых и т.д.).
16. [ord] a (порядок величины числа a, т.е. целое число m в стандартном представлении a = b·10m, где 1 ≤ b < 10).
17. n [sgf] a (сигнификанд числа а, округленный до n значащих цифр, т.е. число b в стандартном представлении a = b·10m, где 1 ≤ b < 10, а m — целое число (неокругленный сигнификанд всегда меньше 10, однако не исключено, что в результате округления он окажется равен 10)).
18. [case] a (= 1, если по правилам русской грамматики после числа a существительное употребляется в именительном числе единственного числа (например, 21 жираф); = 2, если существительное употребляется в родительном падеже единственного числа (22 жирафа); = 3, если существительное употребляется в родительном падеже множественного числа (25 жирафов)).
19. t [eq] s (= 1, если последовательность символов t совпадает с последовательностью символов s; = 0 в противном случае).
20. [count] s1, s2, ... , sn (число элементов в перечне, где разделительным знаком служит запятая).
21. k [of] s1, s2, ... , sn (k-ый элемент перечня, в котором разделительным знаком служит запятая; если k = 0, то последний элемент).
22. \old\new\ [subst] s (последовательность символов s, в которой произведена замена всех подпоследовательностей old на new (вместо «\» в качестве разделителя может быть использован любой другой символ, не являющийся оператором)).
23. k, t [put] s1, s2, ... , sn (перечень s1, s2, ... , sn, в котором k-ый элемент заменен на t).
24. a [log] b (логарифм числа b по основанию a; если a отсутствует, то натуральный логарифм).
Важные уточнения
1. Допустимы сложные выражения, содержащие несколько операций. При этом порядок их выполнения всегда должен быть задан явно с помощью скобок. Сложные выражения без скобок, типа 5*2+1, приводят к непредсказуемым результатам. Кроме того, в скобки должны заключаться выражения, которые являются частью какого-то более широкого контекста. Например:
{Утверждение} = Сумма чисел 1 и 2 равна (1 + 2).
В данном случае переменной {Утверждение} присвоится значение «сумма чисел 1 и 2 равна 3». Если же скобки опустить:
{Утверждение} = Сумма чисел 1 и 2 равна 1 + 2.
— то вся последовательность символов, предшествующая знаку «+» (именно: «Сумма чисел 1 и 2 равна 1») будет трактоваться как первое слагаемое в операции сложения, что приведет к нежелательным последствиям.
2. Одна и та же переменная может быть переопределена несколько раз. Например:
a = 10
a = 2 * a
В результате этих двух команд переменной a будет присвоено значение «20».
3. Для операции вычитания используется не дефис, а типографский знак «минус» (Unicode U+2212). Для его ввода в среде Math-o-Gen предусмотрен специальный макрос Minus, вызываемый комбинацией клавиш <Ctrl>+<Alt>+-.
4. Для ввода разрыва строки можно воспользоваться комбинацией клавиш <Shift>+<Enter> (заданной в стандартных установках редактора Word) или <Ctrl>+<Alt>+<Enter> (заданной в среде Math-o-Gen). В среде Math-o-Gen имеется также макрос Tabulator (<Ctrl>+<Alt>+W) для ввода символа табуляции, поскольку простое нажатие клавиши Tab в редакторе Word далеко не всегда приводит к желаемым результатам.
5. Перед отрицательными числами в качестве знака «минус» ставится обычный дефис, вводимый с клавиатуры.
6. В десятичных дробях дробная часть должна отделяться не запятой, а точкой, как это принято в языках программирования.
7. Условные команды (т.е. такие, результат которых зависит от выполнения некоторого условия) записываются с помощью оператора [of]. Например:
n = 20 [to] 22 &! случайное целое число от 20 до 22
{n жирафов} = n (([case] n) [of] жираф, жирафа, жирафов)
В этом примере, если n = 20, то переменная «{n жирафов}» принимает значение «20 жирафов»; если n = 21, то значение «21 жираф»; если n = 22, то значение «22 жирафа». Другой пример:
a = 1 [to] 10 &! случайное целое число от 1 до 10
b = 1 [to] 10 &! случайное целое число от 1 до 10
{Справедливое утверждение} = (a > b) [of] a больше b, a меньше или равно b
Здесь значение переменной {Справедливое утверждение}, действительно, всегда окажется справедливым утверждением, независимо от конкретных значений a и b. Так, при a = 1 и b = 10, выражение (a > b) равно нулю, а значит из перечня, следующего за оператором [of], будет выбран последний элемент, т.е. «1 меньше или равно 10».
8. Последовательность выполнения команд может быть изменена с помощью специальной переменной {goto}. Значение, присвоенное этой переменной, задает место, откуда будет продолжено дальнейшее выполнение программы. Генератор поступает так: определив значение переменной {goto}, он заключает его в фигурные скобки и ищет полученную последовательность символов в тексте программы. Оттуда, где он ее найдет, он и возобновит свою работу. Если переменной {goto} присвоено пустое значение (последовательность символов длины нуль), то перехода в другое место не происходит. Например, если требуется сгенерировать два случайных числа, не равных друг другу, то это можно сделать так.
{start} &! метка, куда вернемся, если числа окажутся одинаковы
a = 1 [to] 10 &! первое случайное число от 1 до 10
b = 1 [to] 10 &! второе случайное число от 1 до 10
{goto} = (a = b) [of] start,
В этом примере, если a окажется равно b, то переменной {goto} присвоится значение «start», после чего генератор вернется к метке «{start}». Если же a будет отлично от b, то переменной {goto} будет присвоено пустое значение (то, что стоит после запятой) и выполнение программы просто продолжится дальше.
9. Бывают случаи, когда желательно, чтобы значением переменной стала именно та последовательность символов, которая буквально задана командой, без выполнения каких-либо операций. Это можно сделать, дописав в команде к знаку «=» дополнительный символ «>». Всё, что следует за этим символом (до концевого знака команды «&» или разрыва строки), будет буквально присвоено переменной, включая начальные и конечные пробелы. Замена таких переменных на их значения осуществляется только в тексте задач, причем делается это в самую последнюю очередь.
Например, мы хотим запрограммировать задачу, в которой спрашивается: какое число больше: a или b? Попытаемся сделать это следующим образом.
{больше или меньше} = (a > b) [of] >, <
| Что больше: a или b? | Ответ: a {больше или меньше} b.
Такая программа, однако, не будет работать правильно, потому что символы «>» и «<», стоящие после оператора [of], тоже будут проинтерпретированы как операторы. Чтобы этого не произошло, следует писать так:
{больше или меньше} = (a > b) [of] {больше}, {меньше}
{больше} =>>
{меньше} =><
| Что больше: a или b? | Ответ: a {больше или меньше} b.
10. Следующие переменные имеют заранее предопределенное значение.
[TAB]
|
<Знак табуляции>
|
[BR]
|
<Разрыв строки>
|
[AMP]
|
&
|
[PI]
|
3.14159265358979323846
|
[E]
|
2.71828182845904523536
|
11. Чтобы отличать переменные от обычных последовательностей символов, их рекомендуется заключать в фигурные скобки (или кавычки или что-либо подобное).
12. При формулировке задач часто случается, что слова, сопровождающие переменную, должны принимать разные формы в зависимости от численного значения этой переменной. Так, в соответствии с правилами русского языка, следует писать:
У Маши был 1 рубль.
У Маши было 2 рубля.
У Маши было 5 рублей.
В заготовках для таких изменяемых слов предусмотрен специальный синтаксис:
У Маши был##о#о# {переменная} рубл\ь\я\ей\.
Если изменяемое слово стоит после переменной, то варианты его написания отделяются друг от друга (и от остального текста) знаком «\», причем первый вариант соответствует значению переменной, равному 1, второй вариант — значению переменной, равному 2, и последний — значению переменной, равному 5. Для изменяемых слов, стоящих в тексте перед переменной, действует аналогичное правило, однако на этот раз в качестве разделительного знака используется символ «#». Знаки «#» и «\» могут быть переопределены в настройках с помощью «синих» параметров {before} и {after} (см. ниже).
Настройка (для разработчика заготовок)
Вернемся к «синим» параметрам, которые задаются в абзаце стиля Options.
Параметр {limit} задает максимальное количество команд, которое может быть выполнено генератором. (Такое ограничение предусмотрено на случай, если в результате неаккуратного использования переменной {goto} программа войдет в бесконечный цикл.)
Параметр {info} может принимать значения 0 и 1. Если {info} = 1, то генератор создает дополнительный файл, в котором выписывает результаты всех команд, выполненных генератором. (Это очень полезно при отладке программ, так как других средств «отлова» ошибок не предусмотрено.)
Параметр {reform}, равный по умолчанию нулю, задает число последующих абзацев, содержащих информацию о дополнительной контекстной замене, которую следует произвести в условиях и ответах задач в самую последнюю очередь. В отличие от прочих замен, определенных в программе обработки заготовок, эта замена позволяет менять форматирование текста: например, обычное написание можно изменить на курсивное, полужирное или написание в виде индекса. Допустим, у нас есть заготовка:
{a} = 1 [to] 10
{b} = -10 [to] 10
| Чему равно число, если его мантисса равна {a}, а порядок равен {b}?
| Ответ: {a}·10{b}.
Эта заготовка будет прекрасно работать, кроме тех случаев, когда параметр {b} оказывается равен нулю. В последнем случае мы получим в ответе нечто неизящное вроде 5·100. Избавиться от этой неприятности можно следующим образом. Перепишем заготовку в виде:
{a} = 1 [to] 10
{b} = -10 [to] 10
{c} = ({b} = 0) [of] {a}, {a}·10${b}$
| Чему равно число, если его мантисса равна {a}, а порядок равен {b}?
| Ответ: {c}.
Для того чтобы эта заготовка работала корректно, надо определить дополнительную замену, которая переводила бы запись типа «5·10$3$» в «5·103». Это делается как раз с помощью «синего» параметра {reform}. Мы пишем:
{reform} = 2
А в двух абзацах, непосредственно следующих на определением «синих» параметров, задаем две замены:
$*$=^&¶
$=¶
Здесь, как и раньше, заменяемое и заменяющее выражения отделяются друг от друга знаком равно «=». Первая замена переводит запись типа «5·10$3$» в «5·10$3$». Это делается по правилам, которые приняты в редакторе Word для замены текста с использованием так называемых регулярных выражений. Так, звездочка «*» символизирует любую ненулевую последовательность символов, а сочетание «^&» обозначает заменяемый текст. В данном случае заменяемый и заменяющий текст в точности совпадают друг с другом, однако заменяющий текст имеет особый формат — он набран в виде верхнего индекса. Вторая замена просто уничтожает символ «$».
Параметр {cap} может принимать значения 0, 1, 2 и 4. Если {cap} = 1 (и притом {reform} = 0), то последующий абзац копируется в начало файла со сгенерированными задами. В этом абзаце может быть, например, сформулировано общее условие для всех задач. Если {cap} = 2, то, в дополнение к этому, второй по следованию абзац копируется в начало раздела ответов. Значение {cap} = 4 используется при генерации файлов формата LaTeX (см. ниже).
Если параметры {reform} и {cap} одновременно не равны нулю, то в первую очередь следуют {reform}-абзацы, а во вторую — {cap}-абзацы.
Параметры {before} и {after} задают символы, разделяющие разные формы слов, стоящих при переменных-числах (см. пункт 12 предыдущего подраздела). Их значения по умолчанию равны {before} = # & {after} = \. Если этим параметрам присвоены пустые значения ({before} = & {after} =), то возможность выбора разных форм слов в зависимости от значения переменной дезактивируется.
Генерация задач в формате LaTeX
Условия и ответы генерируемых задач могут быть, разумеется, написаны в формате LaTeX, однако для генерации полноценного tex-файла следует иметь в виду следующее.
1. В «синих» настройках должно быть задано {cap} = 4. При этом абзац, непосредственно следующий за абзацем с «синими» настройками, должен содержать текст tex-файла от первой строки до списка условий (внутри абзаца следует пользоваться разрывами строк <Shift>+<Enter>). В последующем абзаце помещается текст tex-файла между списком условий и списком ответов. Третий по счету абзац содержит текст, предваряющий каждый пункт списка условий и списка ответов (например, \item). И, наконец, завершающие строки tex-файла находятся в четвертом абзаце.
2. Символ «\», имеющий в LaTeX'е особый смысл, не должен восприниматься генератором Math-o-gen как свой собственный специальный символ. Для этого его следует переопределить, используя «синий» параметр {after}. Надежнее всего присвоить ему пустое значение ({after} =).
3. Генерация задач происходит обычным образом с помощью макроса Mathogen (<Ctrl>+<Alt>+0), но после того, как желаемое количество задач будет сгенерировано, следует вызвать еще один макрос — ToTeX (комбинация клавиш <Ctrl>+<Alt>+2). В результате будет создан полноценный tex-документ, который следует сохранить как кодированный текст.
Нерешенные проблемы (Bugs)
Если после генерации задач попытаться закрыть файл-генератор прежде, чем файл со сгенерированными задачами, то в редакторе Word 2010 это приводит к сбою в работе программы с последующим аварийным выходом.
Условие распространения (лицензия)
Представленная здесь коллекция файлов-генераторов под общим названием Math-o-Gen предназначена для частного пользования и распространяется автором бесплатно в том виде, как есть, без предоставления каких бы то ни было гарантий. Модификация файлов-генераторов для последующего использования в личных целях разрешается и приветствуется. Однако распространение и коммерческое использование оригинальной или модифицированной версии файлов-генераторов (или его частей) возможны только по согласованию с автором.
30.11.2008, отредактировано 26.01.2014
Рассылка «Домашнее образование», выпуск 13
вы классные