Generování úloh na úpravy mnohočlenů

Tento notebook umožňuje vygenorovat úlohy, které po rozkladu mnohočlenů v čitateli a ve jmenovateli přejdou na úlohu jednoho z typů:
	((a(x-(Subscript[x, 0]))(x+b))/(c(x-(Subscript[x, 0]))(x+d)));
	((a(x-(Subscript[x, 0]))(x+b)(e.x+f))/(c(x-(Subscript[x, 0]))(x+d)));
	((a(x-(Subscript[x, 0]))(x+b))/(c(x-(Subscript[x, 0]))(x+d)(e.x+f))).
Počet úloh, které se mají generovat, je uložen v proměnné pocetuloh. Úlohy se vypíší do tabulky, v jejímž řádku bude pocetulohnaradek úloh. Pod tabulku se zadáním se vygeneruje také tabulka s výsledky: na řádku bude pocetreseninaradek výsledků. Počet opakování právě popsaného bloku je uveden v proměnné pocetopakovani.

© Jaroslav Reichl, 2011

pocetuloh=20;
pocetopakovani=3;

pocetulohnaradek=5;
pocetreseninaradek=5;

dolnimezvyberu=-10;
hornimezvyberu=10;
dolnimezvyberu2=-5;
hornimezvyberu2=5;
linkoef={-5,-4,-3,-2,-1,1,2,3,4,5};
linkoef3clenu={-1,1};

barva=Black;
velikostpisma=17;
okzadani=False;

For[k=1,k≤pocetopakovani,k++,
zadani=Table[Null,{i,0,pocetuloh+pocetulohnaradek,1}];
reseni=Table[Null,{i,0,pocetuloh+pocetreseninaradek,1}];
Table[zadani[[i]]="",{i,0,pocetuloh+pocetulohnaradek,1}];
Table[reseni[[i]]="",{i,0,pocetuloh+pocetreseninaradek,1}];

zadani[[0]]=ToString[Style["Zadání úloh",barva,1.25velikostpisma,FontFamily->Times,Bold,Underlined],StandardForm];
reseni[[0]]=ToString[Style["Řešení úloh",barva,1.25velikostpisma,FontFamily->Times,Bold,Underlined],StandardForm];
Table[{
vypiscisla=StringJoin[ToString[Style[ToString[i],barva,velikostpisma,FontFamily->Times,Bold],StandardForm],ToString[Style[".  ",barva,velikostpisma,FontFamily->Times,Bold],StandardForm]],
bodkraceni=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
akoef=RandomChoice[linkoef],
bkoef=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
ckoef=RandomChoice[linkoef],
dkoef=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
ekoef=RandomChoice[linkoef3clenu],
fkoef=RandomInteger[{dolnimezvyberu2,hornimezvyberu2}],

If[RandomChoice[{0,0,1}]==0,
{fcejmenovatel[x_]:=Expand[akoef(x-bodkraceni)(x+bkoef)],
fcecitatel[x_]:=Expand[ckoef(x-bodkraceni)(x+dkoef)]},
If[RandomChoice[{0,1}]==0,
{fcejmenovatel[x_]:=Expand[akoef(x-bodkraceni)(x+bkoef)( x+bkoef)],
fcecitatel[x_]:=Expand[ckoef(x-bodkraceni)(x+dkoef)]},
{fcejmenovatel[x_]:=Expand[akoef(x-bodkraceni)(x+bkoef)],
fcecitatel[x_]:=Expand[ckoef(x-bodkraceni)(x+dkoef)(ekoef x+fkoef)]}]],

zadani[[i]]=StringJoin[vypiscisla," ",ToString[Style[ToString[DisplayForm[FractionBox[fcecitatel[x],fcejmenovatel[x]]],TraditionalForm],barva,velikostpisma,FontFamily->Times],StandardForm]],
reseni[[i]]=
StringJoin[vypiscisla,ToString[Style[ToString[Simplify[((fcecitatel[x])/(fcejmenovatel[x]))],StandardForm],barva,velikostpisma,FontFamily->Times],StandardForm]]},
{i,1,pocetuloh,1}];
If[Mod[pocetuloh,pocetulohnaradek]≠0,
korekceradku=1,
korekceradku=0];
If[Mod[pocetuloh,pocetreseninaradek]≠0,
korekceradku=1,
korekceradku=0];
tabulkazadani=TableForm[
Table[
Table[zadani[[(j-1)pocetulohnaradek+i]],{i,1,pocetulohnaradek,1}],{j,1,IntegerPart[(pocetuloh/pocetulohnaradek)]+korekceradku,1}],
TableSpacing->{1,3}];
tabulkavysledky=TableForm[
Table[
Table[reseni[[(j-1)pocetreseninaradek+i]],{i,1,pocetreseninaradek,1}],{j,1,IntegerPart[(pocetuloh/pocetreseninaradek)]+korekceradku,1}],
TableSpacing->{1,3}];
Print[zadani[[0]]];
Print[tabulkazadani];
Print[reseni[[0]]];
Print[tabulkavysledky];
Print[StringJoin@@Table["_",{90}]]]