<?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>Arquivo para Lógica de Programação - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/category/logica-de-programacao/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/category/logica-de-programacao/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Fri, 17 Jan 2025 10:25:21 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>24 &#8211; Lógica de Programação &#8211; Matrizes &#8211; Declaração e preenchimento</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/24-logica-de-programacao-matrizes-declaracao-e-preenchimento/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/24-logica-de-programacao-matrizes-declaracao-e-preenchimento/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sat, 30 Sep 2023 12:14:21 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/blog/?p=898</guid>

					<description><![CDATA[<p>Lógica de Programação &#8211; Matrizes &#8211; Declaração e preenchimento As matrizes são estruturas fundamentais tanto na matemática quanto na computação. Elas permitem a organização e manipulação de dados de forma eficiente, sendo amplamente utilizadas em diversas aplicações, desde a representação de imagens até cálculos complexos em planilhas. Nesta aula vamos explorar o conceito de matrizes em computação, sua aplicação em lógica de programação e exemplos práticos de uso. O Conceito de Matrizes Em matemática, uma matriz é definida como um conjunto de elementos dispostos em linhas e colunas. Uma matriz  m x n  (m por n) possui m linhas e n colunas, e seus elementos são geralmente representados por índices i  (linha) e \j  (coluna). Por exemplo, uma matriz A de 3 linhas e 3 colunas pode ser representada da seguinte forma: Matriz 3&#215;3 Matrizes em Lógica de Programação Na lógica de programação, uma matriz pode ser vista como um array bidimensional (vetor de duas dimensões), ou seja, uma estrutura composta por linhas e colunas que se assemelha a uma tabela. Em Portugol Studio, a declaração de uma matriz é feita especificando o tipo de dados e o número de linhas e colunas. Por exemplo, para declarar uma matriz de [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/24-logica-de-programacao-matrizes-declaracao-e-preenchimento/">24 &#8211; Lógica de Programação &#8211; Matrizes &#8211; Declaração e preenchimento</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1><span style="color: #0000ff;">Lógica de Programação &#8211; Matrizes &#8211; Declaração e preenchimento</span></h1>
<p>As matrizes são estruturas fundamentais tanto na matemática quanto na computação. Elas permitem a organização e manipulação de dados de forma eficiente, sendo amplamente utilizadas em diversas aplicações, desde a representação de imagens até cálculos complexos em planilhas. Nesta aula vamos explorar o conceito de matrizes em computação, sua aplicação em lógica de programação e exemplos práticos de uso.</p>
<h2>O Conceito de Matrizes</h2>
<p>Em matemática, uma matriz é definida como um conjunto de elementos dispostos em linhas e colunas. Uma matriz  <em><strong>m x n</strong></em>  (m por n) possui m linhas e n colunas, e seus elementos são geralmente representados por índices i  (linha) e \j  (coluna). Por exemplo, uma matriz A de 3 linhas e 3 colunas pode ser representada da seguinte forma:</p>
<div id="attachment_20270" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-20270" class="wp-image-20270" title="Matriz em lógica de programação" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2013/09/matriz-3-x-3-logica-1024x302.jpg" alt="Matriz em lógica de programação" width="800" height="236" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2013/09/matriz-3-x-3-logica-1024x302.jpg 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2013/09/matriz-3-x-3-logica-420x124.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2013/09/matriz-3-x-3-logica-768x226.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2013/09/matriz-3-x-3-logica.jpg 1103w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-20270" class="wp-caption-text">Matriz 3&#215;3</p></div>
<h3>Matrizes em Lógica de Programação</h3>
<p>Na lógica de programação, uma matriz pode ser vista como um array bidimensional (vetor de duas dimensões), ou seja, uma estrutura composta por linhas e colunas que se assemelha a uma tabela. Em Portugol Studio, a declaração de uma matriz é feita especificando o tipo de dados e o número de linhas e colunas. Por exemplo, para declarar uma matriz de inteiros com 5 linhas e 3 colunas, utilizamos a seguinte sintaxe:</p>
<pre><strong>inteiro matriz[5][3]</strong></pre>
<p>Também é possível usar constantes para representar o número de linhas e colunas:</p>
<pre><strong>const inteiro X = 5</strong>
<strong>const inteiro Y = 3</strong>
<strong>inteiro matriz[X][Y]</strong></pre>
<h3>Atribuição e Acesso a Valores em Matrizes</h3>
<p>Para atribuir um valor a uma matriz, indicamos a posição do valor no formato [linha][coluna]:</p>
<pre><strong>matriz[0][0] = 60</strong></pre>
<p>Para obter um valor da matriz, utilizamos a mesma notação:</p>
<pre><strong>escreva(matriz[0][0])</strong></pre>
<h3>Exemplo prático de uso de matrizes</h3>
<p>Vamos criar e manipular uma matriz de 5 linhas e 3 colunas:</p>
<pre><strong>inteiro matriz[5][3]</strong>
<strong>funcao inicio()</strong>
<strong>{</strong>
<strong>    matriz[0][0] = 60</strong>
<strong>    escreva("Valor: " + matriz[0][0] + "\n")</strong>
<strong>    escreva("Digite um número: ")</strong>
<strong>    leia(matriz[1][2])</strong>
<strong>    escreva("\nValor na posição 1,2: " + matriz[1][2])</strong>
<strong>}</strong></pre>
<h3>Manipulação de matrizes com laços de repetição</h3>
<p>Para preencher uma matriz com dados digitados pelo usuário, podemos utilizar laços de repetição, como mostra o exemplo a seguir:</p>
<pre><strong>inteiro matriz[3][3]</strong>
<strong>inteiro lin, col</strong>
<strong>funcao inicio()</strong>
<strong>{</strong>
<strong>    para (lin = 0; lin &lt;= 2; lin++ ) </strong>
<strong>    {</strong>
<strong>        para (col = 0; col &lt;= 2; col++ )</strong>
<strong>        {</strong>
<strong>        escreva("Digite um número para inserir na matriz: \n")</strong>
<strong>        leia(matriz[lin][col])</strong>
<strong>    }</strong>
<strong>}</strong>
<strong>    escreva("Valor na posição 0,1: " + matriz[0][1])</strong>
<strong>}</strong></pre>
<h3>Visualização da Matriz</h3>
<p>Para exibir todos os elementos de uma matriz na tela, podemos utilizar um laço aninhado:</p>
<pre><strong>para (lin = 0; lin &lt;= 2; lin++ )</strong>
<strong>{</strong>
<strong>    para (col = 0; col &lt;= 2; col++ )</strong>
<strong>    {</strong>
<strong>        se (col &lt; 2)</strong>
<strong>        {</strong>
<strong>            escreva(matriz[lin][col] + " ")</strong>
<strong>        }</strong>
<strong>        senao</strong>
<strong>        {</strong>
<strong>            escreva(matriz[lin][col] + "\n")</strong>
<strong>        }</strong>
<strong>    }</strong>
<strong>}</strong></pre>
<h3>Exercício Resolvido</h3>
<p>Vamos criar um algoritmo que gera uma matriz 10&#215;10 preenchida com números aleatórios entre 1 e 100 e exibe a matriz em formato tabular, além de calcular o somatório de todos os valores armazenados:</p>
<pre><strong>const inteiro LINHAS = 10</strong>
<strong>const inteiro COLUNAS = 10</strong>
<strong>inteiro matriz[LINHAS][COLUNAS]</strong>
<strong>inteiro soma = 0</strong>
<strong>funcao inicio()</strong>
<strong>{</strong>
<strong>    para (inteiro i = 0; i &lt; LINHAS; i++)</strong>
<strong>    {</strong>
<strong>        para (inteiro j = 0; j &lt; COLUNAS; j++)</strong>
<strong>        {</strong>
<strong>            matriz[i][j] = aleatorio(1, 100)</strong>
<strong>            soma = soma + matriz[i][j]</strong>
<strong>        }</strong>
<strong>    }</strong>
<strong>    para (inteiro i = 0; i &lt; LINHAS; i++)</strong>
<strong>    {</strong>
<strong>        para (inteiro j = 0; j &lt; COLUNAS; j++)</strong>
<strong>        {</strong>
<strong>            escreva(matriz[i][j] + "\t")</strong>
<strong>        }</strong>
<strong>        escreva("\n")</strong>
<strong>    }</strong>
<strong>    escreva("Somatório dos valores: " + soma)</strong>
<strong>}</strong></pre>
<h3>Conclusão</h3>
<p>As matrizes são estruturas muito importantes na programação, permitindo a manipulação eficiente de dados em duas dimensões. Compreender como declarar, atribuir e acessar valores em matrizes é essencial para resolver problemas complexos e desenvolver algoritmos eficazes.</p>
<h3><strong>Apresentação de Slides: </strong><br />
<iframe loading="lazy" style="border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%;" src="//pt.slideshare.net/slideshow/embed_code/key/hPopy3ocwRxYHb" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="allowfullscreen"> </iframe></h3>
<div style="margin-bottom: 5px;"><strong> <a title="Lógica de programação - Matrizes - VisualG" href="//pt.slideshare.net/bosontreinamentos/lgica-de-programao-matrizes-visualg" target="_blank" rel="noopener">Lógica de programação &#8211; Matrizes &#8211; VisualG</a> </strong> from <strong><a href="//www.slideshare.net/bosontreinamentos" target="_blank" rel="noopener">Fábio dos Reis</a></strong></div>
<p><strong>Assista ao vídeo da Bóson com Fábio dos Reis no Youtube:</strong></p>
<p><iframe loading="lazy" src="//www.youtube.com/embed/Ww1aP4j1M6M?feature=player_detailpage" width="640" height="360" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>Anterior: <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/23-logica-de-programacao-pesquisa-binaria-em-vetores-arrays/">Pesquisa Binária em Vetores</a></p>
<p>Próximo: <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/25-logica-de-programacao-comando-caso-escolhas-multiplas/">Escolhas múltiplas com o comando Caso</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/24-logica-de-programacao-matrizes-declaracao-e-preenchimento/">24 &#8211; Lógica de Programação &#8211; Matrizes &#8211; Declaração e preenchimento</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/24-logica-de-programacao-matrizes-declaracao-e-preenchimento/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo Torre de Hanoi em Python</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-torre-de-hanoi-em-python/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-torre-de-hanoi-em-python/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 24 Jul 2023 14:39:37 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19554</guid>

					<description><![CDATA[<p>Torre de Hanoi A Torre de Hanoi é um famoso quebra-cabeça ou problema matemático, inventado pelo matemático francês François Édouard Anatole Lucas no século XIX, que consiste em mover uma pilha de discos de tamanhos diferentes de uma haste de origem para uma haste de destino, usando uma haste intermediária. A regra básica é que um disco maior nunca pode ficar em cima de um disco menor. Torre de Hanoi com sete discos e três hastes A configuração inicial consiste em três hastes (podemos chamá-las de A, B e C) e uma pilha de discos de tamanhos diferentes posicionados em ordem decrescente em uma das hastes (geralmente a haste A). O objetivo é mover todos os discos da haste A para a haste C, utilizando a haste B como intermediária, seguindo as seguintes regras: 1. Apenas um disco pode ser movido por vez. 2. Um disco só pode ser movido se estiver no topo da pilha em sua haste atual. 3. Um disco maior nunca pode ficar em cima de um disco menor. O desafio é encontrar a sequência correta de movimentos para transferir todos os discos da haste A para a haste C. A solução ótima para a Torre [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-torre-de-hanoi-em-python/">Algoritmo Torre de Hanoi em Python</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Torre de Hanoi</h2>
<p>A <strong>Torre de Hanoi</strong> é um famoso quebra-cabeça ou problema matemático, inventado pelo matemático francês François Édouard Anatole Lucas no século XIX, que consiste em mover uma pilha de discos de tamanhos diferentes de uma haste de origem para uma haste de destino, usando uma haste intermediária. A regra básica é que um disco maior nunca pode ficar em cima de um disco menor.</p>
<div id="attachment_19573" style="width: 610px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-19573" class="wp-image-19573" title="Torre de Hanoi com sete discos" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-de-hanoi-boson-treinamentos.jpg" alt="Torre de Hanoi com sete discos" width="600" height="338" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-de-hanoi-boson-treinamentos.jpg 952w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-de-hanoi-boson-treinamentos-420x236.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-de-hanoi-boson-treinamentos-768x432.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-de-hanoi-boson-treinamentos-580x326.jpg 580w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-de-hanoi-boson-treinamentos-174x98.jpg 174w" sizes="auto, (max-width: 600px) 100vw, 600px" /><p id="caption-attachment-19573" class="wp-caption-text">Torre de Hanoi com sete discos e três hastes</p></div>
<p>A configuração inicial consiste em três hastes (podemos chamá-las de A, B e C) e uma pilha de discos de tamanhos diferentes posicionados em ordem decrescente em uma das hastes (geralmente a haste A). O objetivo é mover todos os discos da haste A para a haste C, utilizando a haste B como intermediária, seguindo as seguintes regras:</p>
<p>1. Apenas um disco pode ser movido por vez.<br />
2. Um disco só pode ser movido se estiver no topo da pilha em sua haste atual.<br />
3. Um disco maior nunca pode ficar em cima de um disco menor.</p>
<p>O desafio é encontrar a sequência correta de movimentos para transferir todos os discos da haste A para a haste C. A solução ótima para a Torre de Hanoi requer 2<sup>n</sup> &#8211; 1 movimentos, onde n é o número de discos.</p>
<p>Ou seja, com 3 discos é possível resolver a torre em 2<sup>3</sup> &#8211; 1 = 7 movimentos. Já uma torre com 7 discos necessitará de 2<sup>7</sup> &#8211; 1 = 127 movimentos.</p>
<p>A Torre de Hanoi é um problema clássico de recursão e tem aplicações em algoritmos, programação e teoria da computação para ilustrar conceitos como recursão, pilha de chamadas e complexidade algorítmica.</p>
<h3>Algoritmo da Torre de Hanoi</h3>
<p>Vejamos um exemplo de <a href="http://www.bosontreinamentos.com.br/programacao-com-python/">algoritmo em Python</a> que resolve uma Torre de Hanoi, recebendo como entrada do usuário o número de discos desejado. Vamos usar uma <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/o-que-e-recursividade/">abordagem recursiva</a> neste exemplo.</p>
<p>Chamaremos as hastes (torres) de A, B e C para identificação ao chamar a função no programa principal, como mostra a figura a seguir:</p>
<div id="attachment_19607" style="width: 470px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-19607" class="wp-image-19607" title="Hastes das Torres de Hanoi" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-hanoi-hastes.jpg" alt="Hastes das Torres de Hanoi" width="460" height="234" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-hanoi-hastes.jpg 728w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/torre-hanoi-hastes-420x213.jpg 420w" sizes="auto, (max-width: 460px) 100vw, 460px" /><p id="caption-attachment-19607" class="wp-caption-text">Hastes das Torres de Hanoi</p></div>
<p>O objetivo é mover todos os discos da torre A para a torre C. Vamos ao código agora.</p>
<pre><strong>def torre_hanoi(n, origem, destino, auxiliar):</strong>
<strong>    if n == 1:</strong>
<strong>        print(f"Mova o disco 1 de {origem} para {destino}")</strong>
<strong>        return</strong>
<strong>    torre_hanoi(n-1, origem, auxiliar, destino)</strong>
<strong>    print(f"Mova o disco {n} de {origem} para {destino}")</strong>
<strong>    torre_hanoi(n-1, auxiliar, destino, origem)

</strong><span style="color: #008000;"><strong><span style="color: #ff0000;">if __name__=='__main__':</span>
    # Exemplo de uso</strong></span>
<strong>    n = int(input("Digite o número de discos: "))</strong>
<strong>    torre_hanoi(n, "A", "C", "B")</strong></pre>
<p><strong>Testando:</strong></p>
<pre><span style="color: #800000;">Digite o número de discos: </span>
<span style="color: #800000;">3</span>
<span style="color: #800000;">Mova o disco 1 de A para C</span>
<span style="color: #800000;">Mova o disco 2 de A para B</span>
<span style="color: #800000;">Mova o disco 1 de C para B</span>
<span style="color: #800000;">Mova o disco 3 de A para C</span>
<span style="color: #800000;">Mova o disco 1 de B para A</span>
<span style="color: #800000;">Mova o disco 2 de B para C</span>
<span style="color: #800000;">Mova o disco 1 de A para C</span></pre>
<h4>Funcionamento</h4>
<p>Nesse algoritmo, a função torre_hanoi() recebe quatro parâmetros: o número de discos n, a torre de origem origem, a torre de destino destino e a torre auxiliar auxiliar. A função utiliza a recursão para resolver o problema da Torre de Hanoi.</p>
<p>Quando há apenas um disco, ele é movido diretamente da torre de origem para a torre de destino. Caso contrário, a função chama recursivamente a si mesma para mover n-1 discos da torre de origem para a torre auxiliar, em seguida move o disco restante da torre de origem para a torre de destino e, por fim, move os n-1 discos da torre auxiliar para a torre de destino.</p>
<p>O algoritmo exibe as instruções para mover cada disco, indicando de qual torre para qual torre ele deve ser movido. Basta executar o algoritmo informando o número de discos desejado para ver a solução para a Torre de Hanoi.</p>
<h3>Modificação do algoritmo</h3>
<p>Vamos modificar o algoritmo anterior para que ele mostre também o número de movimentos realizados para resolver a torre:</p>
<pre><strong>def torre_hanoi(n, origem, destino, auxiliar):</strong>
<strong>    if n == 1:</strong>
<strong>        print(f"Mova o disco 1 de {origem} para {destino}")</strong>
<strong>    return 1</strong>
<strong>    movimentos = torre_hanoi(n-1, origem, auxiliar, destino)</strong>
<strong>    print(f"Mova o disco {n} de {origem} para {destino}")</strong>
<strong>    movimentos += 1</strong>
<strong>    movimentos += torre_hanoi(n-1, auxiliar, destino, origem)</strong>
<strong>    return movimentos

<span style="color: #008000;"><span style="color: #ff0000;">if __name__=='__main__':</span></span>
</strong><span style="color: #008000;"><strong>    # Exemplo de uso</strong></span>
<strong>    n = int(input("Digite o número de discos: "))</strong>
<strong>    total_movimentos = torre_hanoi(n, "A", "C", "B")</strong>
<strong>    print(f"Total de movimentos realizados: {total_movimentos}")</strong></pre>
<p><strong>Testando:</strong></p>
<pre><span style="color: #800000;">Digite o número de discos: </span>
<span style="color: #800000;">3</span>
<span style="color: #800000;">Mova o disco 1 de A para C</span>
<span style="color: #800000;">Mova o disco 2 de A para B</span>
<span style="color: #800000;">Mova o disco 1 de C para B</span>
<span style="color: #800000;">Mova o disco 3 de A para C</span>
<span style="color: #800000;">Mova o disco 1 de B para A</span>
<span style="color: #800000;">Mova o disco 2 de B para C</span>
<span style="color: #800000;">Mova o disco 1 de A para C</span>
<span style="color: #800000;">Total de movimentos realizados: 7</span></pre>
<h4>Funcionamento</h4>
<p>1. Definimos a função torre_hanoi, que recebe como parâmetros o número de discos n, os nomes das torres origem, destino e auxiliar.</p>
<p>2. Dentro da função, verificamos se n é igual a 1. Se sim, significa que temos apenas um disco a ser movido, então imprimimos a instrução para mover o disco da origem para o destino e retornamos 1, indicando que foi realizado um movimento.</p>
<p>3. Caso contrário, temos mais de um disco. Chamamos recursivamente a função torre_hanoi para mover n-1 discos da origem para a auxiliar, usando o destino como torre auxiliar. Armazenamos o número de movimentos retornados em movimentos.</p>
<p>4. Imprimimos a instrução para mover o disco n da origem para o destino e incrementamos movimentos em 1, já que realizamos mais um movimento.</p>
<p>5. Chamamos novamente recursivamente a função torre_hanoi para mover os n-1 discos restantes da auxiliar para o destino, usando a origem como torre auxiliar. Somamos o número de movimentos retornados ao total de movimentos atual.</p>
<p>6. Retornamos o total de movimentos realizados.</p>
<p>7. No exemplo de uso, solicitamos ao usuário que digite o número de discos desejado.</p>
<p>8. Chamamos a função torre_hanoi passando o número de discos, os nomes das torres &#8220;A&#8221;, &#8220;C&#8221; e &#8220;B&#8221; como argumentos, respectivamente. Armazenamos o total de movimentos retornados em total_movimentos.</p>
<p>9. Por fim, exibimos o total de movimentos realizados na solução.</p>
<h3>Conclusão</h3>
<p>Concluindo, vimos que a Torre de Hanoi é um enigma matemático fascinante que desafia a mente e tem sido objeto de estudo e entretenimento há muito tempo.</p>
<p>Por meio dos exemplos de algoritmos em Python, ficou claro que a solução para o que aparenta ser um quebra-cabeça complexo é surpreendentemente elegante e simples. Com a implementação da função recursiva (pode ser feito de forma iterativa também), pudemos observar uma abordagem para a resolução da Torre de Hanoi, perfeita para o estudo de recursividade em algoritmos e lógica de programação.</p>
<p>Além de ser uma demonstração de habilidades de programação e lógica, o estudo da Torre de Hanoi oferece insights valiosos para a computação e outras áreas da matemática. Como vimos, é um excelente exercício para compreender a recursividade e a otimização de algoritmos.</p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-torre-de-hanoi-em-python/">Algoritmo Torre de Hanoi em Python</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-torre-de-hanoi-em-python/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>O que é Recursividade</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/o-que-e-recursividade/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/o-que-e-recursividade/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 17 Jul 2023 20:00:21 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19475</guid>

					<description><![CDATA[<p>Recursividade em Lógica de Programação Recursividade (ou Recursão) é um conceito em ciência da computação que se refere à capacidade de uma função ou procedimento chamar a si mesmo de forma direta ou indireta durante a sua execução. Em outras palavras, é quando uma função é definida em termos dela mesma. Ao utilizar a recursividade, uma função pode ser dividida em problemas menores e mais simples, resolvendo-os em etapas sucessivas até alcançar um caso base, que é uma condição que não requer chamadas recursivas e permite a conclusão do processo. A recursividade é frequentemente usada para resolver problemas que podem ser subdivididos em subproblemas do mesmo tipo. Essa abordagem é especialmente útil quando a estrutura do problema é recursiva por natureza. Alguns exemplos de algoritmos recursivos comuns incluem a busca em árvores, a ordenação rápida (quicksort) e o cálculo do fatorial. Uma função recursiva geralmente possui dois componentes principais: Caso base: É uma condição especial que determina quando a recursão deve parar. Quando a condição do caso base é atendida, a função recursiva não faz mais chamadas a si mesma e retorna um resultado específico. Caso recursivo: É o caso em que a função se chama novamente com um problema [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/o-que-e-recursividade/">O que é Recursividade</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Recursividade em Lógica de Programação</h2>
<p>Recursividade (ou Recursão) é um conceito em ciência da computação que se refere à capacidade de uma função ou procedimento chamar a si mesmo de forma direta ou indireta durante a sua execução. Em outras palavras, é quando uma função é definida em termos dela mesma.</p>
<p>Ao utilizar a recursividade, uma função pode ser dividida em problemas menores e mais simples, resolvendo-os em etapas sucessivas até alcançar um caso base, que é uma condição que não requer chamadas recursivas e permite a conclusão do processo.</p>
<p>A recursividade é frequentemente usada para resolver problemas que podem ser subdivididos em subproblemas do mesmo tipo. Essa abordagem é especialmente útil quando a estrutura do problema é recursiva por natureza. Alguns exemplos de algoritmos recursivos comuns incluem a busca em árvores, a ordenação rápida (quicksort) e o cálculo do fatorial.</p>
<p>Uma função recursiva geralmente possui dois componentes principais:</p>
<ol>
<li><strong>Caso base</strong>: É uma condição especial que determina quando a recursão deve parar. Quando a condição do caso base é atendida, a função recursiva não faz mais chamadas a si mesma e retorna um resultado específico.</li>
<li><strong>Caso recursivo</strong>: É o caso em que a função se chama novamente com um problema menor ou uma instância simplificada do problema original. A chamada recursiva permite que a função trabalhe em direção ao caso base, resolvendo os subproblemas até que o resultado final seja alcançado.</li>
</ol>
<p>No entanto, é importante ter cuidado ao usar recursão, pois um uso incorreto ou ineficiente pode levar a problemas de desempenho e até mesmo a erros como estouro de pilha (<em>stack overflow</em>) se não houver controle adequado das chamadas recursivas.</p>
<p>Existem duas categorias gerais de recursividade: Recursão Direta e Recursão Indireta.</p>
<h4>Recursão Direta</h4>
<p>Em uma recursão direta, uma função f(A) chama a si própria diretamente &#8211; f(A) chama f(A), em um passo recursivo único.</p>
<h4>Recursão Indireta</h4>
<p>Já a recursividade indireta consiste em uma função f(A) que chama uma função diferente f(B), que por sua vez chama f(A) novamente, Ou seja, é um processo recursivo de dois passos, onde a função original chama outra função que por sua vez chama a função original novamente.</p>
<p>Vamos estudar dois exemplos populares de algoritmos recursivos para ver a recursividade em ação: Fatorial e Fibonacci</p>
<h3>Exemplos de algoritmos recursivos</h3>
<h4>Fatorial recursivo</h4>
<p>O fatorial de um número inteiro positivo qualquer é dado pela fórmula:</p>
<pre><span style="font-size: 14pt; color: #800080;"><strong>n! = n * (n-1) * (n-2) * … * 1</strong></span></pre>
<p>Por exemplo, 5! é igual a:</p>
<pre><span style="font-size: 14pt; color: #ff6600;"><strong>5! = 5 * 4 * 3 * 2 * 1 = 120</strong></span></pre>
<p>Note que o fatorial é uma sequência de operações semelhantes, multiplicações cada vez mais básicas até chegar em 1. Perfeito para a recursão!</p>
<p>O fatorial pode ser calculado de forma recursiva de acordo com a seguinte sequência de operações:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-19568" title="Fatorial Recursivo" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/fatorial-recursivo-funcionamento.jpg" alt="Fatorial Recursivo" width="600" height="456" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/fatorial-recursivo-funcionamento.jpg 796w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/fatorial-recursivo-funcionamento-420x319.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/fatorial-recursivo-funcionamento-768x584.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/fatorial-recursivo-funcionamento-174x131.jpg 174w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>Um exemplo de código recursivo em português estruturado é a função fatorial() mostrada a seguir, que calcula o fatorial de um número inteiro passado como argumento:</p>
<pre><span style="color: #339966;"><strong>// Fatorial recursivo</strong></span>
<strong>funcao inteiro fatorial(inteiro x) {</strong>
<strong>  se (x &lt;= 1) {</strong>
<strong>    retorne 1</strong>
<strong>  }</strong>
<strong>  senao {</strong>
<strong>    retorne x * fatorial(x - 1)</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<p>Esta função funciona dividindo o problema de calcular o fatorial de um número em dois subproblemas menores: calcular o fatorial de x &#8211; 1 e multiplicar o resultado por x. O subproblema de calcular o fatorial de x &#8211; 1 é resolvido por uma chamada recursiva para a própria função fatorial().</p>
<p>O resultado da chamada recursiva é então multiplicado por n para obter o resultado do problema original.</p>
<h4>Fibonacci recursivo</h4>
<p>A série de fibonacci é uma sequência numérica que inicia com 0 e 1 e onde cada número subsequente é a soma dos dois números anteriores a ele:</p>
<pre><span style="color: #800080;"><strong>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...</strong></span></pre>
<p>Trata-se de uma série numérica que ocorre repetidamente na natureza e descreve uma forma em espiral. A razão entre dois Fibonaccis sucessivos converge para o valor <strong>1,618…</strong>, chamado de &#8220;Proporção Áurea&#8221;, que é esteticamente muito agradável e aproveitado em várias áreas do conhecimento, como engenharia e arquitetura.</p>
<p>Bem, podemos definir a série de fibonacci recursivamente da seguinte forma:</p>
<pre><span style="color: #800000;"><strong>fibonacci(0) = 0</strong></span>
<span style="color: #800000;"><strong>fibonacci(1) = 1</strong></span>
<span style="color: #800000;"><strong>fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)</strong></span></pre>
<p>Novamente uma sequência de operações semelhantes. Perfeito para a recursão!</p>
<p>A seguir temos um exemplo de código recursivo em português estruturado que calcula um número de Fibonacci a partir de um número inteiro x passado como argumento:</p>
<pre><span style="color: #339966;"><strong>// Função fibonacci recursivo</strong></span>
<strong>funcao inteiro fibonacci(inteiro x) {</strong>
<strong>  se ((x == 0) ou (x == 1)) {</strong>
<strong>    retorne x</strong>
<strong>  }</strong>
<strong>  retorne fibonacci(x-1) + fibonacci(x-2)</strong>
<strong>}</strong></pre>
<h3>Quais problemas a recursividade pode causar?</h3>
<p>A recursividade é uma técnica de programação que pode ser útil para resolver problemas que podem ser quebrados em subproblemas menores, cada um dos quais pode ser resolvido com uma chamada recursiva. No entanto, a recursividade também pode causar alguns problemas, como:</p>
<ul>
<li>Escopo de variáveis: Quando uma função é chamada recursivamente, ela cria uma nova cópia de seu escopo de variáveis. Isso pode levar a problemas se as variáveis no escopo forem modificadas dentro da função.</li>
<li>Eficiência: Os algoritmos recursivos podem ser muito ineficientes, especialmente para grandes problemas. Isso ocorre porque cada chamada recursiva cria uma nova pilha de chamadas. A pilha de chamadas pode crescer rapidamente e levar a problemas de memória.</li>
<li>Dificuldade de depuração: Os algoritmos recursivos podem ser difíceis de depurar, pois podem ser difíceis de acompanhar o fluxo de controle da função.</li>
</ul>
<p>É importante pesar os riscos e benefícios da recursividade antes de usá-la para resolver um problema. Em alguns casos, a recursividade pode ser a melhor solução, mas em outros casos, pode ser melhor usar uma abordagem iterativa. Se não for usada com cuidado, a recursão pode levar a programas que são lentos ou difíceis de entender.</p>
<h3>Dicas para usar a recursividade com segurança</h3>
<ul>
<li>Use a recursividade apenas quando necessário: Não use a recursividade apenas porque é legal. Use-a apenas quando for a melhor maneira de resolver um problema.</li>
<li>Evite usar recursividade para problemas grandes: Os algoritmos recursivos podem ser muito ineficientes para problemas grandes. Se você estiver enfrentando um problema grande, considere usar uma abordagem iterativa.</li>
<li>Use a recursividade com cuidado: A recursividade pode ser uma ferramenta poderosa, mas é importante usá-la com cuidado. Se não for usada com cuidado, a recursão pode levar a programas que são lentos, difíceis de entender e difíceis de depurar.</li>
</ul>
<p>É isso aí! Nas próximas lições veremos mais técnicas de programação e algoritmos específicos que são importantes para estudantes e profissionais na área de desenvolvimento de software.</p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/o-que-e-recursividade/">O que é Recursividade</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/o-que-e-recursividade/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para verificar se um número pertence à série de Fibonacci</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-um-numero-pertence-a-serie-de-fibonacci/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-um-numero-pertence-a-serie-de-fibonacci/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 11 Jul 2023 14:37:26 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Matemática]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19547</guid>

					<description><![CDATA[<p>Como verificar se um número pertence à série de Fibonacci Neste artigo vamos criar um algoritmo que permite determinar se um número n fornecido por um usuário pertence à série de Fibonacci ou não.   O que é a sequência de Fibonacci   A sequência (ou série) de Fibonacci é uma sequência de números infinita na qual cada número é a soma dos dois números anteriores a ele. Essa sequência se inicia com os números 0 e 1, e a partir deles, cada número seguinte é calculado efetuando a soma de seus dois antecessores.   Os dez primeiros números na sequência de Fibonacci são:   0, 1, 1, 2, 3, 5, 8, 13, 21 e 34   Podemos gerar a sequência de Fibonacci usando diversas técnicas distintas. Veja como gerar Fibonacci de forma recursiva e iterativa aqui.   Como saber se um número pertence à série de Fibonacci?   Para determinar se um valor está presente na sequência de Fibonacci, podemos empregar uma propriedade interessante, chamada de Fórmula de Binet, que é descrita a seguir:   &#8220;Um número é Fibonacci se e apenas se uma ou ambas as expressões 5*n2 + 4 ou 5*n2 – 4 retornarem um quadrado perfeito.&#8221; [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-um-numero-pertence-a-serie-de-fibonacci/">Algoritmo para verificar se um número pertence à série de Fibonacci</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como verificar se um número pertence à série de Fibonacci</h2>
<div>Neste artigo vamos criar um algoritmo que permite determinar se um número n fornecido por um usuário pertence à série de Fibonacci ou não.</div>
<h3> </h3>
<h3>O que é a sequência de Fibonacci</h3>
<div> </div>
<div>A sequência (ou série) de Fibonacci é uma sequência de números infinita na qual cada número é a soma dos dois números anteriores a ele.</div>
<div>Essa sequência se inicia com os números 0 e 1, e a partir deles, cada número seguinte é calculado efetuando a soma de seus dois antecessores.</div>
<div> </div>
<div>Os dez primeiros números na sequência de Fibonacci são:</div>
<div> </div>
<div style="text-align: center;"><strong>0, 1, 1, 2, 3, 5, 8, 13, 21 e 34</strong></div>
<div> </div>
<div>Podemos gerar a sequência de Fibonacci usando diversas técnicas distintas. Veja como <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-fibonacci-recursivo-e-iterativo-logica-de-programacao/">gerar Fibonacci de forma recursiva e iterativa aqui</a>.</div>
<div> </div>
<h3>Como saber se um número pertence à série de Fibonacci?</h3>
<div> </div>
<div>Para determinar se um valor está presente na sequência de Fibonacci, podemos empregar uma propriedade interessante, chamada de <strong>Fórmula de Binet</strong>, que é descrita a seguir:</div>
<div> </div>
<blockquote>
<div><strong><span style="font-size: 14pt;">&#8220;Um número é Fibonacci se e apenas se uma ou ambas as expressões 5*n<sup>2</sup> + 4 ou 5*n<sup>2</sup> – 4 retornarem um quadrado perfeito.&#8221;</span></strong></div>
</blockquote>
<div> </div>
<div>Um quadrado perfeito é um número inteiro que pode ser expresso como o quadrado exato de outro número inteiro. Ou seja, é um número que pode ser obtido multiplicando um número por si mesmo.</div>
<div> </div>
<div>Veja um algoritmo sugerido para <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-numero-e-quadrado-perfeito/">determinação de quadrados perfeitos aqui</a>.</div>
<div> </div>
<div>Vamos agora aos algoritmos para determinar se um número qualquer é Fibonacci ou não.</div>
<div> </div>
<h3>Algoritmo em Português Estruturado</h3>
<div> </div>
<div>A seguir temos uma sugestão de algoritmo, usando o Portugol Studio, que permite saber se um número n fornecido pelo usuário pertence à série de Fibonacci ou não:</div>
<div> </div>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>inclua biblioteca Matematica --&gt; m</strong>
<strong>inclua biblioteca Tipos --&gt; t

</strong><strong>real num</strong>
<strong>inteiro raiz

</strong><strong>  funcao inicio()</strong>
<strong>  {</strong>
<strong>  escreva("Descobrir se número é Fibonacci\n")</strong>
<strong>  escreva("Entre com um número: ")</strong>
<strong>  leia(num)

</strong><strong>  se (eFibonacci(num)) {</strong>
<strong>      escreva(num + " pertence à série de Fibonacci.")</strong>
<strong>  }</strong>
<strong>  senao {</strong>
<strong>      escreva(num + " não pertence à série de Fibonacci.")</strong>
<strong>  }</strong>
<strong>}

</strong><span style="color: #339966;"><strong>  // Função para determinar se número é quadrado perfeito</strong></span>
<strong>  funcao logico quadradoPerfeito(real x) {</strong>
<strong>      raiz = t.real_para_inteiro(m.raiz(x, 2.0))</strong>
<strong>      retorne raiz * raiz == x</strong>
<strong>  }

</strong><span style="color: #339966;"><strong>  // Função para verificar se número pertence à série de Fibonacci</strong></span>
<strong>  funcao logico eFibonacci(real n){</strong>
<strong>      <span style="color: #339966;">// n é Fibonacci se o resultado de 5*n² + 4 ou 5*n² - 4 (ou ambos) for quadrado perfeito.</span></strong>
<strong>      retorne quadradoPerfeito(5*n*n + 4) ou quadradoPerfeito(5*n*n - 4)</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<div> </div>
<div><strong><em>Testando:</em></strong></div>
<div> </div>
<pre><span style="color: #800000;"><strong>Descobrir se número é Fibonacci</strong></span>
<span style="color: #800000;"><strong>Entre com um número: 17711</strong></span>
<span style="color: #800000;"><strong>17711.0 pertence à série de Fibonacci.</strong></span></pre>
<div> </div>
<pre><span style="color: #800000;"><strong>Descobrir se número é Fibonacci</strong></span>
<span style="color: #800000;"><strong>Entre com um número: 12290</strong></span>
<span style="color: #800000;"><strong>12290.0 não pertence à série de Fibonacci.</strong></span></pre>
<div> </div>
<h3>Algoritmo em Python</h3>
<div> </div>
<div>E a seguir temos um algoritmo em Python que permite determinar se um número n fornecido pelo usuário pertence à série de Fibonacci ou não. Para este programa faremos usa da biblioteca padrão de funções matemáticas do Python, o <a href="http://www.bosontreinamentos.com.br/programacao-em-python/7-1-python-funcoes-matematicas-e-modulo-math/">módulo Math</a>:</div>
<div> </div>
<pre><strong>import math

</strong><span style="color: #339966;"><strong># Função que verifica se n é um quadrado perfeito.</strong></span>
<strong>def quadradoPerfeito(x):</strong>
<strong>    raiz = int(math.sqrt(x))</strong>
<strong>    return raiz*raiz == x</strong>
<strong>  </strong>
<span style="color: #339966;"><strong># Verifica se número n pertence à série de Fibonacci</strong></span>
<span style="color: #339966;"><strong># n é Fibonacci se o resultado de 5*n*n + 4 ou 5*n*n - 4 ou ambos</strong></span>
<span style="color: #339966;"><strong># forem quadrados perfeitos.</strong></span>
<strong>def eFibonacci(n):</strong>
<strong>    return quadradoPerfeito(5*n*n + 4) or quadradoPerfeito(5*n*n - 4)

</strong><strong>if __name__=='__main__':</strong>
<strong>    print("Verificar se número é Fibonacci")</strong>
<strong>    n = int(input('Digite um número qualquer, positivo: '))

</strong><strong>    if(eFibonacci(n)):</strong>
<strong>        print(f"{n} pertence à série de Fibonacci.")</strong>
<strong>    else:</strong>
<strong>        print(f"{n} não pertence à série de Fibonacci.")</strong></pre>
<div>        </div>
<div>O teste é similar ao do algoritmo anterior.</div>
<div> </div>
<div>É isso aí! Nos próximos tutoriais vamos explorar mais algoritmos interessantes e curiosos, como a Torre de Hanoi e a construção de jogos, como o Jogo da Velha e outros.</div>
<div> </div>
<div> </div>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-um-numero-pertence-a-serie-de-fibonacci/">Algoritmo para verificar se um número pertence à série de Fibonacci</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-um-numero-pertence-a-serie-de-fibonacci/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para verificar se número é quadrado perfeito</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-numero-e-quadrado-perfeito/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-numero-e-quadrado-perfeito/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 07 Jul 2023 12:08:05 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Matemática]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19539</guid>

					<description><![CDATA[<p>O que é um quadrado perfeito Um quadrado perfeito é um número inteiro que pode ser expresso como o quadrado exato de outro número inteiro. Em outras palavras, é um número que pode ser obtido multiplicando um número por si mesmo.   Por exemplo, 4 é um quadrado perfeito porque pode ser obtido multiplicando 2 por 2 (2 * 2 = 4). Da mesma forma, 9 é um quadrado perfeito porque pode ser obtido multiplicando 3 por 3 (3 * 3 = 9).   Já números como 6, 13 ou 21 não são quadrados perfeitos, pois não podem ser expressos como o quadrado exato de um número inteiro.   Algoritmo para verificar se um número é um quadrado perfeito Podemos verificar se um número é um quadrado perfeito como os seguintes passos: Calculamos a raiz quadrada do número n fornecido. Eliminamos a parte decimal da raiz calculada. Multiplicamos a parte inteira que restou por ela própria. Comparamos o resultado dessa multiplicação com o valor n original. Se os valores forem idênticos, o número é um quadrado perfeito; caso contrário, não o é. Vamos representar esses passos criando algoritmos: primeiramente um código usando português estruturado e, na sequência, o mesmo algoritmo [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-numero-e-quadrado-perfeito/">Algoritmo para verificar se número é quadrado perfeito</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>O que é um quadrado perfeito</h2>
<div>Um quadrado perfeito é um número inteiro que pode ser expresso como o quadrado exato de outro número inteiro. Em outras palavras, é um número que pode ser obtido multiplicando um número por si mesmo.</div>
<div> </div>
<div>Por exemplo, 4 é um quadrado perfeito porque pode ser obtido multiplicando 2 por 2 (2 * 2 = 4). Da mesma forma, 9 é um quadrado perfeito porque pode ser obtido multiplicando 3 por 3 (3 * 3 = 9).</div>
<div> </div>
<div>Já números como 6, 13 ou 21 não são quadrados perfeitos, pois não podem ser expressos como o quadrado exato de um número inteiro.</div>
<div> </div>
<h3>Algoritmo para verificar se um número é um quadrado perfeito</h3>
<div>Podemos verificar se um número é um quadrado perfeito como os seguintes passos:</div>
<ol>
<li>Calculamos a raiz quadrada do número n fornecido.</li>
<li>Eliminamos a parte decimal da raiz calculada.</li>
<li>Multiplicamos a parte inteira que restou por ela própria.</li>
<li>Comparamos o resultado dessa multiplicação com o valor n original.</li>
<li>Se os valores forem idênticos, o número é um quadrado perfeito; caso contrário, não o é.</li>
</ol>
<div>Vamos representar esses passos criando <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/02-logica-de-programacao-algoritmos-e-fluxogramas/">algoritmos</a>: primeiramente um código usando português estruturado e, na sequência, o mesmo algoritmo em <a href="https://www.python.org/" target="_blank" rel="noopener">Python</a>.</div>
<div> </div>
<h3>Algoritmo em Português Estruturado</h3>
<div>Como verificar se um número é um quadrado perfeito usando o <a href="http://www.bosontreinamentos.com.br/curso-de-logica-de-programacao/">Portugol Studio</a>:</div>
<div> </div>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>inclua biblioteca Matematica --&gt; m</strong>
<strong>inclua biblioteca Tipos --&gt; t

</strong><strong>real n</strong>
<strong>inteiro raiz 

</strong><strong>funcao inicio()</strong>
<strong>{</strong>
<strong>  escreva("Verificar se número é quadrado perfeito")</strong>
<strong>  escreva("\nDigite um número qualquer, positivo: ")</strong>
<strong>  leia(n)

</strong><strong>  se(quadradoPerfeito(n)){</strong>
<strong>      escreva(n + " é quadrado perfeito.")</strong>
<strong>  }</strong>
<strong>  senao {</strong>
<strong>      escreva(n + " não é quadrado perfeito.")</strong>
<strong>  }</strong>
<strong>}

</strong><strong>funcao logico quadradoPerfeito(real x) {</strong>
<strong>  raiz = t.real_para_inteiro(m.raiz(x, 2.0))</strong>
<strong>  retorne raiz * raiz == x</strong>
<strong>}</strong>
<strong>}</strong></pre>
<h3>Algoritmo em Python</h3>
<div>Como verificar se um número é um quadrado perfeito usando a <a href="http://www.bosontreinamentos.com.br/programacao-com-python/">linguagem Python</a></div>
<div> </div>
<div><img loading="lazy" decoding="async" class="aligncenter wp-image-19414" title="Quadrado Perfeito em Python" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/python-logo-boson.png" alt="Programação em linguagem Python para iniciantes" width="200" height="200" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/python-logo-boson.png 529w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/python-logo-boson-170x170.png 170w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/python-logo-boson-420x420.png 420w" sizes="auto, (max-width: 200px) 100vw, 200px" /></div>
<div>Código:</div>
<div> </div>
<pre><strong>import math

</strong><span style="color: #339966;"><strong># Função que retorna true se n for quadrado perfeito, e false se não for.</strong></span>
<strong>def quadradoPerfeito(x):</strong>
<strong>    raiz = int(math.sqrt(x))</strong>
<strong>    return raiz*raiz == x

</strong><strong>if __name__=='__main__':</strong>
<strong>    print("Verificar se número é quadrado perfeito")</strong>
<strong>    n = float(input('Digite um número qualquer, positivo: '))</strong>
<strong>    if(quadradoPerfeito(n)):</strong>
<strong>        print(f"{n} é quadrado perfeito.")</strong>
<strong>    else:</strong>
<strong>        print(f"{n} não é quadrado perfeito.")</strong></pre>
<div> </div>
<div> </div>
<div>É isso aí! No próximo tutorial veremos um uso bem interessante do cálculo de quadrados perfeitos: verificar se um número pertence à sequência de Fibonacci ou não.</div>
<div> </div>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-numero-e-quadrado-perfeito/">Algoritmo para verificar se número é quadrado perfeito</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-verificar-se-numero-e-quadrado-perfeito/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Fibonacci Recursivo e Iterativo &#8211; Lógica de Programação</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-fibonacci-recursivo-e-iterativo-logica-de-programacao/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-fibonacci-recursivo-e-iterativo-logica-de-programacao/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 05 Jul 2023 12:09:10 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Matemática]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19517</guid>

					<description><![CDATA[<p>Algoritmo para Fibonacci Recursivo e Iterativo A série de Fibonacci é uma sequência numérica infinita em que cada número subsequente é a soma dos dois números anteriores. A sequência começa com os números 0 e 1, e a partir deles, cada número seguinte é calculado somando os dois números anteriores. Portanto, a sequência começa da seguinte forma: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, e assim por diante. A sequência começa em 0 e 1, porém alguns autores dizem que a sequência começa em 1 e 1, e o próprio Fibonacci iniciava a sequência em 1 e 2. O algoritmo para gerar a sequência permanece o mesmo para todos os casos, com ajustes mínimos no valor inicial. Por conta desse padrão numérico interessante, a série de Fibonacci é amplamente estudada e aplicada em vários campos, como matemática, ciência da computação, biologia, arte e finanças. Além disso, a proporção entre os números adjacentes na sequência de Fibonacci, chamada de &#8220;razão áurea&#8221;, &#8220;proporção áurea&#8221; ou &#8220;número de ouro&#8221;, que é aproximadamente 1,618, é considerada esteticamente agradável e é encontrada em muitas formas naturais, como conchas, flores e galáxias (descrevendo uma forma em espiral), além de ser utilizada em projetos [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-fibonacci-recursivo-e-iterativo-logica-de-programacao/">Algoritmo para Fibonacci Recursivo e Iterativo &#8211; Lógica de Programação</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Algoritmo para Fibonacci Recursivo e Iterativo</h2>
<p>A série de <strong>Fibonacci</strong> é uma sequência numérica infinita em que cada número subsequente é a soma dos dois números anteriores. A sequência começa com os números 0 e 1, e a partir deles, cada número seguinte é calculado somando os dois números anteriores.</p>
<p>Portanto, a sequência começa da seguinte forma:</p>
<p style="text-align: center;"><strong>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, e assim por diante.</strong></p>
<p>A sequência começa em 0 e 1, porém alguns autores dizem que a sequência começa em 1 e 1, e o próprio Fibonacci iniciava a sequência em 1 e 2.</p>
<p>O algoritmo para gerar a sequência permanece o mesmo para todos os casos, com ajustes mínimos no valor inicial.</p>
<p>Por conta desse padrão numérico interessante, a série de Fibonacci é amplamente estudada e aplicada em vários campos, como matemática, ciência da computação, biologia, arte e finanças.</p>
<p>Além disso, a proporção entre os números adjacentes na sequência de Fibonacci, chamada de &#8220;razão áurea&#8221;, &#8220;proporção áurea&#8221; ou &#8220;número de ouro&#8221;, que é aproximadamente 1,618, é considerada esteticamente agradável e é encontrada em muitas formas naturais, como conchas, flores e galáxias (descrevendo uma forma em espiral), além de ser utilizada em projetos de arquitetura e design.</p>
<div id="attachment_19521" style="width: 410px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-19521" class="wp-image-19521" title="Espiral de Fibonacci" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/espiral-fibonacci.jpg" alt="Espiral de Fibonacci" width="400" height="249" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/espiral-fibonacci.jpg 988w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/espiral-fibonacci-420x261.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/espiral-fibonacci-768x478.jpg 768w" sizes="auto, (max-width: 400px) 100vw, 400px" /><p id="caption-attachment-19521" class="wp-caption-text">Espiral que representa a sequência de Fibonacci</p></div>
<p>Neste tutorial vou mostrar como criar algoritmos para lógica de programação com Portugol que permitem gerar a sequência de Fibonacci, tanto de forma recursiva quanto iterativa.</p>
<h3>De onde vem o nome &#8220;Fibonacci&#8221;?</h3>
<p>Fibonacci, cujo nome verdadeiro era Leonardo de Pisa, foi um matemático italiano do século XIII. Ele é mais conhecido por introduzir a sequência numérica que leva seu nome, a sequência de Fibonacci, em seu livro &#8220;Liber Abaci&#8221; (Livro do Ábaco), publicado em 1202. Fibonacci significa <em>filius Bonacci</em>, ou filho de Bonaccio</p>
<p>Fibonacci viajou extensivamente pelo Mediterrâneo e estudou os sistemas numéricos usados na época, incluindo o sistema de numeração hindu-arábico. Ele ficou fascinado pelas propriedades matemáticas desses sistemas e, em seu livro, introduziu essa sequência numérica como um exemplo de progressão aritmética encontrada em um problema envolvendo a reprodução de coelhos.</p>
<div id="attachment_19522" style="width: 509px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-19522" class="wp-image-19522" title="Leonardo de Pisa, o Fibonacci" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/leonardo-de-pisa-fibonacci.jpg" alt="Leonardo de Pisa, o Fibonacci" width="499" height="378" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/leonardo-de-pisa-fibonacci.jpg 942w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/leonardo-de-pisa-fibonacci-420x318.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/leonardo-de-pisa-fibonacci-768x581.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/07/leonardo-de-pisa-fibonacci-174x131.jpg 174w" sizes="auto, (max-width: 499px) 100vw, 499px" /><p id="caption-attachment-19522" class="wp-caption-text">Leonardo de Pisa, o Fibonacci</p></div>
<p>Embora não tenha sido o descobridor da sequência em si, Fibonacci popularizou a sequência e demonstrou suas propriedades matemáticas e aplicações em várias áreas. Seu trabalho teve um impacto duradouro na matemática e continua sendo estudado e aplicado até hoje.</p>
<p><strong>Curiosidade</strong>: O nome &#8220;<em>sequência de Fibonacci</em>&#8221; foi empregado pela primeira vez pelo matemático francês François Édouard Anatole Lucas, no século XIX (o mesmo matemático que inventou a Torre de Hanói).</p>
<h3>Algoritmo de Fibonacci Recursivo</h3>
<p>Podemos definir a série de fibonacci recursivamente da seguinte forma:</p>
<pre><em><span style="color: #ff6600;"><strong>Casos base:</strong></span></em>
<strong><span style="color: #800000;">fibonacci(0) = 0
fibonacci(1) = 1

</span><em><span style="color: #ff6600;">Caso geral:</span></em>
<span style="color: #800000;">fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)</span></strong></pre>
<p>Uma sequência de operações semelhantes. Perfeito para a recursão!</p>
<p>Exemplo: Qual o terceiro valor de Fibonacci da sequência?</p>
<pre><span style="color: #800080;"><strong>fib(3) = ?</strong></span>
<span style="color: #800080;"><strong>fib(3) = <span style="color: #ff6600;">fib(3-1)</span> + <span style="color: #ff0000;">fib(3-2)</span> →</strong></span>
<span style="color: #800080;"><strong>fib(3) = <span style="color: #ff6600;">fib(2)</span> + <span style="color: #ff0000;">fib(1)</span> →</strong></span>
<span style="color: #800080;"><strong>fib(3) = <span style="color: #ff6600;">fib(2-1)</span> + <span style="color: #ff6600;">fib(2-2)</span> + <span style="color: #ff0000;">1</span> →</strong></span>
<span style="color: #800080;"><strong>fib(3) = <span style="color: #ff6600;">fib(1)</span> + <span style="color: #ff6600;">fib(0)</span> + <span style="color: #ff0000;">1</span> →</strong></span>
<span style="color: #800080;"><strong>fib(3) = <span style="color: #ff6600;">1</span> + <span style="color: #ff6600;">0</span> + <span style="color: #ff0000;">1</span> →</strong></span>
<span style="color: #800080;"><strong>fib(3) = <span style="color: #800000;">2</span></strong></span></pre>
<p>Isso significa que o terceiro fibonacci (assumindo que o primeiro é o zerésimo valor) é o número 2:</p>
<table style="border-collapse: collapse; width: 40.7119%; height: 49px;" border="1">
<tbody>
<tr>
<td style="width: 25%; text-align: center;"><em><strong>F<sub>0</sub></strong></em></td>
<td style="width: 25%; text-align: center;"><em><strong>F<sub>1</sub></strong></em></td>
<td style="width: 25%; text-align: center;"><em><strong>F<sub>2</sub></strong></em></td>
<td style="width: 25%; text-align: center;"><em><strong>F<sub>3</sub></strong></em></td>
</tr>
<tr>
<td style="width: 25%; text-align: center;"><span style="color: #800080;"><strong>0</strong></span></td>
<td style="width: 25%; text-align: center;"><span style="color: #800080;"><strong>1</strong></span></td>
<td style="width: 25%; text-align: center;"><span style="color: #800080;"><strong>1</strong></span></td>
<td style="width: 25%; text-align: center;"><span style="color: #800080;"><strong>2</strong></span></td>
</tr>
</tbody>
</table>
<p>Vamos criar um algoritmo usando o Portugol Studio para obter a sequência de fibonacci com a quantidade de elementos determinados pelo usuário:</p>
<pre>programa
{

inteiro num

funcao inicio()
{

  escreva("Obter sequência de Fibonacci\n")
  escreva("Entre com um número: ")
  leia(num)
  escreva(num + "º fibonacci: " + fibonacci(num) + "\n") 

  escreva("\nMostrar a sequência completa:\n")
  para (inteiro i = 0; i &lt; num; i++) {
    escreva(fibonacci(i) + " ")
  }

}

<span style="color: #339966;">// Função fibonacci recursivo</span>
funcao inteiro fibonacci(inteiro x) {
  se ((x == 0) ou (x == 1)) {
      retorne x
  }
  retorne fibonacci(x-1) + fibonacci(x-2)
}

}</pre>
<div>A função é definida como uma função recursiva, o que significa que ela se chama a si mesma repetidamente para calcular o valor desejado. Vejamos o funcionamento dessa função passo a passo:</div>
<div> </div>
<ol>
<li>A função &#8220;fibonacci()&#8221; recebe um número inteiro x como parâmetro.</li>
<li>Primeiro, ela verifica se x é igual a 0 ou 1 usando a condição ((x == 0) ou (x == 1)). Esses são os <em>casos base</em> da sequência de Fibonacci, em que o valor é conhecido e não precisa ser calculado. Se x for igual a 0 ou 1, a função retorna o próprio valor de x, utilizando a instrução &#8220;<strong>retorne x</strong>&#8220;.</li>
<li>Se o valor de x não for 0 ou 1, a função chama a si mesma para calcular os termos anteriores necessários para calcular o valor atual. Ela retorna a soma dos resultados de duas chamadas recursivas: <strong>fibonacci(x-1)</strong> e <strong>fibonacci(x-2)</strong>.<br />
fibonacci(x-1) calcula o valor do termo anterior ao termo x.<br />
fibonacci(x-2) calcula o valor do termo dois lugares antes do termo x.<br />
A soma desses dois valores representa o valor do termo x na sequência de Fibonacci.</li>
<li>A função continua a se chamar recursivamente até que atinja um dos casos base (x = 0 ou x = 1), momento em que retorna o valor correspondente.</li>
<li>A função retorna o valor do termo de Fibonacci correspondente ao número x fornecido.</li>
</ol>
<div>Essa implementação algorítmica da função Fibonacci é simples, mas pode se tornar ineficiente para valores de x grandes, devido à natureza recursiva da função. Isso ocorre porque a função realizará várias chamadas repetidas para calcular os mesmos termos novamente. Nesses casos, pode ser mais eficiente usar uma abordagem iterativa, que é o que faremos a seguir.</div>
<div> </div>
<h3>Algoritmo de Fibonacci Iterativo</h3>
<div>Outra opção para gerar uma sequência de fibonacci é empregar um algoritmo iterativo em vez de recursivo. Neste caso, em vez de a função realizar chamadas a si própria repetidas vezes (recursividade), usamos um laço de repetição comum para realizar o cálculo dos valores a serem gerados.</div>
<div> </div>
<div>Vamos ao algoritmo:</div>
<div>
<pre>programa
{

inteiro num

funcao inicio()
{

  escreva("Obter sequencia de Fibonacci\n")
  escreva("Entre com um número: ")
  leia(num)
  
  escreva("\nMostrar a sequência completa:\n")
  para (inteiro i = 1; i &lt;= num; i++) {
    escreva(fibonacci(i) + " ")
  }

}

<span style="color: #339966;">// Função fibonacci iterativo</span>
funcao inteiro fibonacci(inteiro x) {
  inteiro antepNum, penNum = 0, numAtual = 1

  se ((x == 0) ou (x == 1)) {
       retorne x
  }
  para (inteiro i = 2; i &lt;= x; i++) {
    antepNum = penNum
    penNum = numAtual
    numAtual = antepNum + penNum
  }
  retorne numAtual
}

}</pre>
</div>
<div>Diferente da abordagem anterior, que era recursiva, este algoritmo utiliza uma abordagem iterativa. Vamos analisar o funcionamento dessa função passo a passo:</div>
<div> </div>
<ol>
<li>A função &#8220;fibonacci()&#8221; recebe um número inteiro x como parâmetro.</li>
<li>Em seguida, três variáveis inteiras são declaradas: antepNum, penNum e numAtual. Inicialmente, antepNum e penNum são definidos como 0, e numAtual é definido como 1. Essas variáveis são usadas para acompanhar os valores dos termos anteriores e atual da sequência de Fibonacci.</li>
<li>É iniciado um loop &#8220;para&#8221; com uma variável de controle inteira i, que começa em 2 e vai até x. Esse loop irá iterar x-2 vezes, pois os primeiros termos já são conhecidos.</li>
<li>Dentro do loop, os valores antigos são atualizados para avançar na sequência de Fibonacci. A variável antepNum recebe o valor de penNum, que é o termo anterior, e penNum recebe o valor de numAtual, que é o termo atual.</li>
<li>Em seguida, a variável numAtual é atualizada somando antepNum e penNum. Essa soma representa o próximo termo da sequência de Fibonacci.</li>
<li>O loop continua até que i alcance o valor x, momento em que todos os termos necessários terão sido calculados.</li>
<li>Após o término do loop, a função retorna o valor de numAtual, que é o termo de Fibonacci correspondente ao número x fornecido.</li>
</ol>
<div>Note que a função que gera a sequência de fibonacci se tornou um pouco mais complexa, porém provavelmente mais fácil de entender. A seguir vamos comparar a performance de ambas as funções.</div>
<div> </div>
<h3>Comparação entre fibonacci iterativo e recursivo</h3>
<div>Às vezes, o código de aparência mais limpa não é o melhor. Em termos de <a href="http://www.bosontreinamentos.com.br/estruturas-de-dados/o-que-e-notacao-big-o-em-programacao-e-analise-de-algoritmos/">notação Big O</a>, a solução iterativa será executada mais rapidamente com uma notação de O(n), enquanto a solução recursiva é O(2^n), e isso se torna facilmente perceptível ao tentar gerar sequências de fibonacci maiores.</div>
<div> </div>
<div>Se executarmos os dois algoritmos passando um valor como 40 para gerar sequência, poderemos claramente perceber a diferença. O resultado é a abordagem iterativa executando muito mais rápido do que a recursiva.</div>
<div> </div>
<div>A abordagem iterativa do algoritmo Fibonacci é mais eficiente do que a abordagem recursiva, especialmente para valores de x maiores. A função itera apenas uma vez, atualizando os valores necessários em cada iteração, em vez de realizar chamadas recursivas repetidas. Isso torna o algoritmo mais rápido e eficiente em termos de uso de memória.</div>
<div> </div>
<div>Portanto, cuidado ao empregar algoritmos recursivos &#8211; nem sempre são a maneira mais adequada de resolver problemas em computação.</div>
<div> </div>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-fibonacci-recursivo-e-iterativo-logica-de-programacao/">Algoritmo para Fibonacci Recursivo e Iterativo &#8211; Lógica de Programação</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-fibonacci-recursivo-e-iterativo-logica-de-programacao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para validação de CPF (dígitos verificadores) &#8211; Lógica de Programação</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-validacao-de-cpf-digitos-verificadores-logica-de-programacao/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-validacao-de-cpf-digitos-verificadores-logica-de-programacao/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 26 Jun 2023 17:31:12 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19477</guid>

					<description><![CDATA[<p>Validação de CPF com Portugol O CPF (Cadastro de Pessoas Físicas) é um documento de identificação emitido pela Receita Federal aqui no Brasil, criado em 1970. Cada indivíduo residente no país (cidadãos brasileiros e estrangeiros residentes) possui um número único de CPF. Esse documento é essencial para diversas atividades e serviços, como por exemplo abertura de contas bancárias, realização de compras, emissão de documentos oficiais, declaração de imposto de renda, entre outros. O CPF é composto por 11 dígitos e é utilizado para identificar cada pessoa de forma única. Os dois últimos dígitos do CPF são conhecidos como &#8220;dígitos verificadores&#8221; e são utilizados para verificar a validade do número. Esses dígitos são calculados a partir dos nove primeiros dígitos do CPF, utilizando um algoritmo específico, que estudaremos a seguir. Neste tutorial mostro como realizar o cálculo dos dígitos verificadores para validação de CPF, usando um algoritmo criado no Portugol Studio &#8211; e que você pode adaptar para a linguagem de programação que desejar. Formato do CPF O formato de um CPF (Cadastro de Pessoas Físicas) é composto por 11 dígitos no seguinte padrão: XXX.XXX.XXX-YY, onde os &#8220;X&#8221; representam os dígitos numéricos e os &#8220;Y&#8221; representam os dígitos verificadores.   O [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-validacao-de-cpf-digitos-verificadores-logica-de-programacao/">Algoritmo para validação de CPF (dígitos verificadores) &#8211; Lógica de Programação</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Validação de CPF com Portugol</h3>
<div>
<p>O CPF (Cadastro de Pessoas Físicas) é um documento de identificação emitido pela Receita Federal aqui no Brasil, criado em 1970. Cada indivíduo residente no país (cidadãos brasileiros e estrangeiros residentes) possui um número único de CPF. Esse documento é essencial para diversas atividades e serviços, como por exemplo abertura de contas bancárias, realização de compras, emissão de documentos oficiais, declaração de imposto de renda, entre outros.</p>
<p>O CPF é composto por 11 dígitos e é utilizado para identificar cada pessoa de forma única. Os dois últimos dígitos do CPF são conhecidos como &#8220;<strong>dígitos verificadores</strong>&#8221; e são utilizados para verificar a validade do número.</p>
<p>Esses dígitos são calculados a partir dos nove primeiros dígitos do CPF, utilizando um algoritmo específico, que estudaremos a seguir.</p>
<p>Neste tutorial mostro como realizar o cálculo dos dígitos verificadores para validação de CPF, usando um algoritmo criado no Portugol Studio &#8211; e que você pode adaptar para a linguagem de programação que desejar.</p>
<h3>Formato do CPF</h3>
</div>
<div>O formato de um CPF (Cadastro de Pessoas Físicas) é composto por 11 dígitos no seguinte padrão: <strong>XXX.XXX.XXX-YY</strong>, onde os &#8220;X&#8221; representam os dígitos numéricos e os &#8220;Y&#8221; representam os dígitos verificadores.</div>
<div> </div>
<div>O penúltimo dígito é o DV módulo 11 dos nove dígitos anteriores e o último dígito é o DV módulo 11 dos dez dígitos anteriores.</div>
<div> </div>
<div>No caso do CPF, o DV módulo 11 corresponde ao resto da divisão por 11 do somatório da multiplicação de cada algarismo da base respectivamente por 9, 8, 7, 6, 5, 4, 3 e 2, a partir do dígito mais à esquerda. O resto 10 é considerado como valor 0. </div>
<div> </div>
<div>O nono dígito indica a região fiscal do documento &#8211; ou seja, o estado emissor. As regiões fiscais onde o CPF é emitido tem os seguintes valores:</div>
<div> </div>
<div>
<table style="border-collapse: collapse; width: 47.3094%; height: 303px;" border="1">
<thead>
<tr>
<td style="width: 69.5364%; text-align: center;"><strong>Estado Emissor</strong></td>
<td style="width: 30.4636%; text-align: center;"><strong>Dígito</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 69.5364%; text-align: center;">DF, GO, MS, MT e TO</td>
<td style="width: 30.4636%; text-align: center;">1</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">AC, AM, AP, PA, RO e RR</td>
<td style="width: 30.4636%; text-align: center;">2</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">CE, MA e PI</td>
<td style="width: 30.4636%; text-align: center;">3</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">AL, PB, PE e RN</td>
<td style="width: 30.4636%; text-align: center;">4</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">BA e SE</td>
<td style="width: 30.4636%; text-align: center;">5</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">MG</td>
<td style="width: 30.4636%; text-align: center;">6</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">ES e RJ</td>
<td style="width: 30.4636%; text-align: center;">7</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">SP</td>
<td style="width: 30.4636%; text-align: center;">8</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">PR e SC</td>
<td style="width: 30.4636%; text-align: center;">9</td>
</tr>
<tr>
<td style="width: 69.5364%; text-align: center;">RS</td>
<td style="width: 30.4636%; text-align: center;">0</td>
</tr>
</tbody>
</table>
</div>
<div> </div>
<h3>Como calcular os dígitos verificadores do CPF: Exemplo</h3>
<div>Vejamos como realizar o cálculo dos dois dígitos verificadores de CPF por meio de um exemplo. Suponhamos o CPF de número 667.556.317-36. Note que esse CPF foi emitido em um dos estados: Rio de Janeiro ou Espírito Santo, pois o nono dígito é o 7 (último dígito antes do traço separador). Mas como verificar se ele é válido?</div>
<div> </div>
<div>Para isso temos de efetuar a validação dos dígitos verificadores &#8211; no caso 3 e 6. Vamos ao processo:</div>
<div> </div>
<h4><strong>Passo 1 &#8211; Calcular DV1:</strong></h4>
<div>Vamos primeiramente calcular o dígito verificador #1.<br />
Precisamos usar os nove primeiros dígitos do CPF para isso:</div>
<div> </div>
<div>
<table style="border-collapse: collapse; width: 62.7364%; height: 23px;" border="1">
<tbody>
<tr>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>3</strong></span></td>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>1</strong></span></td>
<td style="width: 11.1111%; text-align: center;"><span style="color: #800000;"><strong>7</strong></span></td>
</tr>
</tbody>
</table>
</div>
<div> </div>
<div>Multiplicamos os dígitos pela sequência decremental de 10 a 2</div>
<div> </div>
<div>
<table style="border-collapse: collapse; width: 70.5228%; height: 28px;" border="1">
<tbody>
<tr>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>3</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>1</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 10%; text-align: center;"><em><span style="color: #008000;"><strong>x</strong></span></em></td>
</tr>
<tr>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>10</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>9</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>8</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>4</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>3</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>2</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #008000;"><strong>=</strong></span></td>
</tr>
<tr>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>60</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>54</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>56</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>35</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>30</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>30</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>12</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>3</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>14</strong></span></td>
<td style="width: 10%; text-align: center;"> </td>
</tr>
</tbody>
</table>
</div>
<div> </div>
<div>Efetuamos o somatório dos valores obtidos para cada dígito multiplicado:</div>
<div>
<p style="text-align: center;"><strong>60 + 54 + 56 + 35 + 30 + 30 + 12 + 3 + 14 = <span style="color: #800000;">294</span></strong></p>
<p>Calculamos o módulo de 11 do resultado (resto da divisão inteira do resultado por 11):</p>
<p style="text-align: center;"><strong>294 % 11 = <span style="color: #800000;">8</span></strong></p>
<p>Finalmente, subtraímos esse módulo de 11: 11 &#8211; 8 = 3</p>
<p style="text-align: center;">Assim, <span style="color: #ff0000;"><strong>3</strong></span> é o dígito verificador 1 (DV1).</p>
</div>
<h4>Passo 2 &#8211; Calcular DV2:</h4>
<div>Vamos agora calcular o dígito verificador #2. Precisamos usar os nove primeiros dígitos do CPF mais o DV1 calculado no passo anterior para isso:</div>
<div> </div>
<div>
<table style="border-collapse: collapse; width: 76.4182%; height: 21px;" border="1">
<tbody>
<tr>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>3</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>1</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 10%; text-align: center;"><span style="color: #800000;"><strong>3</strong></span></td>
</tr>
</tbody>
</table>
</div>
<div> </div>
<div>Multiplicamos os dígitos (incluindo o DV1) pela sequência decremental de 11 a 2:</div>
<div> </div>
<div>
<table style="border-collapse: collapse; width: 80.5339%; height: 72px;" border="1">
<tbody>
<tr style="height: 24px;">
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>3</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>1</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 5%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>3</strong></span></td>
<td style="width: 5%; text-align: center; height: 24px;"><span style="color: #ff0000;"><strong>x</strong></span></td>
</tr>
<tr style="height: 24px;">
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>11</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>10</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>9</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>8</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>7</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>5</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>4</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>3</strong></span></td>
<td style="width: 5%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>2</strong></span></td>
<td style="width: 5%; text-align: center; height: 24px;"><span style="color: #ff0000;"><strong>=</strong></span></td>
</tr>
<tr style="height: 24px;">
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>66</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>60</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>63</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>40</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>35</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>36</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>15</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>4</strong></span></td>
<td style="width: 10%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>21</strong></span></td>
<td style="width: 5%; text-align: center; height: 24px;"><span style="color: #800000;"><strong>6</strong></span></td>
<td style="width: 5%; text-align: center; height: 24px;"> </td>
</tr>
</tbody>
</table>
</div>
<div> </div>
<div>
<div>Efetuamos o somatório dos valores obtidos para cada dígito multiplicado:</div>
<div>
<p style="text-align: center;"><strong>66 + 60 + 63 + 40 + 35 + 36 + 15 + 4 + 21 + 6 = <span style="color: #800000;">346</span></strong></p>
<p>Calculamos o módulo de 11 do resultado (resto da divisão inteira do resultado por 11):</p>
<p style="text-align: center;"><strong>346 % 11 = <span style="color: #800000;">5</span></strong></p>
<p>Finalmente, subtraímos esse módulo de 11: 11 &#8211; 5 = 6</p>
<p style="text-align: center;">Assim, <span style="color: #ff0000;"><strong>6</strong></span> é o dígito verificador 2 (DV2).</p>
</div>
</div>
<div style="text-align: center;"><span style="color: #ff6600; font-size: 18pt;"><em><strong>CPF validado.</strong></em></span></div>
<div> </div>
<div>Excelente. Agora que sabemos como realizar essa verificação manualmente, vamos escrever um algoritmo usando lógica de programação e o software Portugol Studio para executar essa tarefa de forma automatizada para nós.</div>
<div> </div>
<h3>Algoritmo em Portugol para calcular o dígito verificador de um CPF     </h3>
<div>Neste exemplo, o algoritmo solicita ao usuário que digite os 9 primeiros dígitos do CPF. Em seguida, é chamada a função ValidaCPF para verificar se o CPF é válido ou não, com base no cálculo dos dígitos verificadores. Caso seja válido, é exibida a mensagem &#8220;CPF válido!&#8221;; caso contrário, é exibida a mensagem &#8220;CPF inválido!&#8221;.</div>
<div> </div>
<div><em>CÓDIGO NO PORTUGOL STUDIO</em></div>
<pre><strong>programa
{

inclua biblioteca Texto --&gt; t
inclua biblioteca Tipos --&gt; ti
cadeia cpf
inteiro cpf_digitos[11]
inteiro digito1, digito2
logico res = falso

funcao inicio()
{

  escreva("Digite o CPF: ")
  leia(cpf)

  para (inteiro i = 0; i &lt; 11; i++) {
    cpf_digitos[i] = ti.caracter_para_inteiro(t.obter_caracter(cpf, i))
  }

  res = ValidaCPF(cpf_digitos)

  se  (res == verdadeiro) {
    escreva("CPF válido!")
  }
  senao {
    escreva("CPF inválido!")
  }

}

  funcao logico ValidaCPF(inteiro num[]) {
    inteiro i, j, soma, resto, dv1, dv2

 <span style="color: #339966;">   // Dígito verificador #1</span>
    soma = 0
    j = 10

    para (i = 0; i &lt; 9; i++) {
      soma += num[i] * j
      j -= 1
    }

    resto = soma % 11

    se (resto &lt; 2) {
      dv1 = 0
    }
    senao {
      dv1 = 11 - resto
    }

    <span style="color: #339966;">// Dígito verificador #2</span>
    soma = 0
    j = 11

    para (i = 0; i &lt; 10; i++) {
      soma += (num[i]) * j
      j -= 1
    }

    resto = soma % 11

    se (resto &lt; 2) {
      dv2 = 0
    }
    senao {
      dv2 = 11 - resto
    }

    se ((num[9] == dv1) e (num[10] == dv2)) {
      retorne verdadeiro
    }
    senao {
      retorne falso
    }

  }

}</strong></pre>
<div>
<div>
<h3>Funcionamento do código do algoritmo de cálculo do dígito verificador do CPF</h3>
</div>
<div><strong>1. Declaração das variáveis:</strong></div>
<div> </div>
<div>O programa começa com a declaração de variáveis e a inclusão das bibliotecas necessárias. As variáveis são:</div>
<ul>
<li>cpf: Variável que armazena o CPF informado pelo usuário para validação, no formato de cadeia de caracteres.</li>
<li>cpf_digitos[11]: Vetor de 11 caracteres para armazenar os dígitos individuais do CPF.</li>
<li>digito1 e digito2: Variáveis inteiras para armazenar os dígitos verificadores calculados.</li>
<li>res: Variável do tipo lógico que armazena o resultado da validação.</li>
</ul>
<div>Também são usadas as bibliotecas Texto e Tipos para realizar conversão de tipos e extração de caracteres da string informada para o vetor.</div>
<div> </div>
</div>
<div><strong>2. Corpo principal do programa</strong></div>
<ol style="list-style-type: lower-alpha;">
<li>Dentro da função <em>inicio()</em>, o programa solicita ao usuário que digite o CPF e lê o valor digitado, armazenando-o na a variável cpf.</li>
<li>Em seguida, o programa percorre cada caractere do CPF digitado e os converte para números inteiros, armazenando-os no array cpf_digitos.</li>
<li>O programa então chama a função ValidaCPF passando o array cpf_digitos como argumento, e armazena o resultado retornado na variável booleana res.</li>
<li>O programa verifica se res é verdadeiro, ou seja, se a função ValidaCPF retornou verdadeiro. Se sim, imprime a mensagem &#8220;CPF válido!&#8221;. Caso contrário, imprime a mensagem &#8220;CPF inválido!&#8221;.</li>
</ol>
<div><strong>3. Definição da função ValidarCPF</strong></div>
<div>
<div> </div>
<div>Esta é a função que efetivamente realiza a validação do CPF. Dentro da função ValidaCPF, são declaradas as variáveis necessárias para realizar a validação dos dígitos verificadores: i, j, soma, resto, dv1 e dv2.</div>
<div> </div>
<div>A função recebe o vetor cpf_digitos na forma de parâmetro num[] e retorna um valor lógico indicando se o CPF é válido ou não.</div>
<div>Ela realiza o cálculo dos dígitos verificadores do CPF seguindo as regras estabelecidas anteriormente:</div>
<div> </div>
<div><em>1. Para calcular o primeiro dígito verificador:</em></div>
<ul>
<li>O programa realiza o cálculo do primeiro dígito verificador utilizando a fórmula de validação do CPF. Ele itera sobre os primeiros 9 dígitos do CPF, multiplicando cada um deles pela sequência decrescente de 10 a 2 e somando o resultado na variável soma. </li>
<li>O resultado é dividido por 11 e obtém-se o resto da divisão.</li>
<li>Se o resto for menor que 2, o primeiro dígito verificador é 0. Caso contrário, é calculado realizando-se 11 menos o resto obtido.</li>
</ul>
<div><em>2. Calcular o segundo dígito verificador:</em></div>
<ul>
<li>O programa repete o mesmo processo para calcular o segundo dígito verificador, agora considerando os primeiros 10 dígitos do CPF. A multiplicação agora é pela sequência decrescente de 11 a 2.</li>
<li>O resultado é dividido por 11 e obtém-se novamente o resto da divisão.</li>
<li>Se o resto for menor que 2, o segundo dígito verificador é 0. Caso contrário, é calculado como 11 menos o resto obtido.</li>
</ul>
<div>Por fim, a função compara os dígitos verificadores calculados com os dígitos verificadores fornecidos no CPF e retorna verdadeiro se forem iguais, ou falso caso contrário.</div>
<div> </div>
<div>O valor retornado pela função ValidaCPF será utilizado no programa principal para determinar se o CPF é válido ou inválido, e exibir a mensagem correspondente.</div>
<div> </div>
<div>É isso aí! Com este algoritmo podemos realizar o cálculo dos dígitos verificadores de um número de CPF para fins de validação. Experimente reescrever esse algoritmo em sua linguagem de programação favorita, como C#, Python ou Java, por exemplo.</div>
</div>
<p>E se preferir, assista a um vídeo da Bóson Treinamentos onde explico como implementar esse algoritmo para testes:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/wmLLw3SnPfc?si=XLI_kYCbhOIw-T2N" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-validacao-de-cpf-digitos-verificadores-logica-de-programacao/">Algoritmo para validação de CPF (dígitos verificadores) &#8211; Lógica de Programação</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/algoritmo-para-validacao-de-cpf-digitos-verificadores-logica-de-programacao/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Questionário de Lógica de Programação com respostas</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/questionario-de-logica-de-programacao-com-respostas/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/questionario-de-logica-de-programacao-com-respostas/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 25 May 2023 14:21:54 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Quiz]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19437</guid>

					<description><![CDATA[<p>25 questões de Lógica de Programação com respostas Neste post trago um questionário de Lógica de Programação e Algoritmos, contendo 25 questões de múltipla escolha sobre tópicos variados dentro do assunto, como variáveis, tipos de dados, condicionais, arrays, laços de repetição e muitos outros. No final da página há um gabarito com as respostas das questões para você avaliar seu conhecimento no assunto, e assim descobrir quais pontos precisa estudar melhor ou revisar. Bom questionário! Questões 1 &#8211; Como podemos definir um Algoritmo?   Sequência de comandos ordenados, infinitos e ambíguos que são empregados para executar uma tarefa. Sequência de instruções ordenadas, infinitas e não-ambíguas que são empregadas para executar uma tarefa. Sequência de instruções ordenadas, finitas e não-ambíguas que são empregadas para executar uma tarefa. Sequência de comandos ordenados, infinitos e não-ambíguos que são empregados para executar uma tarefa. Sequência de comandos desordenados, infinitos e não-ambivalentes que são empregados para executar uma tarefa.   2 &#8211; Qual dos seguintes itens possui apenas tipos válidos usados em lógica de programação (tipos primitivos)?   Inteiro, Temporal, Caractere, Double Booleano, Real, Inteiro, Irracional Inteiro, Booleano, Tipografia, Double Inteiro, Booleano, Caractere, Double Temporal, Triple, Caractere, Double   3 &#8211; Observe atentamente o algoritmo [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/questionario-de-logica-de-programacao-com-respostas/">Questionário de Lógica de Programação com respostas</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>25 questões de Lógica de Programação com respostas</h2>
<p>Neste post trago um questionário de <a href="http://www.bosontreinamentos.com.br/curso-de-logica-de-programacao/">Lógica de Programação</a> e Algoritmos, contendo 25 questões de múltipla escolha sobre tópicos variados dentro do assunto, como variáveis, tipos de dados, condicionais, arrays, laços de repetição e muitos outros.</p>
<p>No final da página há um gabarito com as respostas das questões para você avaliar seu conhecimento no assunto, e assim descobrir quais pontos precisa estudar melhor ou revisar.</p>
<p>Bom questionário!</p>
<h3>Questões</h3>
<div><strong>1 &#8211; Como podemos definir um Algoritmo?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Sequência de comandos ordenados, infinitos e ambíguos que são empregados para executar uma tarefa.</li>
<li>Sequência de instruções ordenadas, infinitas e não-ambíguas que são empregadas para executar uma tarefa.</li>
<li>Sequência de instruções ordenadas, finitas e não-ambíguas que são empregadas para executar uma tarefa.</li>
<li>Sequência de comandos ordenados, infinitos e não-ambíguos que são empregados para executar uma tarefa.</li>
<li>Sequência de comandos desordenados, infinitos e não-ambivalentes que são empregados para executar uma tarefa.</li>
</ol>
<div> </div>
<div><strong>2 &#8211; Qual dos seguintes itens possui apenas tipos válidos usados em lógica de programação (tipos primitivos)?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Inteiro, Temporal, Caractere, Double</li>
<li>Booleano, Real, Inteiro, Irracional</li>
<li>Inteiro, Booleano, Tipografia, Double</li>
<li>Inteiro, Booleano, Caractere, Double</li>
<li>Temporal, Triple, Caractere, Double</li>
</ol>
<div> </div>
<div><strong>3 &#8211; Observe atentamente o algoritmo a seguir:</strong></div>
<div> </div>
<pre><strong>var</strong>
<strong>   num : inteiro</strong>
<strong>início</strong>
<strong>   num &lt;- 1</strong>
<strong>   enquanto (num &lt;= 10) faca</strong>
<strong>     escreval (num)</strong>
<strong>     num &lt;- num += 0</strong>
<strong>   fimenquanto</strong>
<strong>   se (num &gt; 10) entao</strong>
<strong>     escreva(num)</strong>
<strong>   fimse</strong>
<strong>fimalgoritmo</strong></pre>
<div>Esse algoritmo possui um erro.</div>
<div>Que erro é esse?</div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Loop Truncado</li>
<li>Loop Infinito</li>
<li>Erro de Compilação</li>
<li>Bloco SE sem SENAO</li>
<li>Declaração das Variáveis</li>
</ol>
<div> </div>
<div><strong>4 &#8211; Quais são todos os estados possíveis que um tipo lógico pode assumir?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Verdadeiro, Duvidoso</li>
<li>Falso, Duvidoso, Verdadeiro</li>
<li>Incerto, Certo</li>
<li>Verdadeiro, Falso</li>
<li>Verdadeiro, Errado</li>
</ol>
<div> </div>
<div><strong>5 &#8211; Observe a tabela-verdade a seguir e responda:</strong></div>
<div> </div>
<div>
<table style="border-collapse: collapse; width: 57.6196%; height: 136px;" border="1">
<tbody>
<tr>
<th style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><strong>Operando A</strong></th>
<th style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><strong>Operando B</strong></th>
<th style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><strong>Resultado</strong></th>
</tr>
<tr>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>F</strong></span></td>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>F</strong></span></td>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>F</strong></span></td>
</tr>
<tr>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>F</strong></span></td>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>V</strong></span></td>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>V</strong></span></td>
</tr>
<tr>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>V</strong></span></td>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>F</strong></span></td>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>V</strong></span></td>
</tr>
<tr>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>V</strong></span></td>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>V</strong></span></td>
<td style="width: 33.3333%; border-style: solid; border-color: #3d0808; text-align: center;"><span style="color: #800080;"><strong>V</strong></span></td>
</tr>
</tbody>
</table>
</div>
<div> </div>
<div>A qual operação lógica essa tabela-verdade se refere?</div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>AND</li>
<li>XOR</li>
<li>NOT</li>
<li>NAND</li>
<li>OR</li>
</ol>
<div> </div>
<div><strong>6 &#8211; Qual dos seguintes itens é melhor representado por um valor constante em um algoritmo?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Salário de um Funcionário</li>
<li>Valor da Temperatura no final de semana</li>
<li>Valor matemático de Pi</li>
<li>Distância da Terra à Lua</li>
<li>Velocidade de um carro em movimento</li>
</ol>
<div> </div>
<div><strong>7 &#8211; É possível ordenar valores numéricos já armazenados em um vetor de números decimais?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Não, somente é possível ter valores em ordem se os valores forem inseridos em ordem</li>
<li>Sim, mas somente se os números forem inteiros. Números decimais não podem ser ordenados</li>
<li>Sim, mas para isso é necessário usar um algoritmo para ordenação de vetores</li>
<li>Vetores não permitem o armazenamento de números decimais, somente números reais</li>
<li>Não, não é possível ordenar valores já armazenados em um vetor em nenhuma hipótese</li>
</ol>
<div> </div>
<div><strong>8 &#8211; O que representa a ilustração a seguir?</strong></div>
<div> </div>
<div><img loading="lazy" decoding="async" class="aligncenter wp-image-19442" title="Questões de lógica de programação" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/logica-programacao-questao-8.jpg" alt="Questões de lógica de programação" width="499" height="102" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/logica-programacao-questao-8.jpg 783w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/logica-programacao-questao-8-420x86.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/logica-programacao-questao-8-768x157.jpg 768w" sizes="auto, (max-width: 499px) 100vw, 499px" /></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Array Unidimensional de 3 posições, de nome N</li>
<li>Array Bidimensional de 4 posições, sem nome</li>
<li>Vetor Bidimensional de 4 posições, com nome não atribuído</li>
<li>Array Unidimensional de 4 posições, de nome N</li>
<li>Vetor Quadridimensional, de nome N</li>
</ol>
<div> </div>
<div><strong>9 &#8211; Quais são os tipos de arrays que podemos empregar na criação de algoritmos?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Unidimensional (linha), Bidimensional (vetor), Tridimensional (cubo)</li>
<li>Dimensional (com dimensões), Adimensional (sem dimensões), Paradimensional (com e sem dimensões)</li>
<li>Unidimensional (vetor), Bidimensional (quadrado), Tridimensional (esfera)</li>
<li>Unidimensional (vetor), Bidimensional (matriz), Tridimensional (cubo)</li>
<li>Unidimensional (ponto), Bidimensional (matriz), Tridimensional (campo)</li>
</ol>
<div><strong>10 &#8211; Quais dos itens a seguir apresentam apenas nomes de variáveis que são válidos? (marque mais de uma resposta)</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>nome Aluno, nota2, CEP, RuaNumero</li>
<li>nomeAluno, 2nota, CEP, RuAnUmErO</li>
<li>nomeAluno, nota2, CEP, RuAnUmErO</li>
<li>nomeAluno, nota2, CEP, Rua+Número</li>
<li>AlunoNumero, nota00002, cep, ruaComNumeroDaCasa</li>
</ol>
<div> </div>
<div><strong>11 &#8211; Observe atentamente o algoritmo a seguir:</strong></div>
<div> </div>
<pre><strong>para CONTA de 1 ate 9 faca</strong>
<strong> para CONTB de CONTA + 1 ate 10 faca</strong>
<strong>   se VET[CONTA] &gt; VET[CONTB] entao</strong>
<strong>    AUX &lt; -VET[CONTB]</strong>
<strong>    VET[CONTB] &lt;- VET[CONTA]</strong>
<strong>    VET[CONTA] &lt;- AUX</strong>
<strong>   fimse</strong>
<strong> fimpara</strong>
<strong>fimpara</strong></pre>
<div> </div>
<div>O que esse algoritmo faz exatamente?</div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Realiza busca binária em um array</li>
<li>Compara valores usando estrutura condicional SE</li>
<li>Realiza busca sequencial em um array</li>
<li>Ordena os elementos de um array</li>
<li>Insere elementos em uma lista de valores</li>
</ol>
<div> </div>
<div><strong>12 &#8211; O que é Compilação?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Comandos contidos no código-fonte são executados à medida em que são traduzidos, sendo necessária a interpretação toda vez que se quiser rodar o programa.</li>
<li>Tradução do código-fonte em um ou mais arquivos que podem ser armazenados e executados quantas vezes se desejar, sem necessitar de nova compilação.</li>
<li>Junção de comandos do código-fonte em um arquivo empacotado para distribuição por um meio específico para instalação do programa.</li>
<li>Execução das instruções contidas em um script contendo o código-fonte, de forma sequencial.</li>
<li>Organização do código-fonte em uma pasta contendo arquivos em ordem alfabética</li>
</ol>
<div> </div>
<div><strong>13 &#8211; Precisamos de um vetor (array unidimensional) para armazenar 15 valores numéricos relativos aos salários de funcionários de uma empresa.</strong></div>
<div><strong>Qual das seguintes instruções pode ser empregada para esse fim em um algoritmo?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>salarios : vetor [0..15] de real</li>
<li>salarios : vetor [1..15] de numeros</li>
<li>salarios : vetor [0..14] de salario</li>
<li>salarios : vetor [0..14] de inteiro</li>
<li>salarios : vetor [0..14] de real</li>
</ol>
<div> </div>
<div><strong>14 &#8211; Qual dos seguintes itens mostra um laço for (para) escrito corretamente?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>para (con = 1; con &lt; 10; con&#8211;) { instruções }</li>
<li>para (con = 10; con &gt;= 1; con++) { instruções }</li>
<li>para (con = 10; con &lt; 10; con&#8211;) { instruções }</li>
<li>para (con = 1; con &lt;= 10; con++) { instruções }</li>
<li>para (con == 10; con &gt; 1; con&#8211;) { instruções }</li>
</ol>
<div> </div>
<div><strong>15 &#8211; O que significam, respectivamente, os símbolos de fluxograma a seguir?</strong></div>
<div> </div>
<div><img loading="lazy" decoding="async" class="aligncenter wp-image-19443" title="Questões de lógica de programação" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/questao-logica-programacao-15.jpg" alt="Questões de lógica de programação" width="549" height="95" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/questao-logica-programacao-15.jpg 832w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/questao-logica-programacao-15-420x73.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/questao-logica-programacao-15-768x133.jpg 768w" sizes="auto, (max-width: 549px) 100vw, 549px" /></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Entrada / Saída, Processo, Decisão</li>
<li>Decisão, Início / Fim, Repetição</li>
<li>Entrada / Saída, Repetição, Decisão</li>
<li>Decisão, Processo, Entrada / Saída</li>
<li>Processo, Decisão, Repetição</li>
</ol>
<div> </div>
<div><strong>16 &#8211; O que é uma Variável?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Local na memória CMOS do computador empregado para armazenar de forma temporária os dados que são utilizados pelo programa.</li>
<li>Valor que varia conforme passa o tempo, sendo sempre modificado conforme o programa vai sendo executado.</li>
<li>Estado lógico de uma constante, que pode variar entre verdadeiro e falso</li>
<li>Local na memória RAM do computador utilizado para armazenar temporariamente dados que são utilizados pelo programa.</li>
<li>Valor armazenado em locais variáveis no computador, como HD, RAM ou Memória Cache.</li>
</ol>
<div> </div>
<div><strong>17 &#8211; Qual das seguintes afirmações sobre arrays (vetores) é verdadeira?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Podemos acessar todos os elementos individuais de uma array por meio de uma posição de índice, começando sempre em 1.</li>
<li>Um array é uma estrutura que pode armazenar uma série de elementos de dados de mesmo tipo.</li>
<li>Um array é uma estrutura que permite armazenar até 10 elementos de dados, sempre do mesmo tipo</li>
<li>Podemos acessar os elementos individuais de uma array por meio de uma posição de índice, começando em A.</li>
<li>Um vetor é uma estrutura bidimensional que pode armazenar uma série de elementos de dados de tipos diferentes.</li>
</ol>
<div> </div>
<div><strong>18 &#8211; Observe o fluxograma a seguir e responda:</strong></div>
<div> </div>
<div><img loading="lazy" decoding="async" class="aligncenter wp-image-19444" title="Fluxograma condicional em lógica de programação" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/fluxograma-logica-progamacao-condicional.jpg" alt="Fluxograma condicional em lógica de programação" width="350" height="270" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/fluxograma-logica-progamacao-condicional.jpg 498w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/fluxograma-logica-progamacao-condicional-420x324.jpg 420w" sizes="auto, (max-width: 350px) 100vw, 350px" /></div>
<div> </div>
<div>Que tipo de estrutura de decisão está sendo empregada?</div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Decisão Condicional Simples</li>
<li>Decisão Condicional Composta</li>
<li>Decisão Condicional Encadeada</li>
<li>Decisão Condicional Complexa</li>
<li>Decisão Condicional Aninhada</li>
</ol>
<div> </div>
<div><strong>19 &#8211; Como funciona um laço while (enquanto)?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Um laço while repete o bloco de código associado enquanto um teste lógico realizado retornar falso.</li>
<li>Um laço while não repete o bloco de código associado enquanto um teste lógico realizado retornar verdadeiro.</li>
<li>Um laço while repete o bloco de código associado um número de vezes específico, determinado em sua declaração.</li>
<li>Um laço while espera enquanto o usuário não pressiona uma tecla para decidir qual caminho tomar no fluxo do algoritmo</li>
<li>Um laço while repete o bloco de código associado enquanto um teste lógico realizado retornar verdadeiro</li>
</ol>
<div> </div>
<div><strong>20 &#8211; Para que serve o operador aritmético de módulo (%)?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Operador que realiza cálculo de porcentagens</li>
<li>Realizar cálculos aritméticos de investimentos</li>
<li>Retornar o módulo matemático (valor absoluto)</li>
<li>Calcular o resto de uma divisão inteira</li>
<li>Calcular o retorno de uma função variável</li>
</ol>
<div> </div>
<div><strong>21 &#8211; Qual a diferença entre os operadores lógicos E (AND) e OU (OR)?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>AND retorna V apenas se todas as expressões de entrada forem verdadeiras, e o OR retorna V se ao menos uma delas for verdadeira</li>
<li>OR retorna V apenas se todas as expressões de entrada forem verdadeiras, e o AND retorna V se ao menos uma delas for verdadeira</li>
<li>AND retorna F apenas se todas as expressões de entrada forem verdadeiras, e o OR retorna F se ao menos uma das expressões de entrada for verdadeira</li>
<li>AND retorna F apenas se todas as expressões de entrada forem verdadeiras, e o OR retorna F se todas as expressões de entrada forem verdadeiras</li>
<li>OR retorna V apenas se todas as expressões de entrada forem falsas, e o AND retorna V se ao menos uma delas for verdadeira</li>
</ol>
<div> </div>
<div><strong>22 &#8211; Qual dos seguintes é um operador de concatenação de strings válido?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>+</li>
<li>*</li>
<li>→</li>
<li>;</li>
<li>&#8221; &#8220;</li>
</ol>
<div> </div>
<div><strong>23 &#8211; Observe abaixo a sintaxe de uma estrutura condicional ESCOLHA-CASO:</strong></div>
<div> </div>
<pre><strong>escolha (opção) {</strong>
<strong>    caso valor1:</strong>
<strong>        comandos a executar</strong>
<strong>        pare</strong>
<strong>    caso valor2:</strong>
<strong>        comandos a executar</strong>
<strong>        pare</strong>
<strong>    caso valor3:</strong>
<strong>        comandos a executar</strong>
<strong>        pare</strong>
<strong>    caso contrario:</strong>
<strong>        comandos-padrão</strong>
<strong>}</strong></pre>
<div> </div>
<div>Para que serve exatamente a instrução pare que aparece em alguns dos casos?</div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Para parar de executar os comandos do caso selecionado</li>
<li>Para parar a comparação dos próximos valores com a opção</li>
<li>Para encerrar o programa</li>
<li>Para pular a execução do caso atual e realizar o loop</li>
<li>Nenhuma das opções anteriores</li>
</ol>
<div> </div>
<div><strong>24 &#8211; Para que serve uma biblioteca?</strong></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Para que os usuários possam consultar e tomar emprestados livros de assuntos variados</li>
<li>Para que os programadores possam consultar a documentação da linguagem com facilidade</li>
<li>Uma biblioteca é um programa que permite escrever e testar código-fonte, também conhecida como IDE.</li>
<li>Para modularizar o desenvolvimento de estruturas de comparação e repetição</li>
<li>Uma biblioteca é um arquivo que organiza código pré-definido para o uso em aplicações</li>
</ol>
<div> </div>
<div><strong>25 &#8211; O que representa a ilustração abaixo?</strong></div>
<div> </div>
<div><img loading="lazy" decoding="async" class="aligncenter wp-image-19445" title="Quiz de lógica de programação para estudantes" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/quiz-logica-programacao-boson-25.jpg" alt="Quiz de lógica de programação para estudantes" width="429" height="246" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/quiz-logica-programacao-boson-25.jpg 459w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/quiz-logica-programacao-boson-25-420x241.jpg 420w" sizes="auto, (max-width: 429px) 100vw, 429px" /></div>
<div> </div>
<ol style="list-style-type: lower-alpha;">
<li>Uma planilha do Excel</li>
<li>Uma tabela de banco de dados</li>
<li>Um vetor de 16 posições</li>
<li>Uma cartela de bingo</li>
<li>Um array de duas dimensões (matriz)</li>
</ol>
<div> </div>
<div>Como será que você se saiu? Confira a seguir o gabarito com as respostas corretas para cada questão do quiz.</div>
<div> </div>
<h3>RESPOSTAS</h3>
<ol>
<li>C</li>
<li>D</li>
<li>B</li>
<li>D</li>
<li>E</li>
<li>C</li>
<li>C</li>
<li>D</li>
<li>D</li>
<li>C, E</li>
<li>D</li>
<li>B</li>
<li>E</li>
<li>D</li>
<li>D</li>
<li>D</li>
<li>B</li>
<li>B</li>
<li>E</li>
<li>D</li>
<li>A</li>
<li>A</li>
<li>B</li>
<li>E</li>
<li>E</li>
</ol>
<p>Espero que você tenha ido bem. Se precisar revisar ou aprender algum tópico relacionado, não deixe de consultar os artigos de <a href="http://www.bosontreinamentos.com.br/curso-de-logica-de-programacao/">Lógica de Programação</a> aqui do blog, ou ainda o <a href="https://www.youtube.com/playlist?list=PLucm8g_ezqNp_ubuH4XraJRwvUJogsyiF">Curso Completo de Lógica de Programação</a> em vídeo no canal do YouTube da Bóson Treinamentos em Tecnologia.</p>
<div>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
</div>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/questionario-de-logica-de-programacao-com-respostas/">Questionário de Lógica de Programação com respostas</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/questionario-de-logica-de-programacao-com-respostas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>23 &#8211; Lógica de Programação &#8211; Pesquisa Binária em Vetores (Arrays)</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/23-logica-de-programacao-pesquisa-binaria-em-vetores-arrays/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/23-logica-de-programacao-pesquisa-binaria-em-vetores-arrays/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sat, 22 Apr 2023 13:56:22 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/blog/?p=887</guid>

					<description><![CDATA[<p>Pesquisa Binária em Vetores (Arrays) Um algoritmo de pesquisa binária é um método bastante eficiente para encontrar um determinado valor em um vetor ordenado. Ele funciona dividindo repetidamente o vetor ao meio (por isso &#8220;binário&#8221;) até que o valor desejado seja encontrado ou seja determinado que o valor não está presente no vetor. Como funciona uma algoritmo de pesquisa binária O funcionamento do algoritmo de pesquisa binária é o seguinte: Definir os limites inferior e superior do vetor. O limite inferior é definido como o índice 0 e o limite superior como o índice do último elemento do vetor. Calcular o índice médio como a média dos limites inferior e superior: índice médio = (limite inferior + limite superior) / 2. Comparar o valor desejado com o elemento do vetor no índice médio. Se o valor desejado for igual ao elemento do índice médio, a pesquisa é bem-sucedida e o índice médio é retornado como o índice onde o valor foi encontrado. Se o valor desejado for menor que o elemento do índice médio, a pesquisa será repetida no subvetor à esquerda do índice médio. O novo limite superior será definido como o índice médio &#8211; 1 e o passo [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/23-logica-de-programacao-pesquisa-binaria-em-vetores-arrays/">23 &#8211; Lógica de Programação &#8211; Pesquisa Binária em Vetores (Arrays)</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Pesquisa Binária em Vetores (Arrays)</h2>
<p>Um algoritmo de <strong>pesquisa binária</strong> é um método bastante eficiente para encontrar um determinado valor em um vetor ordenado. Ele funciona dividindo repetidamente o vetor ao meio (por isso &#8220;binário&#8221;) até que o valor desejado seja encontrado ou seja determinado que o valor não está presente no vetor.</p>
<h3>Como funciona uma algoritmo de pesquisa binária</h3>
<p>O funcionamento do algoritmo de pesquisa binária é o seguinte:</p>
<ol>
<li>Definir os limites inferior e superior do vetor. O limite inferior é definido como o índice 0 e o limite superior como o índice do último elemento do vetor.</li>
<li>Calcular o índice médio como a média dos limites inferior e superior: índice médio = (limite inferior + limite superior) / 2.</li>
<li>Comparar o valor desejado com o elemento do vetor no índice médio.</li>
<li>Se o valor desejado for igual ao elemento do índice médio, a pesquisa é bem-sucedida e o índice médio é retornado como o índice onde o valor foi encontrado.</li>
<li>Se o valor desejado for menor que o elemento do índice médio, a pesquisa será repetida no subvetor à esquerda do índice médio. O novo limite superior será definido como o índice médio &#8211; 1 e o passo 2 será repetido.</li>
<li>Se o valor desejado for maior que o elemento do índice médio, a pesquisa será repetida no subvetor à direita do índice médio. O novo limite inferior será definido como o índice médio + 1 e o passo 2 será repetido.</li>
<li>Repetir os passos 2 e 3 até que o valor desejado seja encontrado ou os limites inferior e superior se cruzem. Se os limites inferior e superior se cruzarem sem encontrar o valor desejado, isso significa que o valor não está presente no vetor.</li>
</ol>
<p>No vídeo a seguir explico com detalhes como realizar a pesquisa binária em vetores, usando português estruturado.</p>
<p><iframe loading="lazy" src="//www.youtube.com/embed/gpCnXU-1FNA?feature=player_detailpage" width="640" height="360" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Códigos usados no vídeo</h3>
<pre><span style="color: #ff0000;"><strong>algoritmo "Pesquisa Binária"</strong></span>
<span style="color: #339966;"><strong> // Função : Estudar a pesquisa binária em vetores</strong></span>
<span style="color: #339966;"><strong> // Autor : Fábio dos Reis</strong></span>
<span style="color: #339966;"><strong> // Data : 18/09/2013</strong></span>
<span style="color: #ff0000;"><strong> var</strong></span>
<span style="color: #ff0000;"><strong> CONTADORA, CONTADORB: inteiro</strong></span>
<span style="color: #ff0000;"><strong> NUM, AUX: inteiro</strong></span>
<span style="color: #ff0000;"><strong> VET: vetor[1..10] de inteiro</strong></span>
<span style="color: #ff0000;"><strong> BUSCA: inteiro
</strong></span>
<span style="color: #339966;"><strong> //Variáveis para busca binária:</strong></span>
<span style="color: #ff0000;"><strong> inicial, final, meio: inteiro</strong></span>
<span style="color: #ff0000;"><strong> dado_encontrado: logico
</strong></span>
<span style="color: #ff0000;"><strong> inicio
</strong></span><span style="color: #339966;"><strong> //Preencher o array criado</strong></span></pre>
<pre><span style="color: #ff0000;"><strong>para CONTADORA de 0 ate 1 faca</strong></span>
<span style="color: #ff0000;"><strong>   para CONTADORB de CONTADORA + 1 ate 2 faca</strong></span>
<span style="color: #ff0000;"><strong>      se VET[CONTADORA] &gt; VET[CONTADORB] entao</strong></span>
<span style="color: #ff0000;"><strong>         AUX &lt;-VET[CONTADORB]</strong></span>
<span style="color: #ff0000;"><strong>         VET[CONTADORB] &lt;- VET[CONTADORA]</strong></span>
<span style="color: #ff0000;"><strong>         VET[CONTADORA] &lt;- AUX</strong></span>
<span style="color: #ff0000;"><strong>      fimse</strong></span>
<span style="color: #ff0000;"><strong>   fimpara</strong></span>
<span style="color: #ff0000;"><strong>fimpara
</strong></span>
<span style="color: #339966;"><strong> //Exibir o vetor ordenado</strong></span>
<span style="color: #ff0000;"><strong> escreval ("Vetor ordenado. Preparado para busca binária:")</strong></span>
<span style="color: #ff0000;"><strong> para CONTADORA de 1 ate 10 faca</strong></span>
<span style="color: #ff0000;"><strong>    escreval(VET[CONTADORA])</strong></span>
<span style="color: #ff0000;"><strong> fimpara</strong></span>
<span style="color: #ff0000;"><strong> escreval()

</strong></span><span style="color: #339966;"><strong>//Entrar com valor a pesquisar no vetor</strong></span>
<span style="color: #ff0000;"><strong> escreva ("Digite um valor para procurar no vetor:")</strong></span>
<span style="color: #ff0000;"><strong> leia (busca)

</strong></span><span style="color: #339966;"><strong>//Efetuar a pesquisa binária
</strong></span><span style="color: #ff0000;"><b>inicial &lt;- 1</b></span>
<span style="color: #ff0000;"><b>final &lt;- 10</b></span>
<span style="color: #ff0000;"><b>dado_encontrado &lt;- falso

</b></span><span style="color: #ff0000;"><b>enquanto (inicial &lt;= final) e nao dado_encontrado faca</b></span>
<span style="color: #ff0000;"><b>   meio &lt;- (inicial + final) DIV 2</b></span>
<span style="color: #ff0000;"><b>   se VET[meio] = busca entao</b></span>
<span style="color: #ff0000;"><b>      dado_encontrado &lt;- verdadeiro</b></span>
<span style="color: #ff0000;"><b>   fimse</b></span>
<span style="color: #ff0000;"><b>   se VET[meio] &gt; busca entao</b></span>
<span style="color: #ff0000;"><b>      final &lt;- meio - 1</b></span>
<span style="color: #ff0000;"><b>   senao</b></span>
<span style="color: #ff0000;"><b>      inicial &lt;- meio + 1</b></span>
<span style="color: #ff0000;"><b>   fimse</b></span>
<span style="color: #ff0000;"><b>fimenquanto

</b></span><span style="color: #339966;"><strong>//Exibir Resultados da busca</strong></span>
<span style="color: #ff0000;"><strong>se dado_encontrado = verdadeiro entao</strong></span>
<span style="color: #ff0000;"><strong>  escreva ("Dado encontrado na posição", meio)</strong></span>
<span style="color: #ff0000;"><strong>senao</strong></span>
<span style="color: #ff0000;"><strong>  escreva ("Informação não encontrada no vetor")</strong></span>
<span style="color: #ff0000;"><strong>fimse</strong></span>
<span style="color: #ff0000;"><strong>fimalgoritmo
</strong></span></pre>
<h3>Conclusão</h3>
<p>O algoritmo de pesquisa binária é eficiente porque a cada iteração, a metade do vetor é descartada como candidata, reduzindo pela metade o espaço de pesquisa. Em vez de percorrer linearmente todo o vetor, o algoritmo aproveita a ordenação do vetor para realizar buscas rápidas.</p>
<p>É importante notar que o algoritmo de pesquisa binária requer que o vetor esteja ordenado em ordem crescente ou decrescente. Caso contrário, o algoritmo não funcionará corretamente. Além disso, o desempenho do algoritmo de pesquisa binária é mais eficiente em vetores grandes, onde a diferença entre os métodos de pesquisa linear e binária se torna mais evidente.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/23-logica-de-programacao-pesquisa-binaria-em-vetores-arrays/">23 &#8211; Lógica de Programação &#8211; Pesquisa Binária em Vetores (Arrays)</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/23-logica-de-programacao-pesquisa-binaria-em-vetores-arrays/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Exercícios de Lógica de Programação &#8211; Variáveis, Operadores e Comandos de Entrada e Saída</title>
		<link>https://www.bosontreinamentos.com.br/logica-de-programacao/exercicios-de-logica-de-programacao-variaveis-operadores-e-comandos-de-entrada-e-saida/</link>
					<comments>https://www.bosontreinamentos.com.br/logica-de-programacao/exercicios-de-logica-de-programacao-variaveis-operadores-e-comandos-de-entrada-e-saida/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 20 Jan 2023 19:34:23 +0000</pubDate>
				<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Exercícios]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18741</guid>

					<description><![CDATA[<p>Exercícios de Lógica de Programação &#8211; Variáveis, Operadores e Comandos de Entrada e Saída Neste artigo trago alguns exercícios com resolução de Lógica de Programação, usando o software Portugol Studio. Os exercícios listados aqui cobrem os assuntos Variáveis e Tipos de Dados, Constantes, Operadores variados e Comandos de Entrada e Saída em lógica de programação. Os códigos de resolução dos exercícios estão no final da postagem, logo após a listagem de exercícios. Bons estudos! Exercício 1 Escreva um algoritmo que: Pergunte o nome de uma pessoa; Pergunte qual o sobrenome da pessoa; Mostre o nome completo na tela Exercício 2 Escreva um algoritmo que leia dois valores numéricos e depois mostre a diferença entre eles (o primeiro menos o segundo). Exercício 3 Crie um algoritmo que leia dois números nas variáveis numA e numB, nessa ordem, e os mostre na tela em ordem inversa, isto é, se os dados lidos forem 7 e 15, por exemplo, devem ser mostrados na ordem 15 e 7, um embaixo do outro (em linhas distintas). Exercício 4 O sistema de avaliação de determinada disciplina é composto por três provas. A primeira prova tem peso 2, a segunda tem peso 3 e a terceira tem peso 5. Elabore um algoritmo [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/exercicios-de-logica-de-programacao-variaveis-operadores-e-comandos-de-entrada-e-saida/">Exercícios de Lógica de Programação &#8211; Variáveis, Operadores e Comandos de Entrada e Saída</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Exercícios de Lógica de Programação &#8211; Variáveis, Operadores e Comandos de Entrada e Saída</h2>
<p>Neste artigo trago alguns exercícios com resolução de Lógica de Programação, usando o software Portugol Studio.</p>
<p>Os exercícios listados aqui cobrem os assuntos <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/04-logica-de-programacao-variaveis-e-tipos-de-dados/">Variáveis e Tipos de Dados</a>, Constantes, <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/06-logica-de-programacao-operadores-e-expressoes-aritmeticas/">Operadores variados</a> e <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/07-logica-de-programacao-comandos-de-entrada-e-saida-de-dados/">Comandos de Entrada e Saída</a> em lógica de programação. Os códigos de resolução dos exercícios estão no final da postagem, logo após a listagem de exercícios.</p>
<p>Bons estudos!</p>
<h3>Exercício 1</h3>
<p>Escreva um algoritmo que:</p>
<ol style="list-style-type: lower-alpha;">
<li>Pergunte o nome de uma pessoa;</li>
<li>Pergunte qual o sobrenome da pessoa;</li>
<li>Mostre o nome completo na tela</li>
</ol>
<h3>Exercício 2</h3>
<p>Escreva um algoritmo que leia dois valores numéricos e depois mostre a diferença entre eles (o primeiro menos o segundo).</p>
<h3>Exercício 3</h3>
<p>Crie um algoritmo que leia dois números nas variáveis numA e numB, nessa ordem, e os mostre na tela em ordem inversa, isto é, se os dados lidos forem 7 e 15, por exemplo, devem ser mostrados na ordem 15 e 7, um embaixo do outro (em linhas distintas).</p>
<h3>Exercício 4</h3>
<p>O sistema de avaliação de determinada disciplina é composto por três provas. A primeira prova tem peso 2, a segunda tem peso 3 e a terceira tem peso 5.</p>
<p>Elabore um algoritmo que calcule a média final de um aluno desta disciplina.</p>
<p>Dica: Neste caso você irá usar uma Média Aritmética Ponderada. Caso tenha dúvidas sobre esse tipo de cálculo, recomendo assistir a esse vídeo: <a href="https://youtu.be/11XSyHIlyXA" target="_blank" rel="noopener">Média Ponderada &#8211; Como calcular</a></p>
<h3>Exercício 5</h3>
<p>Crie um programa no qual o usuário deverá inserir os valores da altura, largura e profundidade de uma caixa d’água, em cm. No final, exiba o volume dessa caixa d’água.</p>
<p><strong>Dica: <em>Volume = Altura x Largura x Profundidade</em></strong></p>
<h3>Exercício 6</h3>
<p>Crie um programa que peça para o usuário informar os valores da base e da altura de um triângulo, em centímetros,, e então mostre na tela o valor da área desse triângulo.</p>
<p><strong>Dica: <em>Área do triângulo = Base x Altura / 2</em></strong></p>
<h3>Exercício 7</h3>
<p>Escreva um algoritmo que leia a velocidade de um veículo em km/h, e então calcule e exiba na tela a velocidade convertida em m/s (metros por segundo).</p>
<p>O algoritmo deve também informar quanto tempo irá levar uma viagem na velocidade média informada de São Paulo até o Rio de Janeiro.</p>
<p>Dicas: Para converter de km/h para m/s divida a velocidade pelo fator 3,6. Considere a distância aproximada de São Paulo até o Rio de Janeiro como sendo de 435 km.</p>
<h2>Resolução dos Exercícios de Lógica de Programação</h2>
<h3>Exercício 1</h3>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>  cadeia nome, sobrenome</strong>
<strong>  funcao inicio()</strong>
<strong>  {</strong>
<strong>    escreva("Qual o seu nome? ")</strong>
<strong>    leia(nome)</strong>
<strong>    escreva("Qual o seu sobrenome? ")</strong>
<strong>    leia(sobrenome)</strong>
<strong>    escreva("Nome completo: " + nome + " " + sobrenome)</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<h3>Exercício 2</h3>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>  inteiro num1, num2, resultado</strong>
<strong>  funcao inicio()</strong>
<strong>  {</strong>
<strong>    escreva("Digite um número inteiro:\n")</strong>
<strong>    leia(num1)</strong>
<strong>    escreva("Digite outro número inteiro:\n")</strong>
<strong>    leia(num2)</strong>
<strong>    result = num1 - num2</strong>
<strong>    escreva(num1 + " - " + num2 + " = " + resultado)</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<h3>Exercício 3</h3>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>  inteiro numA, numB</strong>
<strong>  funcao inicio()</strong>
<strong>  {</strong>
<strong>    escreva("Digite um número: ")</strong>
<strong>    leia(numA)</strong>
<strong>    escreva("Digite outro número: ")</strong>
<strong>    leia(numB)</strong>
<strong>    escreva(numB + "\n" + numA)</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<h3>Exercício 4</h3>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>  real p1, p2, p3, media</strong>
<strong>  funcao inicio()</strong>
<strong>  {</strong>
<strong>    escreva("Qual a primeira nota? ")</strong>
<strong>    leia(p1)</strong>
<strong>    escreva("Qual a segunda nota? ")</strong>
<strong>    leia(p2)</strong>
<strong>    escreva("Qual a terceira nota? ")</strong>
<strong>    leia(p3)</strong>
<strong>    media = (p1 * 2 + p2 * 3 + p3 * 5) / 10</strong>
<strong>    escreva("Média final: " + media)</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<h3>Exercício 5</h3>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>  inteiro altura, largura, profundidade, volume</strong>
<strong>  funcao inicio()</strong>
<strong>  {</strong>
<strong>    escreva("Qual a altura da caixa d´água em cm? ")</strong>
<strong>    leia(altura)</strong>
<strong>    escreva("Qual a largura da caixa d´água em cm? ")</strong>
<strong>    leia(largura)</strong>
<strong>    escreva("Qual a profundidade da caixa d´água? em cm ")</strong>
<strong>    leia(profundidade)</strong>
<strong>    volume = altura * largura * profundidade</strong>
<strong>    escreva("A caixa d´água tem capacidade de " + volume + " cm³")</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<h3>Exercício 6</h3>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>  inteiro base, altura, area</strong>
<strong>  funcao inicio()</strong>
<strong>  {</strong>
<strong>    escreva("Qual o valor da base do triângulo, em cm? ")</strong>
<strong>    leia(base)</strong>
<strong>    escreva("E qual a altura desse triângulo, em cm? ")</strong>
<strong>    leia(altura)</strong>
<strong>    area = base * altura / 2</strong>
<strong>    escreva("A área do triângulo é de " + area + " cm²")</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<h3>Exercício 7</h3>
<pre><strong>programa</strong>
<strong>{</strong>
<strong>  real velKmH, velMS, tempo</strong>
<strong>  funcao inicio()</strong>
<strong>  {</strong>
<strong>    escreva("Qual a velocidade do veículo, em km/h? ")</strong>
<strong>    leia(velKmH)</strong>
<strong>    velMS = velKmH / 3.6</strong>
<strong>    tempo = 435 / velKmH</strong>
<strong>    escreva("A velocidade do veículo é de " + velMS + "m/s\n")</strong>
<strong>    escreva("Uma viagem de São Paulo para o Rio irá levar " + tempo + "</strong><strong>horas")</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/logica-de-programacao/exercicios-de-logica-de-programacao-variaveis-operadores-e-comandos-de-entrada-e-saida/">Exercícios de Lógica de Programação &#8211; Variáveis, Operadores e Comandos de Entrada e Saída</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/logica-de-programacao/exercicios-de-logica-de-programacao-variaveis-operadores-e-comandos-de-entrada-e-saida/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
