Generování úloh - graf funkce s absolutní hodnotou

Tento notebook umožňuje vygenorovat úlohy, které slouží pro procvičení vykreslování grafů lineární funkce s absolutní hodnotou. Funkce jsou přitom v jednom ze tvarů:
	y = a |b x + c| + d |e x + f| + m x + n;				(1)
	y = a |b x + c| + d |e x + f| + g |h x + i| + j |k x + l| + m x + n. (2)

Notebook je napsán tak, že se na základě předpisu (2) generuje vždy poslední funkce v dané skupině. (Např. bude-li proměnná pocetuloh nastavená na hodnotu 3, získáme dvě funkce dané předpisem (1) a jednu funkci danou předpisem (2).)
Grafy vygenerovaných funkcí budou na obrazovce dobře zobrazené pro případ, že budeme generovat 2 funkce v každém opakování (tj. proměnná pocetuloh bude mít hodnotu 2). Pro vyšší hodnoty se grafy nevejdou na šířku notebooku.
Koeficienty a až n nabývají takových celočíselných hodnot, že koeficienty vystupující v lineárním členu nebo určující násobek absolutní hodnoty, jsou nenulové. Vyjímku tvoří koeficient m, který může být i nulový.
Pro název funkce se vybere náhodně jedno písmeno a od něj dále se pak funkce pojmenují dalšími písmeny, které následují v abecedě.

Notebook vykreslí po vygenerování funkcí i jejich grafy.
POZOR!!! Tyto grafy je nutné uložit okamžitě po vygenerování notebooku - pozdější generování notebooku vygeneruje jiné předpisy funkcí a tedy je nebude možné zpětně jednoduše zkontrolovat.
Uložení jak předpisů funkcí, tak jejich grafů lze provést takto:
	označíme výstupní buňku, v níž jsou vygenerovány předpisy funkcí (na pravé straně notebooku označíme “pravou hranatou závorku”, v níž jsou uvedeny všechny vygenerované předpisy);
	v menu programu Mathematica vybereme File - Save Selection as ... a uložíme soubor ve formátu PDF. Pozor! Tento soubor není vhodný pro tisk - všechny funkce resp. všechny grafy se uloží na jednu stránku daného PDF-souboru. Proto je tento soubor vhodný jen pro prohlížení na poačítači.
		
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=2;
pocetopakovani=6;

pocetulohnaradek=2;

dolnimezvyberu=-5;
hornimezvyberu=5;
vyberlinclen={-2,-1,1,2};
vyberabshodnota={-4,-3,-2,-1,0,1};

delta=2;
velikostobrazku=350;

barva=Black;
barvafce=Red;
barvapozadi=Lighter[Yellow,0.95];
velikostpisma=15;
tloustka=0.007;
okzadani=False;

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

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]];
asciikodnazevfce=RandomInteger[{97,97+25-(pocetuloh-1)}];
jmenofunkce=Table[FromCharacterCode[asciikodnazevfce+i],{i,0,pocetuloh-1,1}];

Table[{
vypiscisla=StringJoin[ToString[Style[ToString[i],barva,velikostpisma,FontFamily->Times,Bold],StandardForm],ToString[Style[".  ",barva,velikostpisma,FontFamily->Times,Bold],StandardForm]],
akoef=RandomChoice[vyberlinclen],
bkoef=RandomChoice[vyberlinclen],
ckoef=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
dkoef=RandomChoice[vyberlinclen],
ekoef=RandomChoice[vyberlinclen],
fkoef=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
gkoef=RandomChoice[vyberlinclen],
hkoef=RandomChoice[vyberlinclen],
ikoef=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
jkoef=RandomChoice[vyberlinclen],
kkoef=RandomChoice[vyberlinclen],
lkoef=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
mkoef=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
nkoef=RandomInteger[{dolnimezvyberu,hornimezvyberu}],
If[i==pocetuloh,
predpisfce[[k,i]]=akoef Abs[bkoef x+ckoef]+dkoef Abs[ekoef x+fkoef]+gkoef Abs[hkoef x+ikoef]+jkoef Abs[kkoef x+lkoef]+mkoef x+nkoef,
predpisfce[[k,i]]=akoef Abs[bkoef x+ckoef]+dkoef Abs[ekoef x+fkoef]+mkoef x+nkoef],
zadani[[i]]=StringJoin[vypiscisla," ",ToString[Style[jmenofunkce[[i]],barva,velikostpisma,FontFamily->Times,Italic],TraditionalForm],": y = ",ToString[Style[ToString[predpisfce[[k,i]],TraditionalForm],barva,velikostpisma,FontFamily->Times],StandardForm]]
},
{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}]]]

TableForm[
Table[
Table[
Plot[predpisfce[[j,i]],{x,dolnimezvyberu-delta,hornimezvyberu+delta},PlotStyle->{barvafce,Thickness[tloustka]},AxesOrigin->{0,0},AxesLabel->{"x","y"},PlotRange->All,PlotLabel->Style[Framed[StringJoin[ToString[j],". reseni uloh - ",ToString[i],". funkce"]],velikostpisma,barva,FontFamily->Times,Background->barvapozadi],ImageSize->velikostobrazku],
{i,1,pocetuloh}],
{j,1,pocetopakovani}],
TableSpacing->{1,3}]