1. Írjunk programot véletlen számok generálására Neumann János módszere alapján.

Neumann János módszere álvéletlenszám generálásra az ún. middle-square method. Tizes számrendszerbeli álvéletlenszám sorozat előállításához vegyünk egy 4 jegyű kezdőértéket, ezt emeljük négyzetre, eredményként 8 jegyű számot vár az algoritmus, ha az eredmény kevesebb, mint 8 jegyű, akkor egészítsük ki kezdő nullákkal. Ennek a középső 4 jegye lesz az új kezdőérték.

Graphics[
{
Flatten[Table[{RGBColor[.7,.5,i/4],Rectangle[{i,0}]},{i,0,3}]],
Black,Inset[Style["seed",18],{-1,.5}],
Gray,Arrowheads->.05,Arrow[{{2,0},{2,-2}}],
Flatten[
Table[{RGBColor[.2,i/8,.4-i/8],Rectangle[{i,-3}]},{i,-2,5}]
],
Black,Inset[Style["(seed^2)",18],{-3,-2.5}],
Gray,Arrowheads->.05,Arrow[{{2,-3},{2,-5}}],
Black,Inset[Style["middle 4 digits",14,Bold],{2,-4}],
Flatten[
Table[{RGBColor[.2,i/8,.4-i/8],Rectangle[{i,-6}]},{i,0,3}]
],
Black,Inset[Style["output",18],{-1,-5.5}],
Gray,Arrowheads->.05,Arrow[{{4,-5.5},{7,-5.5},{7,.5},{4,.5}}],
Black,Inset[Style["output becomes next seed",14,Bold],{7.5,-2.5},Automatic,Automatic,{{0,-1},{1,0}}]
}
]

A feladat megoldása ciklussal

Feltesszük, hogy a kezdőérték (firstseed változó, a függvény első paramétere) 4 jegyű. A függvénynek megadhatjuk még az iterációk számát (iter változó), ez határozza meg, hogy hány számot generálunk, visszatérési értéke egy iter hosszú lista.

rngNc[firstseed_,iter_]:=Module[
{nlist={},output,seed=firstseed,i=0},
While[
i<iter,
output=FromDigits[
PadLeft[IntegerDigits[seed^2],8][[3;;-3]]
];
AppendTo[nlist,output];
seed=output;
i++
];
nlist
]

rngNc[1111,5]

A feladat megoldása ciklus nélkül

A függvény visszatérési értéke egy iter + 1 hosszú lista, melynek első eleme a kezdőérték.

rngN[seed_,iter_]:=NestList[
FromDigits[
PadLeft[
IntegerDigits[#^2]
,8][[3;;-3]]
]&,seed,iter
]

rngN[1111,5]

2. Készítsünk táblázatot az első 12 szabályos sokszögről, írjuk a belsejükbe az oldalak számát és a szomszédos oldalak bezárta szöget.

GraphicsGrid[
Partition[
Table[
Graphics[{{Opacity[.7],RGBColor[0,1-(p-3)/14,.25-(p-3)/14],EdgeForm[Black],
Polygon[Table[{Cos[2Pi i/p],Sin[2Pi i/p]},{i,p}]]},{
Inset["n = "<>ToString[p]<>"\nα = "<>ToString[TraditionalForm[(p 180-360 )/p]]<>"°",{0,0},BaseStyle->Medium]}
}
],
{p,3,14}],
4],Frame->All
]