Generování: výpočet hodnot goniometrických funkcí

Tento notebook umožňuje vygenerovat úlohy, které slouží na procvičení výpočtu hodnot goniometrických funkcí.

Notebook generuje úlohy tak, že náhodně zvolí nejdříve argument ve tvaru ±(Subscript[x, 0])±k π, kde
	(Subscript[x, 0]) je úhel z intervalu (0; (π/2)>;
	k je přirozené číslo menší než 10.
Opakování čísel v množinách, ze kterých se vybírá v notebooku úhel (Subscript[x, 0]) nebo číslo k, zvyšuje pravděpodobnost výběru daného čísla.
Po spuštění notebooku je nutné vybrat druh goniometrických funkcí, které budou v zadání úloh vystupovat, a dále, zda se budou generovat úhly z intervalu <0;2π) nebo z reálných čísel.

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=14;
pocetopakovani=5;

pocetulohnaradek=7;
pocetreseninaradek=7;

dolnimezvyberu=-5;
hornimezvyberu=5;
vyberargumentu={(π/6),(π/6),(π/6),(π/4),(π/4),(π/4),(π/3),(π/3),(π/3),(π/2)};
koeficient={2,3,3,4,5,5,6,7,7};
vyberobehu={1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,10};

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

reseni=Table[Null,{i,1,pocetopakovani,1},{j,1,pocetuloh,1}];

seznammoznosti={"sin(x)"->1,"cos(x)"->2,"sin(x) a cos(x)"->3,"tg(x)"->4,"cotg(x)"->5,"tg(x) a cotg(x)"->6,"vše"->7};
seznamintervalu={"x ∈ <0; 2π)"->1,"x ∈ ℝ"->2};
moznosti=ChoiceDialog[StringJoin["Vyberte typ goniometrické funkce:"],seznammoznosti];
interval=ChoiceDialog[StringJoin["Vyberte typ intervalu:"],seznamintervalu];

(*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[moznosti==1,
{funkce="sin",
fcevypocet[x_]:=Sin[x]},
If[moznosti==2,
{funkce="cos",
fcevypocet[x_]:=Cos[x]},
If[moznosti==3,
If[RandomChoice[{1,2}]==1,
{funkce="sin",
fcevypocet[x_]:=Sin[x]},
{funkce="cos",
fcevypocet[x_]:=Cos[x]}],
If[moznosti==4,
{funkce="tg",
fcevypocet[x_]:=Tan[x]},
If[moznosti==5,
{funkce="cotg",
fcevypocet[x_]:=Cot[x]},
If[moznosti==6,
If[RandomChoice[{1,2}]==1,
{funkce="tg",
fcevypocet[x_]:=Tan[x]},
{funkce="cotg",
fcevypocet[x_]:=Cot[x]}],
{cislofce=RandomChoice[{1,2,3,4}],
If[cislofce==1,
{funkce="sin",
fcevypocet[x_]:=Sin[x]},
If[cislofce==2,
{funkce="cos",
fcevypocet[x_]:=Cos[x]},
If[cislofce==2,
{funkce="tg",
fcevypocet[x_]:=Tan[x]},
{funkce="cotg",
fcevypocet[x_]:=Cot[x]}]]]}
]]]]]],
argument=RandomChoice[{-1,1}] RandomChoice[koeficient] RandomChoice[vyberargumentu]+RandomChoice[{-1,1}] RandomChoice[vyberobehu] π,
If[interval==1,
argument=Mod[argument,2π],
""],
zadani[[i]]=StringJoin[vypiscisla," ",ToString[Style[StringJoin[funkce,"(",ToString[argument,TraditionalForm],")"],barva,velikostpisma,FontFamily->Times],StandardForm]],
reseni[[k,i]]=fcevypocet[argument]},
{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]],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}]]]