Select Git revision
02-docum-codigo.Rnw
-
Walmes Marques Zeviani authoredWalmes Marques Zeviani authored
02-docum-codigo.Rnw 7.79 KiB
%-----------------------------------------------------------------------
\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}