2. előadás - ???
ERŐSEN HIÁNYOS JEGYZET Nem tudunk elég gyorsan írni
Rekordok/Struktúrák
Példa
Síkbeli pontok koordinátái: (x, y)
Specifikációban:
\(P \in Pont\) \(Pont = X \times Y\) \(X,Y \in \mathbb{R}\)
A nevükkel hivatkozhatunk rájuk a specifikációban:
P = (P.x, P.y)
Tehát: \(P.x \in X\), \(P.y \in Y\)
1. Feladat
Adjuk meg, hogy egy \(P\) síkbeli pont melyik sígnegyedbe esik
Bemenet: \(P \in Pont, Pont=X \times Y \quad X,Y= \mathbb{R}\)
Kimenet: \(SN \in N\)
Előfeltétel: -
Utófeltétel:
\(P.x \geq 0 \quad és \quad p.y \geq 0 \rightarrow SN = 1\)
\(P.x < 0 \quad és \quad p.y \geq 0 \rightarrow SN = 2\)
\(P.x < 0 \quad és \quad p.y < 0 \rightarrow SN = 3\)
\(P.x \geq 0 \quad és \quad p.y < 0 \rightarrow SN = 4\)
2. Feladat
1 - Specifikáció
Add megy egy természetes szám 1-től különböző legkissebb osztóját!
Bemenet: \(N \in \mathbb{N}\)
Kimenet: \(O \in \mathbb{N}\)
Előfeltétel: \(N > 1\)
Utófeltétel: \(1 < O \leq N \quad és \quad O \mid N \quad és \quad \forall i \space (2 \leq i < O): i \nmid N\)
(\(\nmid\): nem osztható)
(\(\mid\): osztható)
(\(\forall i\): bármilyen \(i\) esetén)
Megoldás reprezentálása
Feladat 2
Határozzuk meg egy természetes szám (N > 1) 1-től különböző legkisebb és önmagától különböző legnagyobb osztóját!
2 - Specifikáció
Bemenet: \(N \in \mathbb{N}\)
Kimenet: \(Lko, Lno \in \mathbb{N}\)
Előfeltétel: \(N > 1\)
Utófeltétel: \(1 < Lko \leq N \quad és \quad 1 \leq Lno \quad és\)
\(\forall i \space (2 \leq i < O): i \nmid N\)
\(\forall i \space (2 \leq i < O): i \nmid N\)
\(\forall i \space (2 \leq i < O): i \nmid N\)
Feladat 3 (Ciklusok)
3 - Specifikáció
Feladat 4
Határozzuk meg egy természetes szám osztói összegét
4 - Specifikáció
Bemenet: \(N \in \mathbb{N}\)
Kimenet: \(S \in \mathbb{N}\)
Előfeltétel: \(N > 1\)
Utófeltétel: \(S = \sum_{\substack{i=1 \\ i \mid N}}^{N} i\)
Tanulságok
- Ha az utófeltételben \(\exists\), \(\forall\) vagy \(\sum\) jel van, akkor a megoldás mindig ciklus.
- Ha az utófeltételben \(\exists\) vagy \(\forall\) jel van, akkor a megoldás sokszor feltételes ciklus.
- Ha az utófeltételben \(\sum\) jel van, akkor a megoldás sokszor számláló ciklus.
- A feltételes \(\sum\) esetében a ciklusban elágazás lessz.
for(var i = kezd; vfelt; modositas){
ciklusmag()
}
// ==
i = kezd;
while(vfelt){
ciklusmag();
modositas();
}
Elágazás és enumeráció
//TODO \(\forall\)
Sorozatok
Sorozat: azonos halmazbeli elemek egymásutánja, az elemei sorszámozthatóak
Elem: a sorozat \(i\)-edik elemére szokásos módon hivatkozhatunk: \(S_i\)
Példa
-
\(HónapHosszak_{1..12} \in \mathbb{N}^{12}\) - a HónapHosszak 12 elemű, természetes számokból álló sorozat
-
\(Emeletek_{-1..10} \in \mathbb{S}^{12}\) - az Emeletek 12 elemű, szövegeket tartalmazó sorozat
Tömb
Véges hosszúságú sorozat algoritimikus párja amelyiknek i-edik tagjával végezhetünk műveleteket (adott a legkisebb és a legnagyobb index, vagy az elemszám)
- Index: Sokszor 1..N, időnként 0..N-1 aho
Példa
Struktogram
Be: \(X_{1..N}, Y_{1..N} \in \mathbb{R}^{N}\)
Ki: \(Z_{1..N} \in \mathbb{R}^{N}\)
Előfeltétel: -
Utófeltétel: \(Z_1=X_1+Y_1 ...\) - hivatkozási példa
\(Színek_{0..4} \in \mathbb{S}^5 = ("zöld", "piros", "sárga", "fehér", "fekete")\)
Algoritmusban
Tömbök C#-ban
Nincs negatív index :(
foreach = vedd-mindet
Bemenet: \(H \in \mathbb{S} \quad Hónév_{1..12} \in \mathbb{S}^{12} = ("január", ...,"december")\)
Kimenet: \(S \in \mathbb{N}\)
Előfeltétel: \(H \in HóNév\)
Utófeltétel: \(1 \leq S \leq 12 \quad és \quad HóNév_s=H\)
Több dimenziós tömb - Mátrix
Feljegyeztük egy játszma végállását. Számoljuk meg, hány világos és hány sötét bábu maradt a táblán!
Bemenet: \(VégÁllás_{1..8,1..8} \in \mathbb{Z}^{8 \times 8}\)
Kimenet: \(DbV,DbS \in \mathbb{N}\)
Előfeltétel: \(\forall i,j\in [1..8]: VégÁllás_{i,j}\in [-6..6]\)
Utófeltétel: \(DbS = \sum_{\substack{i,j=1 \\ VégÁllás_{i,j}<0}}^{8} 1\) és \(DbV = \sum_{\substack{i,j=1 \\ VégÁllás_{i,j}>0}}^{8} 1\)
♔,♕,♖,♗,♘,♙,♚,♛,♜,♝,♞,♟{}
Tanulság: ¯\_(ツ)_/¯