Kihagyás

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

X,Y,Z:Tömb[1..N:Valós] - deklarációs példa
Z[1]:=X[1]+Y[1] - hivatkozási példa

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: ¯\_(ツ)_/¯