Praktikum 14¶
Allolevad ülesanded on kursuse "Sissejuhatus programmeerimisse Pythoni baasil" YFX0500 praktikumis koos kursusega ja kodus iseseisvalt lahendamiseks. Kuidas lahendada allolevaid ülesandeid? Uuri ja kasuta loengus kommenteeritud süntaksi näiteid, abiinfot (Pythoni sisseehitatud funktsioon help, jne.), Internetti ja enda aju. Küsimuste korral, mis tekivad praktikumi ajal, pöördu õppejõu või õppejõudude poole. Iganädalaselt peale praktikumi toimumist avaldatakse ülesannete lahendused kursuse kodulehel.
Inimintellekti loodud ülesanded¶
Ülesanne 0:
Kasuta teeki NumPy juhuslike arvude genereerimiseks ja Matplotlib'i joonite loomiseks.
- Loo joonis mille suurus on järgmine: laius = 5 (tolli), kõrgus = 2 (tolli). Vertikaalsele teljele lisa valge müra amplituudiga $[-10, 10)$. Genereeri $100$ valimit. Joonis 1 kujutab oodatavat tulemust.
| Joonis 1. Ülesande 0 Punkt 1 oodatav graafiku joonis. |
- Loo joonis mille suurus on järgmine: laius = 5 (tolli), kõrgus = 2 (tolli). Vertikaalsele teljele lisa valge müra amplituudiga $[-10, 10)$. Genereeri $100$ valimit. Horisontaalsele teljele lisa väärtused vahemikust $[0, 10]$. Kasuta funktsiooni
numpy.linspace. Joonis 2 kujutab oodatavat tulemust.
| Joonis 2. Ülesande 0 Punkt 2 oodatav graafiku joonis. |
- Loo kahe teljepaariga joonis. Joonise suurus peab olema järgmine: laius = 5 (tolli), kõrgus = 4 (tolli) Esimesele teljepaarile lisa Punktis 1 loodud graafik ja teisele teljepaarile lisa Punktis 2 loodud graafik. Joonis 3 kujutab oodatavat tulemust.
| Joonis 3. Ülesande 0 Punkt 3 oodatav kahe teljepaariga ja graafikuga joonis. |
Ülesanne 1:
Loo allolev massiiv. Kasuta numpy.ndarray massiivi indekseerimist ja trüki välja esiletõstetud massiivi elemendid.
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]
[26 27 28 29 30]]
Huvipakkuvad elemendid: 11, 12, 16, 17.
[[11 12]
[16 17]]
Ülesanne 2:
Loo allolev massiiv. Kasuta numpy.ndarray massiivi indekseerimist ja trüki välja esiletõstetud massiivi elemendid.
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]
[26 27 28 29 30]]
Huvipakkuvad elemendid: 2, 8, 14, 20.
[ 2 8 14 20]
Ülesanne 3:
Loo allolev massiiv. Kasuta numpy.ndarray massiivi indekseerimist ja trüki välja esiletõstetud massiivi elemendid.
[[ 1.0 1.5 2.0 2.5 3.0]
[ 3.5 4.0 4.5 5.0 5.5]
[ 6.0 6.5 7.0 7.5 8.0]
[ 8.5 9.0 9.5 10.0 10.5]
[11.0 11.5 12.0 12.5 13.0]
[13.5 14.0 14.5 15.0 15.5]]
Huvipakkuvad elemendid: 2.5, 3.0, 12.5, 13.0, 15.0, 15.5.
[[ 2.5 3.0]
[12.5 13.0]
[15.0 15.5]]
Ülesanne 4:
Loo allolev massiiv. Kasuta numpy.ndarray massiivi meetodit mean, leia ridade ja veergude elementide aritmeetilised keskmised. Lisaks leia kõigi elementide keskmine.
[[ 1.0 1.5 2.0 2.5 3.0]
[ 3.5 4.0 4.5 5.0 5.5]
[ 6.0 6.5 7.0 7.5 8.0]
[ 8.5 9.0 9.5 10.0 10.5]
[11.0 11.5 12.0 12.5 13.0]
[13.5 14.0 14.5 15.0 15.5]]
Oodatavad tulemused:
- Ridade elementide keskmised on
[ 2. 4.5 7. 9.5 12. 14.5] - Veergude elementide keskmised on
[7.25 7.75 8.25 8.75 9.25] - Kõigi elementide keskmine on
8.25
Ülesanne 5:
Loo allolev massiiv. Kasuta numpy.ndarray massiivi meetodit prod, leia ridade ja veergude elementide korrutised. Lisaks leia kõigi elementide korrutis.
[[ 1.0 1.5 2.0 2.5 3.0]
[ 3.5 4.0 4.5 5.0 5.5]
[ 6.0 6.5 7.0 7.5 8.0]
[ 8.5 9.0 9.5 10.0 10.5]
[11.0 11.5 12.0 12.5 13.0]
[13.5 14.0 14.5 15.0 15.5]]
Oodatavad tulemused:
- Ridade elementide korrutised on
[2.2500000e+01 1.7325000e+03 1.6380000e+04 7.6308750e+04 2.4667500e+05 6.3716625e+05] - Veergude elementide korrutised on
[ 26507.25 56511. 104139. 175781.25 279279. ] - Kõigi elementide korrutis on
7.658115266056659e+24
Ülesanne 6:
Loo allolev massiiv, kasuta numpy.ndarray massiivi.
[[ 1.0 1.5 2.0 2.5 3.0]
[ 3.5 4.0 4.5 5.0 5.5]
[ 6.0 6.5 7.0 7.5 8.0]
[ 8.5 9.0 9.5 10.0 10.5]
[11.0 11.5 12.0 12.5 13.0]
[13.5 14.0 14.5 15.0 15.5]]
Leia paarisarvulised massiivi elemendid:
- Nende asukoht massiivis ja,
- nende väärtused uues 1D massiivis.
Oodatav tulemus, Punkt 1:
[[False False True False False]
[False True False False False]
[ True False False False True]
[False False False True False]
[False False True False False]
[False True False False False]]
Oodatav tulemus, Punkt 2:
[2. 4. 6. 8. 10. 12. 14.]
Ülesanne 7:
Leia:
$$ \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} \!\cdot\! \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} \!\cdot\! \begin{pmatrix} 1\\ 2 \end{pmatrix} \equiv \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix}^{\! 2} \!\cdot\! \begin{pmatrix} 1\\ 2 \end{pmatrix} =~ ? $$
Kasuta numpy.ndarray andmemassiive. Püüa korrutustehted teostada ühes lähtekoodi reas.
Vastus: $$ \begin{pmatrix} 19\\ 26 \end{pmatrix} $$
Ülesanne 8:
Lahenda süsteem kujul:
$$ \begin{cases} x + 3y + z = 50,\\ 2x + 5y + 7z = 140,\\ 3x + 6y + 8z = 170, \end{cases} $$
mida saame esitada ka maatrikskujul:
$$ \begin{pmatrix} 1 & 3 & 1\\ 2 & 5 & 7\\ 3 & 6 & 8 \end{pmatrix}\!\cdot\! \begin{pmatrix} x\\ y\\ z \end{pmatrix} = \begin{pmatrix} 50\\ 140\\ 170 \end{pmatrix}, $$
s.t., et leia tundmatud $x$, $y$ ja $z$ või lahendivektor $\vec{v} = (x, y, z)^T$.
Vastus: $\vec{v}^{\,T} = (10, 10, 10)$.
Ülesanne 9:
Kasuta teeke NumPy ja Matplotlib. Loo joonis mis kujutab aegrida ajavahemikul $t \in [0, 10]$ s mis on arvutatud kasutades ajast sõltuvat funktsiooni kujul:
$$ f(t) = \sqrt{t} + \sin(2 \pi f_0 t), $$
kus parameeter $f_0$ omab sagedus ühikut s${}^{-1}$ ehk Hz. Vali sageduseks $f_0 = 1$ Hz. Loo eelmainitud ajavahemik kasutades NumPy funktsiooni numpy.linspace:
import numpy as np
t_max = 10
t = np.linspace(0, t_max)
Kasuta loodud andmemassiivi t funktsiooni $f(t)$ väärtuste leidmiseks:
f_0 = 1
f = np.sqrt(t) + np.sin(2 * np.pi * f_0 * t)
Oodatav õige vastus on esitatud Joonisel 1.
| Joonis 4. Ülesande 9 õige vastus. |
Miks on sinu loodud graafik erinev Joonisel 4 kujutatud graafikust?
Ülesanne 10:
Loo joonis, kasutades teeki Matplotlib vaikimisi seadeid, mis kujutab graafikut mis on antud funktsiooniga kujul:
$$ A(t) = {\rm e}^{-\alpha t} \cos (2\pi f_0 t) \equiv \exp (-\alpha t) \cos (2\pi f_0 t), $$
kus $f_0 = 1$ Hz on sagedus, $\alpha = 0.1$ s$^{-1}$ on sumbuvustegur ja $t \in [0, 30]$ s on aegrea pikkus sekundites. Oodatav tulemus on kujutatud Joonisel 5.
| Joonis 5. Ülesande 10 oodatav tulemus. |
Ülesanne 11:
Lisa eelmises ülesandes leitud graafikule sumbuvuse mähisjooned $m_{\pm}$ mis on esitatavad järgmisel kujul:
$$ m_\pm(t) = \pm {\rm e}^{-\alpha t} \equiv \pm \exp(-\alpha t).$$
Joonis 6 kujutab oodatavat tulemust.
| Joonis 6. Ülesande 11 oodatav tulemus. Oranži kõveraga on näidatud mähisjoon $m_{+}(t) = {\rm e}^{-\alpha t}$ ja rohelise kõveraga on näidatud mähisjoon $m_{-}(t) = - {\rm e}^{-\alpha t}$. |
Ülesanne 12:
Loo graafik kasutades funktsiooni kujul:
$$ A(t) = \cos (2 \pi f_0 t^2), $$
kus $f_0 = 1$ Hz on sagedus ja $t \in [0.0, 4.0]$ s on aeg. Lisa graafikule horisontaalne joon $A(t) = 0.50$ ja vertikaalne joon $t(A) = 0.42$. Joonis 7 kujutab oodatavat tulemust.
| Joonis 7. Ülesande 12 oodatav tulemus. |
Ülesanne 13:
Impordi andmed (esimene veerg x ja teine veerg y) failist data_P14.txt ja loo andmete põhjal graafik. Seo x andmed horisontaalse teljega ja y andmed vertikaalse teljega. Oodatav tulemus on kujutatud Joonisel 8.
Andmete importimiseks kasuta:
- funktsiooni
numpy.loadtxt:
import numpy as np
x, y = np.loadtxt('data_P14.txt',
delimiter='\t',
skiprows=0,
usecols=(0, 1),
unpack=True)
- Pythoni sisseehitatud funktsiooni
openkoos kontekstihaldurigawith.
| Joonis 8. Ülesande 13 oodatav tulemus. |
Ülesanne 14:
Impordi andmed (esimene veerg x ja teine veerg y) failist data_P14.txt. Seo y andmed horisontaalse teljega ja x andmed vertikaalse teljega. Andmete importimiseks loo funktsioon read_from_2_col mis kasutab funktsiooni open faili veergude lugemiseks.
Loo andmete põhjal kolme teljepaariga joonis:
- Esimese teljepaari graafiku stiiliks vali
'.', - teise teljepaari graafiku stiiliks vali
':'ja - kolmanda teljepaari graafiku stiiliks vali
'--'ehk kriipsjoon. - Veendu, et kolmas teljepaar näeb välja nagu seda on kujutatud Joonisel 6.
Oodatav tulemus on kujutatud Joonisel 9.
| Joonis 9. Ülesande 14 oodatav tulemus. |
Ülesanne 15:
Teatavasti on ringjoont võimalik esitada ristkoordinaatides $x$ ja $y$ kasutades valemit kujul:
$$ x^2 + y^2 = r^2,$$
kus $r$ on ringi raadius. Taoliselt defineeritud ringjoone keskpunkt asub punktis $O = (x, y) = (0, 0)$. Lahendades ringjoone definitsiooni $y$ suhtes saame:
$$ y_{\pm}(x) = \pm \sqrt{r^2 - x^2}, $$
kus $y_+$ on ringjoone positiivne ehk ülemine pool ja $y_-$ on ringjoone negatiivne ehk alumine pool. Kirjuta programm mis loob joonise mis kujutab ringjoont raadiusega $r = 1$. Joonis 10 kujutab oodatavat tulemust.
| Joonis 10. Ülesande 15 oodatav tulemus. |
Ülesanne 16:
Teatavasti on ringjoont võimalik esitada ristkoordinaatides $x$ ja $y$ kasutades valemit kujul:
$$ x^2 + y^2 = r^2, $$
kus $r$ on ringi raadius. Taoliselt defineeritud ringjoone keskpunkt asub punktis $O = (x, y) = (0, 0)$. Lahendades ringjoone definitsiooni $y$ suhtes saame:
$$ y_{\pm}(x) = \pm \sqrt{r^2 - x^2}, $$
kus $y_+$ on ringjoone positiivne pool ja $y_-$ on ringjoone negatiivne pool.
Kas ringjoont saab muuta ruuduks (how to square a circle)? Mitte segi ajada kuulsa probleemiga millest räägitakse siin https://en.wikipedia.org/wiki/Squaring_the_circle
Kontrollime kas võrrand kujul:
$$ x^n + y^n = r^n, $$
kus aste $n$ on paarisarv ja $n > 2$ on ruudu võrrand? Leiame lahendid $y$ suhtes:
$$ y_{\pm}(x) = \pm \sqrt[n]{r^n - x^n}, $$
kus $y_+$ on ruudu positiivne ehk ülemine pool ja $y_-$ on ruudu negatiivne ehk alumine pool. Loo ringjoone ja ruutude graafikud juhul kui aste $n = 2$ (ringjoon), $n = 4$ ja $n = 400$ (ruut) ning raadiuseks vali $r = 1$. Joonis 11 kujutab oodatavat tulemust.
| Joonis 11. Ülesande 16 oodatav tulemus. |
Ülesanne 17:
Loengus 7 tutvustasime Logistilist kujutust. Järgnev on väljavõte Loengust 7:
Logistiline kujutus on antud kujul: $$x_{n + 1} = r x_n (1 − x_n),$$ kus $r$ on kontrollparameeter mis omab väärtusi vahemikus $[0, 4]$, $n \in \mathbb{Z}$ on itereerimisindeks ja iteraat $x_n$ saab omada väärtusi vahemikus $[0, 1]$. Kasutame ülaltoodud kujutuse funktsiooni kujul: $$f(x) = r x (1 − x),$$ generaatorifunktsiooni argumendi väärtusena ning leiame kujutse iteraadid $x_{n+1} = f(x_n)$ ehk Logistilise kujutise.
Viide: https://en.wikipedia.org/wiki/Logistic_map
r = 3.7 f = lambda x: r*x*(1 - x) def iterate_func(func, x): # Itereerib üle etteantud funktsiooni. while True: yield x x = func(x) # Leiab järgmise x väärtuse. x = iterate_func(f, 0.6) # Loome iteraator. lst = [] for _ in range(51): lst.append(next(x)) print(lst)
Proovime leitud kujutise väärtused graafikul kujutada kasutades kahte lähenemist:
- Kasuta Loengu 7 koodi kujutise väärtuste $x_n$ leidmiseks ja loo graafik.
- Kirjuta enda kood mis leiab Logistilise kujutise iteraadid $x_n$ ja loob graafiku. Kasuta lähtestamata NumPy andmemassiivi mis sisaldab $51$ lähtestamata väärtusega arvu:
import numpy as np
x = np.empty(51)
Vali algtingimus $x_0 = 0.6$ (sama mis Loengu 7 näites) järgmiselt:
x[0] = 0.6
Itereeri üle massiivi x elementide kasutades eelmainitud seost kujul $x_{n + 1} = r x_n (1 - x_n)$ ehk tõlgituna Pythoni programmeerimiskeelde:
r = 3.7
x[n+1] = r * x[n] * (1 - x[n]) # Lisa see rida for- või while-tsüklisse.
Joonis 12 kujutab oodatavat tulemust.
| Joonis 12. Ülesande 17 oodatav tulemus. |
Ülesanne 18: *
Loo graafik kasutades kujutust kujul:
$$ \begin{cases} x_{n+1} = 1 - y_n + |x_n|,\\ y_{n+1} = x_n, \end{cases} $$
kus $n \ge 0 \in \mathbb{Z}$. Vali algtingimusteks $x_0 \approx -0.1$ ja $y_0 \approx 0.0$. Graafiku tüübiks vali piksel (andmepunkti kuvamine), graafiku pealkirjaks vali "Häid jõule!" ning eemalda telgedelt numbrid (tick marks). Kujutise iteratsioonide $(x_n, y_n)$ arvutamiseks kasuta for tsüklit ja numpy.ndarray andmemassiivi indekseid, sarnaselt eelmise ülesande Punkti 2 lahendile. Kujuta joonisel vähemalt $n = 100\,000$ pikslit. Ilusama joonise saad kui muudad muutuja $y_n$ negatiivseks ehk $y_n = -y_n$ (muuda peale kujutise välja arvutamist).
Vihje/abi:
plt.plot(x, -y, ',') # ',' tähendus: Pideva graafiku asemel vastavad andmepunktidele pikslid.
plt.xticks([]) # Telgedelt numbrite eemaldamine.
plt.yticks([]) # Telgedelt numbrite eemaldamine.
plt.title('Häid jõule!')
plt.show()
Genereeritud kujutus on seotud jõuludega. Kasuta koodi jõulukaardi loomiseks. Joonis 12 kujutab oodatavat tulemust.
| Joonis 13. Ülesande 18 oodatav tulemus ehk jõulukaart sinu kallimale. |
Ülesanne 19:
Loo joonis mis sisaldab kolme teljepaari, mis on asetatud ühte ritta. Kolmel teljeparil kujuta järgmised graafikud:
- Vasakult poolt asetsev esimene graafik peab kujutama järgmist funktsiooni:
$$ A_1(t) = {\rm e}^{-\alpha t} \cos (2\pi f_0 t) \equiv \exp(-\alpha t) \cos (2\pi f_0 t), $$
- Keskmine graafik peab kujutama funktsiooni:
$$ A_2(t) = {\rm e}^{-\beta (t-15)^2} \cos (2\pi f_0 t) \equiv \exp\! \left( -\beta (t - 15)^2 \right) \cos (2\pi f_0 t), $$
- Viimane parempoolne graafik peab kujutama funktsiooni:
$$ A_3(t) = \frac{{\rm e}^{\alpha t}}{20} \cos (2\pi f_0 t) \equiv \frac{\exp(\alpha t)}{20} \cos (2\pi f_0 t), $$
siin $f_0 = 1$ Hz on sagedus, $\alpha = 0.1$ s$^{-1}$ on sumbuvustegur, $\beta = 0.015$ on funktsiooni kuju määrav parameeter ja $t \in [0, 30]$ s on aegrea pikkus sekundites. Oodatav tulemus on näidatud Joonisel 14.
| Joonis 14. Ülesande 19 oodatav tulemus. Joonise suurus (laius, kõrgus) võivad erineda sinu omast. |
Tehisintellekti loodud ülesanded¶
Järgnevad ülesanded on loodud 30.11.2025 juturoboti Gemini poolt (Google Gemini, model Flash 2.5, https://gemini.google.com).
Ülesanne TI-1:
The Interstellar Signal Strength Challenge
An alien civilization is transmitting a signal, and the initial strength reading across a 4 x 4 sensor array is recorded. This array represents the strength in megavolts (MV).
Your tasks are:
- Create a NumPy array called
initial_signalto store the following data:
[[5.2, 1.8, 9.0, 4.5],
[3.1, 7.7, 2.4, 8.9],
[6.5, 0.3, 5.0, 1.1],
[9.9, 4.4, 6.0, 2.2]]
- The signal needs to be normalized. Calculate the maximum strength recorded in the entire array, and then create a new array
normalized_signalby dividing every element ininitial_signalby this maximum value. - The technicians suspect that any strength reading below 2.0 MV is just static noise. Use a boolean masking operation to count how many sensors recorded a strength less than 2.0 MV.
- Calculate the average signal strength for the middle two rows only (array indexing).
Answers:
1. Initial Signal Array:
[[5.2 1.8 9. 4.5]
[3.1 7.7 2.4 8.9]
[6.5 0.3 5. 1.1]
[9.9 4.4 6. 2.2]]
2. Maximum Strength: 9.90 MV
2. Normalized Signal Array:
[[0.525 0.182 0.909 0.455]
[0.313 0.778 0.242 0.899]
[0.657 0.03 0.505 0.111]
[1. 0.444 0.606 0.222]]
3. Static Noise Readings:
[1.8 0.3 1.1]
3. Noise Mask:
[[False True False False]
[False False False False]
[False True False True]
[False False False False]]
3. Number of static noise readings (< 2.0 MV): 3
4. Middle Two Rows:
[[3.1 7.7 2.4 8.9]
[6.5 0.3 5. 1.1]]
4. Average strength of middle two rows: 4.38 MV
Ülesanne TI-2:
The Galactic Cargo Manifest
You are the logistics officer for a space freighter, and your cargo manifest details the mass (in metric tons) of three types of rare minerals (Unobtainium, Dilithium, Vibranium) loaded onto four separate transport ships (A, B, C, D).
- Create a NumPy array called
cargo_manifestto represent the data. The rows should be the Ships and the columns should be the Minerals. Use the following data:
| Ship | Unobtainium (t) | Dilithium (t) | Vibranium (t) |
|---|---|---|---|
| A | 150 | 80 | 210 |
| B | 120 | 95 | 180 |
| C | 160 | 70 | 250 |
| D | 145 | 85 | 200 |
- Calculate the total mass of cargo on each individual ship. (Hint: You'll need to sum across the columns. Which
axisis that?) Store the result in a 1D array calledship_totals. - Calculate the average mass transported for each type of mineral across all four ships. (Hint: You'll need to average down the rows. Which
axisis that?) Store the result in a 1D array calledmineral_averages. - A sudden solar flare caused a 10-ton loss from the heaviest loaded ship. Use NumPy to find the index (use
numpy.argmax) of the ship with the maximum total load fromship_totals. Then, deduct 10 tons from all three mineral masses for that specific ship in the originalcargo_manifest.
Answers:
1. Initial Cargo Manifest (Ships by Minerals):
[[150 80 210]
[120 95 180]
[160 70 250]
[145 85 200]]
2. Total Mass per Ship (axis=1) array:
[440 395 480 430]
2. Total Mass per Ship (axis=1):
Ship A: 440 t
Ship B: 395 t
Ship C: 480 t
Ship D: 430 t
3. Average Mass per Mineral (axis=0) array:
[143.75 82.5 210. ]
3. Average Mass per Mineral (axis=0):
Unobtainium: 143.75 t
Dilithium: 82.50 t
Vibranium: 210.00 t
4. Heaviest loaded ship index: 2 (Ship C)
Applying 10t loss to Ship C...
Updated Manifest Row 2 (Ship C): [150 60 240]
4. Updated Cargo Manifest (Ships by Minerals):
[[150 80 210]
[120 95 180]
[150 60 240]
[145 85 200]]
Ülesanne TI-3:
The Subterranean Temperature Profile
A geologist is measuring the temperature deep within the earth. The temperature fluctuation is modeled by a sinusoidal wave.
- Use NumPy to create two arrays:
depth_km: Represents the depth from 0 km to 10 km, with 150 evenly spaced points.temp_c: Represents the temperature in Celsius, calculated using the formula: $$ T(d) = 30 d + 10 \sin(2 \pi d) + 150, $$ where $d$ is the depth in kilometers (depth_km).
- Use Matplotlib to create a line plot of the temperature profile.
- Ensure the plot has:
- A title: "Subterranean Temperature Profile"
- An x-axis label: "Depth (km)"
- A y-axis label: "Temperature (°C)"
- A grid for better readability.
- Draw a horizontal red dashed line on the plot at 250 °C to represent the Magma Proximity Threshold.
Oodatav tulemus on kujutatud Joonisel 15.
| Joonis 15. Ülesande TI-3 oodatav tulemus. |
Kodus¶
Ülesanne 20: *
Kirjuta programm vastavalt esitatud algoritmile.
Sisendid: Uks, võtmekimp.
Väljund: Uks on avatud.
Tegevused:
A. Vajuta lingile ja tõmba.
B. Vali võti ja aseta see lukuauku.
C. Eemalda võti.
D. Keera võtit.
Valikud:
- Kas uks on avatud?
- Kas võti sobib?
Algoritm:
Kas uks on avatud? Kui jah, siis on programm valmis. Kui ei, siis (A) vajuta lingile ja tõmba. Kas uks on avatud? Kui jah, siis on programm valmis. Kui ei, siis (B) vali juhuslikult võti ja aseta võti lukuauku. Kui võti ei sobi, siis (C) eemalda võti ja korda B. Kui võti sobib, siis keera võtit, korda C ja korda A.
Vihje: Uuri loengus näidatud lambi põlema panemise programmi.
Joonis 16 kujutab eelmainitud algoritmi voodiagrammina.
| Joonis 16. Ülesande 20 algoritm esitatuna voodiagrammina. Algoritm: Ukse avamine. |