<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3940708242036847438</id><updated>2024-10-06T21:36:55.388-07:00</updated><category term="algoritmos"/><category term="funções"/><category term="matemática"/><category term="recursão"/><category term="lápis"/><category term="vetor"/><category term="borracha"/><category term="fibonacci"/><category term="linguagens"/><category term="matriz"/><category term="métodos"/><category term="soma"/><title type='text'>Programação de Papel</title><subtitle type='html'>Um blog que tenta demonstrar o valor do entendimento de algoritmos, e tentar modificar o pensamento de muitos programadores que vivem do ctrl + c , ctrl + v.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-8148035526973306918</id><published>2012-01-22T15:38:00.000-08:00</published><updated>2012-01-22T15:38:59.045-08:00</updated><title type='text'>2012 - Uma nova abordagem</title><content type='html'>Já que segundo os Maias esse ano é o nosso último como habitantes da Terra, e eu finalmente estou formado, me sinto no dever de salvar o blog!&lt;br /&gt;
&lt;br /&gt;
E para que isso aconteça de fato, teremos três novidades:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;O blog voltará a ser atualizado (que bom :)&lt;/li&gt;
&lt;li&gt;As atualizações serão sempre às quartas-feiras&lt;/li&gt;
&lt;li&gt;As postagens seguirão uma lógica, para o aprendizado de algoritmos&lt;/li&gt;
&lt;/ul&gt;
Isso quer dizer que alguns assuntos serão repetidos? Provavelmente. Mas dessa vez serão passados de uma forma um pouco diferente, contendo referências para estudos futuros, links interessantes, entre outros.&lt;br /&gt;
 &lt;br /&gt;
Espero poder passar a mensagem que o blog sempre quis: Os melhores instrumentos de um Cientista da Computação são um lápis e uma borracha bem macia!&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/8148035526973306918/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2012/01/2012-uma-nova-abordagem.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/8148035526973306918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/8148035526973306918'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2012/01/2012-uma-nova-abordagem.html' title='2012 - Uma nova abordagem'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-1894873215995987549</id><published>2011-01-18T09:33:00.001-08:00</published><updated>2011-01-18T09:33:38.575-08:00</updated><title type='text'>Meu site no ar!</title><content type='html'>Coloquei hoje meu novo site no ar:&lt;br /&gt;
&lt;a href=&quot;http://www.guilhermerey.com.br/&quot;&gt;www.guilhermerey.com.br&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Espero que gostem!&lt;br /&gt;
&lt;br /&gt;
E calma, 2011 vem aí com promessa de mais posts no blog :)</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/1894873215995987549/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2011/01/meu-site-no-ar.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/1894873215995987549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/1894873215995987549'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2011/01/meu-site-no-ar.html' title='Meu site no ar!'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-281615982243362547</id><published>2010-11-01T08:36:00.000-07:00</published><updated>2010-11-03T08:18:23.880-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="vetor"/><title type='text'>Busca Binária</title><content type='html'>Olá!&lt;br /&gt;
&lt;br /&gt;
Hoje vamos ver um problema clássico na computação. A busca em um vetor ordenado.&lt;br /&gt;
Imagine o problema:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;fontCourier&quot; style=&quot;text-align: center&quot;&gt;Dado um inteiro x e um vetor v[0 ... n - 1] crescente, encontrar um indice k tal que v[k] == x&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Quando fiz um post sobre vetores, descrevi um algoritmo trivial para resolver esse problema. Você pode vê-lo &lt;a href=&quot;http://programacaodepapel.blogspot.com/2010/02/vetores.html&quot;&gt;aqui&lt;/a&gt;.&lt;br /&gt;
O que temos que nos perguntar é: &quot;Tem alguma forma de encontrar o indice que queremos sem precisar comparar x com todos os elementos de v?&quot;. E a resposta é: Sim, pequeno padawan.&lt;br /&gt;
Para resolver o problema vamos utilizar a &lt;b&gt;busca binária&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Vamos ilustrar essa técnica?&lt;br /&gt;
Imagine que você tenha um dicionário na mão e eu peço para você me dar a definição da palavra &lt;span class=&quot;fontCourier&quot;&gt;zootecnia&lt;/span&gt;. &lt;br /&gt;
Qual característica do dicionário é importantíssima para buscarmos alguma palavra nele?&lt;br /&gt;
Ele é ordenado alfabeticamente. &lt;br /&gt;
Então o que fazemos? Rasgamos ele no meio, tendo na mão agora dois dicionários menores. Verificamos se a palavra está na página do meio do rasgo. Se sim, pronto, achamos a palavra. Se não, precisamos procurar mais.&lt;br /&gt;
Sabemos que a letra &lt;span class=&quot;fontCourier&quot;&gt;Z&lt;/span&gt; não está na primeira metade, por isso jogamos ela fora. Então, pegamos a metade que sobrou e rasgamos no meio novamente. De novo vemos se a palavra está na folha do meio. Não? Então pergunte: A letra procurada está na primeira metade? Não, então jogamos fora e ficamos com a outra metade. Mais uma vez rasgamos no meio essa metade, e repetimos o processo. Fazendo isso, um momento acontecerá de sobrar uma página do dicionário, onde estará a letra e a palavra que você procura. E se a palavra não estiver no dicionário, você vai rasgar tudo até sobrar uma folha só, e ela não vai estar lá. E você não precisou comparar sua palavra com todas do dicionário pra descobrir alguma informação.&lt;br /&gt;
&lt;br /&gt;
Isso é a busca binária!&lt;br /&gt;
Se queremos encontrar um inteiro &lt;span class=&quot;fontCourier&quot;&gt;x&lt;/span&gt; em um vetor crescente &lt;span class=&quot;fontCourier&quot;&gt;v&lt;/span&gt;, precisamos apenas dividir ele em dois, depois novamente em dois, depois novamente, até que a divisão sobre apenas &lt;span class=&quot;fontCourier&quot;&gt;x&lt;/span&gt; - ou, se não estiver no vetor, retorne -1.&lt;br /&gt;
&lt;br /&gt;
Mas como implementar?&lt;br /&gt;
Poderíamos implementar tanto uma função iterativa quanto uma função recursiva. Hoje vamos de iterativa :)&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLFVm_L_AMZk-BCfaNtO63rEI7-3Tikfg3HeFy97RAMmbHEV0wRhAT0jvzXxk_KPez94FhIxgtCuFg8Jiwi2b_nKrj2RLGTtkMqK0WWlyq4wND46n5F6Rl8xaPT8A3A7o-bw9-1hmNMwgk/s1600/AlgoritmoBB_Correto.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;288&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLFVm_L_AMZk-BCfaNtO63rEI7-3Tikfg3HeFy97RAMmbHEV0wRhAT0jvzXxk_KPez94FhIxgtCuFg8Jiwi2b_nKrj2RLGTtkMqK0WWlyq4wND46n5F6Rl8xaPT8A3A7o-bw9-1hmNMwgk/s320/AlgoritmoBB_Correto.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Algoritmo de Busca Binária em C&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;Explicando o algoritmo:&lt;br /&gt;
Nós ficamos em um laço de repetição, que repete enquanto o limite inferior for menor ou igual ao limite superior. Ou seja, se eu tenho um vetor &lt;span class=&quot;fontCourier&quot;&gt;v[0 ... n - 1]&lt;/span&gt;, ele primeiro tem &lt;span class=&quot;fontCourier&quot;&gt;limInf = 0 e limSup = n - 1&lt;/span&gt;. Então dividimos no meio: &lt;span class=&quot;fontCourier&quot;&gt;meio = (limInf + limSup) / 2&lt;/span&gt;. &lt;br /&gt;
Se &lt;span class=&quot;fontCourier&quot;&gt;x&lt;/span&gt; já estiver na posição do meio, retornamos &lt;span class=&quot;fontCourier&quot;&gt;x&lt;/span&gt;. Se não, nós fazemos a seguinte pergunta: &quot;&lt;span class=&quot;fontCourier&quot;&gt;x&lt;/span&gt; é maior do que o elemento do meio?&quot; Se sim, ele está na metade maior, então pegamos nosso &lt;span class=&quot;fontCourier&quot;&gt;limInf&lt;/span&gt; e atribuimos &lt;span class=&quot;fontCourier&quot;&gt;limInf = meio + 1&lt;/span&gt;. Se não, ele está na metade menor, e o que fazemos é atribuir o &lt;span class=&quot;fontCourier&quot;&gt;limSup = meio - 1&lt;/span&gt;.&lt;br /&gt;
Caso na primeira divisão o elemento x esteja na metade menor, nossos limites serão &lt;span class=&quot;fontCourier&quot;&gt;limInf = 0 e limSup = meio - 1&lt;/span&gt;. &lt;br /&gt;
Então, caso as divisões ocorram e nenhum &lt;span class=&quot;fontCourier&quot;&gt;k&lt;/span&gt; satisfaça &lt;span class=&quot;fontCourier&quot;&gt;v[k] == x&lt;/span&gt;, o algoritmo retorna -1.&lt;br /&gt;
&lt;br /&gt;
Pronto! Esse é o algoritmo de busca binária - solução iterativa :)&lt;br /&gt;
&lt;br /&gt;
Até a próxima!</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/281615982243362547/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2010/11/busca-binaria.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/281615982243362547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/281615982243362547'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2010/11/busca-binaria.html' title='Busca Binária'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLFVm_L_AMZk-BCfaNtO63rEI7-3Tikfg3HeFy97RAMmbHEV0wRhAT0jvzXxk_KPez94FhIxgtCuFg8Jiwi2b_nKrj2RLGTtkMqK0WWlyq4wND46n5F6Rl8xaPT8A3A7o-bw9-1hmNMwgk/s72-c/AlgoritmoBB_Correto.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-7659519227586218118</id><published>2010-09-21T18:51:00.000-07:00</published><updated>2010-10-29T08:47:57.667-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fibonacci"/><category scheme="http://www.blogger.com/atom/ns#" term="matemática"/><category scheme="http://www.blogger.com/atom/ns#" term="recursão"/><title type='text'>Fibonacci</title><content type='html'>Olá!&lt;br /&gt;
&lt;br /&gt;
Hoje, mais um post sobre recursão, abordando a sequência de Fibonacci.&lt;br /&gt;
Se você perdeu o meu post sobre recursão, você pode acessá-lo &lt;a href=&quot;http://programacaodepapel.blogspot.com/2010/02/recursao.html&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;. E também há um sobre a função recursiva que faz a potência de números inteiros, que você pode ver por &lt;a href=&quot;http://programacaodepapel.blogspot.com/2010/02/recursao.html&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
A sequência de Fibonacci é uma sequência matemática definida da seguinte forma:&lt;br /&gt;
&lt;span class=&quot;fontCourier&quot;&gt;&lt;br /&gt;
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Como podemos observar, a sequência tem uma característica: Ela começa com 0, 1 e os próximos números são definidos pela soma dos dois anteriores.&lt;br /&gt;
Você observa pelas contas:&lt;br /&gt;
&lt;span class=&quot;fontCourier&quot;&gt;&lt;br /&gt;
Dois primeiros: 0, 1&lt;br /&gt;
0 + 1 = 1&lt;br /&gt;
1 + 1 = 2&lt;br /&gt;
2 + 1 = 3&lt;br /&gt;
3 + 2 = 5&lt;br /&gt;
5 + 3 = 8&lt;br /&gt;
8 + 5 = 13&lt;br /&gt;
13 + 8 = 21&lt;br /&gt;
...&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Tendo isso em mente, podemos definir a seguinte relação matemática:&lt;br /&gt;
&lt;span class=&quot;fontCourier&quot;&gt;&lt;br /&gt;
F(n) = &lt;br /&gt;
&amp;nbsp;&amp;nbsp; | 0, se n = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; | 1, se n = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; | F(n - 1) + F(n - 2), em outros casos&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Utilizando essa definição, facilmente podemos construir uma função recursiva que calcule a sequência de fibonacci, certo?&lt;br /&gt;
Pensando em um &lt;b&gt;caso base&lt;/b&gt; para nossa recursão, o que temos? Sabemos que quando &lt;b&gt;n = 0&lt;/b&gt; ou &lt;b&gt;n = 1&lt;/b&gt;, não precisamos retornar nossa função de novo, e a resposta é o próprio &lt;b&gt;n&lt;/b&gt;.&lt;br /&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3ZYH93yKvY_eC8MYQZLstL_v9ZEAbhh2_lJwXeCD69mBn8dSPxemvBGtULnkLqDyZBmSxeTlLLCzB2Z85TnWYwGCJmRwm-4xPwgCPCZs4liPPw36sbsHIE8z6VgNWO4q1Tdh1uKTVMjxx/s1600/Captura+de+tela+2010-09-21+a%CC%80s+23.43.41.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:left;cursor:pointer; cursor:hand;width: 150px; height: 31px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3ZYH93yKvY_eC8MYQZLstL_v9ZEAbhh2_lJwXeCD69mBn8dSPxemvBGtULnkLqDyZBmSxeTlLLCzB2Z85TnWYwGCJmRwm-4xPwgCPCZs4liPPw36sbsHIE8z6VgNWO4q1Tdh1uKTVMjxx/s400/Captura+de+tela+2010-09-21+a%CC%80s+23.43.41.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5519563272500261906&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Agora, vamos definir o &lt;b&gt;passo da recursão&lt;/b&gt;. Caso &lt;b&gt;n&lt;/b&gt; não seja 0 ou 1, qual o valor da resposta? É a soma dos dois anteriores à &lt;b&gt;n&lt;/b&gt;, certo? Ou seja:&lt;br /&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBIishvpN3p2i7x4p5IAcav8MaFLtdjEyIetsSbxxbVaeGQAL9rMvoxZcwYP1lunOgZfKrgPmcj9QFfHjoPNJMaTFbXWip_BCpGr4PnNTXNXAF6EJUbhxBAzW1LHrNHAXNb3_-e7CcdVg-/s1600/Captura+de+tela+2010-09-21+a%CC%80s+23.46.07.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:left;cursor:pointer; cursor:hand;width: 244px; height: 25px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBIishvpN3p2i7x4p5IAcav8MaFLtdjEyIetsSbxxbVaeGQAL9rMvoxZcwYP1lunOgZfKrgPmcj9QFfHjoPNJMaTFbXWip_BCpGr4PnNTXNXAF6EJUbhxBAzW1LHrNHAXNb3_-e7CcdVg-/s400/Captura+de+tela+2010-09-21+a%CC%80s+23.46.07.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5519563813094705042&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Pronto! Construimos nosso algoritmo que calcula o número de fibonacci:&lt;br /&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7IT9L2DbnljgBYS6DmUZfjKcBoY-Uwt9o0ct_IhKHZojTSZUoTiiEGI2ANXXDPz9EutXDxcwtHnDFV3Y6QftNIqULWkhx7pNkIzMg57WSuTu0wuXU4DpdVMepYndD72z13tfrQPGzi-ON/s1600/Captura+de+tela+2010-09-21+a%CC%80s+23.47.43.png&quot;&gt;&lt;img style=&quot;display: block; text-align: left; margin:0 auto 10px;cursor:pointer; cursor:hand;width: 266px; height: 92px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7IT9L2DbnljgBYS6DmUZfjKcBoY-Uwt9o0ct_IhKHZojTSZUoTiiEGI2ANXXDPz9EutXDxcwtHnDFV3Y6QftNIqULWkhx7pNkIzMg57WSuTu0wuXU4DpdVMepYndD72z13tfrQPGzi-ON/s400/Captura+de+tela+2010-09-21+a%CC%80s+23.47.43.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5519564218916548066&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
E para visualizar a sequência de Fibonacci como demonstrada no começo? Como fazer? Calma, pequeno padawan. Vamos utilizar um &lt;a href=&quot;http://programacaodepapel.blogspot.com/2010/01/lacos-de-repeticao.html&quot; target=&quot;_blank&quot;&gt;laço de repetição&lt;/a&gt; para poder calcular os números de fibonacci e imprimi-los na tela.&lt;br /&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGy23iy6cP3pX2tnUMn6chJZ58wd-40v0v-ookmv1T63177fwaYvQeie_RPK3P8YPlbbV4x4W25DbSXpxsai1SYe4b3kwxre24Ru8LH9i16UpB84NjI0MVctPkCjhYHS7W2KgbDrjhqgtU/s1600/Captura+de+tela+2010-09-21+a%CC%80s+23.50.34.png&quot;&gt;&lt;img style=&quot;display:block; text-align: left; margin:0 auto 10px;cursor:pointer; cursor:hand;width: 227px; height: 85px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGy23iy6cP3pX2tnUMn6chJZ58wd-40v0v-ookmv1T63177fwaYvQeie_RPK3P8YPlbbV4x4W25DbSXpxsai1SYe4b3kwxre24Ru8LH9i16UpB84NjI0MVctPkCjhYHS7W2KgbDrjhqgtU/s400/Captura+de+tela+2010-09-21+a%CC%80s+23.50.34.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5519564958593047314&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Agora, pra brincar, é preciso apenas chamar a função &lt;b&gt;fibonacci&lt;/b&gt; com o número de elementos da sequência desejado!&lt;br /&gt;
&lt;span class=&quot;fontCourier&quot;&gt;fibonacci(5)&lt;/span&gt; Irá nos retornar a seguinte sequência:&lt;br /&gt;
&lt;span class=&quot;fontCourier&quot;&gt;&lt;br /&gt;
0, 1, 1, 2, 3&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Nessa hora muitas pessoas não compreendem o que exatamente está acontecendo pra que a sequência esteja certa. De onde estão vindo os números?&lt;br /&gt;
Tentei ilustrar como ocorrem as chamadas recursivas:&lt;br /&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMLco0CtNdNlP1IGTjO_UcA6K-HbkoXOuriM36SPtnjnk5890IUQc1f0cvlb7zoyzeF9DjTroPeKhfk_uhtyC7uanm9gRoNXT4_XD0LYAHaTqhMD3OneXTeO4zSf_4ZNFwNry7-b6yxwXl/s1600/Untitleddrawing.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMLco0CtNdNlP1IGTjO_UcA6K-HbkoXOuriM36SPtnjnk5890IUQc1f0cvlb7zoyzeF9DjTroPeKhfk_uhtyC7uanm9gRoNXT4_XD0LYAHaTqhMD3OneXTeO4zSf_4ZNFwNry7-b6yxwXl/s400/Untitleddrawing.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5519575003363440738&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Veja, para cada iteração do laço &lt;b&gt;for&lt;/b&gt;, um número fibonacci é calculado, e a função &lt;b&gt;fibo&lt;/b&gt; realiza a recursão para este cálculo. Perceba que todas chegam até f(0) ou f(1), e vão retornando seus valores. Como em &lt;b&gt;fibo(2)&lt;/b&gt;, que precisa da resposta de f(1) + f(0), trazendo a soma 1 + 0, fazendo com que fibo(2) retorne 1.&lt;br /&gt;
&lt;br /&gt;
Esse é um clássico da recursão. Sua solução recursiva é muito elegante, mas como se verifica na imagem, nem tanto eficiente. A solução iterativa é bem menos elegante, mas muito mais eficiente.&lt;br /&gt;
&lt;br /&gt;
Postarei a solução iterativa em breve!&lt;br /&gt;
Até a próxima!</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/7659519227586218118/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2010/09/recursao-fibonacci.html#comment-form' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/7659519227586218118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/7659519227586218118'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2010/09/recursao-fibonacci.html' title='Fibonacci'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3ZYH93yKvY_eC8MYQZLstL_v9ZEAbhh2_lJwXeCD69mBn8dSPxemvBGtULnkLqDyZBmSxeTlLLCzB2Z85TnWYwGCJmRwm-4xPwgCPCZs4liPPw36sbsHIE8z6VgNWO4q1Tdh1uKTVMjxx/s72-c/Captura+de+tela+2010-09-21+a%CC%80s+23.43.41.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-6908765363188535661</id><published>2010-09-18T15:31:00.000-07:00</published><updated>2010-09-21T20:46:15.291-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="matriz"/><category scheme="http://www.blogger.com/atom/ns#" term="soma"/><category scheme="http://www.blogger.com/atom/ns#" term="vetor"/><title type='text'>As matrizes</title><content type='html'>Já vimos o conceito de vetores, &lt;a href=&quot;http://programacaodepapel.blogspot.com/2010/02/vetores.html&quot;&gt;anteriormente&lt;/a&gt;. Veremos agora o que chamamos de vetores bi-dimensionais, ou ainda arrays bi-dimensionais.&lt;br /&gt;&lt;br /&gt;Matriz, de acordo com a wikipedia: &quot;In mathematics, a matrix (plural matrices, or less commonly matrixes) is a rectangular array of numbers&quot;. Ou: &quot;Em matemática, a matriz é um vetor retangular de números&quot;.&lt;br /&gt;&lt;br /&gt;Amplamente utilizado nas ciências matemáticas, esse conceito ajuda a resolver problemas de álgebra linear, resolução de sistemas lineares, análise numérica, etc. E como a Ciência da Computação é muito matemática, as matrizes também são utilizadas. Uma área bem interessante que se aplica - e muito - é a da computação gráfica. Matrizes de projeção, transformação, etc, são a base de todo trabalho gráfico renderizado pelo computador que estamos acostumados a ver.&lt;br /&gt;&lt;br /&gt;Uma matriz &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;A&lt;/b&gt;&lt;/span&gt; é composta por &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;m&lt;/b&gt;&lt;/span&gt; linhas e &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;n&lt;/b&gt;&lt;/span&gt; colunas, e é representada matematicamente da seguinte maneira:&lt;span style=&quot;text-align: center; margin: 0 !important&quot;&gt;&lt;br /&gt;&lt;span class=&quot;fontCourier&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td rowspan=&quot;2&quot;&gt;A = ( &lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td rowspan=&quot;2&quot;&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; Nesse caso, &lt;span class=&quot;fontCourier&quot;&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;A&lt;/span&gt;&lt;/span&gt; é &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;2&lt;/b&gt; x &lt;b&gt;3&lt;/b&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Em computação nós dizemos que uma matriz é um vetor de vetores. Hã?&lt;br /&gt;Calma, pequeno padawan. Imagine um vetor &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;v&lt;/b&gt;&lt;/span&gt;, com 2 posições. Imaginou? Agora, imagine outros dois vetores, &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;k&lt;/b&gt;&lt;/span&gt; e &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;r&lt;/b&gt;&lt;/span&gt;, com 3 posições cada, e preenchidos com números inteiros qualquer.&lt;br /&gt;Se &lt;span class=&quot;fontCourier&quot;&gt;v&lt;/span&gt; for um vetor de &lt;b&gt;vetores&lt;/b&gt;, atribuimos as duas primeiras posições de &lt;span class=&quot;fontCourier&quot;&gt;v&lt;/span&gt; para &lt;span class=&quot;fontCourier&quot;&gt;k&lt;/span&gt; e &lt;span class=&quot;fontCourier&quot;&gt;r&lt;/span&gt;:&lt;span class=&quot;fontCourier&quot;&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;k = { 1&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,2&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,3 };&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;r = { 4&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,5&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,6 };&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;v[0] = k;&lt;br /&gt;v[1] = r;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora, podemos dizer que &lt;span class=&quot;fontCourier&quot;&gt;v&lt;/span&gt; é um &lt;b&gt;array bi-dimensional&lt;/b&gt;. Porque? Porque podemos acessar, por exemplo, o número 5 da seguinte maneira:&lt;span class=&quot;fontCourier&quot;&gt; v[1][1]&lt;/span&gt;. Assim, acessamos o número na segunda linha, na segunda coluna.&lt;br /&gt;&lt;br /&gt;Entendeu, pequeno padawan? &lt;span class=&quot;fontCourier&quot;&gt;v&lt;/span&gt; é uma matriz, um vetor de vetores.&lt;br /&gt;&lt;br /&gt;Vamos ilustrar como se faz o algoritmo de soma de duas matrizes:&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTnxLAt7d1Zkh0LUo2n1jh0RylKO33kyT8EsLihzC7VkHteqArR46HKP-JzrV7TAYbBpIRwMJtTW3FkT1uI7rps12l6E8ANU6EWvtBNMRDCqkXZg0K3lqKBiXB68NNrXP-X3-tI_oMS8vh/s1600/algoritmo1.JPG&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 350px; height: 249px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTnxLAt7d1Zkh0LUo2n1jh0RylKO33kyT8EsLihzC7VkHteqArR46HKP-JzrV7TAYbBpIRwMJtTW3FkT1uI7rps12l6E8ANU6EWvtBNMRDCqkXZg0K3lqKBiXB68NNrXP-X3-tI_oMS8vh/s400/algoritmo1.JPG&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5518413414848720498&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O algoritmo faz o seguinte:&lt;br /&gt;&lt;ul style=&quot;list-style-type: 1&quot;&gt;&lt;br /&gt;&lt;li&gt;Inicializamos as variáveis &lt;span class=&quot;fontCourier&quot;&gt;i&lt;/span&gt; e &lt;span class=&quot;fontCourier&quot;&gt;j&lt;/span&gt;, para poder iterar sobre a matriz&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Inicializamos a matriz &lt;span class=&quot;fontCourier&quot;&gt;a&lt;/span&gt;, que é &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;2 x 3&lt;/b&gt;&lt;/span&gt; e a matriz &lt;b&gt;b&lt;/b&gt;, de mesmo tamanho.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Criamos a matriz &lt;span class=&quot;fontCourier&quot;&gt;&lt;b&gt;c&lt;/b&gt;&lt;/span&gt;, para poder guardar o valor da soma de &lt;span class=&quot;fontCourier&quot;&gt;a&lt;/span&gt; e &lt;span class=&quot;fontCourier&quot;&gt;b&lt;/span&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Vem a parte que realiza a soma. Aqui, iteramos com dois laços de repetição, dois &lt;b&gt;for&#39;s&lt;/b&gt;. O primeiro for faz o loop pelas linhas, enquanto o segundo faz o loop pelas colunas. Ou seja, para cada linha, o for de j itera em todas as colunas. Assim, colocamos a soma dos valores de &lt;span class=&quot;fontCourier&quot;&gt;a[i][j] com b[i][j] em c[i][j]&lt;/span&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt; Por hoje é isso! Em breve, passarei as operações básicas sobre matrizes.</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/6908765363188535661/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2010/09/as-matrizes.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/6908765363188535661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/6908765363188535661'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2010/09/as-matrizes.html' title='As matrizes'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTnxLAt7d1Zkh0LUo2n1jh0RylKO33kyT8EsLihzC7VkHteqArR46HKP-JzrV7TAYbBpIRwMJtTW3FkT1uI7rps12l6E8ANU6EWvtBNMRDCqkXZg0K3lqKBiXB68NNrXP-X3-tI_oMS8vh/s72-c/algoritmo1.JPG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-1102140559406361187</id><published>2010-02-23T16:50:00.000-08:00</published><updated>2010-02-25T12:18:10.699-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="matemática"/><category scheme="http://www.blogger.com/atom/ns#" term="recursão"/><title type='text'>Recursão - Potência</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;Você lembra das famosas potências? Daquelas do tipo 2³?&lt;br /&gt;Hoje vamos criar duas formas de realizar esse cálculo.&lt;br /&gt;Queremos criar uma função que receba um número inteiro &lt;span style=&quot;font-weight:bold;&quot;&gt;a (base)&lt;/span&gt; e outro &lt;span style=&quot;font-weight:bold;&quot;&gt;n (expoente)&lt;/span&gt; e retorne o resultado da multiplicação de &lt;span style=&quot;font-weight:bold;&quot;&gt;a&lt;/span&gt; por ele mesmo &lt;span style=&quot;font-weight:bold;&quot;&gt;n&lt;/span&gt; vezes (ou, de um modo mais fácil, &lt;span style=&quot;font-weight:bold;&quot;&gt;a&lt;/span&gt; elevado à &lt;span style=&quot;font-weight:bold;&quot;&gt;n&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Primeiro, vamos pensar numa versão iterativa, utilizando laços de repetição.&lt;br /&gt;Criamos uma variável para guardar o nosso resultado.&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;  int pot = 1;&lt;br /&gt;]]&gt;&lt;/script&gt; Assim, para realizar a multiplicação de &lt;span style=&quot;font-weight:bold;&quot;&gt;a&lt;/span&gt; por ele mesmo &lt;span style=&quot;font-weight:bold;&quot;&gt;n&lt;/span&gt; vezes, podemos realizar com um laço for:&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;  for(int i = 0; i &lt; n; i++)&lt;br /&gt;    pot = pot * a;&lt;br /&gt;]]&gt;&lt;/script&gt; E pronto! temos nossa função potencia:&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;  /* &lt;br /&gt;     Função potência - recebe uma base inteira a e um expoente inteiro n e retorna&lt;br /&gt;       a elevado à n &lt;br /&gt;  */&lt;br /&gt;  int potencia(int a, int n)&lt;br /&gt;  {&lt;br /&gt;    int pot = 1;&lt;br /&gt;    for(int i = 0; i &lt; n; i++)&lt;br /&gt;      pot = pot * a;&lt;br /&gt;    return pot;&lt;br /&gt;  }&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Como já temos nossa versão iterativa, vamos agora pensar na versão recursiva.&lt;br /&gt;Qual seria o &lt;span style=&quot;font-weight:bold;&quot;&gt;caso base&lt;/span&gt; da nossa recursão?&lt;br /&gt;Uma linha de raciocínio seria pensar em um &lt;span style=&quot;font-weight:bold;&quot;&gt;a = 2&lt;/span&gt; e &lt;span style=&quot;font-weight:bold;&quot;&gt;n = 3&lt;/span&gt;.&lt;br /&gt; 2³ = 2 * (2²)&lt;br /&gt;Certo? Pensando assim, podemos continuar:&lt;br /&gt; 2³ = 2 * (2²) = 2 * (2 * (2¹)) = 2 * (2 * (2 * (2^0)))&lt;br /&gt;Logo, o nosso caso base é quando &lt;span style=&quot;font-weight:bold;&quot;&gt;o expoente é zero&lt;/span&gt;, ou n == 0, que sabemos que o resultado é 1&lt;sup&gt;[1]&lt;/sup&gt;. E nosso &lt;span style=&quot;font-weight:bold;&quot;&gt;passo da recursão&lt;/span&gt; é dado por base * potencia(base, expoente - 1).&lt;br /&gt;Colocando assim, temos: &lt;br /&gt;Potencia(a, n) = a * Potencia(a, n - 1). &lt;br /&gt;&lt;br /&gt;Pronto! Temos nossa função recursiva!&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;  /* &lt;br /&gt;     Função potência - recebe uma base inteira a e um expoente inteiro n e retorna&lt;br /&gt;       a elevado à n, efetuando o cálculo de maneira recursiva.&lt;br /&gt;  */ &lt;br /&gt;  int potencia_r(int a, int n)&lt;br /&gt;  {&lt;br /&gt;     if(n == 0)&lt;br /&gt;       return 1;&lt;br /&gt;     return a * potencia_r(a, n - 1);&lt;br /&gt;  }&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Obs.: Perceba que a função funciona adotando n &gt;= 0. Não estamos preocupados em tratar exceções como n = -1, por enquanto =)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Eu acho a função recursiva bem mais elegante =P&lt;br /&gt;Mas é isso ai! Apenas mais um exemplo de recursão!&lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;sup&gt;[1]&lt;/sup&gt; Curiosidade: Pra quem não sabe o porque de um número elevado a zero resultar em 1, o processo é esse: x/x = x¹ : x¹ = x&lt;sup&gt;1 - 1&lt;/sup&gt; = 1. Explicando: Se você tem 2 objetos e quer dividir para 2 pessoas, sabemos que o resultado é 1. Qualquer número dividido por ele mesmo resulta em 1. Logo, por propriedades de potência, quando há divisão de potências de mesma base pode-se manter a base e subtrair os expoentes, resultando em 2^0. =)&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/1102140559406361187/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2010/02/recursao-potencia.html#comment-form' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/1102140559406361187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/1102140559406361187'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2010/02/recursao-potencia.html' title='Recursão - Potência'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-3955525970199390153</id><published>2010-02-18T09:18:00.000-08:00</published><updated>2010-02-18T10:24:39.817-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="matemática"/><category scheme="http://www.blogger.com/atom/ns#" term="recursão"/><title type='text'>Recursão</title><content type='html'>Olá!&lt;br /&gt;Quando você começa a estudar a Ciência da Computação, você aprende (ou pelo menos deveria aprender) muita matemática. Uma técnica matemática aplicada à essa ciência é &lt;span style=&quot;font-weight:bold;&quot;&gt;recursão&lt;/span&gt;.&lt;br /&gt;De acordo com o verbete &lt;a href=&quot;http://en.wikipedia.org/wiki/Recursion_%28computer_science%29&quot;&gt;Recursion&lt;/a&gt;, da Wikipedia:&lt;br /&gt;&lt;blockquote&gt;&quot;&lt;span style=&quot;font-style:italic;&quot;&gt;Recursion in computer science is a method where the solution to a problem depends on solutions to smaller instances of the same problem.[1] The approach can be applied to many types of problems, and is one of the central ideas of computer science.&lt;/span&gt;&quot;&lt;/blockquote&gt;ou, em Português:&lt;br /&gt;&lt;blockquote&gt;&quot;&lt;span style=&quot;font-style:italic;&quot;&gt;Recursão na ciência da computação é um método onde a solução de um problema depende de soluções de problemas menores em instâncias do mesmo problema. O método pode ser aplicado em vários tipos de problemas, e é uma das ideias centrais da ciência da computação.&quot;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Há também uma frase muito legal para entender a recursão, que diz:&lt;br /&gt;&lt;blockquote&gt;&quot;Para entender a recursão, é preciso primeiro entender a recursão&quot;&lt;/blockquote&gt;&lt;br /&gt;Hã? Calma, pequeno padawan. =)&lt;br /&gt;Imagine o seguinte problema: Você está no seu colegial, e o seu professor de matemática que você adora tanto que até deixou você de recuperação pra não sentir saudades, pede uma lista enorme, só com fatoriais. Você, um aluno calmo e consciente, respira fundo e pensa, dentre seus pensamentos matemáticos: &quot;Qual será a relação matemática entre todos esses fatoriais?&quot;&lt;br /&gt;Então, você tem uma luz, daquelas que iluminam quarteirão em dia de apagão, e escreve:&lt;br /&gt;&lt;br /&gt;fatorial(n) = &lt;br /&gt;| 1                   ,se n = 0&lt;br /&gt;| n * fatorial(n - 1) ,se n &gt; 0&lt;br /&gt;&lt;br /&gt;Claro! Se o número que ele pedir for zero, então eu sei que o resultado é 1, por definição. Mas se for maior do que zero, o resultado nada mais é do que ele vezes o fatorial do número anterior à ele! E então você faz no seu rascunho algumas provas reais:&lt;br /&gt;&lt;br /&gt;fatorial(1) = 1 * fatorial(0) = 1 * 1 = 1&lt;br /&gt;fatorial(2) = 2 * fatorial(1) = 2 * 1 = 2&lt;br /&gt;fatorial(3) = 3 * fatorial(2) = 3* ( 2*fatorial(1)) = 3* ( 2* ( 1* fatorial(0))) = 3*2*1*1 = 6&lt;br /&gt;&lt;br /&gt;Você acaba de entender a recursão!&lt;br /&gt;&lt;br /&gt;Passar esse conceito para um algoritmo em C, é fácil. Ficaria dessa forma:&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;/* fatorial_r&lt;br /&gt;   calcula de forma recursiva o fatorial de um número inteiro n e devolve seu resultado&lt;br /&gt;*/&lt;br /&gt;int fatorial_r(int n)&lt;br /&gt;{&lt;br /&gt;  if(n == 0) return 1;&lt;br /&gt;  return n * fatorial_r(n - 1); &lt;br /&gt;}&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;Perceba a estrutura recursiva da função.&lt;br /&gt;Temos o &lt;span style=&quot;font-weight:bold;&quot;&gt;caso base&lt;/span&gt;, que encerra a recursão em algum momento, para não entrar em algo infinito:&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;  if(n == 0) return 1;&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;E então, o passo da recursão, que reduz o problema a uma instância menor, chamando a &lt;span style=&quot;font-weight:bold;&quot;&gt;mesma função&lt;/span&gt;&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;  return n * fatorial_r(n - 1);&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;Na grande maioria dos casos (pra não dizer todos), uma solução recursiva pode ser escrita de forma iterativa. Veja o exemplo que eu dei quando falei sobre laços de repetição: A função fatorial, em sua versão iterativa.&lt;br /&gt;&lt;br /&gt;Uma função recursiva é, sem dúvida, muito elegante. Hoje, muitas pessoas que estão na área da computação não conseguem utilizar recursão, outras não a entendem, e outras sequer sabem da sua existência. Então, é algo que merece um pouco de estudo e atenção.&lt;br /&gt;E lembre-se: Para fazer um procedimento recursivo, é preciso ter fé! =)&lt;br /&gt;&lt;br /&gt;Vou postar mais alguns problemas com resoluções recursivas e, para comparação e estudo, suas soluções iterativas.&lt;br /&gt;&lt;br /&gt;Até lá!</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/3955525970199390153/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2010/02/recursao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/3955525970199390153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/3955525970199390153'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2010/02/recursao.html' title='Recursão'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-9014724514832332822</id><published>2010-02-10T11:16:00.000-08:00</published><updated>2010-02-11T05:07:05.194-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algoritmos"/><title type='text'>Vetores</title><content type='html'>Um vetor (ou &lt;span style=&quot;font-style: italic;&quot;&gt;array&lt;/span&gt;) é uma estrutura de dados que é capaz de armazenar objetos do mesmo tipo em uma sequência, ocupando posições consecutivas na memória.&lt;br /&gt;Falarei hoje sobre a busca em vetores.&lt;br /&gt;&lt;br /&gt;Um vetor &lt;span class=&quot;fontCourier&quot;&gt; v &lt;/span&gt; de tamanho &lt;span class=&quot;fontCourier&quot;&gt; n &lt;/span&gt; posições é dado pela notação &lt;span style=&quot;font-family:Courier New;&quot;&gt; v[n] &lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Esse vetor possui objetos armazenados em suas posições &lt;span class=&quot;fontCourier&quot;&gt; v[0 ... n-1] &lt;/span&gt;, ou seja, se o vetor &lt;span class=&quot;fontCourier&quot;&gt; v &lt;/span&gt; possui 5 posições, o último objeto estará armazenado em &lt;span class=&quot;fontCourier&quot;&gt; v[4] &lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;A declaração de um vetor de inteiros possuindo 5 posições é dada por: &lt;b&gt;int v[5];&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A busca&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Vamos pensar que nos foi dado um vetor &lt;b&gt;v&lt;/b&gt; de números inteiros (&lt;span style=&quot;font-family:Courier New;&quot;&gt; int &lt;/span&gt;) de tamanho &lt;b&gt;n&lt;/b&gt;, e nos pedem para encontrar certo número &lt;b&gt;x&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Então, temos o vetor representado da seguinte maneira:&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;border: 1px solid #AAA&quot; cellspacing=&quot;2&quot; cellpadding=&quot;3&quot;&gt;&lt;tbody&gt; &lt;tr&gt;   &lt;td&gt;indices&lt;/td&gt;   &lt;td&gt;0&lt;/td&gt;   &lt;td&gt;&lt;/td&gt;   &lt;td&gt;&lt;/td&gt;   &lt;td&gt;&lt;/td&gt;   &lt;td&gt;n-1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td&gt;valores&lt;/td&gt;   &lt;td valign=&quot;middle&quot; style=&quot;background-color: #DDD&quot;&gt;14&lt;/td&gt;   &lt;td valign=&quot;middle&quot; style=&quot;background-color: #DDD&quot;&gt;26&lt;/td&gt;   &lt;td valign=&quot;middle&quot; style=&quot;background-color: #DDD&quot;&gt;12&lt;/td&gt;   &lt;td valign=&quot;middle&quot; style=&quot;background-color: #DDD&quot;&gt;18&lt;/td&gt;   &lt;td valign=&quot;middle&quot; style=&quot;background-color: #DDD&quot;&gt;12&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Então, temos que encontrar um índice &lt;b&gt;k&lt;/b&gt; tal que &lt;span class=&quot;fontCourier&quot;&gt;v[k] == x &lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Você deve estar pensando: &quot;E se x não estiver no vetor? Ou quem sabe n = 0? O que fazer?&quot;.&lt;br /&gt;Calma, pequeno padawan. Se isso ocorrer, podemos simplesmente devolver -1 para quem estiver perguntando. =)&lt;br /&gt;&lt;br /&gt;Pensando assim, temos que conseguir uma forma de entrar nesse vetor e achar o que estão nos pedindo. Como fazer?&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;int busca(int x, int n, int v[])&lt;br /&gt;{&lt;br /&gt; int k;&lt;br /&gt; // Se n = 5, k = 4, e ocorre o loop de 4 até 0&lt;br /&gt; for( k = n - 1; k &gt;= 0; k-- ) { &lt;br /&gt;    /* Se o objeto em k for x, devolva k */&lt;br /&gt;    if( v[k] == x ) return k;&lt;br /&gt; }&lt;br /&gt; // Se o valor não estiver la, ou v for vazio, retorne -1&lt;br /&gt; return -1;&lt;br /&gt;}&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;É isso ai! Esse algoritmo efetua a busca, e retorna o índice que representa a posição do valor pedido no vetor dado. =)</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/9014724514832332822/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2010/02/vetores.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/9014724514832332822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/9014724514832332822'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2010/02/vetores.html' title='Vetores'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-2776533243700070011</id><published>2010-01-14T04:46:00.000-08:00</published><updated>2010-09-21T20:56:16.047-07:00</updated><title type='text'>Laços de Repetição</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;  Hoje vou falar sobre os famosos laços de repetição. Estruturas bem simples e poderosas do mundo da computação.&lt;br /&gt;  Os laços de repetição se encarregam de repetir determinada instrução enquanto uma determinada condição for verdadeira.&lt;br /&gt;  A partir de agora vamos chamar esses laços de &lt;span style=&quot;font-style:italic;&quot;&gt;loops&lt;/span&gt;. Assim sendo, temos basicamente dois tipos de loops: O &lt;span style=&quot;font-weight:bold;&quot;&gt;for&lt;/span&gt; e o &lt;span style=&quot;font-weight:bold&quot;&gt;while&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;No portugol, o while seria algo mais ou menos assim:&lt;br /&gt;&lt;span style=&quot;font-family: Verdana !important; font-style:italic&quot;&gt;&lt;br /&gt;inteiro i := 1&lt;br /&gt;ENQUANTO i &lt; 10 FAÇA&lt;br /&gt;&amp;nbsp;&amp;nbsp;imprima(i)&lt;br /&gt;   &amp;nbsp;&amp;nbsp;i = i + 1&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;E o for, assim:&lt;br /&gt;&lt;span style=&quot;font-family: Verdana !important; font-style:italic&quot;&gt;&lt;br /&gt;PARA i = 0 de 1 a 10 FAÇA&lt;br /&gt;   &amp;nbsp;&amp;nbsp;imprima(i)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ou seja, nos dois casos ele vai ter que repetir a instrução &lt;span style=&quot;font-style:italic;&quot;&gt;imprima(i)&lt;/span&gt; até que a variável &lt;span style=&quot;font-style:italic&quot;&gt;i&lt;/span&gt; seja igual a 10.&lt;br /&gt;&lt;br /&gt;Na linguagem de programação C, isso ficaria assim:&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;int i = 0;&lt;br /&gt;while(i &lt; 10)&lt;br /&gt;{&lt;br /&gt;  printf(i);&lt;br /&gt;  i = i + 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;for(int i = 0; i &lt; 10; i = i + 1)&lt;br /&gt;  printf(i);&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;O laço &lt;span style=&quot;font-weight:bold;&quot;&gt;while&lt;/span&gt; tem uma variação, que se chama &lt;span style=&quot;font-weight:bold;&quot;&gt;Do..While&lt;/span&gt;. No primeiro caso, quando fazemos o while normal, primeiro é verificado se i é menor do que 10 e então a instrução é executada. Já, quando utilizamos dessa forma:&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;int i = 0;&lt;br /&gt;do {&lt;br /&gt;  printf(i);&lt;br /&gt;} while(i &lt; 10);&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;Primeiro é executada a instrução, e depois a condição é testada.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold; color: #AA0000;&quot;&gt;Cuidado!&lt;/span&gt;&lt;br /&gt;É muito fácil de cair sem perceber no famoso &lt;span style=&quot;font-weight:bold;&quot;&gt;loop infinito&lt;/span&gt;.&lt;br /&gt;Dê uma olhada no banner do blog. Vê aquele &quot;&lt;span style=&quot;font-style:italic;&quot;&gt;while( 1 &gt; 0 ) printf(&quot;Bem vindo!&quot;);&lt;/span&gt;&quot; ? &lt;br /&gt;Isso é um loop infinito. Quando não se queria um desses, pode causar muita dor de cabeça. Agora, quando você precisar de um desses, dentro do escopo do loop tem que haver alguma instrução que execute o &lt;span style=&quot;font-weight:bold;&quot;&gt;break&lt;/span&gt; (instrução que força o término do loop), que quebra o loop infinito.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para terminar, que tal escrever uma função que, dado um número inteiro n, retorne o seu fatorial?&lt;br /&gt;&lt;br /&gt;Em C:&lt;br /&gt;&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: cpp&quot;&gt;&lt;![CDATA[&lt;br /&gt;int fatorial(int n)&lt;br /&gt;{&lt;br /&gt;  int numFatorial = 1;&lt;br /&gt;  for(int i = 1; i &lt;= n; i = i + 1)&lt;br /&gt;     numFatorial = numFatorial * i;&lt;br /&gt;  return numFatorial;&lt;br /&gt;}&lt;br /&gt;]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;É isso! Até a próxima!</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/2776533243700070011/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2010/01/lacos-de-repeticao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/2776533243700070011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/2776533243700070011'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2010/01/lacos-de-repeticao.html' title='Laços de Repetição'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-3807222364804311015</id><published>2010-01-14T04:36:00.000-08:00</published><updated>2010-01-14T04:39:49.267-08:00</updated><title type='text'>Voltando com tudo</title><content type='html'>Bom, sem mais delongas, só queria me pronunciar sobre o ano de 2010. &lt;br /&gt;Tomara que eu consiga manter isso aqui atualizado sempre! =]&lt;br /&gt;&lt;br /&gt;Abraços!</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/3807222364804311015/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2010/01/voltando-com-tudo.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/3807222364804311015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/3807222364804311015'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2010/01/voltando-com-tudo.html' title='Voltando com tudo'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-884015292543881541</id><published>2009-09-02T14:49:00.000-07:00</published><updated>2009-09-02T14:52:35.720-07:00</updated><title type='text'>Novas Postagens</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;Bom, como pode se perceber, não consegui postar quando eu queria né =P&lt;br /&gt;Estou totalmente sem tempo, por causa de faculdade + trabalho + estudos a parte + etc.&lt;br /&gt;&lt;br /&gt;Mas, nesse tempo que fiquei sem postar, uma boa parte foi destinada a estudos de problemas envolvendo algoritmos. Então, no próximo post, falarei um pouquinho sobre vetores e laços de repetição, para poder colocar problemas e resoluções aqui!&lt;br /&gt;&lt;br /&gt;É isso ai!&lt;br /&gt;[]&#39;s !</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/884015292543881541/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2009/09/novas-postagens.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/884015292543881541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/884015292543881541'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2009/09/novas-postagens.html' title='Novas Postagens'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-3423903444516772353</id><published>2009-02-26T15:41:00.000-08:00</published><updated>2009-09-02T14:53:34.475-07:00</updated><title type='text'>If...Else</title><content type='html'>&lt;span style=&quot;WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 100% &#39;Times New Roman&#39;; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px&quot; class=&quot;Apple-style-span&quot;&gt;&lt;div style=&quot;TEXT-ALIGN: left; PADDING-BOTTOM: 3px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; PADDING-LEFT: 3px; WIDTH: auto; PADDING-RIGHT: 3px; FONT: 100% Georgia,serif; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 3px; font-size-adjust: none; font-stretch: normal&quot;&gt;Olá! &lt;div&gt;Depois de muito tempo sem postar (de novo), vou voltar ao blog ! (Acho que agora vai hein =P)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bom, até agora falei apenas sobre as funções, de uma maneira geral.&lt;/div&gt;&lt;div&gt;Hoje vou mostrar a estrutura que para muitos é a mais apaixonante da ciência da computação. O famoso IF !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mas antes de falar do If, eu percebi que acabei esquecendo de explicar o que são variáveis.&lt;/div&gt;&lt;div&gt;Bom, ai vai: As variáveis são como se fossem blocos, usados para guardar informações. Então você pergunta: &quot;Qualquer informação?&quot; e eu respondo: Normalmente não, depende da linguagem que você trabalha. Existem tipos de variáveis, que determinam qual tipo de informação você pode guardar dentro dela. Para exemplificar, se você ler aquela função do útimo post, vai perceber que os argumentos da função são do tipo&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot; class=&quot;Apple-style-span&quot;&gt;int&lt;/span&gt;. Isso quer dizer que naqueles argumentos, que nada mais são do que variáveis, só podem ser guardados números inteiros. Se você tentar atribuir algum outro valor a eles, não vai conseguir. Há vários tipos de variáveis, que são os mesmos que citei quando falei dos tipos de retorno de funções.&lt;/div&gt;&lt;div&gt;O que eu disse sobre depender da linguagem é que, por exemplo, no javascript você tem a variável do tipo &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;var&lt;/span&gt;. Essa variável é de qualquer tipo, ela pode guardar qualquer coisa, um número inteiro (&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;int&lt;/span&gt;), um valor verdadeiro ou falso (&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;boolean&lt;/span&gt;), uma palavra (&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;string&lt;/span&gt;), ou seja, qualquer coisa. Já numa linguagem como o Java, isso não é possivel. Se você tentar atribuir um valor verdadeiro ou falso, ou &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;booleano&lt;/span&gt;, a uma váriavel declarada do tipo &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;int&lt;/span&gt;, ele não vai permitir.&lt;br /&gt;Sobre variáveis, é isso. São extremamente importantes para tudo, já que quase tudo o que você usa na construção de algoritmos são variáveis, você as manipula, atribui valores, faz operações com elas, condições, etc. :)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Agora, finalmente, o IF:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Vamos já pensar numa função. Queremos construir uma função que recebema duas variáveis do tipo inteiro e nos retorne qual dos dois números é maior. Como você descreveria o que essa função deve fazer? &quot;Ah, ela recebe os dois valores, então vê &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;se&lt;/span&gt; o valor1 é maior que o valor2. &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;Se&lt;/span&gt; sim, ele devolve o valor1. Se não, ele devolve o valor2&quot;.&lt;br /&gt;Ahá! &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;Se&lt;/span&gt; e &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;se não&lt;/span&gt;, traduzindo: &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;If&lt;/span&gt; or &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;else&lt;/span&gt; !&lt;br /&gt;&lt;br /&gt;Vejamos como ficaria a função:&lt;br /&gt;(estou na luta pra conseguir um scanner, pra melhorar essas imagens..)&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.jornalismoderua.com.br/post5.jpg&quot; /&gt;&lt;/div&gt;&lt;br /&gt;Ela diz: &quot;Se a for maior do que b (ou seja, se o resultado da operação a &gt; b for verdade), devolva a. Se não, devolva b&quot;.&lt;br /&gt;&lt;br /&gt;E é assim que funciona o If !&lt;br /&gt;Claro que você pode fazer algumas coisas mais legais com ele, vou mostrar muitos algoritmos que vamos usar muitooos If&#39;s. Vou mostrar também casos de quando usar if ou não. :)&lt;br /&gt;&lt;br /&gt;Por hoje é isso !&lt;br /&gt;Até o próximo post ! (Espero que seja amanhã :P)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/3423903444516772353/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2009/02/ifelse.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/3423903444516772353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/3423903444516772353'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2009/02/ifelse.html' title='If...Else'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-7233184182653187449</id><published>2009-01-13T07:43:00.001-08:00</published><updated>2009-01-13T07:54:34.507-08:00</updated><title type='text'>Voltando</title><content type='html'>Pois é, depois de muito tempo sem novidades...&lt;br /&gt;O blog vai voltar a ter seus posts atualizados!&lt;br /&gt;&lt;br /&gt;E vamos com tudo em 2009 !&lt;br /&gt;:)&lt;br /&gt;&lt;br /&gt;Abraços!</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/7233184182653187449/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2009/01/voltando.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/7233184182653187449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/7233184182653187449'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2009/01/voltando.html' title='Voltando'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-7175066380275302239</id><published>2008-09-25T19:32:00.000-07:00</published><updated>2008-09-25T17:36:28.464-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="funções"/><category scheme="http://www.blogger.com/atom/ns#" term="lápis"/><title type='text'>Argumentos</title><content type='html'>Olá! Finalmente, a última parte de funções: os argumentos. =]&lt;br /&gt;&lt;br /&gt;Lembra quando eu disse que poderíamos dizer para uma função: &quot;Ei função, pega esses dois números inteiros aqui, soma e me devolve a soma deles&quot;?&lt;br /&gt;Quando fazemos isso, jogamos algo com o que a função vai trabalhar, chamamos essas informações de &lt;span style=&quot;font-weight: bold;&quot;&gt;parâmetros&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;E então você pergunta: &quot;Mas então porque você falou que iríamos falar sobre argumentos?&quot;. Eu respondo:&lt;br /&gt;Quando se constrói uma função, você pode deixar determinado quais informações ela está aguardando para trabalhar:  os &lt;span style=&quot;font-weight: bold;&quot;&gt;argumentos&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Ou seja, Uma função tem seus &lt;span style=&quot;font-weight: bold;&quot;&gt;argumentos&lt;/span&gt;, e uma chamada de função tem seus &lt;span style=&quot;font-weight: bold;&quot;&gt;parâmetros&lt;/span&gt;.&lt;br /&gt;Bom, vou mostrar um exemplo comentado:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://www.godal.com.br/images/post4.jpg&quot; /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Conclusão: Quando falamos que vamos jogar algo pra função, chamamos de parâmetros, e quando temos uma função que espera determinadas informações, chamamos de argumentos.&lt;br /&gt;&lt;br /&gt;E assim, chegamos ao fim da estrutura das funções!&lt;br /&gt;Nos próximos posts vou começar a postar alguns algoritmos, funções, de treino. Tudo comentado. =]&lt;br /&gt;Até la!</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/7175066380275302239/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2008/09/argumentos.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/7175066380275302239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/7175066380275302239'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2008/09/argumentos.html' title='Argumentos'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-1023026606099262061</id><published>2008-09-22T11:21:00.000-07:00</published><updated>2008-09-24T16:40:38.549-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="funções"/><title type='text'>Mais sobre Funções</title><content type='html'>Olá! Vamos para a 2ª parte sobre funções.&lt;br /&gt;No final do último post, deixei escrito que &quot;Pode-se construir uma função que faça alguma coisa apenas (do tipo void) ou uma função que faça alguma coisa e te traga de volta o resultado (do tipo int, string, double, etc..)&quot; , e vou explicar agora como funciona isso.&lt;br /&gt;&lt;br /&gt;Para começar, vou lembrar um pouco das variáveis.&lt;br /&gt;Quando vamos escrever algum algoritmo, usamos muito as famosas váriaveis. Por exemplo, num algoritmo de soma. Ele pega dois números, &lt;span style=&quot;font-weight: bold;&quot;&gt;a&lt;/span&gt; e &lt;span style=&quot;font-weight: bold;&quot;&gt;b &lt;/span&gt;e traz a soma deles. Esses números não são sempre os mesmos certo? São as váriaveis &lt;span style=&quot;font-weight: bold;&quot;&gt;a&lt;/span&gt; e &lt;span style=&quot;font-weight: bold;&quot;&gt;b&lt;span style=&quot;font-weight: bold;&quot;&gt;, &lt;/span&gt;&lt;/span&gt;ou seja, podem admitir diversos valores, sendo eles vindo diretamente do código, vindo de algum input pro usuário, etc.&lt;br /&gt;&lt;br /&gt;Mas porque falei das variáveis? Porque ao declarar uma variável, você tem que dizer de qual tipo ela é, para o computador saber como representá-la na memória. Há vários tipos de representação de dados para o computador, os principais são:&lt;span class=&quot;font3&quot;&gt; Boolean, Char&lt;/span&gt;&lt;span class=&quot;font3&quot;&gt;, String, &lt;/span&gt;&lt;span class=&quot;font3&quot;&gt;Int&lt;/span&gt;&lt;span class=&quot;font3&quot;&gt;, Double e Float, onde são, respectivamente: Verdadeiro ou Falso, um Caractere, Um conjunto de caracteres ( uma palavra, uma frase ), um número inteiro, um número decimal de certo tamanho, número com ponto flutuante de certo tamanho.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;E é quase a mesma coisa para as funções. Toda função, ao ser declarada, tem que ser de um tipo especifico. Só que o tipo da função determina qual o tipo de retorno que eu estou aguardando dela, ou até mesmo se eu não preciso aguardar nenhum retorno. Além dos tipos de representação de dados que mostrei acima, há mais um para funções: O tipo void. Que seria o tipo sem retorno.&lt;br /&gt;&lt;br /&gt;Então, é como eu disse no começo, pode-se construir uma função que faça alguma coisa apenas (que retone um tipo void, ou seja, nada) ou uma função que faça alguma coisa e te traga de volta o resultado (que retorne algo do tipo int, string, double, etc..).&lt;br /&gt;Vou descrever três funções, uma com tipo &lt;span&gt;de retorno&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; void&lt;/span&gt; , uma com &lt;span style=&quot;font-weight: bold;&quot;&gt;int&lt;/span&gt; e outra &lt;span style=&quot;font-weight: bold;&quot;&gt;com string&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF_ftA8BQo92r5D2GwFogpYwy4wFwNSruus0pPyOQKux-_kjr2gcePh6RKuyC_0l5Ok7atv6KCQmNpfq9pYUWwnOQjxIdDuUQxX3XmggWaWTXldpiKClOThJBr95KpEZhVFK69_A4ay-Cb/s1600-h/tiposFuncao.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF_ftA8BQo92r5D2GwFogpYwy4wFwNSruus0pPyOQKux-_kjr2gcePh6RKuyC_0l5Ok7atv6KCQmNpfq9pYUWwnOQjxIdDuUQxX3XmggWaWTXldpiKClOThJBr95KpEZhVFK69_A4ay-Cb/s400/tiposFuncao.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5248958234131370338&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-size:78%;&quot;&gt;Obs.: Vamos adotar essas funções como se estivessem dentro de uma classe, na orientação a objetos, só para o &quot;public&quot; não ficar errado.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As três funções não possuem argumentos, ou seja, não precisam de nenhum dado para executar.&lt;br /&gt;A primeira, quando chamada, apenas escreve na tela (com a sintaxe de Console Application do C#) a palavra Void. A segunda, quando chamada, apenas traz o número 4. A terceira traz a sigla PP. E perceba que a primeira é a única que não possue a palavra &lt;span style=&quot;font-weight: bold;&quot;&gt;return&lt;/span&gt;. As outras se não possuirem essa palavra, estariam erradas, ja que foram declaradas com tipos de retorno diferentes do void.&lt;br /&gt;&lt;br /&gt;Agora, para ficar mais claro: Eu poderia escrever um código para escrever na tela a sigla PP do tipo void, da mesma forma que a primeira função, ou escrever um Console.WriteLine(ex3()) que daria o mesmo resultado, ja que a sua instrução diz: &quot;Eu quero escrever na tela o que a função ex3 tem para me retornar&quot;.&lt;br /&gt;&lt;br /&gt;E é isso ai! Fica então que, além de executar um bloco de instruções, as funções podem trazer retornos, que são importantes quando se precisa trabalhar com eles.&lt;br /&gt;Até o próximo post!&lt;br /&gt;&lt;br /&gt;obs.: Obrigado aos meus amigos de trabalho, Marcos Sabino e Érico Neto, que me alertaram quanto ao uso do termo &quot;função do tipo tal&quot;, porque na realidade o tipo especifica o tipo do retorno, e não da função. As funções não possuem tipos, apesar do costume de se falar &quot;função do tipo tal&quot;. =D</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/1023026606099262061/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2008/09/mais-sobre-funes.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/1023026606099262061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/1023026606099262061'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2008/09/mais-sobre-funes.html' title='Mais sobre Funções'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF_ftA8BQo92r5D2GwFogpYwy4wFwNSruus0pPyOQKux-_kjr2gcePh6RKuyC_0l5Ok7atv6KCQmNpfq9pYUWwnOQjxIdDuUQxX3XmggWaWTXldpiKClOThJBr95KpEZhVFK69_A4ay-Cb/s72-c/tiposFuncao.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-3155440872631810702</id><published>2008-09-17T11:51:00.000-07:00</published><updated>2008-09-22T14:36:46.789-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="funções"/><category scheme="http://www.blogger.com/atom/ns#" term="métodos"/><title type='text'>Métodos, Funções</title><content type='html'>Olá! Vamos começar pra valer com o PP agora.&lt;br /&gt;Vou falar um pouco sobre métodos e/ou funções.&lt;br /&gt;Afinal, o que são métodos? O que são funções? Qual a diferença?&lt;br /&gt;&lt;br /&gt;A verdade é a seguinte: É a mesma coisa dizer função ou método. O que muda é se ela está sendo usada numa linguagem orientada a objetos ou não. Então, não há muito com o que se preocupar com isso, quando falar função ou método, vai estar certo do mesmo jeito. ( Você acaba entendendo o porquê de ficar como método na orientação a objeto, mas isso é um assunto para depois )&lt;br /&gt;&lt;br /&gt;E o que são dentro da programação? São fundamentais. É algo que define um bloco de instruções para resolver algum problema, menor que o original.&lt;br /&gt;Acho que fica melhor entender com um exemplo. Se nós quisermos somar 2 números e imprimir na tela, o que seria melhor?&lt;br /&gt;- Fazer um bloco de instruções direto de onde o programa executa;&lt;br /&gt;- ou fazer um bloco menor, onde eu posso simplesmente jogar os numeros a serem somados e impressos pra ele e pedir &quot;Ei, função Somar, pega esses dois números inteiros a e b, soma pra mim e depois imprimi na tela, please?&quot;&lt;br /&gt;&lt;br /&gt;Bom, se você escolheu a primeira opção, de por tudo direto na execução do programa para ler, somar e imprimir, tem que saber: vai funcionar, sim. Mas e quando você for precisar fazer 5 vezes uma coisa do tipo: ler 5 números inteiros, verificar qual é o maior e imprimir na tela, não seria melhor ter um bloco de código só para pegar esses números lidos, fazer a verificação dentro dele e já imprimir na tela?&lt;br /&gt;&lt;br /&gt;Pra ficar mais claro, vou dar um exemplo de uma função que soma e imprime dois números inteiros dados a ela:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIwWIW0-Ur8IcAaLYRMRAxKfRDfxsuYJc_6-feNJegwdZDdCec0U6ksbAIaNaOie54XIrMUCF8UCtheWD8PdMFj4jlmS4F2Gcvy-zWppZC-rRvbVIF8_EL7joKoVcJgivKxzZfRyk9eWQY/s1600-h/primeiroPost.jpg&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5247087537338481810&quot; style=&quot;margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIwWIW0-Ur8IcAaLYRMRAxKfRDfxsuYJc_6-feNJegwdZDdCec0U6ksbAIaNaOie54XIrMUCF8UCtheWD8PdMFj4jlmS4F2Gcvy-zWppZC-rRvbVIF8_EL7joKoVcJgivKxzZfRyk9eWQY/s400/primeiroPost.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-size:78%;&quot;&gt;( Aqui não tem ctrl+c e ctrl+v =P)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;O que está descrito na folha: Uma classe Programa, que seria nosso programa mesmo, com dois métodos (funções): O método main() e o método somaEimprima(int a, int b). O método main é o bloco de instruções a serem lidas com a execução do programa, e o método somaEimprima é implementado abaixo, podendo ser usado na main, ou não. É importante lembrar que todo programa tem apenas UM método main.&lt;br /&gt;No nosso caso, a função somaEimprima recebe dois números inteiros a e b e imprime a soma deles. Chamando no main com os parâmetros (2, 2), ele entende como a = 2 e b = 2, logo imprime 4.&lt;br /&gt;&lt;br /&gt;Pode-se construir uma função que faça alguma coisa apenas (do tipo void) ou uma função que faça alguma coisa e te traga de volta o resultado (do tipo int, string, double, etc..)&lt;br /&gt;Mas isso vou falar no próximo post!&lt;br /&gt;&lt;br /&gt;Por hoje, ficou a definição de funções e/ou métodos, esses blocos de instruções que nos ajudam a transformar um grande problema em vários pequenos e estruturados, que podem ou não trazer de volta algum resultado ou que executam o bloco e pronto.&lt;br /&gt;&lt;br /&gt;Agora, pra você treinar um pouco, é só pegar um papel, um lápis e uma borracha e tentar construir algumas funções! Coisas do tipo: &quot;Uma função que receba um inteiro n e imprima 2n&quot;&lt;br /&gt;&lt;br /&gt;Boa diversão!&lt;br /&gt;[]&#39;s &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/3155440872631810702/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2008/09/mtodos-funes.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/3155440872631810702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/3155440872631810702'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2008/09/mtodos-funes.html' title='Métodos, Funções'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIwWIW0-Ur8IcAaLYRMRAxKfRDfxsuYJc_6-feNJegwdZDdCec0U6ksbAIaNaOie54XIrMUCF8UCtheWD8PdMFj4jlmS4F2Gcvy-zWppZC-rRvbVIF8_EL7joKoVcJgivKxzZfRyk9eWQY/s72-c/primeiroPost.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3940708242036847438.post-8717439294787487063</id><published>2008-09-16T16:48:00.000-07:00</published><updated>2008-09-16T16:59:31.813-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="borracha"/><category scheme="http://www.blogger.com/atom/ns#" term="linguagens"/><category scheme="http://www.blogger.com/atom/ns#" term="lápis"/><title type='text'>O Começo !</title><content type='html'>Olá! Esse é o primeiro post do novo blog &quot;Programação de Papel&quot;, ou simplesmente &quot;PP&quot; !&lt;br /&gt;Tenho o intuito de com esse blog compartilhar todos os meus aprendizados sobre a - porque não - arte da programação e construção de algoritmos com vocês, sempre utilizando os melhores equipamentos que nós podemos ter - Um lápis e uma borracha bem macia!&lt;br /&gt;&lt;br /&gt;É isso ai, nada de ctrl+c e ctrl+v com dicas de códigos aqui! Vamos tentar começar a pensar e entender o que está acontecendo! (Nem que leve muito tempo, acontece muito hehe )&lt;br /&gt;&lt;br /&gt;Então, espero que eu consiga cumprir esse intuito, de mostrar que não há nada melhor do que entender um algoritmo, seja em qual linguagem for, se for com o seu compilador natural: Você!&lt;br /&gt;&lt;br /&gt;E é isso! Até o próximo post!&lt;br /&gt;[]&#39;s !</content><link rel='replies' type='application/atom+xml' href='http://programacaodepapel.blogspot.com/feeds/8717439294787487063/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programacaodepapel.blogspot.com/2008/09/o-comeo.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/8717439294787487063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3940708242036847438/posts/default/8717439294787487063'/><link rel='alternate' type='text/html' href='http://programacaodepapel.blogspot.com/2008/09/o-comeo.html' title='O Começo !'/><author><name>Guilherme Rey</name><uri>http://www.blogger.com/profile/14201352277201224573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiIvNOgo3JjMJvP06l7USVI7vIhvfUSH302m4jXuhH5MrGLvpz_nzMIwyQXlCyS3h4mSvRCFsSg-X09Jwwg8irM-_plh6LX8afSLw8FhYIULGzfRmUWk5MYNqfYZH-NQ/s220/img.jpg'/></author><thr:total>0</thr:total></entry></feed>