InfoMC 2. labor

Programozás alapjai

Változók

Eddig nem használt karaktersorozat kék lesz, ez szimbólum.

a+b
(((a+b))^2)
Head[a]

Ezekkel behelyettesítés nélkül is végezhetünk számításokat.

Expand[(((a+b))^2)]
TrigExpand[Sin[2x]]

Ha egy változó egyenlőség jel bal oldalán szerepel, akkor értéket kap, feketévé válik. Onnantól kezdve az egyenlőség jel jobb oldalán található kifejezéssel helyettesítődik.

a=5;
(((a+b))^2)

Egy változó értékét el lehet tüntetni ClearAll paranccsal.

ClearAll[a]
(((a+b))^2)

Példa

n=3;
(((a+b))^n)

Dupla egyenlőség

Fontos, hogy különbség van = és == között:
({{=, ==}, {legyen egyenlő!, egyenlő-e?}})

a=3
a==3
ClearAll[a]
a==3

3=="három"
3==(30/10)
3==3.0

Függvények

A függvényhívás: FüggvényNév [ argumentum(ok) ]

Sin[3.14]

Definiálhatunk mi is függvényeket. Ennek a módja:
FüggvényNeve[ változó_ ] := ...
FüggvényNeve[ változó1_ , változó2_ , ... ] := ...

f[x_]:=(x^2)
g[x_, y_]:=(Sqrt[(x^2)+(y^2)])

f[3]
g[3,4]

Itt a zöld változók akkor kapnak értéket, amikor meghívjuk a függvényt és utána el is vesztik értéküket. Ú.n. lokális változók. Sem nem kék szimbólumok, sem nem (konkrét) fekete értékek.

f[3]
x

Definiálatlan függvény kiértékeletlen marad:

h[x, y]-h[y,x]

Függvény is lehet változó.

G[x_, f_]:=f[x]

G[3, f]
G[x, Sin]
G[Pi, Sin]
G[Pi, Cos]
G[3, h]

Ha egy függvény definiálva van, de attól eltérően használjuk, szintén kiértékeletlen marad.

f[1,2]-f[1,2,3]

Feladat

Írjunk függvényt, ami kibontja a hatványt a binomiális tétellel. Pl 3-hoz hozzárendeli egy két tagú összeg harmadik hatványának felbontását.

b[n_]:=

Listák

Listák létrehozása

Számtani sorozat

A=Range[10]
A=Range[2,20,2]

Hozzáfűzés

Append[A, 1]
A

AppendTo[A, 1]
A

Append[A, {1,2}]

Összefűzés

Join[A, {1,2}]
Join[A, {a}]

A=Join[A, {1}]

Length[A]

Feladat

Írjunk függvényt, ami hozzáfűz egy listához egy elemet, mégpedig azt az egész számot, ami a lista hossza! A függvény ne írja felül a meglévő listát, hanem csináljon újat.

l[lista_]:=

Például l[{a, b}] ->{a, b, 2}

Írjunk függvényt, ami egy listából megcsinálja azt a kétszer olyan hosszú listát, aminek első fele az eredeti lista, második fele az eredeti lista fordítva.

r[lista_]:=

Például r[{a, b}] ->{a, b, b, a}

Indexelés

Dupla szögletes zárójellel: [[ ]] vagy [[]].

A
A[[1]]
A[[10]]
First[A]
Last[A]
Rest[A]
Most[A]

Egymásba ágyazott listán több index vagy több zárójel.

B={{1,2},{3,4}};
B[[1]]
B[[1, 1]]
B[[2]][[1]] (*ugyan az mint (B[[2]])[[1]] *)

Feladat

Milyen indexeléssel érhetőek el az alábbi lista egyes elemei?

B2={{1,2}, {3}, 4};

String-ek

A string-ek karakterek listái, de kicsit másképpen viselkednek.

StringReverse["ablak"]
Characters["ablak"]
Reverse[Characters["ablak"]]
StringJoin[Reverse[Characters["ablak"]]]

Változó neve nem string, de lehet oda-vissza konvertálni.

Head["ablak"]
Head[ToExpression["ablak"]]

Figyeljük meg a következőt :

Head[ToString[x]]
ToExpression[ToString[x]<>"1"]

Itt x1 már szimbólum.

Table

Table[ kifejezés , { változó, -tól, -ig, lépésköz } ]

Table[(x^2), {x,0,10}]

A kifejezésben bármi lehet, a zöld lokális változó helyére sorra behelyettesítődnek az elemek.

Table[(x^n), {n,0,10}]

Table[(x^n), {n,0,10, 2}]
Table[(x^n), {n,-1,-10, -1}]

Lehet adott listán végigmenni :

Table[(x^n), {n, {-1,0,1}}]

Table[(((1+s))^2), {s, {x,y,z}}]

Több listán is végig lehet menni

Table[(s^n), {s, {x,y,z}}, {n, {1,2,3}}]

Ez már két mélységű lista.

Szószámlálás

EngVocab = WordList[]
Length[EngVocab]

SortBy[EngVocab, StringReverse]

mytext=Import["http://sandbox.hlt.bme.hu/~gaebor/ea_anyag/InfoMC/kjb.txt", "Text"];
bibleCounts=WordCounts[mytext]
bibleVocab=Keys[bibleCounts];

Total[bibleCounts[#]&/@bibleVocab]
Length[bibleVocab]

ListPlot[Values[bibleCounts], Joined->True]

Zipf törvény

ListLogLogPlot[Values[bibleCounts], Joined->True, PlotRange->All]

letterCounts=Counts[Characters[mytext]]

Feladatok

Készítsünk magyar rímszótárat.
Nincsen magyar szótár a Mathematica-ban, gyártsuk le magunk. Ehhez szöveg:
http://sandbox.hlt.bme.hu/~gaebor/ea_anyag/InfoMC/biblia.txt

Hogyan tehetjük kereshetővé?
Írjunk függvényt, ami egy adott szóhoz visszaad 10 hasonló végű szót (5 előtte és 5 utána lévő szót).

Position
SelectFirst