Generování: grafy goniometrických funkcí

Tento notebook umožňuje vygenerovat úlohy, které slouží na procvičení kreslení grafů goniometrických funkcí ve tvaru y = a funce(b x + c) + d.

Na začátku je nutné zvolit typ goniometrické rovnice (sinus, kosinus, tangens, kotangens nebo jejich kombinace).
Opakování čísel v množinách, ze kterých se vybírají koeficienty, zvyšuje pravděpodobnost výběru daného čísla.

Notebook zobrazí také grafy vygenerovaných funkcí. Tyto grafy jsou kreslenyy automaticky a nejsou upravovány tak, aby byly na pohled pěkné (to znamená, že mohou být malé, u funkcí tangens a kotangens se zobrazují asymptoty bez směrnice, ...). Zobrazený graf lze označit kliknutím myši a následně zvětšit tak, aby byly čitené zobrazené číselné hodnoty.

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.

© Jaroslav Reichl, 2012

pocetuloh=6;
pocetopakovani=4;

pocetulohnaradek=3;

seznamamplitud={(1/2),(1/2),1,2,2};
seznamlinkoeficientuargumentu={(1/4),(1/3),(1/3),(1/2),(1/2),(1/2),1,2,2,2,3,3,4};
seznamabskoeficientuargumentu={(π/6),(π/6),(π/5),(π/4),(π/4),(π/3),(π/3),(π/2),(π/2),π};
seznamabsclenu={0,1,1,2,2,3,3};

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

seznamfci=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};
moznosti=ChoiceDialog[StringJoin["Vyberte typ goniometrické rovnice:"],seznammoznosti];

(*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]}]]]}
]]]]]],

nazevfce=FromCharacterCode[RandomInteger[{97,122}]],
While[nazevfce=="x"∨nazevfce=="y",
nazevfce=FromCharacterCode[RandomInteger[{97,122}]]],
koefa=RandomChoice[{-1,1}] RandomChoice[seznamamplitud],
koefb=RandomChoice[{-1,1}] RandomChoice[seznamlinkoeficientuargumentu],
koefc=RandomChoice[{-1,1}] RandomChoice[seznamabskoeficientuargumentu],
koefd=RandomChoice[{-1,1}] RandomChoice[seznamabsclenu],
If[Abs[koefa]==1,
If[koefa==1,
koefavypis="",
koefavypis="-"],
koefavypis=ToString[koefa,TraditionalForm]],
If[Abs[koefb]==1,
If[koefb==1,
koefbvypis="",
koefbvypis="-"],
koefbvypis=ToString[koefb,TraditionalForm]],
If[Abs[koefc]==0,
koefcvypis="",
koefcvypis=ToString[Abs[koefc],TraditionalForm]],
If[koefc≥0,
If[koefc>0,
znamenko1=" + ",
znamenko1=""],
znamenko1=" - "],
If[Abs[koefd]==0,
koefdvypis="",
koefdvypis=ToString[Abs[koefd],TraditionalForm]],
If[koefd≥0,
If[koefd>0,
znamenko2=" + ",
znamenko2=""],
znamenko2=" - "],
zadani[[i]]=StringJoin[vypiscisla," ",ToString[Style[StringJoin[ToString[Style[nazevfce,Italic],TraditionalForm],": y = ",koefavypis,funkce,"(",koefbvypis,ToString[Style["x"],TraditionalForm],znamenko1,koefcvypis,")",znamenko2,koefdvypis],barva,velikostpisma,FontFamily->Times],StandardForm]],
seznamfci[[k,i]]=koefa fcevypocet[koefb x+koefc]+koefd},
{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=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]];
tabulkareseni=Table[{
Plot[seznamfci[[k,i]],{x,-2π,2π},
PlotStyle->{Blue,Thickness[0.005]},
AxesOrigin->{0,0},
AxesLabel->{Style["x",14],Style["y",14]},
AspectRatio->Automatic]
},
{i,1,pocetuloh,1}];
Print[vypisreseni];
Print[tabulkareseni];
Print[StringJoin@@Table["_",{90}]]]