From e12423fc33ccccb255fcf7ec2be38bf936460997 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Fri, 11 Oct 2019 22:17:27 +0200
Subject: [PATCH] 03: Seznamy

---
 03-seznamy/03-seznamy.tex     | 203 ++++++++++++++++++++++++++++++++++
 03-seznamy/Makefile           |   3 +
 03-seznamy/fibonacci.py       |  10 ++
 03-seznamy/seznam-pozpatku.py |  14 +++
 03-seznamy/sito.py            |  11 ++
 5 files changed, 241 insertions(+)
 create mode 100644 03-seznamy/03-seznamy.tex
 create mode 100644 03-seznamy/Makefile
 create mode 100755 03-seznamy/fibonacci.py
 create mode 100755 03-seznamy/seznam-pozpatku.py
 create mode 100755 03-seznamy/sito.py

diff --git a/03-seznamy/03-seznamy.tex b/03-seznamy/03-seznamy.tex
new file mode 100644
index 0000000..b7cae73
--- /dev/null
+++ b/03-seznamy/03-seznamy.tex
@@ -0,0 +1,203 @@
+\documentclass{beamer}
+\usepackage[utf8]{inputenc}
+\usepackage[czech]{babel}
+\usepackage{palatino}
+\usepackage{verbatim}
+\usetheme{Warsaw}
+\title{Programování 1: Seznamy}
+\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}
+
+\begin{frame}
+\titlepage
+\end{frame}
+
+\input ../slidemac.tex
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Seznamy a jejich indexování}
+
+\py{%
+cisla = [11, 22, 33, 44, 55]
+}{%
+}
+
+\py{%
+cisla[0]
+}{%
+11
+}
+
+\py{%
+cisla[2]
+}{%
+33
+}
+
+\py{%
+cisla[-1]
+}{%
+55
+}
+
+\py{%
+len(cisla)
+}{%
+5
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Vnořené seznamy}
+
+\py{%
+matice = [[11, 12, 13], [21, 22, 23]]
+}{%
+}
+
+\py{%
+matice[0]
+}{%
+[11, 12, 13]
+}
+
+\py{%
+matice[0][2]
+}{%
+13
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+% \begin{frame}{Řetězec se také chová jako seznam}
+% 
+% \py{%
+% slovo = "mňau"\\
+% len(slovo)
+% }{%
+% 4
+% }
+% 
+% \py{%
+% slovo[1]
+% }{%
+% 'ň'
+% }
+% 
+% \py{%
+% slova = ["mňau", "haf", "kvák"]\\
+% slova[1]
+% }{%
+% 'haf'
+% }
+% 
+% \end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Cyklus for}
+
+\py{%
+slova = ["mňau", "haf", "kvák"]\\
+for x in slova:\.
+\>print(x)
+}{%
+mňau\\
+haf\\
+kvák
+}
+
+\py{%
+for x in range(1, 5):\.
+\>print(x)
+}{%
+1\\
+2\\
+3\\
+4
+}
+
+\py{%
+for i in range(len(x)):\.
+\>print(x[i])
+}{%
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Operace se seznamy}
+
+\py{%
+slova = ["mňau", "haf", "kvák"]\\
+slova.append("íá")\\
+slova
+}{%
+['mňau', 'haf', 'kvák', 'íá']
+}
+
+\py{%
+[1, 2] + [3, 4, 5]
+}{%
+[1, 2, 3, 4, 5]
+}
+
+\py{%
+[0] * 5
+}{%
+[0, 0, 0, 0, 0]
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Chyták: proměnné na seznamy jen odkazují!}
+
+\py{%
+x = [1, 2, 3]\\
+y = x\\
+x[2] = 9\\
+y
+}{%
+[1, 2, 9]
+}
+
+\py{%
+m = [[0] * 4] * 3\\
+m
+}{%
+[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
+}
+
+\py{%
+m[0][0] = 1\\
+m
+}{%
+[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Vypsání čísel pozpátku}
+
+\verbatiminput{seznam-pozpatku.py}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\end{document}
diff --git a/03-seznamy/Makefile b/03-seznamy/Makefile
new file mode 100644
index 0000000..b2afdc5
--- /dev/null
+++ b/03-seznamy/Makefile
@@ -0,0 +1,3 @@
+SLIDES=03-seznamy.pdf
+
+include ../Makerules
diff --git a/03-seznamy/fibonacci.py b/03-seznamy/fibonacci.py
new file mode 100755
index 0000000..cc585bd
--- /dev/null
+++ b/03-seznamy/fibonacci.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python3
+# Spočítá prvních N Fibonacciho čísel (N>=2)
+
+N = int(input())
+fib = [0, 1]
+
+for i in range(N-2):
+    fib.append(fib[-1] + fib[-2])
+
+print(fib)
diff --git a/03-seznamy/seznam-pozpatku.py b/03-seznamy/seznam-pozpatku.py
new file mode 100755
index 0000000..5cf5a32
--- /dev/null
+++ b/03-seznamy/seznam-pozpatku.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python3
+# Načítá čísla ze vstupu ukončená -1,
+# vypíše je pozpátku
+
+seznam = []
+
+while True:
+    x = int(input())
+    if x == -1:
+        break
+    seznam.append(x)
+
+for i in range(len(seznam)):
+    print(seznam[-i-1])
diff --git a/03-seznamy/sito.py b/03-seznamy/sito.py
new file mode 100755
index 0000000..07bcea6
--- /dev/null
+++ b/03-seznamy/sito.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+# Eratosthenovo síto: najde prvočísla mezi 1 a N
+
+N = int(input())
+A = [True] * (N+1)
+
+for i in range(2, N+1):
+    if A[i]:
+        print(i)
+        for j in range(2*i, N+1, i):
+            A[j] = False
-- 
GitLab