Buscar

Repeticao_FOR

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

Prévia do material em texto

Universidade Federal de Ouro Preto
Instituto de Ciências Exatas e Biológicas
Departamento de Computação
BCC701
Programação de Computadores I
Semestre: 2020-02
Aula Prática – Estrutura de Repetição (FOR)
Pré-requisitos:
• Estar familiarizado com o conteúdo das aulas anteriores e ter realizado as tarefas correspondentes.
• Ler a seção 6.2 do livro texto da disciplina.
• Assistir os v́ıdeos e/ou aulas teóricas correspondentes.
Resumo:
• O primeiro comando em Python para implementar repetição (ou laço) apresentado foi o while, que serve
para executar um bloco de comandos enquanto uma dada condição for verdadeira.
• Com o while podemos representar qualquer laço de repetição, mas devemos nos lembrar de tomar alguns
cuidados para que tudo ocorra bem.
• Para simplificar a construção de alguns tipos de laços, e diminuir a possibilidade de ocorrência de erros,
foi disponibilizado o laço for.
• Com o laço for você pode realizar repetições baseadas em um contador, definindo: valor inicial, valor
final (exclusive) e valor de incremento, através da função range (o Python fornece outras opções, que
não utilizaremos no curso).
• Juntando o for com o range temos a seguinte sintaxe:
1 print("início do programa")
2 for x in range(0, 10, 2):
3 print(f’Dentro do laço, x = {x}’)
4 print("fim do programa")
onde:
– for e in são palavras reservadas obrigatórias, assim como o “:” no final da linha 2;
– x é uma variável dita contadora, cujos valores são controlados internamente, você não precisa iniciar
nem incrementar esta variável. Você pode dar o nome que quiser para ela, x é só um exemplo.
– range(0, 10, 2) define quais valores o x vai receber em cada iteração, começando por 0 (ińıcio),
terminando em 10, exclusive (final), e incrementando x de 2 (passo ou incremento). Você pode
definir os valores que precisar, 0, 10 e 2 são apenas exemplos. Neste caso, x vai assumir os valores:
0, 2, 4, 6 e 8, um deles para cada iteração do laço, nesta ordem.
– Caso o incremento seja 1, algo muito comum em programação, pode-se usar: range(0, 10). Neste
caso x assumiria os valores 0, 1, 2, 3, ..., e 9.
– No caso de o inicial ser 0 e o incremento ser 1, também muito comum, pode-se usar: range(10).
Neste caso x assumiria os valores 0, 1, 2, 3, ..., e 9.
• Nesta prática a intenção é reforçar seus conhecimentos em todos estes recursos e praticar sua utilização
na construção de programas que resolvam algum problema espećıfico. Se você não está familiarizado com
os itens listados acima, consulte os pré-requisitos da prática, listados no ińıcio desta página.
1
Tarefa 1: Escolhendo entre FOR e WHILE
Como vimos, o laço for foi criado para laços que podem ser controlados por um contador, definido por:
valor inicial, valor final (exclusive) e valor de incremento.
Qualquer laço for pode ser também representado por um laço while. Porém, toda vez que você for capaz
de definir os atributos de um contador, utilize o for. Isto porque com ele você não vai precisar se preocupar
com o controle da variável contadora, evitando cometer erros muito comuns neste tipo de situação, como se
esquecer de iniciar o valor antes do laço, ou incrementar o valor dentro do laço.
Veja o programa a seguir, utilizado anteriormente na prática sobre while. O programa imprime todos os
números gerados a partir da entrada fornecida pelo usuário. Por exemplo, se o valor fornecido for 5, imprime:
0, 1, 2, 3, 4, 5. O programa valida a entrada para aceitar apenas números positivos maiores que zero.
1 n = int(input("Digite um número: "))
2 i = 0 # valor inicial do contador
3 while n < 1:
4 n = int(input("Digite um número: "))
5 while i <= n: # repetição que pode ser controlada por contador
6 print(i) # imprime o contador
7 i = i + 1 # incremento do contador
Os números impressos no terminal seguem um padrão de contagem. Marcamos com comentários os recursos
necessários para fazer a contagem e a impressão do número no terminal.
Veja a seguir, uma versão do programa usando for:
1 n = int(input("Digite um número: "))
2 while n < 1:
3 n = int(input("Digite um número: "))
4 for i in range(n+1):
5 print(i) # imprime o contador
Bem mais fácil não é mesmo? Além de mais compacto, o risco de cometer um erro é bem menor. Algumas
observações importantes:
• Não precisamos inicializar a variável contadora: i = 0;
• Não precisamos nos preocupar com a condição lógica: i <= n;
• Não precisamos nos preocupar com o incremento do contador: i = i + 1;
• Fizemos tudo isso apenas definindo: range(n+1):
– Como o valor inicial é 0 e o incremento é 1, não precisamos defini-los no range.
– Somar 1 a n para definir o valor final é necessário, pois o range não inclui o valor final e, neste caso,
queremos que n seja inclúıdo.
Implemente os programas anteriores no Thonny e execute com o depurador para entender perfeitamente o
que cada um deles faz em detalhes.
2
Tarefa 2: Contador regressivo e algumas situações interessantes
Os exemplos vistos anteriormente mostram apenas situações em que o incremento é positivo. Muitas vezes
o contador precisa ser decrementado. Para isso, basta definir um passo negativo.
Por exemplo, suponha que você deseja resolver a seguinte equação:
X =
1
N
+
1
N − 2
+
1
N − 4
+
1
N − 6
+ ...
para todos os denominadores maiores do que 0.
Observe que o denominador é definido por um padrão de contagem para os termos do somatório. Assim,
seu programa pode ficar assim:
1 N = int(input("Digite N: "))
2 X = 0
3 for den in range(N, 0, −2):
4 X += 1 / den
5 print(f’X = {X}’)
O laço for foi utilizado não apenas para providenciar o somatório acumulativo de cada termo, mas também
para que sua variável contadora represente o denominador.
Implemente este programa no Thonny e execute utilizando o depurador para entender perfeitamente o que
ele faz em detalhes.
Agora observe algumas situações bastante interessantes. Veja o que acontece quando você fornece um valor
menor ou igual a 0. Percebeu que o laço for não executará nenhuma vez o bloco de comandos? Isso acontece
porque o valor inicial é menor ou igual ao valor final, com um incremento negativo, o valor final jamais seria
atingido, o que provocaria um laço infinito. O mesmo ocorreria se o incremento fosse positivo, mas o valor
inicial fosse maior ou igual ao final. Experimente estas situações depurando a execução no Thonny e uma outra
situação interessante: execute um laço for com um incremento de valor 0.
3
Tarefa 3: Dois contadores – um laço
Suponha que agora você precise fazer um cálculo parecido com o anterior, resolvendo a seguinte equação:
X =
1
N
+
2
N − 2
+
3
N − 4
+
4
N − 6
+ ...
Muitos programadores iniciantes tentam resolver este problema desta forma:
1 N = int(input("Digite N: "))
2 X = 0
3 for num in range(1, N):
4 for den in range(N, 0, −2):
5 X += num / den
6 print(f’X = {X}’)
Este programa está errado, pelos seguintes motivos:
• Temos um problema de somatório, que demanda apenas um laço, pois a tarefa é somar cada termo do
somatório de forma iterativa.
• A relação entre o numerador e o denominador não é corretamente expressa pelos dois range’s. Mesmo que
fosse posśıvel usar dois laços for para fazer este processamento, o programa provavelmente continuaria
errado. Teŕıamos que usar algo parecido com range(1, N/2), mas precisaŕıamos avaliar esta definição
com cuidado.
Existem mecanismos mais avançados em Python que poderiam até resolver o problema. Porém, com os
recursos que apresentamos até agora é perfeitamente posśıvel implementar um programa correto. Para isso,
basta escolher entre o numerador ou denominador para ser utilizado como contador do laço, e criar uma nova
variável, controlada por você, para representar o outro componente do termo do somatório.
Veja um programa que resolve o problema corretamente:
1 N = int(input("Digite N: "))
2 X = 0
3 num = 1
4 for den in range(N, 0,−2):
5 X += num / den
6 num += 1
7 print(f’X = {X}’)
Escolhemos o denominador para ser controlado pelo laço, pois ele naturalmente determinará a quantidade
de termos para o somatório. Controlamos os valores do numerador conforme ele deve acompanhar os valores
do denominador. E mais, utilizamos apenas um laço para fazer o somatório, manipulando corretamente cada
numerador e denominador que gera o termo em cada iteração.
Implemente este programa no Thonny e execute utilizando o depurador para entender perfeitamente o que
ele faz em detalhes.
4
Questão 1
A constante π pode ser computada por meio da seguinte equação:
π =
∞∑
n=0
(−1)n × 4
2× n+ 1
,
e o volume de uma esfera é dada pela equação:
V =
4
3
× π × r3.
Crie um programa que compute a constante π por meio da série indicada acima, mas considerando um
número de termos (inteiro), fornecido pelo usuário. Utilize o valor de π obtido pela série para calcular o volume
de uma esfera de raio r (inteiro), também fornecido pelo usuário. Considere que os valores fornecidos pelo
usuário são sempre válidos. Como sáıda, o programa deverá exibir o valor obtido de π e o volume da esfera,
ambos com 5 casas decimais.
Você deve implementar e usar a função realizaCalculos, que recebe o número de termos e o valor do
raio da esfera como argumentos de entrada, calula o valor de π e o volume da esfera e retorna os dois valores
calculados.
Exemplo 1:
Número de termos: 10
Raio da esfera: 5
pi = 3.04184.
Volume da esfera = 506.97327.
Exemplo 2:
Número de termos: 10000
Raio da esfera: 5
pi = 3.14149.
Volume da esfera = 523.58211.
Exemplo 3:
Número de termos: 10
Raio da esfera: 3
pi = 3.04184.
Volume da esfera = 109.50623.
5
Questão 2
A CBF te contratou para fazer um programa para calcular as estat́ısticas de um juiz em várias partidas
do Campeonato Brasileiro. No ińıcio, o programa lê o nome do juiz e a quantidade de partidas em que ele
atuou. Em seguida, ele lê um conjunto de informações quantitativas sobre cada partida: impedimentos, faltas
marcadas, cartões aplicados e o tempo de acréscimo (em minutos). Todos estes valores são inteiros, exceto o
tempo, que é real. Ao final, o programa calcula e imprime a média de cada informação, com duas casas decimais
de precisão. Implemente o programa seguindo o padrão dos exemplos a seguir. Considere que as entradas são
sempre válidas, ou seja, não é preciso fazer verificações sobre os dados de entrada.
Exemplo 1:
Informe o nome do juiz: Arnaldo César Coelho
Quantidade de partidas: 1
Partida 1:
. Impedimentos.......: 8
. Faltas.............: 13
. Cartões............: 2
. Tempo de acréscimo.: 6
Estatísticas do juiz Arnaldo César Coelho:
. Impedimentos.......: 8.00.
. Faltas.............: 13.00.
. Cartões............: 2.00.
. Tempo de acréscimo.: 6.00.
Exemplo 2:
Informe o nome do juiz: Carlos Eugênio Simon
Quantidade de partidas: 3
Partida 1:
. Impedimentos.......: 6
. Faltas.............: 13
. Cartões............: 3
. Tempo de acréscimo.: 6.7
Partida 2:
. Impedimentos.......: 8
. Faltas.............: 15
. Cartões............: 3
. Tempo de acréscimo.: 9.3
Partida 3:
. Impedimentos.......: 6
. Faltas.............: 18
. Cartões............: 7
. Tempo de acréscimo.: 15
Estatísticas do juiz Carlos Eugênio Simon:
. Impedimentos.......: 6.67.
. Faltas.............: 15.33.
. Cartões............: 4.33.
. Tempo de acréscimo.: 10.33.
6
Questão 3
Você faz parte do grêmio estudantil de qúımica da UFOP e pretende substituir o sistema de votação em
papel por um sistema de eleição eletrônica. Para isso, você deve desenvolver um programa que receba dados
de 2 candidatos (nome e número), a quantidade de eleitores e, em seguida, iniciar a votação. Se a quantidade
de eleitores for inferior a 3, você deve informar ao usuário que esta quantidade é inválida e solicitar um novo
número de eleitores. Para a votação, o programa deverá perguntar em qual candidato cada eleitor deseja votar.
Após o término da votação, seu programa deve imprimir o resultado da apuração, contento o percentual de
votos válidos e inválidos, além dos percentuais de cada candidato sobre os votos válidos, conforme os exemplos
a seguir. Note que todos os valores percentuais estão com 2 casas decimais.
Implemente e use a função realizaVotacao, que recebe como argumento de entrada a quantidade de
eleitores, e faz o seguinte:
1. Imprime a mensagem de votação iniciada;
2. Faz a leitura de todos os votos, contabilizando votos válidos, inválidos, para o candidato 1 e para o
candidato 2;
3. Imprime a mensagem de votação encerrada;
4. Retorna os 4 contadores de votos (válidos, inválidos, candidato 1 e candidato 2).
Sendo assim, o programa principal faz as entradas iniciais, chama a função para realizar a votação, recebe
os resultados da função, calcula os valores percentuais e imprime o resultado final.
Exemplo 1:
Digite o nome do candidato 1: Nióbio
Digite o número do candidato 1: 41
Digite o nome do candidato 2: Ítrio
Digite o número do candidato 2: 39
Digite a quantidade de eleitores: −1
A quantidade de eleitores é inferior a 3
Digite a quantidade de eleitores: 2
A quantidade de eleitores é inferior a 3
Digite a quantidade de eleitores: 4
## Votação Iniciada
Digite o número do candidato que você deseja votar: 41
Digite o número do candidato que você deseja votar: 41
Digite o número do candidato que você deseja votar: 41
Digite o número do candidato que você deseja votar: 50
## Votação Encerrada
Votos válidos: 75.00% (3 votos)
Votos inválidos: 25.00% (1 votos)
Votos para Nióbio: 100.00% (3 votos)
Votos para Ítrio: 0.00% (0 votos)
7
Exemplo 2:
Digite o nome do candidato 1: Silício
Digite o número do candidato 1: 14
Digite o nome do candidato 2: Bromo
Digite o número do candidato 2: 35
Digite a quantidade de eleitores: 1
A quantidade de eleitores é inferior a 3
Digite a quantidade de eleitores: 3
## Votação Iniciada
Digite o número do candidato que você deseja votar: 14
Digite o número do candidato que você deseja votar: 35
Digite o número do candidato que você deseja votar: 17
## Votação Encerrada
Votos válidos: 66.67% (2 votos)
Votos inválidos: 33.33% (1 votos)
Votos para Silício: 50.00% (1 votos)
Votos para Bromo: 50.00% (1 votos)
8

Continue navegando