Смекни!
smekni.com

Генерация дидактических материалов по математике (стр. 2 из 2)

Write(F, 'x');

End;

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

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

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

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, '&bsol;');

End;

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

WriteLn(F);

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

Flush(F);

Close(F)

End.

&bsol;documentstyle[12pt,a4wide]{article}

&bsol;topmargin-3cm

&bsol;pagestyle{empty}

&bsol;setlength{&bsol;textheight}{27cm}

&bsol;setlength{&bsol;textwidth}{16cm}

&bsol;begin{document}

&bsol;begin{tabular}{ll}

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

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

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

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

&bsol;end{tabular}

&bsol;end{document}

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

&bsol;documentstyle[12pt,a4wide]{article}

&bsol;topmargin-3cm

&bsol;pagestyle{empty}

&bsol;setlength{&bsol;textheight}{27cm}

&bsol;setlength{&bsol;textwidth}{16cm}

&bsol;begin{document}

&bsol;begin{tabular}{ll}

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

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

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

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

&bsol;end{tabular}

&bsol;end{document}

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

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

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

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

Program V;

Var F : Text;

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

Procedure UST;

Begin

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

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

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

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

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

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

WriteLn(F, '&bsol;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:&bsol;rustex&bsol;ex_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), ')~$&bsol;ds&bsol;left(');

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, '&bsol;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, '&bsol;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, '&bsol;right):&bsol;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, '&bsol;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, '}&bsol;right)$;');

WriteLn(F)

End;

WriteLn(F);

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

Flush(F);

Close(F)

End.

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

&bsol;documentstyle[12pt,a4wide]{article}

&bsol;topmargin-3cm

&bsol;pagestyle{empty}

&bsol;setlength{&bsol;textheight}{27cm}

&bsol;setlength{&bsol;textwidth}{16cm}

&bsol;newcommand{&bsol;ds}{&bsol;displaystyle}

&bsol;begin{document}

а)~$&bsol;ds&bsol;left(6z^2+z+&bsol;frac{13z+6}{3z-4}&bsol;right):

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

б)~$&bsol;ds&bsol;left(12y^2+20y+&bsol;frac{19y-1}{y-1}&bsol;right):

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

в)~$&bsol;ds&bsol;left(4x^2-2x-&bsol;frac{8x+3}{x+1}&bsol;right):

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

г)~$&bsol;ds&bsol;left(12x^2-22x+&bsol;frac{39x+1}{x+2}&bsol;right):

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

д)~$&bsol;ds&bsol;left(z^2+2z-&bsol;frac{2z-9}{z-2}&bsol;right):

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

&bsol;end{document}

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

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