Kihagyás

6. gyakorlat

Gregó pontozás, apparently: A, B, Q, R: 1-1 pont (📒📓📔📝)

🎶Specifikálunk, babám...🎵

Példa előző óráról

\(F = \begin{cases} A = (x: \Z, y: \Z, z: \Z) \\ B = (x': \Z, y': \Z) \\ Q = (x=x' \land y = y' \land x' > 5) \\ R = (x' > y' \to z=x') \end{cases}\)

  • A: állapottér (basically az összes változó)
  • B: paramétertér (basically a bemeneti változók)
  • Q: előfeltétel (megkötéseket tesz a bemenetre és "átmásolja" a kezdőállapotot a paramétertérbe)
  • R: utófeltétel (A kimeneti állapotot köti meg, azaz ez a feladat teste)

Tipp: Szövegesen azt írhatjuk ki a specifiákcióban (pl. \(n\) összetett), amiről biztosak vagyunk, hogy mindenki ugyanazt érti. Ha nem, akkor valahova mellé leírjuk, hogy egyértelmű legyen és ne legyen bloated a specifikáció.

1. feladat

Egy összetett természetes számnak meghatározni egy természetes valódi osztóját

Természetes szám - \(n\)

Valódi osztó - \(d\)

\[ A = (n: \N, d: \N) \]
\[ B = (n': \N) \]
\[ Q = (n = n' \; \land \; n' \,\text{összetett}) \]
\[ R = (n' \bmod d = 0 \; \land \; 1 < d < n) \]

A következő is valid:

\[ R = (n = n' \; \land \; n' \bmod d = 0 \; \land \; 1 < d < n') \]

(nem változik az n kimeneti és bemeneti értéke)

2. feladat

Egy pozitív egész szám tizes számrendszerben hány számjegyű

megadott egész szám - \(n\)

számjegyek száma - \(d\)

\[ A = (n: \N, \; d: \N) \]
\[ B = (n': \N) \]
\[ Q = (n' = n \; \land \; n' > 0) \]
\[ R = (d = \lfloor\log_{10}(n')\rfloor+1) \]
\[ \text{vagy} \]
\[ R = (d = n' \; \text{számjegyeinek száma}) \]
\[ \text{vagy} \]
\[ R = (10^{d-1} \leq n' < 10^d) \]

3. feladat

\(x : \Z^n\)

\(e=\begin{cases} \max(x)&\text{, ha }x\text{-ben van páros szám} \\ \min(x)&\text{, ha }x\text{-ben nincs páros szám} \end{cases}\)

\[ A = (x: \Z^n, \; n: \N , \; e: \Z) \]
\[ B = (x': \Z^n) \]
\[ Q = (x = x' \; \land \; n \geq 1) \]
\[R = ( \\ (l = \exists^n_{i=1} \; 2 | x'[i]) \land \\ (l \implies e = max(x') \;) \land \; (\lnot l \implies e = min(x')))\]
\[ vagy \]
\[ R = (\exists i \in [i..n]: 2|x'[i]) \to (e = MAX_{i=1}^n \; x'[i]) \land \\ (\nexists i \in [i..n]: 2|x'[i]) \to (e = MIN_{i=1}^n \; x'[i]) \]

4. feladat

\(x: \Z^n\)

Módosítsuk \(x\) elemeit úgy, hogy \(x\) \(i\)-edik eleme az azt megelőző összes régi tömbelem összege legyen

\(A = (x: \Z^n)\)

\(B = (x': \Z^{n})\)

\(Q = (x = x')\)

\(R = (\forall i \in [1..n]: \; x[i] = \sum_{j = 1}^{i}(x'[j]))\)

\(R = (n \geq 1 \to (x[1]=0 \; \land\; \forall i \in [2..n]: x[i]=x'[i]+x[i-1]))\)

5. feladat

Adjon meg egy 1 000 000-nál nagyobb prím számot

\(A = (n: \N)\)

\(B = \{o\}\)

\(o\) - origó, az egy-elemű paramétertér eleme (amúgy írhatnánk ide gőzölős vasaló emoji-t is, 🐈-t is, de ne üres legyen)

\(Q_{o} = (igaz)\)

\(R_o = (1000000 > n \; \land \; n \text{ prím})\)