Commit 34f89265 authored by cermak's avatar cermak
Browse files

Lesson 5

parent a25c858d
Pipeline #17166 failed with stage
in 3 minutes and 12 seconds
\documentclass{beamer} \documentclass{beamer}
\usepackage{animate}
\title{Programování 1: Třídění a vyhledávání}
\title{Programování 1.5: Třídění a vyhledávání}
\input ../slidemac.tex \input ../slidemac.tex
...@@ -15,6 +16,57 @@ ...@@ -15,6 +16,57 @@
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{markdown}
%%begin novalidate
### Binární vyhledávání v setříděném seznamu
Hledáme číslo 7
\setkeys{Gin}{width=.9\linewidth}
![search](search1.png)
\end{frame}
### Binární vyhledávání v setříděném seznamu
Hledáme číslo 7
\setkeys{Gin}{width=.9\linewidth}
![search](search2.png)
\end{frame}
### Binární vyhledávání v setříděném seznamu
Hledáme číslo 7
\setkeys{Gin}{width=.9\linewidth}
![search](search3.png)
\end{frame}
### Binární vyhledávání v setříděném seznamu
Hledáme číslo 7
\setkeys{Gin}{width=.9\linewidth}
![search](search4.png)
\end{frame}
### Binární vyhledávání v setříděném seznamu
Hledáme číslo 7
\setkeys{Gin}{width=.9\linewidth}
![search](search5.png)
\end{frame}
%%novalidate
\end{markdown}
\begin{frame}{Binární vyhledávání v setříděném seznamu} \begin{frame}{Binární vyhledávání v setříděném seznamu}
\pycode{binarni-hledani-raw.py} \pycode{binarni-hledani-raw.py}
...@@ -23,7 +75,7 @@ ...@@ -23,7 +75,7 @@
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Intermezzo: Formátovací řetězce} \begin{frame}{f-string pro pokročilé}
\py{% \py{%
x=1\\ x=1\\
...@@ -40,22 +92,37 @@ f"\{x:5\} \{y:05\}" ...@@ -40,22 +92,37 @@ f"\{x:5\} \{y:05\}"
} }
\py{% \py{%
z=1/3\\ f"\{y:.6f\}"
f"\{z:.6\}" }{%
'2.000000'
}
\py{%
f"\{y:.2e\}"
}{% }{%
'0.333333' '2.00e+00'
} }
Novinka v Pythonu 3.8 (skvělá pro ladění):
\py{% \py{%
f"\{1/3\}" f"\{x = \}"
}{% }{%
'0.3333333333333333' 'x = 1'
} }
Dále zarovnávání stringů, hexadecimální a jiné formáty, datumy.
\end{frame} \end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Selection sort}
\centering
\animategraphics[loop,controls,width=0.12\linewidth]{10}{sort/sort}{01}{76}
\end{frame}
\begin{frame}{Třídění výběrem} \begin{frame}{Třídění výběrem}
\pycode{trideni-vyberem.py} \pycode{trideni-vyberem.py}
...@@ -64,4 +131,20 @@ f"\{1/3\}" ...@@ -64,4 +131,20 @@ f"\{1/3\}"
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Úkoly na hodinu}
Použijte binární vyhledávání na spočítání celočíselné druhé odmocniny.
\bigskip
\bigskip
Setřiďte posloupnost probubláváním:
dokud existují dvojice x[i] $>$ x[i+1], prohazujte je.
\end{frame}
% ----------------------------------------------------------------------
\end{document} \end{document}
#!/usr/bin/env python3
# Binární vyhledávání v setříděném seznamu
kde = [11, 22, 33, 44, 55, 66, 77, 88]
co = int(input())
# Hledané číslo se nachazí v intervalu [l, p]
l = 0
p = len(kde) - 1
while l <= p:
stred = (l+p) // 2
print(f"[{l},{p}] {kde[stred]}")
if kde[stred] == co: # Našli jsme
print(f"Nalezeno na pozici {stred}")
break
elif kde[stred] < co:
l = stred + 1 # Jdeme doprava
else:
p = stred - 1 # Jdeme doleva
else:
print("Kde nic, tu nic")
kde = [11, 22, 33, 44, 55, 66, 77, 88]
co = int(input())
l = 0 # Hledáme v intervalu [l,p]
p = len(kde) - 1
while l <= p:
stred = (l+p) // 2
if kde[stred] == co: # Našli jsme
print("Nalezeno na pozici", stred)
break
elif kde[stred] < co:
l = stred + 1 # Jdeme doprava
else:
p = stred - 1 # Jdeme doleva
else:
print("Kde nic, tu nic")
#!/usr/bin/env python3
# Spočítá průnik dvou setříděných seznamů
def prunik_seznamu(a, b):
vystup = []
j = 0
for x in a:
while j < len(b) and b[j] < x:
j += 1
if j < len(b) and b[j] == x:
vystup.append(x)
j += 1
return vystup
#!/usr/bin/env python3
# Přibližné řešení rovnice x=cos(x) binárním vyhledáváním
from math import cos
# Udržujeme interval [l,p] takový, že x-cos(x) má na obou
# krajích intervalu opačná znaménka.
l = 0
p = 1
while p-l > 1e-10:
x = (l+p) / 2
if x-cos(x) < 0:
l = x
else:
p = x
print("Kořen leží mezi", l, "a", p)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment