Generování úloh na řešení kvadratických rovnic

Tento notebook umožňuje vygenorovat úlohy, které slouží na procvičení řešení kvadratických rovnic ve tvaru a (x - (Subscript[x, 1]))(x - (Subscript[x, 2])) = 0 (1), kde (Subscript[x, 1]) a (Subscript[x, 2]) jsou kořeny dané rovnice. Tyto rovnice jsou před vypsáním upraveny do tvaru a (x^2) + b x + c = 0 (2).

Lze vybrat generování rovnice (2) ve tvaru:
	a (x^2) + c = 0;
	a (x^2) + b x = 0;
	a (x^2) + b x + c = 0;
	libovolný z výše uvedených.
Dále je nutné vybrat označení neznámé ze dvou možností:
	x;
	náhodně vybrané písmeno anglické abecedy.

Notebook generuje rovnice tak, že se nejdříve náhodně zvolí dva kořeny tak, aby výsledná rovnice (2) měla vybraný tvar, a poté se tato rovnice vypíše. Kořeny jsou přitom celá čísla od -10 do 10 včetně zlomků ±(1/2). Koeficient a vystupující v rovnici ve tvaru (2) je nenulový v rozsahu -5 až 5 (kromě celých čísel jsou to celočíselné násobky (1/2), (1/3), (1/4) a (1/5)).
		
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. Počet opakování právě popsaného bloku je uveden v proměnné pocetopakovani. Za tabulku s výpisem úloh se vypíše tabulka s výpisem řešení; počet řešení na jednom řádku je uložen v proměnné pocetreseninaradek.

© Jaroslav Reichl, 2012

pocetuloh=9;
pocetopakovani=3;

pocetulohnaradek=3;
pocetreseninaradek=6;

dolnimezvyberu=-5;
hornimezvyberu=5;
vyberkorenu={-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,-(1/2),(1/2),1,2,3,4,5,6,7,8,9,10};
vyberkoeficientu={-5,-4,-3,-2,-(4/5),-(3/4),-(2/3),-(3/5),-(1/2),-(2/5),-(1/3),-(1/4),-(1/5),(1/5),(1/4),(1/3),(2/5),(1/2),(3/5),(2/3),(3/4),(4/5),2,3,4,5};

seznamtypurovnic={"a (x^2) + c = 0"->1,"a (x^2) + b x = 0"->2,"a (x^2) + b x + c = 0"->3,"všechny typy"->4};
typrovnice=ChoiceDialog[StringJoin["Vyberte typ kvadratické rovnice:"],seznamtypurovnic];
typnezname=ChoiceDialog[StringJoin["Vyberte symbol pro neznámou:"],{" x "->1," náhodný "->2}];

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

reseni=Table[Null,{i,1,pocetopakovani,1},{j,1,pocetuloh,1},{k,1,2,1}];
(*Zadání úloh*)
For[k=1,k≤pocetopakovani,k++,
zadani=Table[Null,{i,0,pocetuloh+pocetulohnaradek,1}];
Table[zadani[[i]]="",{i,0,pocetuloh+pocetulohnaradek,1}];
zadani[[0]]=StringJoin[ToString[Style[ToString[k],barva,1.25velikostpisma,FontFamily->Times,Bold,Underlined],StandardForm],ToString[Style[". zadani uloh",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]],
If[typnezname==1,
nazevpromenne=Style["x",barva,velikostpisma,FontFamily->Times,Italic],
nazevpromenne=Style[FromCharacterCode[RandomInteger[{97,97+25}]],barva,velikostpisma,FontFamily->Times,Italic]],
If[typrovnice==1,
{koren1=RandomChoice[vyberkorenu],
koren2=-koren1},
If[typrovnice==2,
{koren1=RandomChoice[vyberkorenu],
koren2=0},
If[typrovnice==3,
{koren1=RandomChoice[vyberkorenu],
koren2=RandomChoice[vyberkorenu],
While[Abs[koren1]==Abs[koren2],
koren2=RandomChoice[vyberkorenu]]},
{koren1=RandomChoice[vyberkorenu],
koren2=RandomChoice[vyberkorenu]}]]],
koef=RandomChoice[vyberkoeficientu],
zadani[[i]]=StringJoin[vypiscisla," ",ToString[Style[StringJoin[ToString[Expand[koef( x-koren1)(x-koren2)]/.x->nazevpromenne,TraditionalForm]," = 0"],barva,velikostpisma,FontFamily->Times],StandardForm]],
reseni[[k,i,1]]=koren1,
reseni[[k,i,2]]=koren2},
{i,1,pocetuloh,1}];
If[Mod[pocetuloh,pocetulohnaradek]≠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}];
Print[zadani[[0]]];
Print[tabulkazadani];
Print[StringJoin@@Table["_",{90}]]]

(*Řešení úloh*)
For[k=1,k≤pocetopakovani,k++,
vypisreseni=Table[Null,{i,0,pocetuloh+pocetreseninaradek,1}];
Table[vypisreseni[[i]]="",{i,0,pocetuloh+pocetreseninaradek,1}];
vypisreseni[[0]]=StringJoin[ToString[Style[ToString[k],barva,1.25velikostpisma,FontFamily->Times,Bold,Underlined],StandardForm],ToString[Style[". reseni uloh",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]],
vypisreseni[[i]]=StringJoin[vypiscisla," ",ToString[Style[StringJoin[ToString[reseni[[k,i,1]],TraditionalForm],"; ",ToString[reseni[[k,i,2]],TraditionalForm]],barva,velikostpisma,FontFamily->Times],StandardForm]]},
{i,1,pocetuloh,1}];
If[Mod[pocetuloh,pocetreseninaradek]≠0,
korekceradku=1,
korekceradku=0];
tabulkareseni=TableForm[
Table[
Table[vypisreseni[[(j-1)pocetreseninaradek+i]],{i,1,pocetreseninaradek,1}],{j,1,IntegerPart[(pocetuloh/pocetreseninaradek)]+korekceradku,1}],
TableSpacing->{1,3}];
Print[vypisreseni[[0]]];
Print[tabulkareseni];
Print[StringJoin@@Table["_",{90}]]]