рефераты
Главная

Рефераты по рекламе

Рефераты по физике

Рефераты по философии

Рефераты по финансам

Рефераты по химии

Рефераты по хозяйственному праву

Рефераты по цифровым устройствам

Рефераты по экологическому праву

Рефераты по экономико-математическому моделированию

Рефераты по экономической географии

Рефераты по экономической теории

Рефераты по этике

Рефераты по юриспруденции

Рефераты по языковедению

Рефераты по юридическим наукам

Рефераты по истории

Рефераты по компьютерным наукам

Рефераты по медицинским наукам

Рефераты по финансовым наукам

Рефераты по управленческим наукам

Психология и педагогика

Промышленность производство

Биология и химия

Языкознание филология

Издательское дело и полиграфия

Рефераты по краеведению и этнографии

Рефераты по религии и мифологии

Рефераты по медицине

Рефераты по сексологии

Рефераты по информатике программированию

Краткое содержание произведений

Реферат: Генерация дидактических материалов по математике

Реферат: Генерация дидактических материалов по математике

В те времена, когда я преподавал математику в школе (1990-1997), столкнулся с проблемой отсутствия достаточного количества дидактических материалов на печатной основе для проведения занятий. В частности, при проведении контрольных работ было лишь два варианта заданий, и, естественно, ученики списывали, что, с моей точки зрения, недопустимо. Тогда я стал придумывать варианты заданий и распечатывать их с помощью старенькой пишущей машинки. Сразу замечу, что занятие это рутинное, абсолютно не творческое и скучное — придумать 20-25 однотипных вариантов с разным содержанием. Тем не менее, один год я такое практиковал.

Когда в институте меня стали учить программированию, тут же возникла идея приспособить для создания дидактических материалов компьютер. Он для этих целей идеально подходил, поскольку позволял автоматизировать не только распечатку текста, но и сам процесс его разработки. Действительно, достаточно запрограммировать образец для одного задания, и согласно ему будет получено любое количество заданий. Но и здесь были свои проблемы, связанные с тем, что сгенерированный текст DOS приходилось затем "доводить до ума" (ставить верхние и нижние индексы, рисовать дроби и т.д.) с помощью текстового редактора типа ChiWriter или Lexicon, причем конечный продукт выглядел в результате достаточно нелепо и коряво.

Технология окончательно сформировалась в 1994 г., когда я познакомился с системой форматирования текстов LaTeX, позволяющей форматировать тексты, содержащие математические формулы любой сложности. Обычно в основу самостоятельной или контрольной работы закладываются уже существующие дидактические материалы к тому или иному школьному учебнику математики, и по этому образу и подобию готовится работа, где данные в каждом из вариантов различные. Таким образом складывается иллюзия наличия такого же количества вариантов, сколько учеников в классе.

Наличие отдельного напечатанного варианта при проведении контрольной или самостоятельной работы имеет ряд преимуществ перед отсутствием такового: во-первых, решается проблема списывания — каждый учащийся вынужден обрабатывать свои данные (правда, при этом можно в качестве образца использовать работу соседа, но это было и при традиционном проведении контрольной работы); во-вторых, нет необходимости перед началом урока втискивать текст контрольной работы на доску (очень не люблю писать на доске!); в-третьих, ни для кого не является секретом, что зрение большинства учащихся в настоящее время ослаблено, и им приходится подходить к доске или переспрашивать учителя для уточнения текста задания, при указанном подходе проблема снимается. Можно найти и другие достоинства, мною не отмеченные, я думаю... Есть и свои недостатки — учителю затем нужно проверить не 2 варианта, а 25-30. Не всякий при нынешней загруженности на это решится. Но при желании число существенно разных вариантов можно сократить до 5-10.

Продемонстрирую на паре-тройке примеров технологию подготовки текста в формате LaTeX.

Пример 1. Алгебраическое выражение.

Одно из наиболее часто встречающихся в 5-7 классах заданий — вычисление значения выражения. Генерируя такие выражения, нужно учитывать такие обстоятельства, как:

1) соответствие изучаемой теме и возрасту учащихся (например, в 5 классе значение выражения не должно быть равно отрицательному числу);

2) после выполнения очередного действия полученное значение должно получиться проще и приемлемым для выполнения следующего действия, где это значение используется (т.е. некоторые величины в выражении будут случайными, другие — вычисляемыми);

3) при записи десятичной дроби в школьной математике используется десятичная запятая, а при записи на компьютере — десятичная точка;

4) если в записи выражения используются десятичные дроби, то они должны быть несократимыми и правильными.

Учитывая приведенные выше соображения, покажем на примере следующего числового выражения получение его аналогов:

Генерация дидактических материалов по математике

Проанализируем данное выражение. Его значение равно 2,32 и получается как разность двух произведений. Таким образом, значение выражения — произвольное рациональное число, модуль которого не больше 10. Значение первого и второго произведений — десятичные дроби, это соответственно 2,62 и 0,3. При генерации произведений будем ориентироваться также на десятичные значения. В первом произведении первый сомножитель — сумма обыкновенных дробей с разными знаменателями, НОД которых отличен от 1, а второй сомножитель — число, которое можно сократить с общим знаменателем первого сомножителя. Второе произведение — произведение обыкновенной и десятичной дроби, которые нужно подобрать так, чтобы результат был точной десятичной дробью.

Приступим к генерации выражения. Пусть A=НОД(B,C), где B, C — знаменатели дробей суммы. Тогда B=A*B1, C=A*C1, где B1, C1 — случайные числа. D, F — числители рассматриваемых дробей, причем D<B, F<C. Целую часть первого слагаемого можно сгенерировать случайным образом. Второй сомножитель в первом произведении получаем так: K=НОК(B,C)*R/100, 1<R<10 — случайное число.

Аналогично получаем второй сомножитель. Не нужно забывать о том, что значение выражения по абсолютной величине не должно превышать 10.

Таким образом, выражение может быть получено с помощью следующего фрагмента программы:

 B1 := 1 + Random(9);

 C1 := 1 + Random(9);

 A := 2 + Random(4); {НОД знаменателей дробей суммы}

 B := A * B1;   {Знаменатель первой дроби}

 C := A * C1;   {Знаменатель второй дроби}

 D := 1 + Random(B — 2); {Числитель первой дроби}

 F := 1 + Random(C — 2); {Числитель второй дроби}

 K := Nod(D, B); {НОД чисел D, B}

 D := D Div K; {Сокращение первой дроби}

 B := B Div K;

 K := Nod(F, C); {НОД чисел F, C}

 F := F Div K; {Сокращение второй дроби}

 C := C Div K;

 K := B * C Div Nod(B, C) * (1 + Random(7)); {Второй сомножитель

                                              в первом произведении}

 Repeat

   Repeat

    M := 3 + Random(6); {Одно из чисел, на которое будет

                         производиться сокращение во втором произведении}

    Ch1 := M * (1 + Random(3)) {Числитель второй дроби}

   Until Odd(M) and Odd(Ch1);

    Zn := M * 5; {Знаменатель первого сомножителя во втором

                  произведении}

    SS := 2 + Random(4);

    Zn1 := Stepen(2, SS); {Знаменатель второго сомножителя -

                           случайная степень числа 2}

    Ch := Zn1 Div 2; {Числитель первой дроби}

 Until (Ch < Zn) And (Ch1 < Zn1); {Повторяем генерацию дробей,

                                   пока числители не станут

                                   меньше знаменателей}

 S := Nod(Ch, Zn);

 Ch := Ch Div S; {Сокращение дроби}

 Zn := Zn Div S;

 Ch1 := Ch1 * Stepen(10, SS); {Подготовка числителя

                               второй дроби к целочисленному

                               делению}

 {Печать результата генерации в файл Name}

 WriteLn(Ch1, ' ', Zn1);

 Write(Name, '$$left(', 1 + Random(3), 'frac{', D);

 Write(Name, '}{', B, '}+frac{', F, '}{', C, '}right)cdot');

 Write(Name, K Div 100, '{,}', K Mod 100, '-frac{', Ch);

 WriteLn(Name, '}{', Zn, '}cdot 0{,}', Ch1 Div Zn1, '.$$')

В фрагменте программы использованы функции пользователя: Nod(A, B) — НОД(A,B); Stepen(A,B) — AB. Указанные функции должны быть описаны в программе.

Результаты работы программы для количества заданий, равного 5:

$$left(1frac{2}{3}+frac{5}{8}right)cdot0{,}48-frac{4}{35}cdot 0{,}875.$$

$$left(3frac{1}{2}+frac{1}{7}right)cdot0{,}98-frac{8}{35}cdot

0{,}4375.$$

$$left(2frac{10}{27}+frac{1}{18}right)cdot2{,}7-frac{8}{25}cdot

0{,}3125.$$

$$left(2frac{1}{2}+frac{5}{6}right)cdot0{,}24-frac{4}{15}cdot 0{,}375.$$

$$left(1frac{5}{6}+frac{3}{5}right)cdot1{,}5-frac{4}{35}cdot 0{,}875.$$

Результат обработки этого файла будет следующим:

Генерация дидактических материалов по математике

Пример 2. Квадратное уравнение.

Настоящий пример несколько проще предыдущего. Рассмотрим два случая: а) корни уравнения — целые; б) корни уравнения — обыкновенные дроби.

Как и в предыдущем случае, целесообразно идти к получению задания от ответа. Сгенерируем два корня уравнения и, используя теорему Виета, получим его коэффициенты. При генерации целых корней разумно сделать их различными и отличными от нуля. В приведенном ниже примере это задания по буквами а, б. При выводе задания в файл требуется учесть, что коэффициенты могут быть равны нулю, а также тот факт, что коэффициент, равный единице, не записывается.

Задания под в, г предполагают наличие двух различных корней, являющихся обыкновенными правильными дробями. Алгоритм получения соответствующих коэффициентов в этом случае более громоздкий, хотя в основу положена всё та же теорема Виета. Изначально опять же генерируем ненулевые различные корни уравнения, а затем на их основе получаем уравнение в целыми коэффициентами. В примере это делается поэтапно: сначала — корни уравнения; затем — коэффициенты уравнения — обыкновенные дроби, наконец, коэффициенты — целые числа, причем НОК(A, B, C) = 1.

Ниже приводятся законченный фрагмент программы , генерирующий задания, пример работы этой программы и результат обработки файла, полученного с помощью программы.

Program Kw;

Var F : Text;

  {Процедура, производящая начальные установки в формате LaTeXа}

  Procedure UST;

  Begin

   WriteLn(F, 'documentstyle[12pt,a4wide]{article}');

   WriteLn(F, 'topmargin-3cm');

   WriteLn(F, 'pagestyle{empty}');

   WriteLn(F, 'setlength{textheight}{27cm}');

   WriteLn(F, 'setlength{textwidth}{16cm}');

   WriteLn(F, 'begin{document}');

  END;

 {НОД}

 Function Nod (X, Y : Integer) : Integer;

  Begin

   WHILE X <> Y Do

     IF X > Y THEN X := X — Y ELSE Y := Y — X;

   Nod := X

  END;

 {НОК}

 Function NoK (X, Y : Integer) : Integer;

  Begin

   NoK := X * Y Div NoD(X, Y)

  END;

  Var X1, I, X2, A, C, B : Integer;

      Ch, Ch1, Zn, Zn1, BCh, BZn, CCh, CZn, J, V, Vsp : Integer;

Begin

    Assign(F, 't:rustexkw_ur.tex');

    ReWrite(F);

    UST;

    Randomize;

   {Корни уравнения (целые)}

   Repeat X1 := -10 + Random(21) Until X1 <> 0;

   Repeat X2 := -10 + Random(21) Until X2 <> 0;

   B := -(X1 + X2);

   C := X1 * X2;

   WriteLn(F, 'begin{tabular}{ll}');

   Write(F, 'а)~$x^2');

   If B <> 0

   Then Begin

         If B > 0

         Then If B <> 1 Then Write(F, '+', B) Else Write(F, '+')

         Else If B <> -1 Then Write(F, B) Else Write(F, '-');

         Write(F, 'x');

        End;

   If C <> 0 Then If C < 0 Then Write(F, C) Else Write(F, '+', C);

   WriteLn(F, '=0$;& б)~$');

   Repeat X1 := -10 + Random(21) Until X1 <> 0;

   Repeat X2 := -10 + Random(21) Until (X2 <> 0) And (X2 <> X1);

   B := -(X1 + X2);

   C := X1 * X2;

   Write(F, 'x^2');

   If B <> 0

   Then Begin

          If B > 0

          Then If B <> 1 Then Write(F, '+', B) Else Write(F, '+')

          Else If B <> -1 Then Write(F, B) Else Write(F, '-');

          Write(F, 'x');

        End;

   If C <> 0 Then If C < 0 Then Write(F, C) Else Write(F, '+', C);

   WriteLn(F, '=0$;');

    {Генерируем уравнения с корнями — обыкновенными дробями}

   For J := 0 To 1 Do

   Begin

   Repeat {первый корень}

     Repeat Ch := -5 + Random(11) Until Ch <> 0; {числитель}

     Zn := 2 + Random(8); {знаменатель}

     V := Nod(Abs(Ch), Zn);

     Ch := Ch Div V;

     Zn := Zn Div V

   Until (Zn > 1) And (Zn > Abs(Ch));

   Repeat {второй корень}

     Repeat Ch1 := -4 + Random(11) Until Ch1 <> 0;

     Zn1 := 2 + Random(8);

     V := Nod(Abs(Ch1), Zn1);

     Ch1 := Ch1 Div V;

     Zn1 := Zn1 Div V

   Until (Zn1 > 1) And (Zn1 > Abs(Ch1)) And (Ch * Zn1 + Zn * Ch1 <> 0);

   Vsp := Nod(Abs(Ch * Zn1 + Zn * Ch1), Zn1 * Zn);

   BCh := (Ch * Zn1 + Zn * Ch1) Div Vsp; {числитель коэффициента B}

   BZn := Zn * Zn1 Div Vsp; {знаменатель коэффициента B}

   Vsp := Nod(Abs(Ch * Ch1), Zn1 * Zn);

   CCh := Ch * Ch1 Div Vsp; {числитель коэффициента C}

   CZn := Zn1 * Zn Div Vsp; {знаменатель коэффициента C}

   A := Nok(BZn, CZn);   {A}                             

   B := BCh * A Div BZn; {B}

   C := CCh * A Div CZn; {C}

   Write(F, Chr(Ord('в') + J), ')~$', A, 'x^2');

   If B <> 0

   Then Begin 

         If B > 0

         Then If B <> 1 Then Write(F, '+', B) Else Write(F, '+')

         Else If B <> -1 Then Write(F, B) Else Write(F, '-');

         Write(F, 'x');

        End;

   If C <> 0 Then If C < 0 Then Write(F, C) Else Write(F, '+', C);

   Write(F, '=0$;');

   If J = 0 Then WriteLn(F, '&') Else WriteLn(F, '');

   End;

    WriteLn(F, 'end{tabular}');

    WriteLn(F);

    WriteLn(F, 'end{document}');

    Flush(F);

    Close(F)

End.

documentstyle[12pt,a4wide]{article}

topmargin-3cm

pagestyle{empty}

setlength{textheight}{27cm}

setlength{textwidth}{16cm}

begin{document}

begin{tabular}{ll}

а)~$x^2+2x-8=0$;& б)~$

x^2-4x-45=0$;

в)~$49x^2-7x-6=0$;&

г)~$12x^2+16x+5=0$;

end{tabular}

end{document}

Генерация дидактических материалов по математике

Если в приведенную выше программу внести незначительные изменения, то можно получить вариант , генерирующий логарифмические уравнения или какие-либо другие. Вот результат работы такой программы.

documentstyle[12pt,a4wide]{article}

topmargin-3cm

pagestyle{empty}

setlength{textheight}{27cm}

setlength{textwidth}{16cm}

begin{document}

begin{tabular}{ll}

а)~$log_{2}^2x-log_{2}x-20=0$;& б)~$log_{5}^2x

+7log_{5}x+10=0$;

в)~$15log_{3}^2x+22log_{3}x+8=0$;&

г)~$27log_{2}^2x+12log_{2}x+1=0$;

end{tabular}

end{document}

Генерация дидактических материалов по математике

Пример 3. Задание по теме "Тождественные преобразования алгебраических выражений". (Из книги "Сборник задач для поступающих во втузы": Учеб. пособие / В.К. Егерев, Б.А. Кордемский, В.В. Зайцев и др.; Под. ред. М.И. Сканави. — 6-е изд., испр. и доп. — М.: "Столетие", 1997 — упр. 2.061, с. 21):

Генерация дидактических материалов по математике

При решении поставленной задачи прежде всего проанализируем заданное выражение. Для этого выполним его преобразование и получим ответ:

Генерация дидактических материалов по математике

Таким образом, можно заметить, что числитель дроби-делимого, полученной после алгебраических преобразований в первых скобках, есть произведение ответа и числителя дроби-делителя, полученной после преобразований во вторых скобках. Следовательно, сам ответ, знаменатель дробей и числитель дроби-делителя могут быть сгенерированы произвольно, а на их основе строится дробь-делимое. Кроме того, для приведения выражения к виду, заданному в образце, необходимо и в первой, и во второй скобке числитель частично разделить на знаменатель.

Эти соображения и реализованы в приведенной ниже программе .

Program V;

Var F : Text;

    {Процедура, производящая начальные установки в формате LaTeXа}

  Procedure UST;

  Begin

   WriteLn(F, 'documentstyle[12pt,a4wide]{article}');

   WriteLn(F, 'topmargin-3cm');

   WriteLn(F, 'pagestyle{empty}');

   WriteLn(F, 'setlength{textheight}{27cm}');

   WriteLn(F, 'setlength{textwidth}{16cm}');

   WriteLn(F, 'newcommand{ds}{displaystyle}');

   WriteLn(F, 'begin{document}');

  END;

 Function Nod (X, Y : Integer) : Integer;

  Begin

   WHILE X <> Y Do

     IF X > Y THEN X := X — Y ELSE Y := Y — X;

   Nod := X

  END;

 Var  D, I, A, C, B, E, G, H, O, P, L, M, N, E1, G1, H1, O1, P1 : Integer;

      Vx2, J, Vsp : Integer;

      X, Znak : Char;

Begin

    Assign(F, 't:rustexex_v.tex');

    ReWrite(F);

    UST;

    Randomize;

    For I := 1 To 5 Do

    Begin

      Repeat {пока в числителях дробей не будут взаимно простые числа}

   X := Chr(Ord('x') + Random(3)); {буква-переменная}

   {Получаем знаменатель — выражение вида Ax+B,

    A, B — целые, x — буква}

   A := 1 + Random(5);

   Repeat B := -4 + Random(9) Until B <> 0;

   Vsp := Nod(A, Abs(B));

   A := A Div Vsp; B := B Div Vsp;

   Repeat

   Repeat

   {Получаем числитель делителя после преобразования

    — выражение вида Lx^2+Mx+N,

    L, M, N — целые, x — буква}

   L := 1 + Random(5);

   Repeat M := -4 + Random(9) Until M <> 0;

   Repeat N := -4 + Random(9) Until N <> 0;

   Vsp := Nod(Nod(L, Abs(M)), Abs(N));

   L := L Div Vsp;

   M := M Div Vsp;

   N := N Div Vsp;

   {Получаем ответ — выражение вида Cx+D,

    C, D — целые, x — буква}

   C := A * (1 + Random(3));

   Repeat D := -4 + Random(9) Until D <> 0;

   {Формируем выражение-делитель. Получаем его в виде

    (Ex+G+(Hx^2+Ox+P)/(Ax+B))}

   Repeat E := -3 + Random(7) Until E <> 0;

   Repeat G := -3 + Random(7) Until G <> 0;

   H := L — A * E;

   O := M — (B * E + G * A);

   P := N — B * G;

   Until (H <> 0) And (O <> 0) And (P <> 0);

   If H < 0 Then Begin Znak := '-'; H := -H; O := -O; P := -P End

                Else Znak := '+';

   {Формируем на основе ответа и делителя выражение-делимое

    вида (E1x^2+G1x+(O1x+P1)/(Ax+B))}

   E1 := C * L Div A;

   Vx2 := D * L + M * C — E1 * B;

   Until Vx2 Mod A = 0;

   G1 := Vx2 Div A;

   O1 := D * M + N * C — G1 * B;

   P1 := D * N;

       Until (Nod(Abs(H), Nod(Abs(O), Abs(P))) = 1) And (Nod(Abs(O1), Abs(P1)) = 1);

   {выводим в файл очередное получившееся выражение,

    учитывая, что некоторые из коэффициенты могут быть нулями,

    коэффициенты, равные 1 или -1, не указываются и др.}

   Write(F, Chr(Ord('а') + I — 1), ')~$dsleft(');

   If Abs(E1) <> 1 Then Write(F, E1)

                           Else If E1 = -1 Then Write(F, '-');

   Write(F, X, '^2');

   If G1 <> 0

   Then Begin

         If Abs(G1) <> 1 Then Begin

                                           If G1 > 0 Then Write(F, '+');

                                           Write(F, G1)

                                          End

                                 Else If G1 = -1

                                          Then Write(F, '-')

                                          Else Write(F, '+');

         Write(F, X);

        End;

   If O1 <> 0

   Then Begin

               If O1 < 0

               Then Begin Write(F, '-'); O1 := -O1; P1 := -P1 End

               Else Write(F, '+');

               Write(F, 'frac{');

               If O1 <> 1 Then Write(F, O1);

               Write(F, X);

               If P1 <> 0

               Then Begin If P1 > 0 Then Write(F, '+');

                              Write(F, P1)

                    End;

               Write(F, '}');

        End

   Else If P1 <> 0

        Then Begin If P1 < 0

                           Then Write(F, '-')

                           Else Write(F, '+');

                           Write(F, 'frac{', Abs(P1), '}');

                 End;

   If (O1 <> 0) Or (P1 <> 0)

   Then Begin

          Write(F, '{');

          If A <> 1 Then Write(F, A);

          Write(F, X);

          If B > 0 Then Write(F, '+');

          Write(F, B, '}')

        End;

   Write(F, 'right):left(');

   If Abs(E) <> 1 Then  Write(F, E)

                      Else If E = -1 Then Write(F, '-');

   Write(F, X);

   If G > 0 Then Write(F, '+');

   Write(F, G);

   Write(F, Znak, 'frac{');

   If H <> 1 Then Write(F, H);

   Write(F, X, '^2');

   If O > 0 Then Write(F, '+');

   If Abs(O) <> 1 Then Write(F, O)

                      Else If O = -1 Then Write(F, '-');

   Write(F, X);

   If P > 0 Then Write(F, '+');

   Write(F, P, '}{');

   If A <> 1 Then Write(F, A);

   Write(F, X);

   If B > 0 Then Write(F, '+');

   WriteLn(F, B, '}right)$;');

   WriteLn(F)

    End;

    WriteLn(F);

    WriteLn(F, 'end{document}');

    Flush(F);

    Close(F)

End.

Вот один из результатов её работы:

documentstyle[12pt,a4wide]{article}

topmargin-3cm

pagestyle{empty}

setlength{textheight}{27cm}

setlength{textwidth}{16cm}

newcommand{ds}{displaystyle}

begin{document}

а)~$dsleft(6z^2+z+frac{13z+6}{3z-4}right):

left(-z-2+frac{5z^2-z-6}{3z-4}right)$;

б)~$dsleft(12y^2+20y+frac{19y-1}{y-1}right):

left(2y+3+frac{2y^2+3y+4}{y-1}right)$;

в)~$dsleft(4x^2-2x-frac{8x+3}{x+1}right):

left(-x-1+frac{3x^2+6x+2}{x+1}right)$;

г)~$dsleft(12x^2-22x+frac{39x+1}{x+2}right):

left(-2x+3+frac{6x^2+3x-7}{x+2}right)$;

д)~$dsleft(z^2+2z-frac{2z-9}{z-2}right):

left(-2z+2+frac{3z^2-9z+7}{z-2}right)$;

end{document}

А вот что получено после обработки этого документа с помощью LaTeX:

Генерация дидактических материалов по математике

Итак, программа значительно увеличила количество заданий, отвечающих заданному образцу. Однако следует заметить, — в этот вариант программы не заложена гарантия, что все сгенерированные задания будут различны. Для подобного рода гарантий необходимо предпринять дополнительные усилия.


© 2012 Рефераты, курсовые и дипломные работы.