Generování: různé tvary komplexních čísel

Tento notebook umožňuje vygenerovat úlohy, které slouží na procvičení převodu komplexních čísel mezi jejich různými tvary: algebraický tvar, goniometrický tvar, exponenciální tvar.

Na začátku běhu notebooku je nutné zvolit v jakém tvaru se mají komplexní čísla generovat:
	algebraický;
	goniometrický;
	exponenciální;
	algebraický a goniometrický;
	algebraický a exponenciální;
	goniometrický a exponenciální;
	všechny.

Komplexní čísla se generují tak, že se generují “tabulkové” hodnoty jejich argumentů, aby bylo možné komplexní čísla snadno převádět mezi jejich různými tvary. Koeficient, kterým je určena absolutní hodnota komplexního čísla, je také generován z předem dané množiny.
Opakování čísel v množinách, ze kterých se vybírají argumenty komplexních čísel, zvyšuje pravděpodobnost výběru daného argumentu.

Notebook zobrazí v samostatné buňce i řešení; ke každému vygenerovanému číslu zobrazí jeho absolutní hodnotu, argument a algebraický tvar.

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=10;
pocetopakovani=4;

pocetulohnaradek=3;
pocetreseninaradek=4;


seznamargumentu={0,(π/6),(π/6),(π/4),(π/4),(π/3),(π/3),(π/2),((2π)/3),((2π)/3),((3π)/4),((3π)/4),((5π)/6),((5π)/6),π,((7π)/6),((7π)/6),((5π)/4),((5π)/4),((4π)/3),((4π)/3),((3π)/2),((5π)/3),((5π)/3),((7π)/4),((7π)/4),((11π)/6),((11π)/6),2π};
seznamkoeficientu={1,2,3,4,6,(1/4),(1/3),(1/2),(Sqrt[2]),(Sqrt[3]),((Sqrt[2])/2),((Sqrt[3])/2)};

barva=Black;
velikostpisma=15;
okzadani=False;

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

seznammoznosti={"algebraický"->1,"goniometrický"->2,"exponenciální"->3,"algebraický a goniometrický"->4,"algebraický a exponenciální"->5,"goniometrický a exponenciální"->6,"všechny"->7};
moznosti=ChoiceDialog[StringJoin["Vyberte tvar komplexních čísel, která se mají vypsat:"],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,
typvypisu=1,
If[moznosti==2,
typvypisu=2,
If[moznosti==3,
typvypisu=3,
If[moznosti==4,
typvypisu=RandomChoice[{1,2}],
If[moznosti==5,
typvypisu=RandomChoice[{1,3}],
If[moznosti==6,
typvypisu=RandomChoice[{2,3}],
typvypisu=RandomChoice[{1,2,3}]]]]]]],
argument=RandomChoice[seznamargumentu],
abshodnota=RandomChoice[seznamkoeficientu],
realcast=abshodnota Cos[argument],
imagcast=abshodnota Sin[argument],
If[typvypisu==1,
{If[realcast≠0,
{vypisrealnecasti=ToString[Abs[realcast],TraditionalForm],
If[realcast>0,
znamenko1="",
znamenko1="-"],
If[imagcast≠0,
{vypisimaginarnicasti=ToString[Abs[imagcast],TraditionalForm],
imaginarnijednotka="I",
If[imagcast>0,
znamenko2=" + ",
znamenko2=" - "]},
{vypisimaginarnicasti="",
imaginarnijednotka="",
znamenko2=""}]},
{znamenko1="",
vypisrealnecasti="",
If[imagcast>0,
znamenko2="",
znamenko2="-"]}]},
If[typvypisu==2,
If[abshodnota==1,
{vypisabshodnoty="",
levazavorka="",
pravazavorka=""},
{vypisabshodnoty=ToString[abshodnota,TraditionalForm],
levazavorka="(",
pravazavorka=")"}],
If[typvypisu==3,
If[abshodnota==1,
vypisabshodnoty="",
vypisabshodnoty=ToString[abshodnota,TraditionalForm]]
""]]],
If[typvypisu==1,
vypiskomplexcisla=StringJoin[ToString[Style[FromCharacterCode[RandomInteger[{97,122}]],Italic],StandardForm]," = ",znamenko1,vypisrealnecasti,znamenko2,vypisimaginarnicasti,imaginarnijednotka],
If[typvypisu==2,
vypiskomplexcisla=StringJoin[ToString[Style[FromCharacterCode[RandomInteger[{97,122}]],Italic],StandardForm]," = ",vypisabshodnoty,levazavorka,"cos(",ToString[argument,TraditionalForm],") + I sin(",ToString[argument,TraditionalForm],")",pravazavorka],
vypiskomplexcisla=StringJoin[ToString[Style[FromCharacterCode[RandomInteger[{97,122}]],Italic],StandardForm]," = ",vypisabshodnoty,ToString[Superscript[E,StringJoin[ToString[argument,TraditionalForm],"I"]],TraditionalForm]]]],
zadani[[i]]=Style[StringJoin[vypiscisla," ",vypiskomplexcisla],velikostpisma,barva],
reseni[[k,i,1]]=abshodnota,
reseni[[k,i,2]]=argument,
reseni[[k,i,3]]=Simplify[realcast+imagcast I]},
{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],"; ",ToString[reseni[[k,i,3]],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}]]]