Buscar

Aplicações utilizando comandos iterativos aninhados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PENSAMENTO 
COMPUTACIONAL
Fabricio Machado da Silva 
Aplicações utilizando 
comandos iterativos 
aninhados (nível fácil de 
aninhamento — Python)
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Descrever a utilização dos comandos iterativos for e while em
estruturas aninhadas em problemas de nível inicial.
 � Desenvolver testes de mesa em programas que utilizem comandos
iterativos aninhados.
 � Resolver problemas computacionais utilizando comandos iterativos
aninhados.
Introdução
Muitas vezes, durante a construção de um programa, nos deparamos com 
uma situação em que precisamos repetir um bloco de código mais de 
uma vez. Ainda, as estruturas precisam ser executadas em um formato 
hierárquico, em que um laço de repetição é executado como parte do 
bloco de código de outra repetição. O conceito que define que uma 
estrutura está contida no escopo de outra é denominado aninhamento.
No desenvolvimento de programas, o aninhamento pode ser utilizado 
em casos em que se faz necessário repetir condições de teste sucessiva-
mente; para isso, é necessário fazer uso dos comandos iterativos for e
while. A utilização de blocos aninhados utilizando comandos iterativos
é muito usual no desenvolvimento de programas, como na manipulação 
de matrizes, nos mecanismos de busca, nos algoritmos de ordenação e 
nos cálculos matemáticos complexos.
Neste capítulo, você vai verificar os comandos iterativos for e while 
aninhados, aplicados à resolução de problemas computacionais, e vai 
conferir diferentes formas de uso desses comandos na linguagem de 
programação Python. Por meio do teste de mesa, você vai poder testar a 
lógica da construção dos comandos iterativos aninhados, para determinar 
se o seu funcionamento está adequado. Por fim, você vai aprender na 
prática a resolver problemas computacionais por meio desses comandos. 
Comandos iterativos for e while
Existem situações em que queremos que a própria estrutura de repetição (loop) 
seja repetida um número específico de vezes, conforme expõe Wazlawick 
(2017). Moreira de Matos (2018, documento on-line) faz uma analogia do 
uso de loops aninhados com o nosso calendário, conforme descrito abaixo.
 � O ano tem 12 meses, sendo que todo ano começa em janeiro, depois 
vêm os meses fevereiro, março, e assim por diante, até chegar dezembro. 
Depois de cada ano completado, tudo recomeça. Isso é um looping. 
 � Cada mês do ano contém os dias do mês, iniciando no dia 1, que é 
seguido pelos dias 2, 3, etc., até o último dia do mês (que é variável). 
Mas, quando acaba o mês, inicia-se tudo de novo. Dessa forma, ocorre 
um novo looping.
 � Também podemos considerar que dentro do dia temos as horas, que 
também se repetem a cada dia. E, dentro de cada hora, há o loop dos 
minutos. E, dentro de cada minuto, há o loop dos segundos. Assim, 
podemos considerar que vivemos em loops aninhados. 
Vamos colocar esse conceito em prática utilizando a linguagem Python. Ao 
empregarmos uma instrução while, podemos fazer um bloco de código ser 
repetido diversas vezes, gerando um loop controlado, até que uma determinada 
condição seja verdadeira. A instrução while é composta por:
 � uma palavra-chave while;
 � uma expressão (condição de teste);
 � dois-pontos.
Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)2
while <expressão>:
 <bloco de código>
Em Python, podemos criar estruturas while combinadas, gerando es-
truturas aninhadas, em que o resultado de um bloco while vai influenciar 
no resultado de outro, possibilitando obter resultados interessantes, como a 
repetição de um incremento de duas variáveis, conforme leciona Menezes 
(2014). A sintaxe de uma condição de loop while aninhado é:
while <expressão>:
 while <expressão>:
 <bloco de código>
 <bloco de código>
Para ilustrarmos isso, vamos analisar o código mostrado na Figura 1, que 
usa comandos while aninhados para percorrer uma estrutura de dados que 
pode ter sido obtida de um serviço da internet.
Figura 1. Exemplo de comandos while aninhados em Python.
3Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)
No código da Figura 1, há uma estrutura de dados de dicionário contendo a 
informação das refeições de dois animais (linha 1). Podemos utilizar comandos 
while aninhados para percorrer os dois níveis dessa estrutura: o primeiro 
nível é a chave que indica o nome do cachorro (linha 4), e o segundo nível é 
o dos elementos que compõem a refeição do animal (linha 8). 
O comando while, por si só, é muito útil em diversos casos, como quando 
existe a necessidade de implementação de algoritmos de pesquisa binária, 
devido à possibilidade de criar comportamento iterativo no código. No entanto, 
devido à natureza das estruturas de dados utilizadas em Python, torna-se mais 
compreensível a utilização da instrução for. Na estrutura de código, uma 
instrução for é composta por:
 � uma palavra-chave for;
 � uma variável;
 � uma palavra-chave in;
 � um objeto iterável de tamanho finito, contendo vários elementos; 
 � dois-pontos.
for <variável> in <objeto iterável>:
 <bloco de código>
Um objeto iterável pode ser uma lista ou um dicionário. Para simular o comportamento 
similar ao while utilizando uma variável contadora, podemos utilizar a função range, 
que gera uma lista com os números de zero até o valor informado como parâmetro. 
for i in range ([valor inicial], valor final, [passo]):
 <bloco de código>
Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)4
Observe que o bloco do comando for se inicia na próxima linha, em 
um bloco de código indentado. Como a estrutura for é um comando que 
pode ter outros comandos subordinados a ele, então, podemos implementar 
perfeitamente outro comando for dentro de seu bloco de execução, conforme 
leciona Wazlawick (2017). A sintaxe de dois comandos for aninhados é:
for <variável> in <objeto iterável>:
 <bloco de código>
 for <variável> in <objeto iterável>:
 <bloco de código>
 <bloco de código>
A Figura 2 ilustra a implementação do mesmo programa anterior (Fi-
gura 1), mas utilizando o comando iterativo for. Perceba que, por percorrer 
diretamente os objetos iteráveis, esse programa utiliza menos variáveis e é 
construído com menos linhas.
Figura 2. Exemplo de comandos for aninhados em Python.
Ambos os comandos iterativos, for e while, podem ser construídos 
em estruturas iterativas aninhadas em conjunto, ou seja, um for pode estar 
contido em um while e vice-versa. Veja na Figura 3 um programa que, uti-
lizando loops while e for, imprime a cada linha uma nova letra da palavra 
informada (linha 1), até apresentá-la por completo. 
5Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)
Figura 3. Exemplo de comandos while e for aninhados 
em Python.
Em Python, os comandos iterativos for são tradicionalmente usados 
quando você tem um bloco de código que deseja repetir um número fixo de 
vezes. A instrução Python for faz a iteração sobre os componentes de uma 
sequência em ordem, executando o bloco a cada vez. Em contraste, a instrução 
com o loop while é usada quando uma condição precisa ser verificada em 
cada iteração, ou para repetir um bloco de código, inclusive eternamente. 
Teste de mesa em algoritmos com 
estruturas iterativas
Ao projetarmos um algoritmo para solucionar um determinado problema, 
geralmente realizamos um exercício mental, com um passo a passo do que 
será executado pelo programa. Entretanto, muitas vezes nos deparamos com 
um programa que apresenta comportamentos diferentes do que foi projetado 
e que é dado como a solução correta. Por isso, é importante sempre testarmos 
o algoritmo antes de implementar e submeter ao compilador, simulando a sua 
Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)6
execução para verificar antecipadamentepossíveis erros lógicos. Para tanto, 
existe uma prática utilizada com sucesso na área de programação, chamada de 
teste de mesa, que consiste na execução do algoritmo em um passo a passo, 
com o apoio de papel e caneta.
Existem alguns softwares disponíveis no mercado que efetuam a interpretação de 
algoritmos representados em pseudocódigos ou em fluxogramas. Seu objetivo é 
realizar um teste similar ao teste de mesa.
Para simularmos a aplicação do teste de mesa em estruturas com comandos 
iterativos aninhados, vamos supor um algoritmo que cria um array bidimen-
sional, que é um array com duas dimensões acessadas por linhas e colunas, 
caracterizando-se por uma matriz, conforme mostra a Figura 4. 
Figura 4. Array bidimensional.
Fonte: Adaptada de Pereira et al. ([201-?], documento on-line).
7Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)
A Figura 4 apresenta uma matriz com três colunas e três linhas. É im-
portante entender que cada célula dessa matriz corresponde a um elemento, 
que é referenciado por dois índices diferentes: um que corresponde à linha, e 
outro, à coluna. Assim, [1,1] refere-se ao elemento da linha 1 com a coluna 1, 
por exemplo. Cabe lembrar que, em Python, a primeira posição de um vetor 
ou lista é enumerada com o índice 0. Então, diferentemente da tabela acima, 
ao executarmos nosso algoritmo em Python para o preenchimento de uma 
matriz que é uma lista bidimensional, o programa vai iniciar no índice M [0,0], 
indicando a primeira linha e a primeira coluna. 
Para nosso teste de mesa, vamos considerar que o preenchimento de uma 
matriz pode ser executado da esquerda para a direita e de cima para baixo, 
ou seja, começando na posição [0,0] e seguindo para a posição [0,1], e assim 
por adiante. Vamos supor que tenhamos construído um algoritmo em Python 
para preencher uma matriz 3 × 3, conforme mostra a Figura 5.
Figura 5. Algoritmo de implementação de uma matriz 3 × 3. 
Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)8
Para simularmos o teste de mesa, temos uma variável com valor inicial igual 
a 10 e uma variável para guardar o incremento igual a 5. O algoritmo inicia 
o for mais externo e, para cada execução desse for, executa o for mais 
interno, em que o valor é armazenado na posição da matriz e é incrementado 
em 5, com a variável de incremento. Realizando o teste de mesa (Quadro 1), 
obtemos:
Posição 0,0 = 10
Posição 0,1 = 15
Posição 0,2 = 20
Posição 1,0 = 25
Posição 1,1 = 30
Posição 1,2 = 35
Posição 2,0 = 40
Posição 2,1 = 45
Posição 2,2 = 50
Iteração
Linha 
de 1 
até 3
Coluna 
de 1 
até 3
Valor_
inicial
M [linha, 
coluna] = 
Valor_inicial
Valor_inicial 
= valor inicial 
+ incremento
1 0 0 10 M [0,0] =10 10 + 5 = 15
2 0 1 15 M [0,1] = 15 15 + 5 = 20
3 0 2 20 M [0,2] = 20 20 + 5 = 25
4 1 0 25 M [1,0] = 25 25 + 5 = 30
5 1 1 30 M [1,1] = 30 30 + 5 = 35
6 1 2 35 M [1,2] = 35 35 + 5 = 40
7 2 0 40 M [2,0] = 40 40 + 5 = 45
8 2 1 45 M [2,1] = 45 45 + 5 = 50
9 2 2 50 M [2,2] = 50 50 + 5 = 55
Quadro 1. Exemplo de teste de mesa
9Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)
Dessa forma, para preencher a matriz, executamos ao todo nove iterações, 
como pode ser visto na execução do programa, mostrada na Figura 6.
Figura 6. Algoritmo de implementação de matriz 3 × 3 e a saída do programa. 
Como é possível perceber, a utilização do teste de mesa possibilitou enten-
der, passo a passo, exatamente como o compilador vai processar cada linha 
de comando do código. Assim, foi possível verificar que o código não deverá 
apresentar comportamento diferente do esperado. Iterar, na computação, 
significa repetir uma instrução ou um conjunto de instruções até que uma 
condição não seja mais aceita. Ou seja, trata-se de executar a série de instruções 
por uma determinada quantidade de vezes, ou até mesmo infinitamente, se a 
cláusula assim permitir.
Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)10
Problemas computacionais solucionados por 
comandos iterativos aninhados
A condição de estruturar blocos aninhados, conforme citado anteriormente, é 
muito usual em cálculos matemáticos. Observe a Figura 7, que ilustra um código 
que implementa comandos while e for aninhados para o cálculo de fatorial. 
O fatorial de um número (n) natural é calculado pela multiplicação desse n 
por todos os seus antecessores, até chegar ao número 1, sendo definido por:
n! = n.(n – 1).(n – 2).(n – 3)!
Por exemplo: 
Fatorial de 0: 0! = 1
Fatorial de 1: 1! = 1
Fatorial de 2: 2! = 2.1 = 2
Fatorial de 3: 3! = 3.2.1 = 6
E assim por diante.
Figura 7. Cálculo de fatorial de 10 números. 
11Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)
O primeiro while itera sobre os números que queremos calcular, ou 
seja, os números de 0 a 10, enquanto o for interno faz a decomposição e a 
multiplicação dos valores, gerando o resultado do fatorial do número.
Vamos acompanhar outro exemplo (Figura 8) com vários for aninhados, 
criando uma espécie de simulador de relógio digital, em que, a cada instante, 
será impressa na tela a informação de hora (variando de 0 a 23) e minuto 
(variando de 0 a 59). Nesse caso, serão usadas duas estruturas for aninhadas, 
em que o for mais externo, o primeiro, realiza a contagem das horas, e o 
segundo, que é o mais interno, conta os minutos, o que é repetido várias vezes. 
Figura 8. Exemplo de comandos for aninhados para o cálculo das horas. 
Observe que esse é o princípio do funcionamento de um relógio, que im-
prime todas as horas e todos os minutos em poucos instantes. Você pode ainda 
adicionar um for e incluir os segundos no seu relógio. 
Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)12
Por último, a Figura 9 ilustra a implementação de um comando for ani-
nhado dentro de outro, para o cálculo da média de notas de uma turma de 
alunos em variadas disciplinas. 
Figura 9. Exemplo de dois comandos iterativos for aninhados, para o cálculo da média 
dos alunos.
13Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)
O programa da Figura 9 é um programa típico de entrada de dados. Ele usa 
um for para percorrer a lista de alunos e, depois, utiliza o for interno para 
perguntar o valor de todas as notas do aluno, para calcular a média. Dessa 
forma, tem-se, ao final, um conjunto de médias por aluno, que pode ser usado 
para calcular a média da turma.
A página Como Pensar Como um Cientista da Computação, que traz a tradução do 
livro How to Think Like a Computer Scientist: Interactive Version, de Brad Miller e David 
Ranum, aborda alguns aspectos sobre os tipos de iteração que existem, especialmente 
em relação à sua duração. Segundo a página, o comando for realiza a iteração em 
determinadas sequências de valores, como uma lista de nomes ou de números que 
utiliza o comando range. Ao utilizar o for, sabe-se quantas vezes será possível iterar 
sobre o conjunto de valores, já que é criado um laço do tipo iteração definida (definite 
iteration), com um término programado. Já no caso do comando while, o término 
do laço depende de uma condição falsa, que não se sabe exatamente quando vai 
ocorrer; trata-se, portanto, de uma iteração indefinida (indefinite iteration). Nesse caso, 
eventualmente, a condição de controle da iteração vai falhar, e a iteração vai parar — 
a não ser que se trate de um laço infinito, o que representa um problema, conforme 
descrito na página. Veja no link a seguir o conteúdo abordado de forma mais completa. 
https://qrgo.page.link/vVtcF
Estruturas aninhadas são ótimas para reaproveitamento de código, pois, 
em vez de se criar uma única estrutura com muitos membros, que nem sempre 
serão acessados, várias estruturas podem ser criadas e reutilizadas em diver-
sas partes do seu projeto. Portanto, as estruturas aninhadas são um recurso 
muitoútil para que você consiga resolver o seu problema de forma ainda mais 
eficiente e modularizada.
Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)14
MENEZES, N. N. C. Introdução à programação com Python: algoritmos e lógica de pro-
gramação para iniciantes. 2. ed. São Paulo: Novatec, 2014. 328 p.
MOREIRA DE MATOS, F. J. Loops Aninhados (Laço dentro de laço). Python Progressivo, 
Fortaleza, maio 2018. Disponível em: https://www.pythonprogressivo.net/2018/05/
Loopings-Aninhados-Laco-dentro-Lado.html. Acesso em: 28 ago. 2019.
PEREIRA, F. V. Y. R. et al. Comandos de Repetição (Laços ou Loops). ITAbits, São José dos 
Campos, [201-?]. Disponível em: https://sites.google.com/site/itabits/treinamento/
introducao-a-programacao-em-c/comandos-de-repeticao. Acesso em: 28 ago. 2019.
WAZLAWICK, R. S. Introdução a algoritmos e programação com Python: uma abordagem 
dirigida por testes. Rio de Janeiro: Elsevier, 2017. 232 p.
Leituras recomendadas
BANIN, S. L. Python 3: conceitos e aplicações: uma abordagem didática. São Paulo: 
Érica, 2018, 264 p.
BARRY, P. Use a cabeça! Python. 2. ed. Rio de Janeiro: Alta Books, 2018. 616 p. (Série Use 
a Cabeça/Head First).
BORGES, L. E. Python para desenvolvedores. 2. ed. Rio de Janeiro: Edição do Autor, 2010. 
360 p. Disponível em: https://ark4n.wordpress.com/python/. Acesso em: 24 jul. 2019.
DOWNEY, A. B. Pense em Python: pense como um cientista da computação. São Paulo: 
Novatec, 2016. 312 p. Disponível em: https://penseallen.github.io/PensePython2e/. 
Acesso em: 23 jun. 2019.
MATTHES, E. Curso intensivo de Python: uma introdução prática e baseada em projetos 
à programação. São Paulo: Novatec, 2016. 656 p.
PERKOVIC, L. Introdução à computação usando Python: um foco no desenvolvimento 
de aplicações. Rio de Janeiro: LTC, 2016. 516 p.
RAMALHO, L. Python fluente: programação clara, concisa e eficaz. São Paulo: Novatec, 
2015. 800 p.
SLATKIN, B. Python eficaz: 59 maneiras de programar melhor em Python. São Paulo: 
Novatec, 2016. 296 p.
15Aplicações utilizando comandos iterativos aninhados (nível fácil de aninhamento — Python)

Continue navegando