<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PauloMotta.pro &#187; ALGORITMOS</title>
	<atom:link href="http://www.paulomotta.pro.br/tag/algoritmos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.paulomotta.pro.br</link>
	<description>&#34;Qualquer tecnologia suficientemente avançada é indistinguível da mágica&#34; - Arthur C. Clarke</description>
	<lastBuildDate>Tue, 10 Jan 2012 03:00:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Soma, média e produto</title>
		<link>http://www.paulomotta.pro.br/2010/10/15/soma-media-e-produto/</link>
		<comments>http://www.paulomotta.pro.br/2010/10/15/soma-media-e-produto/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 13:34:57 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Principal]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ALGORITMOS]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=983</guid>
		<description><![CDATA[Três coisas que fazemos muito em programação é soma de vários números, média de vários números e produto de vários números. Esse tópico é básico e de fundamental importância na vida de qualquer programador, no entanto, todo período tenho a surpresa de aplicar uma questão assim na prova e ver que as pessoas não sabem [...]]]></description>
			<content:encoded><![CDATA[<p>Três coisas que fazemos muito em programação é soma de vários números, média de vários números e produto de vários números. Esse tópico é básico e de fundamental importância na vida de qualquer programador, no entanto, todo período tenho a surpresa de aplicar uma questão assim na prova e ver que as pessoas não sabem fazer isso.</p>
<p>Resolvi então colocar uma explicação e &#8220;padrão de codificação&#8221; aqui para dar uma força.</p>
<p>Primeiro temos que saber que as variáveis acumuladoras devem ser declaradas fora do laço (seja for, while ou do/while,) além disso precisamos conhecer os elementos neutros da operação. Se você vai somar então a variável deve começar com 0 (zero) se vai multiplicar então deve começar com 1 (um).</p>
<blockquote><p>Exemplo1:</p>
<pre>int soma =0;</pre>
<pre>int produto = 1;</pre>
<pre>for(int i=0;  i&lt;10; i++) {</pre>
<pre>   soma += i; // soma = soma + i;
</pre>
<pre>   produto *= i; // produto = produto * i;
</pre>
<pre>}</pre>
</blockquote>
<p>A média será feita sobre uma soma, então você precisa iniciar com 0 (zero,) mas precisa também de uma variável extra para contar quantos números estão fazendo parte da média. Um bom exemplo é ler números até que o usuário digite um número negativo e calcular a média de todos os números pares digitados. Não temos como saber de antemão quantos números serão, portanto precisamos contar quantos foram somados.</p>
<blockquote><p>Exemplo2:</p>
<pre>double media =0;</pre>
<pre>int cont = 0;</pre>
<pre>//le um primeiro numero
</pre>
<pre>while(num &gt;= 0) {</pre>
<pre>   if (num%2 == 0){</pre>
<pre>      media += num; // media = media + num;
</pre>
<pre>      cont++;
</pre>
<pre>   }</pre>
<pre>}
<pre>media /= cont; //media = media / cont;</pre>
</pre>
</blockquote>
<p>Uma coisa que os alunos sempre reclamam é da forma de fazer as contas em Java (mas que é igual a de C, C++, C#, JavaScript, ActionScript&#8230;) quando vamos contabilizar variavel = variavel + outra_variavel. Em Java podemos escrever simplesmente variavel += outra_variavel, o que  dá uma economizada em digitação.</p>
<p>Essas técnicas podem (e vão) ser combinadas com outras para criar programas maiores e que tenham real utilidade, mas sem conhecer o básico fica mais difícil. Estou me planejando para colocar aqui trechos com essas técnicas básicas para criar uma &#8220;biblioteca&#8221; de consulta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/10/15/soma-media-e-produto/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Solução do Rubik&#8217;s Cube</title>
		<link>http://www.paulomotta.pro.br/2010/09/06/solucao-do-rubiks-cube/</link>
		<comments>http://www.paulomotta.pro.br/2010/09/06/solucao-do-rubiks-cube/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 13:47:25 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Diversão]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[ALGORITMOS]]></category>
		<category><![CDATA[Rubik Cube]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=906</guid>
		<description><![CDATA[Mês passado eu coloquei um post aqui falando daquele cubo colorido que era febre nos anos 80 (na verdade no mundo nerd nunca deixou de ser febre&#8230;) Pois bem, para todos vocês que não sabem resolver o problema de cabeça aqui vai um site que tem uma solução (razoavelmente) fácil de guardar, basta repetir algumas [...]]]></description>
			<content:encoded><![CDATA[<p>Mês passado eu coloquei um post <a href="http://www.paulomotta.pro.br/2010/08/17/rubiks-cube-divertidos/" target="_blank">aqui</a> falando daquele cubo colorido que era febre nos anos 80 (na verdade no mundo nerd nunca deixou de ser febre&#8230;)</p>
<p>Pois bem, para todos vocês que não sabem resolver o problema de cabeça <a href="http://www.nerdparadise.com/puzzles/333/intro/" target="_blank">aqui vai um site</a> que tem uma solução (razoavelmente) fácil de guardar, basta repetir algumas vezes.</p>
<p>O site está em inglês, mas o <a href="http://translate.google.com.br/" target="_blank">google translator</a> está cada dia mais sinistro.</p>
<p>Em tempo, o site tem várias coisas divertidas e quebra-cabeças matemáticos, vale explorar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/09/06/solucao-do-rubiks-cube/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Previsão programada</title>
		<link>http://www.paulomotta.pro.br/2010/08/23/previsao-programada/</link>
		<comments>http://www.paulomotta.pro.br/2010/08/23/previsao-programada/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 18:01:16 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Inovação]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[ALGORITMOS]]></category>
		<category><![CDATA[ANÁLISE]]></category>
		<category><![CDATA[Ciências]]></category>
		<category><![CDATA[DISTRIBUIÇÃO]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PARALELISMO]]></category>
		<category><![CDATA[Pesquisa]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>
		<category><![CDATA[WEB]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=839</guid>
		<description><![CDATA[A Google está lançando uma nova API de previsão que permite aos desenvolvedores incorporarem à suas aplicações o uso dos algoritmos de aprendizado de máquina da Google através de webservices RESTful. Através da análise de dados enviados para para os algoritmos você consegue mais informação dos seus usuários, desde a língua que usam até possíveis [...]]]></description>
			<content:encoded><![CDATA[<p>A Google está lançando uma nova API de previsão que permite aos desenvolvedores incorporarem à suas aplicações o uso dos algoritmos de aprendizado de máquina da Google através de webservices RESTful. Através da análise de dados enviados para para os algoritmos você consegue mais informação dos seus usuários, desde a língua que usam até possíveis interesses por compras ou mesmo comportamento suspeito. Aqui tem um vídeo de apresentação sobre a API, e a página oficial pode ser encontrada <a href="http://code.google.com/intl/pt-BR/apis/predict/" target="_blank">aqui</a>. Infelizmente ainda é uma coisa restrita apenas para quem for convidado e residente nos EUA.</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/dbkwv1wjs3A" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/dbkwv1wjs3A"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/08/23/previsao-programada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O que deve saber um programador &#8211; nível zero?</title>
		<link>http://www.paulomotta.pro.br/2010/08/18/o-que-deve-saber-um-programador-nivel-zero/</link>
		<comments>http://www.paulomotta.pro.br/2010/08/18/o-que-deve-saber-um-programador-nivel-zero/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 16:00:33 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[ALGORITMOS]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[LINGUAGEM]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=801</guid>
		<description><![CDATA[Semana passada eu comentei do que acho que é necessário que um programador nível básico precisa saber, enquanto escrevia pensei que para chegar ao nível básico o aspirante precisa passar por um caminho inicial até chegar no ponto de começar a aprender o que vai torná-lo enfim um programador nível básico. Então sem mais delongas [...]]]></description>
			<content:encoded><![CDATA[<p>Semana passada eu comentei do que acho que é necessário que um programador nível básico precisa saber, enquanto escrevia pensei que para chegar ao nível básico o aspirante precisa passar por um caminho inicial até chegar no ponto de começar a aprender o que vai torná-lo enfim um programador nível básico.</p>
<p>Então sem mais delongas vamos listar os passos necessários para percorrer esse caminho:</p>
<ol>
<li>Estude introdução a algoritmos &#8211; nesse tópico não estou falando de algoritmos sofisticados e sim da primeira etapa onde aprendemos a fazer pequenos algoritmos em pseudo-linguagem ou portunhol que geralmente descrevem os passos para fazer um bolo. Entenda como descrever os passos para resolver um problema de forma estruturada e lógica.</li>
<li>Saiba lógica matemática &#8211; sim a boa e velha tabela verdade, é necessário entender como funcionam as relações lógicas. Principalmente AND, OR e NOT.</li>
<li>Estude uma linguagem de programação &#8211; usando o manual da linguagem, aprenda as palavras reservadas, os comandos e blocos de construção de programas. Usando Java como exemplo temos a seguinte lista:
<ol>
<li>Tipos de dados &#8211; int, long, short, byte, char, float, double e boolean</li>
<li>Operadores &#8211; +, -, *, /, %, &lt;, &gt;, &lt;=, &gt;=, !=, == e alguns outros</li>
<li>Estruturas de decisão &#8211; if e switch</li>
<li>Estruturas de repetição &#8211; for, while e do/while</li>
<li>Declaração de métodos (ou funções se fosse em C)</li>
</ol>
</li>
<li>Faça muitos exercícios &#8211; uma coisa que as pessoas demoram a entender (ou aceitar) é que programação precisa de exercício, o programador precisa ser capaz de entender o problema em termos de construções básicas que fazem parte da linguagem com a qual trabalha. Precisa ser capaz de expressar a solução com essas construções e quanto mais programamos mais rapidamente identificamos quais serão os itens que expressarão a resposta. Uma estratégia que estou pensando que pode funcionar (tive essa ideia pensando na forma como estudamos música) é refazer os programas que já foram feitos várias vezes, não estou falando de escrever o programa copiando, e sim de resolver os mesmos problemas várias vezes adicionando um ou dois novos problemas por semana, aos poucos ganha-se mais experiência e mais confiança na resolução de problemas.</li>
<li>Aprenda a escrever claramente &#8211; sim, a interpretação de texto e a capacidade de descrever a solução do problema de forma clara são fundamentais na vida de um programador.</li>
<li>Aprenda a usar a entrada e saída via teclado &#8211; isso é importante para podermos começar a fazer programas com os quais o usuário pode interagir, programas que vão solicitar por exemplo que o usuário informe um número para cálculo, ou um conjunto de números para fazer uma média, e é claro será necessário imprimir pelo menos no console o resultado do processamento.</li>
<li>Entenda o que é um endereço de memória &#8211; em Java não podemos manipular diretamente a memória do computador, mas em C podemos indicar um endereço que queremos acessar, mesmo assim, Java tem variáveis de referência e precisamos entender o que essas variáveis fazem e para que são usadas.</li>
<li>Aprenda a criar e usar <a href="http://www.paulomotta.pro.br/2009/09/01/tipos-abstratos-de-dados/" target="_blank">tipos abstratos de dados</a> &#8211; o programador pode criar seus próprios tipos de dados para organizar melhor seus programas e isso pode ser feito agrupando os tipos básicos da linguagem em novos tipos. Nas linguagens orientadas a objeto, como Java, esses tipos de dados são criados em classes, já nas linguagens estruturadas, como C, usamos structs.</li>
<li>Aprenda a fazer um loop de aplicação &#8211; as aplicações profissionais costumam continuar executando até que o usuário escolha uma opção para encerrar o programa, isso pode ser feito, por exemplo, colocando um laço que só termina quando o usuário digita um valor específico. Enteder como criar esse mecanismo, mesmo em uma aplicação que não tem interface gráfica ajuda a desenvolver muito a habilidade de programação.No nível zero de programação eu costumo trabalhar com programas que tem interface baseada em caracteres, também chamadas CHUI (CHaracter User Interface). Neste modelo, imprimimos um pequeno menu texto e ficamos lendo o que o usuário digita, interpretamos a opção, e se ela for válida executamos a ação correspondente, senão imprimimos uma mensagem para o usuário.</li>
</ol>
<p>Acredito que isso seja o necessário para &#8220;passar de faixa&#8221; saindo assim da faixa branca <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/08/18/o-que-deve-saber-um-programador-nivel-zero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ah como eu gosto de Lego :)</title>
		<link>http://www.paulomotta.pro.br/2010/08/18/ah-como-eu-gosto-de-lego/</link>
		<comments>http://www.paulomotta.pro.br/2010/08/18/ah-como-eu-gosto-de-lego/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 12:00:51 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Diversão]]></category>
		<category><![CDATA[Inovação]]></category>
		<category><![CDATA[LEGO]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[ALGORITMOS]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>
		<category><![CDATA[Robôs]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=793</guid>
		<description><![CDATA[Há algum tempo atrás eu coloquei um post sobre Aikon, o robô desenhista, agora achei um diferente, que recebe as informações via software, não analisa a figura em tempo real, mas o legal é que esse é feito em Lego. Decidi então fazer uma galeria de coisas legais feitas em Lego, vou procurá-las, caçá-las e [...]]]></description>
			<content:encoded><![CDATA[<p>Há algum tempo atrás eu coloquei um post sobre <a href="http://www.paulomotta.pro.br/2010/04/15/aikon-o-desenhista/" target="_blank">Aikon, o robô desenhista</a>, agora achei um diferente, que recebe as informações via software, não analisa a figura em tempo real, mas o legal é que esse é feito em Lego.</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/_ogQuLdEcBY" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/_ogQuLdEcBY"></embed></object></p>
<p style="text-align: left;">Decidi então fazer uma galeria de coisas legais feitas em Lego, vou procurá-las, caçá-las e colocar aqui para que todos possamos admirar e tentar fazer igual <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/08/18/ah-como-eu-gosto-de-lego/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

