From 6a116181576a6efdfe7ab9f0b000e4e2d0069b8d Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sun, 20 Oct 2019 19:24:42 +0200
Subject: [PATCH] =?UTF-8?q?04:=20T=C5=99=C3=ADd=C4=9Bn=C3=AD=20a=20hled?=
 =?UTF-8?q?=C3=A1n=C3=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 04-trideni/04-trideni.tex           | 74 +++++++++++++++++++++++++++++
 04-trideni/Makefile                 |  3 ++
 04-trideni/binarni-hledani-print.py | 12 +++++
 04-trideni/binarni-hledani-raw.py   | 17 +++++++
 04-trideni/binarni-hledani.py       | 21 ++++++++
 04-trideni/trideni-vyberem.py       | 14 ++++++
 SYLLABUS                            |  1 +
 7 files changed, 142 insertions(+)
 create mode 100644 04-trideni/04-trideni.tex
 create mode 100644 04-trideni/Makefile
 create mode 100644 04-trideni/binarni-hledani-print.py
 create mode 100644 04-trideni/binarni-hledani-raw.py
 create mode 100755 04-trideni/binarni-hledani.py
 create mode 100755 04-trideni/trideni-vyberem.py

diff --git a/04-trideni/04-trideni.tex b/04-trideni/04-trideni.tex
new file mode 100644
index 0000000..7abef0c
--- /dev/null
+++ b/04-trideni/04-trideni.tex
@@ -0,0 +1,74 @@
+\documentclass{beamer}
+\usepackage[utf8]{inputenc}
+\usepackage[czech]{babel}
+\usepackage{palatino}
+\usepackage{verbatim}
+\usetheme{Warsaw}
+\title{Programování 1: Třídění a vyhledávání}
+\author[Martin Mareš]{Martin Mareš\\\texttt{mj@ucw.cz}}
+\institute{Katedra Aplikované Matematiky\\MFF UK Praha}
+\date{2019}
+\begin{document}
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{footline}{}
+\setbeamerfont{title page}{family=\rmfamily}
+\shorthandoff{"}
+
+\begin{frame}
+\titlepage
+\end{frame}
+
+\input ../slidemac.tex
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Binární vyhledávání v setříděném seznamu}
+
+\verbatiminput{binarni-hledani-raw.py}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Intermezzo: Formátovací řetězce}
+
+\py{%
+x=1\\
+y=2\\
+f"\{x\},\{y\}"
+}{%
+'1,2'
+}
+
+\py{%
+f"\{x:5\} \{y:05\}"
+}{%
+'~~~~1 00002'
+}
+
+\py{%
+z=1/3\\
+f"\{z:.6\}"
+}{%
+'0.333333'
+}
+
+\py{%
+f"\{1/3\}"
+}{%
+'0.3333333333333333'
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Třídění výběrem}
+
+\verbatiminput{trideni-vyberem.py}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\end{document}
diff --git a/04-trideni/Makefile b/04-trideni/Makefile
new file mode 100644
index 0000000..afa399d
--- /dev/null
+++ b/04-trideni/Makefile
@@ -0,0 +1,3 @@
+SLIDES=04-trideni.pdf
+
+include ../Makerules
diff --git a/04-trideni/binarni-hledani-print.py b/04-trideni/binarni-hledani-print.py
new file mode 100644
index 0000000..3670851
--- /dev/null
+++ b/04-trideni/binarni-hledani-print.py
@@ -0,0 +1,12 @@
+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")
diff --git a/04-trideni/binarni-hledani-raw.py b/04-trideni/binarni-hledani-raw.py
new file mode 100644
index 0000000..a656a6f
--- /dev/null
+++ b/04-trideni/binarni-hledani-raw.py
@@ -0,0 +1,17 @@
+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")
diff --git a/04-trideni/binarni-hledani.py b/04-trideni/binarni-hledani.py
new file mode 100755
index 0000000..41d118e
--- /dev/null
+++ b/04-trideni/binarni-hledani.py
@@ -0,0 +1,21 @@
+#!/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
+    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")
diff --git a/04-trideni/trideni-vyberem.py b/04-trideni/trideni-vyberem.py
new file mode 100755
index 0000000..6fb5134
--- /dev/null
+++ b/04-trideni/trideni-vyberem.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python3
+# Třídění opakovaným výběrem minima
+
+x = [31, 41, 59, 26, 53, 58, 97]
+
+n = len(x)
+for i in range(n):
+    pmin = i
+    for j in range(i+1, n):
+        if x[j] < x[pmin]:
+            pmin = j
+    x[i], x[pmin] = x[pmin], x[i]
+
+print(x)
diff --git a/SYLLABUS b/SYLLABUS
index 38ff972..85aa0d8 100644
--- a/SYLLABUS
+++ b/SYLLABUS
@@ -62,6 +62,7 @@ Značení:
 - řezy
 - list comprehension
 - stringy
+- formátování
 # slévání setříděných posloupností
 
 ## Datové struktury (1)
-- 
GitLab