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}
\title{Programování 1: Třídění a vyhledávání}
\usepackage{animate}
\title{Programování 1.5: Třídění a vyhledávání}
\input ../slidemac.tex
......@@ -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}
\pycode{binarni-hledani-raw.py}
......@@ -23,7 +75,7 @@
% ----------------------------------------------------------------------
\begin{frame}{Intermezzo: Formátovací řetězce}
\begin{frame}{f-string pro pokročilé}
\py{%
x=1\\
......@@ -40,22 +92,37 @@ f"\{x:5\} \{y:05\}"
}
\py{%
z=1/3\\
f"\{z:.6\}"
f"\{y:.6f\}"
}{%
'2.000000'
}
\py{%
f"\{y:.2e\}"
}{%
'0.333333'
'2.00e+00'
}
Novinka v Pythonu 3.8 (skvělá pro ladění):
\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}
% ----------------------------------------------------------------------
\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}
\pycode{trideni-vyberem.py}
......@@ -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}
#!/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