diff --git a/slides/01-revis-program.Rnw b/slides/01-revis-program.Rnw index d3429d6add7e2dd96cccddf87ebcfbeb84ec7e6e..1a1218d488782214b6feb81ea873acc9d4646aba 100644 --- a/slides/01-revis-program.Rnw +++ b/slides/01-revis-program.Rnw @@ -46,7 +46,7 @@ source("config/setup.R") \end{frame} %----------------------------------------------------------------------- -\begin{frame}[fragile, allowframebreaks]{Estruturas de controle} +\begin{frame}[t, fragile, allowframebreaks]{Estruturas de controle} \begin{minipage}[t]{0.55\linewidth} @@ -118,6 +118,12 @@ source("config/setup.R") <statments if FALSE and FALSE> } @ + + \begin{itemize} + \item O R não tem o contrutor \texttt{elif}. + \item Quando o código tem uma linha, não precisa de \texttt{\{\}}. + \end{itemize} + \end{minipage} \framebreak %------------------------------ @@ -148,10 +154,13 @@ source("config/setup.R") @ \begin{itemize} + \item O loop é executado enquanto a condição for \texttt{TRUE}. \item \texttt{break} e \texttt{next} podem ser usados. \item Cuidado com loops sem condições de parada (loops infinitos). \end{itemize} + \framebreak %------------------------------ + \begin{block}{Pergunta} \begin{enumerate} \item Quando usar \texttt{for} e \texttt{while}? @@ -163,8 +172,200 @@ source("config/setup.R") {\large Laço de repetição com condional (repeat)} + <<eval = FALSE>>= + repeat { + <statments before 1st condition> + if (<1st condition>) break + <statments before 2nd condition> + if (<2nd condition>) break + <statments after 2nd condition> + } + @ + + \begin{itemize} + \item O loop é executado enquanto as condiçõs forem \texttt{TRUE}. + \item \texttt{break} e \texttt{next} podem ser usados. + \item As condições podem ser várias e estar em diferentes posições + dentro do código. + \end{itemize} + + \framebreak %------------------------------ + + \begin{block}{Pergunta} + \begin{enumerate} + \item Quando usar \texttt{while} e \texttt{repeat}? + \item Qual dos dois é mais geral? + \end{enumerate} + \end{block} + + \framebreak %------------------------------ + {\large Estrutura de casos (switch)} + <<eval = FALSE>>= + switch(<element>, + <value_1> = { + <statments 1st condition> + }, + <value_2>= { + <statments 2nd condition> + }, + { + <statments last condition> + }) + @ + + \begin{itemize} + \item \texttt{switch()} pode representar estruturas de \texttt{if else + if} planas. + \item A condição é sempre a de igualdade. + \item Geralmente \texttt{switch()} é usado para igualdade de valor de + \emph{strings}. + \end{itemize} + +\end{frame} + +%----------------------------------------------------------------------- +\begin{frame}[t, fragile, allowframebreaks]{Alguns problemas} + + Qual o resultado desse código? + + <<eval = FALSE>>= + x <- 7 + if (x > 3) { + print("3") + if (x < 5) { + print("5") + if (x == 7) { + print("7") + } + } + } + @ + + \framebreak + + Quais números são exibidos com a execução? + + <<eval = FALSE>>= + i <- 3 + while (i >= 0) { + print(i) + i <- i - 1 + } + @ + + \framebreak + + Quais números são exibidos com a execução? + + <<eval = FALSE>>= + i <- 5 + while (TRUE) { + print(i) + i <- i - 1 + if (i <= 2) { + break + } + } + @ + + Como ficaria se fosse usado \texttt{repeat}. + + \framebreak + + Qual o valor de \texttt{j}? + + <<eval = FALSE>>= + j <- 0 + for (i in 1:10) { + if (j %% 3 == 0) { + j <- 1 + } + j <- i + } + @ + \end{frame} +%----------------------------------------------------------------------- +\begin{frame}[t, fragile, allowframebreaks]{Funções} + + {\large Protótipo da função} + + <<eval = FALSE>>= + <funname> <- function(<arg_1>, <arg_2>, <arg_n>) { + <statments> + return(<values>) + } + + <funname>(<arg_1> = <value_1>, <arg_2> = <value_2> , <arg_n> = <value_n>) + @ + + \framebreak + + \begin{minipage}[t]{0.47\linewidth} + + {\large Exemplo: fórmula de Báskara} + + \begin{equation*} + x = \dfrac{-b \pm \sqrt{b^2 - 4 a c}}{2 a} + \end{equation*} + + \end{minipage} + \hspace{1em} + \begin{minipage}[t]{0.47\linewidth} + <<results = "hold">>= + baskara <- function(a, b, c) { + stopifnot(a != 0) + delta <- b^2 - 4 * a * c + if (delta > 0) { + den <- 2 * a + sqrt_delta <- sqrt(delta) + x1 <- (-b - sqrt_delta)/den + x2 <- (-b + sqrt_delta)/den + return(c(x1, x2)) + } else { + return(NULL) + } + } + + baskara(-3, 2, 1) + # baskara(3, 2, 1) + # baskara(0, 2, 1) + @ + \end{minipage} + +\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 Representação de código. + \item Práticas de implementação. + \item Programação funcional. + \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}