From 53d980c3ecff3a2878f1e62f37032fe5982e5546 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Fri, 25 Oct 2019 19:54:37 +0200 Subject: [PATCH] 05: Funkce --- 05-funkce/05-funkce.tex | 164 ++++++++++++++++++++++++++++++++++++++++ 05-funkce/Makefile | 3 + SYLLABUS | 8 +- 3 files changed, 171 insertions(+), 4 deletions(-) create mode 100644 05-funkce/05-funkce.tex create mode 100644 05-funkce/Makefile diff --git a/05-funkce/05-funkce.tex b/05-funkce/05-funkce.tex new file mode 100644 index 0000000..6d444e3 --- /dev/null +++ b/05-funkce/05-funkce.tex @@ -0,0 +1,164 @@ +\documentclass{beamer} +\usepackage[utf8]{inputenc} +\usepackage[czech]{babel} +\usepackage{palatino} +\usepackage{verbatim} +\usetheme{Warsaw} +\title{Programování 1: Funkce} +\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}{Definice funkce} + +{\tt +def stekej(): \\ +~~~~print("Haf!") \\ +~ \\ +stekej() \\ +stekej() +} + +\bigskip + +\begin{itemize} +\item Opakující se část programu stačí napsat jednou \\ + a spustit vícekrát. +\item Také jsme tím část programu pojmenovali, \\ + takže je při čtení jasné, co má dělat. +\end{itemize} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Funkce s parametrem} + +{\tt +def stekej(n): \\ +~~~~for i in range(n): \\ +~~~~~~~~print("Haf!") \\ +~ \\ +stekej(5) +} + +\bigskip + +\begin{itemize} +\item Funkci můžeme předat parametr. +\item Když zavoláme {\tt stekej(5)}, funkce se spustí s~proměnnou~{\tt n} + nastavenou na~{\tt 5}. +\item Proměnné {\tt n} a~{\tt i} existují jen lokálně uvnitř funkce, \\ + zvenčí nejsou vidět. +\end{itemize} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Funkce s výsledkem} + +{\tt +def minimum(a, b): \\ +~~~~if a < b: \\ +~~~~~~~~return a \\ +~~~~else: \\ +~~~~~~~~return b \\ +~ \\ +print(minimum(3, 5)) +} + +\bigskip + +\begin{itemize} +\item Příkaz {\bf return} ukončí vykonávání funkce a vrátí výsledek. +\item Můžeme použít i {\bf return} bez výsledku (vrátí {\bf None}). +\end{itemize} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Ještě o~parametrech} + +{\bf Nepovinné parametry:} + +\bigskip + +{\tt +def stekej(n=1, zvuk="Haf!"): \\ +~~~~for i in range(n): \\ +~~~~~~~~print(zvuk) +} + +\bigskip + +{\bf Různé způsoby volání:} + +\bigskip + +{\tt +stekej() \\ +stekej(5) \\ +stekej(5, "HAF!") \\ +stekej(5, zvuk="HAF!") \\ +stekej(zvuk="HAF!") +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Viditelnost proměnných: chyták} + +{\tt +zvuk = "Kuku!" \\ +kolik\_hodin = 0 \\ +~ \\ +def zakukej(): \\ +~~~~print(zvuk) \\ +~~~~kolik\_hodin += 1 +} + +\bigskip + +\begin{itemize} +\item Funkce vidí globální proměnnou {\bf zvuk} +\item Proměnná {\bf kolik\_hodin} je ale lokální, \\ + protože funkce do ní přiřazuje. +\end{itemize} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Viditelnost proměnných: řešení} + +{\tt +zvuk = "Kuku!" \\ +kolik\_hodin = 0 \\ +~ \\ +def zakukej(): \\ +~~~~{\color{blue}global kolik\_hodin} \\ +~~~~print(zvuk) \\ +~~~~kolik\_hodin += 1 +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\end{document} diff --git a/05-funkce/Makefile b/05-funkce/Makefile new file mode 100644 index 0000000..6b5d751 --- /dev/null +++ b/05-funkce/Makefile @@ -0,0 +1,3 @@ +SLIDES=05-funkce.pdf + +include ../Makerules diff --git a/SYLLABUS b/SYLLABUS index 85aa0d8..58135dd 100644 --- a/SYLLABUS +++ b/SYLLABUS @@ -46,10 +46,10 @@ Značení: ## Funkce (1) - definice a volání funkcí - nepovinné parametry -- abstrakce a modularita programů +* abstrakce a modularita programů - lokální identifikátory a jejich viditelnost -- princip rekurze -- předávání funkcí jiným funkcím +* princip rekurze +* předávání funkcí jiným funkcím ## Knihovny I a grafika (1) - používání knihoven, import @@ -59,7 +59,7 @@ Značení: - seznamy a operace s nimi - fronta a zásobník - iterování přes seznam -- řezy +- řezy a přiřazování do nich - list comprehension - stringy - formátování -- GitLab