From e454bb0f02d16ba7e5d61c76d2b5219d65e323df Mon Sep 17 00:00:00 2001 From: Walmes Zeviani <walmes@ufpr.br> Date: Wed, 1 Aug 2018 18:54:12 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20aula=20de=20documenta=C3=A7=C3=A3o?= =?UTF-8?q?=20de=20c=C3=B3digo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- slides/02-docum-codigo.Rnw | 279 +++++++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 slides/02-docum-codigo.Rnw diff --git a/slides/02-docum-codigo.Rnw b/slides/02-docum-codigo.Rnw new file mode 100644 index 0000000..0aa091a --- /dev/null +++ b/slides/02-docum-codigo.Rnw @@ -0,0 +1,279 @@ +%----------------------------------------------------------------------- + +\documentclass[serif, professionalfont, usenames, dvipsnames]{beamer} +\usepackage[T1]{fontenc} + +% ATTENTION: preamble.tex contains all style definitions. +\input{config/preamble.tex} +\bibliography{./config/refs} + +<<include = FALSE>>= +source("config/setup.R") +@ + +%----------------------------------------------------------------------- + +\title{Representação de algorítmos} +\subtitle{Fluxogramas e pseudo-código} +\date{\small{ \Sexpr{sprintf('Atualizado em %s', Sys.Date())}}} + +%----------------------------------------------------------------------- + +\begin{document} + +{\setbeamertemplate{footline}{} + \frame{\titlepage} %-------------------------------------------------- +} + +\begin{frame}{} + + {\large Justificativas} + + \begin{itemize} + \item Documentar rotinas de forma independente de linguagem é + importante para comunicação entre programadores. + \item Também é funciona como uma ``planta-baixa'' para a + implementação, reduzindo muitos erros de programação. + \end{itemize} + + \begin{flushright} + \textit{``If the map and the terrain disagree, trust the terrain.''} + \vspace{1ex} + + -- Swiss Army Aphorism + \end{flushright} + + {\large Objetivos} + + \begin{itemize} + \item Conhecer a simbologia de fluxogramas para representação de + rotinas. + \item Conhecer o vocabulário de pseudo código ou portugol. + \item Exercitar a escrita e leitura com estas formas de representação. + \end{itemize} +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}{Simbologia de fluxogramas} + + \begin{center} + \includegraphics[height=8cm]{../img/fluxograms.pdf} + \end{center} + +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame} + \begin{minipage}[c]{0.25\linewidth} + \includegraphics[width=\linewidth]{../img/teofilo-fluxogramas.png} + \end{minipage} + \hspace{1ex} + \begin{minipage}[c]{0.7\linewidth} + \begin{flushleft} + SOUZA, T. M. \textbf{Fluxogramas, linguagem de programação basic e + aplicações}. 1 ed. Ligthouse + Editora. 2015.\\ + \href{http://www.editoraufv.com.br/produto/1853470/fluxogramas-linguagem-de-programacao-basic-e-aplicacoes}{\btn{Comprar}} + \end{flushleft} + \end{minipage} +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}{Como entender fluxogramas} + \begin{center} + \includegraphics[height=7.5cm]{../img/understand-flowchart.png} + \end{center} +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}{Exemplos da aplicação de fluxogramas} + + \begin{itemize} + \item + \url{http://www.inf.puc-rio.br/~inf1005/material/slides/backup/2010_2/tema02_algoritmos.pdf} + \item + \url{https://uomustansiriyah.edu.iq/media/lectures/5/5_2016_03_22!07_06_46_PM.pdf} + \item + \url{http://www2.ic.uff.br/~otton/graduacao/programacao/exemplos_pseudo_codigo.pdf} + \item + \url{http://producao.virtual.ufpb.br/books/edusantana/pseudocodigo-livro/livro/livro.chunked/ch02s04.html} + \end{itemize} + +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}{Recursos para confecção de fluxogramas} + + \mytwocolumns{0.49}{0.49}{ + + \begin{itemize} + \item \url{https://www.draw.io/}. + \item \url{https://cloud.smartdraw.com/}. + \item \url{https://www.lucidchart.com/}. + \item + \href{http://www.ioncannon.net/utilities/123/10-tips-for-creating-good-looking-diagrams-using-inkscape/}{Inkscape}. + \item + \href{http://www.texample.net/tikz/examples/tag/flowcharts/}{Tikz}. + \item + \href{http://dia-installer.de/shapes/Flowchart/index.html.en}{Dia}. + \item \href{https://www.graphviz.org/gallery/}{Graphviz}. + \item \href{http://www.flowgorithm.org/}{Flowgorithm}. + \end{itemize} + + }{ + + \begin{itemize} + \item \url{https://code2flow.com/}. + \item \href{https://sourceforge.net/projects/edpcs/}{Edpcs}. + \item \href{https://pt.sharelatex.com/learn/algorithms}{\LaTeX}. + \end{itemize} + + } + +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}{Vantagens e desvantagens dos fluxogramas} + + \begin{block}{Vantagens} + \begin{itemize} + \item Representação visual fácil de entender. + \item Útil para comunicação com pessoas sem experiência em + programação. + \item Útil para prototipar e reduzir tempo de escrita de código. + \end{itemize} + \end{block} + + \begin{block}{Desvantagens} + \begin{itemize} + \item Não existe uma correspondência lógicas rígida com comandos de + linguagens. + \item Portanto não serve como meio de documentação precisa para + arquivamento (é complementar). + \end{itemize} + \end{block} + +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}{Recordando sobre escrita de funções R} + + \begin{itemize} + \item Dicas para nomes de função: ação $\rightarrow$ verbo. + \item Argumentos de função: parâmetro $\neq$ argumento. + \item Retorno da função: posição, conteúdo e impressão. + \item Comunicação com usuário (\href{http://adv-r.had.co.nz/Exceptions-Debugging.html}{\btn{Advanced R}}). + \begin{itemize} + \item Erros (\emph{erros}). + \item Avisos (\emph{warnings}). + \item Mensagens (\emph{messages}). + \end{itemize} + \item Tratamento de exceções. + \item Formas de chamar funções. + \item O uso de \texttt{...} em funções. + \end{itemize} + +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}{Benchmarking, profiling e debbuging} + + \begin{description} + \item[Benchmarking] é o processo de avaliar a performance de operações + específicas repetidamente. + \item[Profiling] é o processo de fazer o benchmark para cada instrução + de uma função/rotina. + \item[Debugging] é o processo de buscar e resolver erros. Técnicas de + debugging permitem avaliar a função passo a passo quando chamada. + \end{description} + + \vfill + \myurl{https://bookdown.org/csgillespie/efficientR/}. + +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}[t, fragile, allowframebreaks]{Exemplo de aplicação} + + {\large Benchmark} + +<<>>= +library("microbenchmark") + +df <- data.frame(v = 1:4, name = letters[1:4]) +microbenchmark(df[3, 2], df[3, "name"], df$name[3]) +@ + + \framebreak + {\large Profiling} + +<<eval = FALSE>>= +library("profvis") + +profvis({ + x <- runif(10000000) + z <- rpois(10000000, lambda = 5) + x <- sort(x) + z <- sort(z) + mean(x) + mean(z) + median(x) + median(z) +}) +@ + + \framebreak + {\large Debugging} + +<<eval = FALSE>>= +baskara <- function(a, b, c) { + stopifnot(a != 0) + delta <- b^2 - 4 * a * c + if (delta >= 0) { + den <- 2 * a + sqrt_delta <- sqrt(delta) + x <- (-b + c(-1, 1) * sqrt_delta)/den + } else { x <- NULL } + return(x) +} +# Entra no modo de debug. +debug(fun = baskara) +# Chama a função. +baskara(a = -3, b = 1, c = 2) +# Sai do modo de debug. +undebug(fun = baskara) +@ + +\end{frame} + +%----------------------------------------------------------------------- +{ + \usebackgroundtemplate{\includegraphics[height=\paperheight, width=\paperwidth]{../img/looking-ahead.jpg}} + % \setbeamersize{text margin left=30mm} + + \begin{frame}[b]{} + + \hspace*{0.5\linewidth} + \begin{minipage}[t]{0.5\linewidth} + + \hi{Próximo assunto} + \begin{itemize} + \item Programação funcional. + \item Família \texttt{*apply}. + \item Pacote \texttt{purrr}. + \end{itemize} + + \hi{Semana que vem} + \begin{itemize} + \item Sabatina no Moodle. + \item Aula com outro professor (talvez). + \end{itemize} + + \end{minipage} + +\end{frame} +} + + +%----------------------------------------------------------------------- +\end{document} -- GitLab