Commit aeb5a1042e9b13b8329ef97b617cd9d45084c1cc

Authored by David Deharbe
1 parent 81b2555d06
Exists in master

1a versao (falta relacionar o comando if com o modelo abastrato do computador)

Showing 1 changed file with 217 additions and 2 deletions Inline Diff

slides/au03/aula03.tex View file @ aeb5a10
\documentclass{beamer} 1 1 \documentclass{beamer}
2 2
\usepackage[utf8]{inputenc} 3 3 \usepackage[utf8]{inputenc}
\usepackage[brazil,british]{babel} 4 4 \usepackage[brazil,british]{babel}
\usetheme{default} 5 5 \usetheme{default}
\usecolortheme{beaver} 6 6 \usecolortheme{beaver}
\usepackage{graphicx} 7 7 \usepackage{graphicx}
\usepackage{clrscode} 8 8 \usepackage{clrscode}
\usepackage{hyperref} 9 9 \usepackage{hyperref}
% \usecolortheme{dove} 10 10 % \usecolortheme{dove}
\usepackage{tikz} 11 11 \usepackage{tikz}
\usetikzlibrary{positioning} 12 12 \usetikzlibrary{positioning}
\title{Aula 03} 13 13 \title{Assunto 03}
\author{David Déharbe \\ 14 14 \author{David Déharbe \\
Universidade Federal do Rio Grande do Norte \\ 15 15 Universidade Federal do Rio Grande do Norte \\
Centro de Ciências Exatas e da Terra \\ 16 16 Centro de Ciências Exatas e da Terra \\
Departamento de Informática e Matemáica Aplicada} 17 17 Departamento de Informática e Matemáica Aplicada}
\date{t.b.d.} 18 18 \date{23 de fevereiro de 2015}
19 19
\newcounter{ProblemCtr} 20 20 \newcounter{ProblemCtr}
21 21
\begin{document} 22 22 \begin{document}
\selectlanguage{brazil} 23 23 \selectlanguage{brazil}
\begin{frame} 24 24 \begin{frame}
\titlepage 25 25 \titlepage
\end{frame} 26 26 \end{frame}
27 27
\section{Problema motivador} 28 28 \section{Problema motivador}
29 29
\stepcounter{ProblemCtr} 30 30 \stepcounter{ProblemCtr}
31 31
\begin{frame} 32 32 \begin{frame}
33 33
\frametitle{Prática (\theProblemCtr) : Sedex Marciano} 34 34 \frametitle{Prática (\theProblemCtr) : Sedex Marciano}
\framesubtitle{OBI2010 - Programação 1, fase 2} 35 35 \framesubtitle{OBI2010 - Programação 1, fase 2}
36 36
Estamos no ano 2048 e um dos sonhos da humanidade torna-se realidade: 37 37 Estamos no ano 2048 e um dos sonhos da humanidade torna-se realidade:
a colonização do planeta Marte. Nossos primeiros colonizadores acabam de chegar, 38 38 a colonização do planeta Marte. Nossos primeiros colonizadores acabam de chegar,
e começam a fazer as preparações (como a instalação de cúpulas de oxigênio e 39 39 e começam a fazer as preparações (como a instalação de cúpulas de oxigênio e
tratamento do solo para agricultura) para que mais pessoas possam tentar uma 40 40 tratamento do solo para agricultura) para que mais pessoas possam tentar uma
nova vida no planeta vizinho. 41 41 nova vida no planeta vizinho.
42 42
Apesar dos avanços tecnológicos, ainda resta um problema: os foguetes usados 43 43 Apesar dos avanços tecnológicos, ainda resta um problema: os foguetes usados
para ir a Marte ainda são caros. Com isso, fica difícil enviar suprimentos para 44 44 para ir a Marte ainda são caros. Com isso, fica difícil enviar suprimentos para
os nossos colonos por muito tempo. Assim, a agência espacial contratou o SBC 45 45 os nossos colonos por muito tempo. Assim, a agência espacial contratou o SBC
(Serviço Balístico Cósmico), que desenvolveu um canhão super-potente que 46 46 (Serviço Balístico Cósmico), que desenvolveu um canhão super-potente que
consegue disparar esferas até Marte, sem precisar gastar milhões de dólares em 47 47 consegue disparar esferas até Marte, sem precisar gastar milhões de dólares em
equipamento e combustível. 48 48 equipamento e combustível.
49 49
Agora, tudo o que é necessário fazer para enviar suprimentos a Marte é colocar 50 50 Agora, tudo o que é necessário fazer para enviar suprimentos a Marte é colocar
uma caixa com as encomendas dentro de uma esfera e disparar a mesma até seu 51 51 uma caixa com as encomendas dentro de uma esfera e disparar a mesma até seu
destino. 52 52 destino.
53 53
\end{frame} 54 54 \end{frame}
55 55
\begin{frame} 56 56 \begin{frame}
57 57
\frametitle{Prática (\theProblemCtr) : Sedex Marciano} 58 58 \frametitle{Prática (\theProblemCtr) : Sedex Marciano}
\framesubtitle{OBI2010 - Programação 1, fase 2} 59 59 \framesubtitle{OBI2010 - Programação 1, fase 2}
60 60
\begin{itemize} 61 61 \begin{itemize}
62 62
\item Tarefa 63 63 \item Tarefa
64 64
Dadas as dimensões de uma caixa e o raio interno da esfera disparada pelo 65 65 Dadas as dimensões de uma caixa e o raio interno da esfera disparada pelo
canhão, seu programa deverá dizer se é possível enviar tal caixa. 66 66 canhão, seu programa deverá dizer se é possível enviar tal caixa.
67 67
\item Entrada 68 68 \item Entrada
69 69
Cada entrada contém apenas uma linha com quatro inteiros $L$, $A$, $P$ e $R$, ($0 \le L, A, P, R \le 1000$) que representam a largura, altura e profundidade da caixa e o raio da esfera. 70 70 Cada entrada contém apenas uma linha com quatro inteiros $L$, $A$, $P$ e $R$, ($0 \le L, A, P, R \le 1000$) que representam a largura, altura e profundidade da caixa e o raio da esfera.
71 71
\item Saída 72 72 \item Saída
73 73
Seu programa deve imprimir um único caractere: \texttt{S} se é possível, ou 74 74 Seu programa deve imprimir um único caractere: \texttt{S} se é possível, ou
\texttt{N} caso contrário. 75 75 \texttt{N} caso contrário.
76 76
\item Exemplos: 77 77 \item Exemplos:
78 78
\begin{tabular}{l|l|l} 79 79 \begin{tabular}{l|l|l}
\hline 80 80 \hline
Entrada \hspace*{2cm} & Entrada \hspace*{2cm} & Entrada \hspace*{2cm} \\ 81 81 Entrada \hspace*{2cm} & Entrada \hspace*{2cm} & Entrada \hspace*{2cm} \\
\texttt{10 20 30 30} & \texttt{10 10 10 7} & \texttt{2 4 4 3} \\ 82 82 \texttt{10 20 30 30} & \texttt{10 10 10 7} & \texttt{2 4 4 3} \\
Saída & Saída & Saída \\ 83 83 Saída & Saída & Saída \\
\texttt{S} & \texttt{N} & \texttt{S} \\ 84 84 \texttt{S} & \texttt{N} & \texttt{S} \\
\hline 85 85 \hline
\end{tabular} 86 86 \end{tabular}
87 87
\end{itemize} 88 88 \end{itemize}
89 89
\end{frame} 90 90 \end{frame}
91 91
\begin{frame} 92 92 \begin{frame}
93 93
94 \frametitle{Novidades.}
95
96 \begin{itemize}
97
98 \item Como \alert{imprimir texto}?
99
100 \item O texto a imprimir depende de certas \alert{condições}: como testar
101 condições?
102
103 \end{itemize}
104
105 \end{frame}
106
107 \begin{frame}
108
\frametitle{Imprimindo textos.} 94 109 \frametitle{Imprimindo textos.}
95 110
\texttt{printf("S$\backslash$n");} 96 111 \texttt{printf("S$\backslash$n");}
\pause 97 112 \pause
98 113
$\Longrightarrow$ \texttt{S} $\downarrow$ 99 114 $\Longrightarrow$ \texttt{S} $\downarrow$
\pause 100 115 \pause
101 116
\texttt{printf("Hello world!$\backslash$n");} 102 117 \texttt{printf("Hello world!$\backslash$n");}
\pause 103 118 \pause
104 119
$\Longrightarrow$ \texttt{Hello world!} $\downarrow$ 105 120 $\Longrightarrow$ \texttt{Hello world!} $\downarrow$
\pause 106 121 \pause
107 122
\texttt{printf("Hello$\backslash$nworld!$\backslash$n");} 108 123 \texttt{printf("Hello$\backslash$nworld!$\backslash$n");}
\pause 109 124 \pause
110 125
$\Longrightarrow$ \begin{tabular}[t]{l}\texttt{Hello} \\ 111 126 $\Longrightarrow$ \begin{tabular}[t]{l}\texttt{Hello} \\
\texttt{world!} $\downarrow$ 112 127 \texttt{world!} $\downarrow$
\end{tabular} 113 128 \end{tabular}
\pause 114 129 \pause
115 130
\noindent\begin{tabular}[t]{l} 116 131 \noindent\begin{tabular}[t]{l}
\texttt{printf("Este eh um texto bastante extenso que$\backslash$n"} \\ 117 132 \texttt{printf("Este eh um texto bastante extenso que$\backslash$n"} \\
\hspace*{1cm}\texttt{"o programa vai imprimir com um unico comando"} \\ 118 133 \hspace*{1cm}\texttt{"o programa vai imprimir com um unico comando"} \\
\hspace*{1cm}\texttt{"printf,$\backslash$n"} \\ 119 134 \hspace*{1cm}\texttt{"printf,$\backslash$n"} \\
\hspace*{1cm}\texttt{"dividindo o texto em partes separadas por$\backslash$n"} \\ 120 135 \hspace*{1cm}\texttt{"dividindo o texto em partes separadas por$\backslash$n"} \\
\hspace*{1cm}\texttt{"espaco branco.$\backslash$n");} 121 136 \hspace*{1cm}\texttt{"espaco branco.$\backslash$n");}
\end{tabular} 122 137 \end{tabular}
\pause 123 138 \pause
124 139
$\Longrightarrow$ \begin{tabular}[t]{l}\texttt{Este eh um texto bastante extenso que} \\ 125 140 $\Longrightarrow$ \begin{tabular}[t]{l}\texttt{Este eh um texto bastante extenso que} \\
\texttt{o programa vai imprimir com um unico comando printf,} \\ 126 141 \texttt{o programa vai imprimir com um unico comando printf,} \\
\texttt{dividindo o texto em partes separadas por} \\ 127 142 \texttt{dividindo o texto em partes separadas por} \\
\texttt{espaco branco.} $\downarrow$ 128 143 \texttt{espaco branco.} $\downarrow$
\end{tabular} 129 144 \end{tabular}
\pause 130 145 \pause
\alert{(esses comandos devem estar em um programa.)} 131 146 \alert{(esses comandos devem estar em um programa.)}
132 147
148 \end{frame}
149
150 \begin{frame}
151
152 \frametitle{Condições}
153
154 O algoritmo é:
155 \begin{itemize}
156 \item Se a esfera é grande o suficiente, então imprimir \texttt{S};
157 \item senão, imprimir \texttt{N}.
158 \end{itemize}
159
160 \pause
161 Qual o equivalente ao ``se ... então ... senão ...'' em C?
162
163 \begin{itemize}
164 \item \alert{\texttt{if (...) ... else ...}} \pause
165 \item \alert{\texttt{if (} ``condição'' \texttt{)} ``comando'' \texttt{else} ``outro comando''} \pause
166 \item Exemplo
167
168 \begin{tabular}{l}
169 \texttt{int idade;} \\
170 \texttt{scanf("\%i", \&idade);} \\
171 \texttt{if (idade < 18)} \\
172 \quad \texttt{printf("menor");} \\
173 \texttt{else} \\
174 \quad \texttt{printf("maior");}
175 \end{tabular}
176 \end{itemize}
177
178 \end{frame}
179
180 \begin{frame}
181
182 \frametitle{Exemplo}
183
184 \begin{tabular}{l}
185 \texttt{\#include <stdio.h>} \\
186 \texttt{int main(void) \{} \\
187 \quad \texttt{int idade;} \\
188 \quad \texttt{scanf("\%i", \&idade);} \\
189 \quad \texttt{if (idade < 18)} \\
190 \quad \quad \texttt{printf("menor$\backslash$n");} \\
191 \quad \texttt{else} \\
192 \quad \quad \texttt{printf("maior$\backslash$n");} \\
193 \quad \texttt{return 0;}\\
194 \texttt{\}}
195 \end{tabular}
196 \begin{itemize}
197 \item lê um inteiro, armazena na variável \texttt{idade};
198 \item testa se o valor armazenado for menor que 18
199 \begin{itemize}
200 \item se o teste for positivo, imprime \texttt{menor};
201 \item se o teste for negativo, imprime \texttt{maior}.
202 \end{itemize}
203 \end{itemize}
204
205 \end{frame}
206
207 \begin{frame}
208
209 \frametitle{Observações}
210
211 \begin{itemize}
212
213 \item A condição deve ser entre parênteses:
214
215 \texttt{if (idade < 18)}
216
217 \item Para executar mais de um comando sujeito a uma condição, deve
218 se juntar eles em um \alert{bloco} com um par de chaves:
219
220 \begin{tabular}{l}
221 \texttt{if (idade < 18)} \\
222 \quad \alert{\texttt{\{}} \\
223 \quad \quad \alert{\texttt{printf("menor$\backslash$n");}} \\
224 \quad \quad \alert{\texttt{printf("maior em \%i ano(s).$\backslash$n", 18 - idade)}} \\
225
226 \quad \alert{\texttt{\}}} \\
227 \texttt{else} \\
228 \quad \texttt{printf("maior$\backslash$n");} \\
229 \end{tabular}
230
231 \item Também pode se juntar vários comandos em um bloco após o \texttt{else}.
232
233 \end{itemize}
234 \end{frame}
235
236 \begin{frame}
237
238 \frametitle{Observações}
239
240 \begin{itemize}
241 \item A parte \texttt{else} é opcional
242
243 \item Exemplo:
244
245 \begin{tabular}{l}
246 \texttt{int num;} \\
247 \texttt{scanf("\%i", \& num);} \\
248 \texttt{if (num < 0)} \\
249 \quad \texttt{num = - num;} \\
250 \texttt{printf("valor absoluto: \%i$\backslash$n", num);}
251 \end{tabular}
252
253 \end{itemize}
254
255 \end{frame}
256
257 \begin{frame}
258
259 \frametitle{Observações}
260
261 \begin{itemize}
262
263 \item Todas as combinações de comandos condicionais são autorizadas.
264
265 \item \only<1>{Aninhamento de condicionais
266
267 \begin{tabular}{l}
268 \texttt{if (x < 0)} \\
269 \quad \texttt{\{} \\
270 \quad \quad \texttt{if (y < 0)} \\
271 \quad \quad \quad \texttt{printf("sudoeste$\backslash$n");} \\
272 \quad \quad \texttt{else} \\
273 \quad \quad \quad \texttt{printf("noroeste$\backslash$n");} \\
274 \quad \texttt{\}} \\
275 \texttt{else} \\
276 \quad \texttt{\{} \\
277 \quad \quad \texttt{if (y < 0)} \\
278 \quad \quad \quad \texttt{printf("sudeste$\backslash$n");} \\
279 \quad \quad \texttt{else} \\
280 \quad \quad \quad \texttt{printf("nordeste$\backslash$n");} \\
281 \quad \texttt{\}}
282 \end{tabular}
283 }
284 \pause
285
286 \only<2>{Encadeamento de condicionais
287
288 \begin{tabular}{l}
289 \texttt{if (media >= 7)} \\
290 \quad \texttt{printf("aprovado$\backslash$n");} \\
291 \texttt{else if (media >= 3)} \\
292 \quad \texttt{printf("em recuperacao$\backslash$n");} \\
293 \texttt{else} \\
294 \quad \texttt{printf("reprovado$\backslash$n");} \\
295 \end{tabular}
296
297 }
298
299 \end{itemize}
300
301 \end{frame}
302
303 \begin{frame}
304
305 \frametitle{Condições e operadores relacionais}
306
307 Alguns dos operadores possíveis para testar condições são os seguintes:
308 \begin{itemize}
309 \item igualdade \alert{\texttt{==}}
310 \item diferença \alert{\texttt{!=}}
311 \item menor estritamente \alert{\texttt{<}}
312 \item menor ou igual \alert{\texttt{<=}}
313 \item maior estritamente \alert{\texttt{>}}
314 \item maior ou igual \alert{\texttt{>=}}
315 \end{itemize}
316 \pause