01-uvod.tex 5.41 KB
Newer Older
Mareš Martin's avatar
Mareš Martin committed
1
\documentclass{beamer}
cermak's avatar
cermak committed
2
 
cermak's avatar
cermak committed
3
\input ../slidemac.tex
Mareš Martin's avatar
Mareš Martin committed
4

5
6
7
\title[NMIN111]{Programování 1: Úvod do Pythonu}

\begin{document}
cermak's avatar
cermak committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
   
\maketitle


% ----------------------------------------------------------------------

\begin{markdown}
%%begin novalidate
### Úvodní informace

- Web cvičení: [cermak.science/teaching/p1m/](https://cermak.science/teaching/p1m/)
- Podmínky zápočtu: 70/120 bodů v ReCodExu \pause
- Konzultace: 
    - slack (nejrychlejší)
    - mail (klasika)  
    - zoom (možno si domluvit konzultaci), 
    - osobní setkání (max 2 naráz, kancelář mám v Troji)

\end{frame}

### Programování = psaní algoritmů

- *Co je Algoritmus?* **Návod na dosažení výsledku.**
- Příklad: Euklidův algoritmus (=nalezení **N**ějvětšího **S**polečného **D**ělitele)
    - Vychází z tvrzení $NSD(u, v) = NSD(v, u – qv)$ \pause
    - **Návod pro matfyzáka**: *Největší společný dělitel dvou přirozených čísel nalezneme tak, že dokud jsou obě různá, odečítáme menší od většího.* \pause
    - **Návod pro opice**: *Vidíš 2 hromady kamenů. Vezmi z té větší tolik, kolik je v té menší a zahoď je. Opakuj dokud není v obou stejně.* \pause
    - **Návod pro procesor Z80**: *B8C83803 9018F94F 78914779 18F2* \pause

\setkeys{Gin}{width=.75\linewidth}    
![exampleimage](asm-z80.png)

\end{frame}

### Programovací jazyky
 
- Strojový kód je pro člověka nečitelný
- Závisí na procesoru
- Programovací jazyk je čitelný, *překladač* ho zkompiluje do zdrojového kódu
- Dynamické programovací jazyky - překládají se za běhu \pause

**Python**

- Snadno čitelný kód
- Populární ve vědě, AI, statistice
- Mnoho dostupných knihoven


\end{frame}

%%novalidate
\end{markdown}
% ----------------------------------------------------------------------

\begin{frame}{Euklidův algoritmus v Pythonu}

    \py{from math import gcd\\gcd(15,10)}{5}
    
    \={Na konci dnešní hodiny to budete umět naprogramovat bez vestavěné funkce.}
    
Mareš Martin's avatar
Mareš Martin committed
68
69
70
71
\end{frame}

% ----------------------------------------------------------------------

Mareš Martin's avatar
Mareš Martin committed
72
\begin{frame}{Python jako kalkulačka}
Mareš Martin's avatar
Mareš Martin committed
73

Mareš Martin's avatar
Mareš Martin committed
74
\py{1+1}{2}
Mareš Martin's avatar
Mareš Martin committed
75

Mareš Martin's avatar
Mareš Martin committed
76
\py{2+3*4+1}{15}
Mareš Martin's avatar
Mareš Martin committed
77

78
\py{2+3 * 4+1}{15} 
Mareš Martin's avatar
Mareš Martin committed
79

Mareš Martin's avatar
Mareš Martin committed
80
\py{(2+3)*(4+1)}{25}
Mareš Martin's avatar
Mareš Martin committed
81

Mareš Martin's avatar
Mareš Martin committed
82
\py{2**10}{1024}
Mareš Martin's avatar
Mareš Martin committed
83

Mareš Martin's avatar
Mareš Martin committed
84
\py{2**100}{1267650600228229401496703205376}
Mareš Martin's avatar
Mareš Martin committed
85
86
87
88
89

\end{frame}

% ----------------------------------------------------------------------

Mareš Martin's avatar
Mareš Martin committed
90
\begin{frame}{Desetinná čísla}
Mareš Martin's avatar
Mareš Martin committed
91

Mareš Martin's avatar
Mareš Martin committed
92
93
\={Dělení vytváří \uv{desetinná} čísla s~omezenou přesností:}
\py{1/3}{0.3333333333333333}
Mareš Martin's avatar
Mareš Martin committed
94

95
\py{1/3 * 3}{1.0}
Mareš Martin's avatar
Mareš Martin committed
96

97
\py{1/6 + 1/6 + 1/6 + 1/6 + 1/6 + 1/6}{0.9999999999999999}
Mareš Martin's avatar
Mareš Martin committed
98

Mareš Martin's avatar
Mareš Martin committed
99
100
\={Notace s mantisou a exponentem: $m\cdot10^e$.}
\py{1/(2**100)}{7.888609052210118e-31}
Mareš Martin's avatar
Mareš Martin committed
101

Mareš Martin's avatar
Mareš Martin committed
102
103
104
105
106
107
\end{frame}

% ----------------------------------------------------------------------

\begin{frame}{Celočíselné dělení}

Mareš Martin's avatar
Mareš Martin committed
108
109
\={Celočíselné dělení:}
\py{7//3}{2}
Mareš Martin's avatar
Mareš Martin committed
110

Mareš Martin's avatar
Mareš Martin committed
111
112
\={Zbytek po dělení (modulo):}
\py{7\%3}{1}
Mareš Martin's avatar
Mareš Martin committed
113

Mareš Martin's avatar
Mareš Martin committed
114
115
\={Dělení záporného čísla zaokrouhluje dolů, nikoliv k nule:}
\py{-7//3}{-3}
116
\py{-(7//3)}{-2} 
Mareš Martin's avatar
Mareš Martin committed
117

Mareš Martin's avatar
Mareš Martin committed
118
119
\={Vždy platí {\tt (a//b)*b + (a\%b) = a}}
\py{-7\%3}{2}
Mareš Martin's avatar
Mareš Martin committed
120
121
122
123
124
125

\end{frame}

% ----------------------------------------------------------------------

\begin{frame}{Proměnné}
Mareš Martin's avatar
Mareš Martin committed
126

Mareš Martin's avatar
Mareš Martin committed
127
\={Hodnotu výrazu si můžeme pojmenovat:}
Mareš Martin's avatar
Mareš Martin committed
128
\py{a=100\\b=23\\a+b}{123}
Mareš Martin's avatar
Mareš Martin committed
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172

\={Obsah proměnné jde měnit:}
\py{soucet=0\\soucet=soucet+10\\soucet=soucet+3\\soucet}{13}

\={Zkrácený zápis:}
\py{soucet+=1\\soucet}{14}

\end{frame}

% ----------------------------------------------------------------------

\begin{frame}{Matematické funkce}

\={Matematická knihovna:}
\py{import math\\math.pi}{3.141592653589793}

\py{math.sin(math.pi / 3)}{0.8660254037844386}

\={Voláme o pomoc:}
\py{help(math.sin)\\help(math)}{}

\={Místo {\tt math.sin} můžeme psát prostě {\tt sin}:}
\py{from math import *\\sin(0)}{}

\end{frame}

% ----------------------------------------------------------------------

\begin{frame}{Klademe Pythonu otázky}

\py{5**7 > 7**5}{True}

\py{cos(0) < 0}{False}

\py{0.8 <= sin(pi/3) <= 0.9}{True}

\py{pi>3 and pi<4}{True}

\py{x>0 or not x>0}{True}

\py{1 == 1}{True}

\py{1 != 2}{True}

173
\end{frame}  
Mareš Martin's avatar
Mareš Martin committed
174
175
176
177

% ----------------------------------------------------------------------

\begin{frame}{Náš první program: počítáme od 1 do 10}
178
179
 
\pycode{first.py}
Mareš Martin's avatar
Mareš Martin committed
180
181
182
183
184
185
186
187
188
189
190
191

\bigskip

Odsazování je povinné, udává blokovou strukturu programu.
Pak je jasné, které příkazy jsou uvnitř cyklu, a~které už za ním.

\end{frame}

% ----------------------------------------------------------------------

\begin{frame}{Náš první program: vypisujeme jen sudá čísla}

192
\pycode{first-even.py}
Mareš Martin's avatar
Mareš Martin committed
193
194
195
196
197
198
199

\end{frame}

% ----------------------------------------------------------------------

\begin{frame}{Náš první program: zeptáme se, do kolika počítat}

200
\pycode{first-input.py}
Mareš Martin's avatar
Mareš Martin committed
201
202
203
204
205
206
207
208
209
210
211
212
213

\bigskip

V~uvozovkách se zapisují řetězce (o~nich později).

Funkce {\tt input()} načte řetězec, {\tt int()} ho převede na číslo.

\end{frame}

% ----------------------------------------------------------------------

\begin{frame}{Náš první program: ještě trocha komentářů}

214
\pycode{first-comments.py}
Mareš Martin's avatar
Mareš Martin committed
215
216
217
218

Od {\tt\#} do konce řádku se vše ignoruje.

Prvni řádek pod Linuxem říká, čím se má soubor spustit.
Mareš Martin's avatar
Mareš Martin committed
219

220
\end{frame} 
Mareš Martin's avatar
Mareš Martin committed
221

cermak's avatar
cermak committed
222
223
224
225
226
227
228
229
230
231
232
233
234

% ----------------------------------------------------------------------

\begin{frame}{Náš druhý program: Euklidův algoritmus}

    \pycode{euclid.py}

    Trocha Python magic:

    \pycode{euclid-fast.py}

\end{frame} 

Mareš Martin's avatar
Mareš Martin committed
235
236
237
% ----------------------------------------------------------------------

\end{document}