%----------------------------------------------------------------------- \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}