Buscar

Aula 7

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 21 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 21 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 21 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

Disciplina: Informática para Engenharia
Aula 7: Estruturas de Repetição
Apresentação
Em diversas situações cotidianas, realizamos tarefas repetitivas, como realizar um
número determinado de movimentos ao nos exercitarmos, saber o total em dinheiro
ao contar uma a uma as cédulas (ou moeda) disponíveis, entre outras.
Na Programação, existem situações em que você precisa repetir uma única instrução
ou um grupo de instruções até que alguma condição seja atendida, tais como ler
todos os arquivos de um diretório, enviar e-mail a todos os funcionários etc. Essas
tarefas na Programação são tratadas por instruções em loop.
Objetivos
Examinar problemas que envolvem repetição de comandos;
Analisar o uso das estruturas de repetição de maneira a evitar a duplicação e a
redundância de códigos;
Avaliar o uso em conjunto com outras estruturas já vistas, de modo a
representar situações que envolvem a contagem e soma de valores.
Estruturas de Repetição
Vamos considerar o exemplo do cálculo de média tratado até aqui. Imagine se
você quiser lançar a nota de 3 alunos.
Bem, você pode pensar “vou executar o programa 3 vezes”, não é?
>>> print(“Informe a nota do Aluno 1”)
>>> nota1 = float(input(“Digite a nota 1: ”))
>>> nota2 = float(input(“Digite a nota 2: ”))
>>> media = (nota 1 + nota 2) / 2
>>> print(“Informe a nota do Aluno 2”)
>>> nota1 = float(input(“Digite a nota 1: ”))
>>> nota2 = float(input(“Digite a nota 2: ”))
>>> media = (nota1 + nota2) / 2
>>> print(“Informe a nota do Aluno 3”)
>>> nota1 = float(input(“Digite a nota 1: ”))
>>> nota2 = float(input(“Digite a nota 2: ”))
>>> media = (nota 1 + nota 2) / 2
 (Fonte: Doidam 10 / Shutterstock)
No entanto, o que acontece se a turma for formada por 35 alunos? Irá
“copiar e colar” o código acima mais 32 vezes? E se tiver, 40? 50?
Não parece uma boa ideia ficar “copiando e colando” (e contando!) inúmeras
vezes o código.
Uma boa estratégia seria você obter (automaticamente) o número de alunos,
e o próprio computador se encarregar de controlar a quantidade de vezes que
você tem de lançar a nota, não é? Poderíamos pensar em algo assim:
1
2
3
4
5
ENQUANTO o número de alunos for menor do que 50, FAÇA
Leia a nota 1
Leia a nota 2
Calcule a média
Escreva a média calculada
Ou seja, as ações após a linha 2 serão repetidas até que a condição (linha 1)
seja satisfeita. A esses trechos do algoritmo que são repetidos damos o nome
de laços de repetição.
Podemos observar o funcionamento dessa estrutura analisando o fluxograma
a seguir.

Atenção
Uma importante questão é que esses laços (ou loops), apesar de
poderem ser grandes e/ou indeterminados, são finitos! Após a repetição
do bloco de comandos, a condição é testada e, caso seja falsa, o
programa segue seu fluxo normal.
Repetição com Teste no Início
As estruturas de repetição com teste no início fim tem como característica a
execução de todos os comandos pertencentes ao bloco antes da verificação.
Assim, no pior caso, poderíamos nunca executar o bloco de código dentro
dessa estrutura.
Poderíamos fazer uma analogia com um restaurante fast food, onde, no início,
verificamos se temos condição ($$$) de pagar e, em caso positivo,
escolhemos o prato do menu, pedimos e comemos. O fluxograma anterior
ilustra esse tipo de estrutura.
A seguir, são apresentadas as sintaxes em pseudocódigo e Python.
Pseudocódigo
ENQUANTO (<condição>) FAÇA
bloco de comandos;
FIMENQUANTO
Python
while (<condição>):
bloco de comandos;
Observe o exemplo que trata a simples validação de uma senha digitada.
Perceba que o bloco de código responsável pela leitura de senha irá repetir-se
até que o usuário acerte a senha.
Pseudocódigo
senha ← ‘0’;
ENQUANTO (senha <> ‘123’) FAÇA
ESCREVA(‘Digite sua senha: ‘);
LEIA(senha);
FIMENQUANTO
Python
senha=‘0’
while (senha !=‘123’):
senha = input(‘Digite sua senha: ’)
Repetição com Teste no Fim
As estruturas de repetição com teste no fim têm como característica a
execução de todos os comandos pertencentes ao bloco antes da verificação.
Nesse caso, executaremos o bloco de código, no mínimo, uma vez.
Poderíamos fazer uma analogia com um restaurante à la carte, em que
escolhemos o prato do menu, pedimos, comemos e, ao final, vemos se temos
condição ($$$) de pagar!
A seguir, são apresentadas as sintaxes em pseudocódigo e Python.
Pseudocódigo
REPITA
bloco de comandos;
ATÉ (<condição>);
Python
while True:
bloco de comandos;
if (<condição>):
break;

Dica
Diferentemente do pseudocódigo e até mesmo de outras linguagens, no
Python não existe uma estrutura explícita do repita...até. A estratégia
para representar esse tipo de repetição consiste na verificação de uma
condição (if (<condição>)) no final do bloco do código do while. Caso a
condição seja satisfeita, utiliza-se o comando break para interromper o
loop.
Observe novamente o problema de validação de senha. Perceba que,
inicialmente, a estrutura não faz nenhum tipo de verificação. Assim, não é
necessário “inicializar” a variável senha com um valor qualquer (senha ← 0),
conforme observado no exemplo da estrutura anterior (teste no início).
Pseudocódigo
REPITA
ESCREVA(‘Digite sua senha: ’);
LEIA(senha);
ATÉ (senha==‘123’)
Python
while True:
senha = input(‘Digite sua senha: ’)
if (senha == ‘123’)
break;
Repetição Contável
Até agora, as estruturas apresentadas não possibilitam determinar a
quantidade de vezes que o bloco será executado. Ou eles irão repetir-se
enquanto uma condição for satisfeita ou que se repita até que a condição
seja satisfeita. No caso em que precisamos determinar o número de vezes (ou
seja, ela é contável!) em que certos comandos devem ser repetidos, a
estrutura utilizada é o para.
A seguir, são apresentadas as sintaxes em pseudocódigo e Python.
Pseudocódigo
PARA <variável> DE <valor_inicial> ATÉ <valor_final> PASSO <p> FAÇA
bloco de comandos;
FIM PARA
Python
for <variável> in (<faixa de valores>):
bloco de comandos
Observe que a sintaxe no Python é bem mais simples que em portugol. Em
pseudocódigo temos que definir explicitamente a variável de controle (x), o
início (DE 1), o fim (ATÉ 10) e o incremento (PASSO 1). De modo contrário, o
início, o fim o e incremento são reunidos em um só comando Python: o
range. O exemplo para a leitura de 10 valores numéricos do teclado é
ilustrado em pseudocódigo e Python.
Pseudocódigo
PARA x DE 1 ATÉ 10 PASSO 1 FAÇA
ESCREVA(‘Digite um número: ’)
LEIA(num)
FIM PARA
Python
for x in range(10):
num = int(input (‘Digite um número: ’)
No Python, tais faixas de valores podem ser:
Listados explicitamente
# print(x) será repetido 5 vezes, uma para cada valor
# especificado entre parênteses no comando for
>>> for x in (0,1,2,3,4):
>>> print(x)
Especificados como um intervalo com início, fim e
incremento, usando range
# Outra forma de resolver o problema anterior
# especificado entre parênteses no comando for
>>> for x in range(0,5,1):
>>> print(x)
Como podemos perceber, o comando range tem três parâmetros, dos quais
ele:
01
Determina o valor inicial. Quando omitido, início = 0;
02
Determina o valor final (obrigatório);
03
Determina o incremento (opcional). Quando omitido, incremento = 1.

Exemplo
Outra forma de usar o range no problema anterior é:
>>> for x in range(5):
>>> print(x)
Imprimir números pares até 10…
>>> for x in range(2,10,2):
>>> print(x)
Imprimir números pares até 10 de forma invertida…
>>> for x in range(10,2,-2):
>>> print(x)
 (Fonte: Marina Pousheva / Shutterstock)
Contadores e Somadores
Em muitas situações, estamos interessados em contar coisas como, por
exemplo, a quantidade de carros que passam em um pedágio, o número de
pessoas em uma fila etc. Em outros, podemos estar interessados em realizar
cálculos estatísticos, como obter a média de notas de uma turma, calcular a
velocidade média de carros trafegando em uma via em determinado instante
de tempo, entre outros.
Nesses casos, temos de declarar variáveis para se comportarem como
contadores ou acumuladores (ou somadores).Dependendo do problema,
podemos ter de utilizar estruturas condicionais para atender às regras de
negócio!
Considere o seguinte problema: você tem de desenvolver um programa que
tem por objetivo ler números digitados por um usuário. A leitura deve
encerrar quando for digitado o número 0 (zero).
>>> num = 1
>>> while (num!=0):
>>> num = int(input(‘Informe um número (0 para sair): ’))
Se quiséssemos informar a quantidade de números digitados, como
faríamos? Simples!
Devemos criar uma variável chamada cont, inicialmente com valor 0 (zero), e
a cada loop devemos incrementar a própria variável em uma unidade. O
código a seguir ilustra o processo:
>>> cont = 0
>>> num = 1
>>> while (num!=0):
>>> num = int(input(‘Informe um número (0 para sair): ’))
>>> cont = cont + 1
>>>
>>> print(cont)
Imagine agora o problema do cálculo da velocidade média de automóveis em
uma via. O usuário informaria a velocidade aferida, finalizando o cadastro com
o valor 0 (zero).
Bem, a contagem nós já sabemos fazer! Mas, para a média, além da
quantidade de carros, precisamos da soma das velocidades, correto? A
solução então seria criar outra variável que iria ‘acumular’ (somar) as
velocidades.
>>> cont = 0
>>> velocidade = 1
>>> soma = 0
>>> while (velocidade!=0):
>>> velocidade = int(input(‘Informe a velocidade (km/h): ’))
>>> cont = cont + 1
>>> soma = soma + velocidade
>>> media = soma / (cont-1)
>>> print(media)

Comentário
Vamos prestar a atenção em duas situações na penúltima linha:
primeiro, temos de desconsiderar o 0 (zero) digitado para a finalização
do programa, daí o cont-1; em segundo lugar, precisamos ter cuidado de
fazer essa operação primeiro e, depois, a divisão. Ou seja, temos de
priorizar a subtração com uso dos parênteses.
Seguindo o problema do cálculo de velocidade média, imagine que a chefia
pediu que emitisse um relatório dos carros que trafegaram acima de 100
km/h. Bem, podemos perceber que devemos separar a amostra em dois
subconjuntos distintos. Em outras palavras, devemos contar os carros e
acumular a respectiva velocidade caso ela seja superior ou igual a 100 km/h.
>>> cont, velocidade, soma = 0,1,0
>>> while (velocidade!=0):
>>> velocidade = int(input(‘Informe a velocidade (km/h): ’))
>>> if (velocidade>=100):
>>> cont = cont + 1
>>> soma = soma + velocidade
>>> media = soma / cont
>>> print(media)
 (Fonte: Kichigin / Shutterstock)
Como, nesse exemplo, a variável cont somente irá incrementar se a
velocidade for maior do que 0 (zero), não precisamos daquele recurso (cont-
1) utilizado anteriormente. Vimos assim que podemos mesclar as estruturas
repetitivas com as condicionais, e vice-versa.
As aplicações de contadores e somadores não se limitam ao uso de estruturas
de repetição com verificação no início e/ou fim, ou seja, o while.

Exemplo
Por exemplo, considere que determinado problema necessite calcular 
, em que é informado pelo usuário. Caso o usuário forneça
um valor negativo, o programa deve apresentar a mensagem: “Digite
apenas valores maiores ou iguais a zero”.
O código em Python resultante seria:
>>> sum=0
>>> n = int(input(‘Informe um valor para N: ’))
=∑Nj j1 N
>>> for j in range(0,n):
>>> sum=sum+j
Considere agora o problema para calcular a integral definida de determinada
função. O usuário deve fornecer os limites de integração da função
considerada. Divida o intervalo em 10.000 partições e faça um somatório,
avaliando a função e somando todos os resultados.

Exemplo
Por exemplo, calcule a integral da função no intervalo de 0 a
1, cujo resultado é 1. A função deve ser definida de forma explícita no
código, e os intervalos devem ser fornecidos pelo usuário. O programa
deve dividir o intervalo em 10.000 partes e atribuir a o valor do limite
inferior, ou seja, 0.
A função deve ser avaliada para x = 0 e, depois disso, para cada uma das
10.000 partições feitas. Todas as vezes que x for avaliado, o resultado deve
ser armazenado em um somatório. Esse somatório é o resultado da integral.
>>> limInf=int(input('Informe o limite inferior: '))
>>> limSup=int(input('Informe o limite superior: '))
>>> particoes=(limSup-limInf) / 10000;
>>> integral=0.0
>>> x,y=limInf,0
>>> while (x<limSup):
f (x) = 2x
x
>>> y=2*x
>>> integral+=particoes*y;
>>> x+=particoes
>>> print(integral)
Atividade
1. Observe os trechos dos algoritmos a seguir:
ALGORITMO questao1a
x,y,z: inteiro;
INÍCIO
x ← 10;
z ← 0;
ESCREVA(‘Informe um número: ’)
LEIA(y);
ENQUANTO (z<y) FAÇA
z ← z + 1;
x ← x + y;
FIM ENQUANTO
ESCREVA(x)
FIM ALGORITMO.
ALGORITMO questao1b
x,y,z: inteiro;
INÍCIO
x ← 10;
z ← 0;
ESCREVA(‘Informe um número: ’)
LEIA(y);
REPITA
z ← z + 1;
x ← x + y;
ATÉ (z>y);
ESCREVA(x)
FIM ALGORITMO.
Em um primeiro momento, foi digitado o número 5 para a variável y em
ambos programas (questao1a e questao1b). Na segunda execução, o
valor 0 foi digitado para a variável y. Quais serão as saídas da primeira e
da segunda execução?
 a) 35 e 15; 10 e 10.
 b) 35 e 15; 10 e loop infinito.
 c) loop infinito em ambos; 10 e 10.
 d) 35 e loop infinito; 5 e 5.
 e) 25 e 10; loop infinito.
2. Implemente os seguintes algoritmos em Python:
ALGORITMO questao2a
ALGORITMO questao1a;
x,y,z: inteiro;
INÍCIO
x ← 10;
z ← 0;
ESCREVA(‘Informe um número: ’)
LEIA(y);
ENQUANTO (z<y) FAÇA
z ← z + 1;
x ← x + y;
FIM ENQUANTO
ESCREVA(x)
FIM ALGORITMO.
ALGORITMO questao2b
ALGORITMO questao1b;
x,y,z: inteiro;
INÍCIO
x ← 10;
z ← 0;
ESCREVA(‘Informe um número: ’)
LEIA(y);
REPITA
z ← z + 1;
x ← x + y;
ATÉ (z>y);
ESCREVA(x)
FIM ALGORITMO.
3. Dado um número inteiro positivo informado pelo usuário, desenvolva
um programa em Python que calcule seu fatorial. Dica: o cálculo só deve
ser realizado se o número for válido. Utilize a estrutura for.
Referências
GRUS, J. Data science from scratch: first principles with Python. Beijing: O’Reilly,
2015.
MENEZES, N.N.C. Introdução à programação com Python: algoritmos e lógica de
programação para iniciantes. 1 ed. São Paulo: Novatec, 2017.
MUELLER, J.P. Começando a programar em Python para leigos. Alta Books,
2016.
PERKOVIC, L. Introduction to computing using Python: an application
development focus. 2 ed. [s.l.] Wiley Publishing, 2015.
Próximos Passos
Códigos desenvolvidos, de maneira a aplicar as técnicas de modularização de
programas;
Recursos avançados de desenvolvimento de programas com uso de estruturas
condicionais e repetitivas;
Tarefa de refinamentos sucessivos no código, de maneira a obter códigos de
maior qualidade.
Explore mais
Assista aos vídeos:
23 - Python - Loop While (Estrutura de Repetição) e instrução break
<https://www.youtube.com/watch?v=oUXUVVP2_6E> ;
24 - Python - Loop FOR - Estruturas de Repetição - Função RANGE()
<https://www.youtube.com/watch?v=55rOjj6kEck> .

Continue navegando