Commit aeb5a1042e9b13b8329ef97b617cd9d45084c1cc
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 |