Generování úloh na goniometrické funkce

Následující notebook generuje úlohy zaměřené na výpočet "tabulkových" hodnot goniometrických funkcí.
Po jeho spuštění je nutné zadat vstupní parametry a poté se úlohy vygenerují. Lze je pak tisknout přímo z Mathematicy nebo je označit a pravým tlačítkem myši vyvolat lokální nabíku. Z ní vybrat Copy as - Metafile a vložit např. do Wordu. Tento formát je ze všech nabízených nejlepší - zůstanou zachovány všechny původní znaky (např. π nebo ((Sqrt[3])/2)) a ve Wordu je pak možné obrázek zvětšit.

© Jaroslav Reichl, 2008

ClearAll["Global`*"];
jmenosouboru1="test_zadani.txt";
jmenosouboru2="test_reseni.xls";
cesta=NotebookDirectory[];

seznamfci={"sin (x)","cos (x)","sin (x) a cos (x)","tg (x)","cotg (x)","tg (x) a cotg (x)","vše"};
defaultnifce=seznamfci[[7]];
okzadani=False;
jmenovatele={3,4,6,6};
(*Číslice 1 a 2 jsou vynechány proto, že po automatickém vygenerování čitatele a jmenovatele zlomku je tento zlomek zkrácen do základního tvaru. Vynecháním číslic 1 a 2 zvyšujeme pravděpodobnost výskytu argumentů, které nejsou celočíselnými násobky ((π )/2) a jejichž funkční hodnoty se určují většinou snadněji. Analogicky je uvedena v seznamu dvakrát číslice 6.*)
dolnimezcitatele=1;
hornimezcitatele=200;

While[okzadani==False,
pocetuloh=Input["Zadejte počet úloh, které chcete vygenerovat: "];
If[IntegerQ[pocetuloh]∧pocetuloh>0,
okzadani=True]]
seznamvyber=Table[seznamfci[[i]]->i,{i,Length[seznamfci]}];
seznammoznosti={"kladné argumenty"->1,"argumenty v <0; 2π>"->2,"argumenty v <-2π; 2π>"->3,"všechny argumenty"->4};
vyber=ChoiceDialog["Vyberte funkce pro generování úloh:",seznamvyber];
moznosti=ChoiceDialog[StringJoin["Z funkcí bylo vybráno: ",seznamfci[[vyber]],". Vyberte další parametry generování úloh.funkce pro generování úloh:"],seznammoznosti];
zadani=Table[Null,{i,1,pocetuloh,1}];
reseni=Table[Null,{i,1,pocetuloh,1}];

Table[
{fijmenovatel=RandomChoice[jmenovatele];
If[moznosti==2,
ficitatel=RandomInteger[{1,2fijmenovatel}],
If[moznosti==3,
ficitatel=RandomChoice[{-1,1}]*RandomInteger[{1,2fijmenovatel}],
If[moznosti==1,
ficitatel=RandomInteger[{dolnimezcitatele,hornimezcitatele}],
ficitatel=RandomChoice[{-1,1}]*RandomInteger[{dolnimezcitatele,hornimezcitatele}]]]];
If[vyber==1,
{goniomfce[x_]=Sin[x],
nazevfce="sin"},
If[vyber==2,
{goniomfce[x_]=Cos[x],
nazevfce="cos"},
If[vyber==3,
{If[RandomInteger[{1,2}]==1,
{goniomfce[x_]=Sin[x],
nazevfce="sin"},
{goniomfce[x_]=Cos[x],
nazevfce="cos"}]},
If[vyber==4,
{goniomfce[x_]=Tan[x],
nazevfce="tg"},
If[vyber==5,
{goniomfce[x_]=Cot[x],
nazevfce="cotg"},
If[vyber==6,
{If[RandomInteger[{1,2}]==1,
{goniomfce[x_]=Tan[x],
nazevfce="tg"},
{goniomfce[x_]=Cot[x],
nazevfce="cotg"}]},
If[vyber==7,
{pomocna=RandomInteger[{1,4}],
If[pomocna==1,
{goniomfce[x_]=Sin[x],
nazevfce="sin"},
If[pomocna==2,
{goniomfce[x_]=Cos[x],
nazevfce="cos"},
If[pomocna==3,
{goniomfce[x_]=Tan[x],
nazevfce="tg"},
{goniomfce[x_]=Cot[x],
nazevfce="cotg"}]]]}]]]]]]];
fi=(ficitatel/fijmenovatel)π;
zadani[[i]]=StringJoin[ToString[i],". úloha: ",nazevfce," (",ToString[fi,TraditionalForm],") ="];
If[NumberQ[1.goniomfce[fi]],
If[Length[Abs[goniomfce[fi]]]==1,
reseni[[i]]=StringJoin[zadani[[i]]," ",ToString[Round[goniomfce[fi],0.00001]]],
reseni[[i]]=StringJoin[zadani[[i]]," ",ToString[goniomfce[fi],TraditionalForm]]],
reseni[[i]]=StringJoin[zadani[[i]]," NENÍ DEFINOVÁNO!"]]},
{i,1,pocetuloh,1}];

TableForm[
Table[zadani[[i]],{i,1,pocetuloh,1}],
TableSpacing->{3,2}]
TableForm[
Table[reseni[[i]],{i,1,pocetuloh,1}],
TableSpacing->{3,2}]