Buscar

AP_6 1-Estrutura_de_Repeticao_WHILE

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: 2021-01
Aula Prática – Estrutura de Repetição: WHILE
Pré-requisitos:
• Estar familiarizado com o conteúdo das aulas anteriores e ter realizado as tarefas correspondentes.
• Ler a introdução do caṕıtulo 6 e a seção 6.1 do livro texto da disciplina.
• Assistir os v́ıdeos e/ou aulas teóricas correspondentes.
Resumo:
• O conceito de repetição ou laço (em inglês, loop) é usado para realizar tarefas de forma repetitiva, ou
seja, executar uma série de comandos um determinado número de vezes ou enquanto uma dada condição
for verdadeira.
• O primeiro recurso que veremos em Python para implementar laços é o while, que serve para realizar um
conjunto de tarefas enquanto uma dada condição for verdadeira. while é um termo do inglês que significa
enquanto.
• Como mostrado abaixo, a sintaxe do comando while envolve a definição de uma condição que, en-
quanto verdadeira, determinará a repetição e execução do bloco de comandos (no exemplo, composto por
print(x) e x+=1).
1 print("início do programa")
2 x = 0
3 while x < 10:
4 print(f’Dentro do laço, x = {x}’)
5 x += 1
6 print("fim do programa")
• É importante ter muito cuidado na definição da condição do while e na manipulação dos valores que
influenciam esta condição.
– Quando a condição resulta inicialmente em True e o bloco de comandos não tem recursos para alterar
esta condição, o programa fica em laço infinito, ou seja, nunca termina sua execução, fica repetindo
o bloco de comandos infinitamente.
– Por outro lado, quando a condição resulta inicialmente em False e nenhum comando anterior ao laço
tem condição de alterar esta condição em execuções diferentes do programa, o bloco de comandos
nunca será executado.
• O while será importante para resolver uma série de problemas em programação. Durante as práticas
encontraremos problemas de diferentes tipos: teste de validade da entrada, múltiplas execuções dentro
do mesmo programa, contador e somatório, uso de flag, até problemas de séries mais simples.
• 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: Validação de Entrada
Em muitos programas é solicitado que o usuário seja forçado a fornecer uma entrada válida. Nestes casos,
o algoritmo não se trata apenas de validar, mas de continuar solicitando um valor enquanto ele for inválido.
Conforme o algoritmo a seguir:
1 ...
2 x = entrada de um valor
3 enquanto x é inválido:
4 informe que o valor é inválido e que solicitará outro
5 x = entrada de um valor
6 ...
Observe que, neste caso, é necessário utilizar o laço while. Primeiro pede-se o valor, depois o laço faz a
validação. A condição deve resultar em verdadeiro caso o valor de x seja inválido. O bloco de comandos do
while apenas informa que o valor é inválido e solicita um novo valor. A mensagem informando valor inválido
é opcional.
Com base nisso, veja o exemplo de um programa que 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
3 while n < 1:
4 n = int(input("Digite um número: "))
5 while i <= n:
6 print(i)
7 i = i + 1
Note que o programa só para de solicitar um número se o usuário digitar um valor maior que zero, linhas
1 a 4, seguindo o algoritmo anterior, mas sem mensagem de erro. Depois, linhas 5 a 7, é apenas realizado o
processamento do programa, que consiste em imprimir todos os números no terminal. Observe que, para isso,
é necessário utilizar outro laço while. Não confunda, ou misture, as coisas, um laço foi para fazer a validação,
e o outro para fazer o processamento. Eles são sequenciais, um após o outro, pois o processamento só será
realizado após o valor válido ser lido adequadamente.
2
Tarefa 2: Estado Civil
Faça um programa que leia e valide as seguintes informações:
1. Nome: maior que 3 caracteres (use a função len(texto) para obter o número de caracteres do texto);
2. Idade: entre 0 e 150;
3. Salário: maior que zero;
4. Sexo: f ou m;
5. Estado Civil: s, c, v, d;
O algoritmo recebe como entrada 5 dados: nome, idade, salário, sexo e estado civil. Você precisa criar
5 variáveis para salvar os dados informados pelo usuário. A questão possui várias validações de dados, por
exemplo, nome com mais de 3 caracteres. O while pode ser utilizado para validar cada um dos 5 dados.
O código irá encerrar o laço de repetição (while) somente quando a condição para cada um dos dados for
satisfeita. No caso da idade, temos que ela não pode ser negativa e nem maior do que 150 anos. Se isso
acontecer, o algoritmo solicita os dados novamente e encerra apenas quando a condição for satisfeita (linhas 5
a 7).
1 nome = solicite o nome da pessoa
2 enquanto nome menor ou igual a três
3 nome = solicite o nome novamente
4
5 idade = solicite a idade da pessoa
6 enquanto idade menor ou igual zero ou superior a 150 anos:
7 idade = solicite a idade novamente
8
9 salario = solicite o salario da pessoa
10 enquanto salario negativo
11 salario = solicite o salário novamente
12
13 sexo = solicite o sexo da pessoa
14 enquanto sexo diferente de masculino ou feminino
15 sexo = solicite o sexo novamente
16
17 civil = solicite o estado civil da pessoa
18 enquanto estado civil diferente de solteiro, divorciado, casado e viúvo:
19 civil = solicite o estado civil novamente
Veja que cada informação é validada individualmente, o que determina a utilização de 5 (cinco) laços.
3
O programa que implementa este algoritmo em python é apresentado a seguir.
1 nome = input("Qual seu nome [mínimo 4 caracteres]: ")
2 while len(nome) <= 3:
3 nome = input("Seu nome deve ter mais que 3 caracteres: ")
4
5 idade = int(input("Sua idade: "))
6 while idade < 0 or idade > 150:
7 idade = int(input("Voce deve ter entre 0 e 150 anos: "))
8
9 salario = float(input("Salário: "))
10 while salario < 0:
11 salario = float(input("A coisa ta difícil, mas não tem salário
negativo: "))
12
13 sexo = input("Sexo (’f’ para feminino ou ’m’ para masculino): ")
14 while sexo != ’f’ and sexo != ’m’:
15 sexo = input("Biologicamente, você deve ser ’f’ ou ’m’: ")
16
17 civil = input("Estado civil (s, c, v ou d): ")
18 while civil != ’s’ and civil != ’c’ and civil != ’v’ and civil != ’d’:
19 civil = input("Estado civil deve ser s, c, v ou d: ")
Observe que situações que envolvem mais de uma condição são constrúıdas com expressões relacionais
ligadas pelos operadores lógicos or ou and. Como por exemplo: do algoritmo idade menor ou igual zero
ou superior a 150 anos foi implementado pela condição idade < 0 or idade > 150, ou seja, temos duas
expressões relacionais completas, idade < 0 e idade > 150 ligadas, é comum cometer o erro de tentar construir
a condição de forma incompleta, idade < 0 or > 150, que é um erro de sintaxe.
O mesmo acontece na validação do estado civil, que no caso é composto por quatro condições ligadas:
civil != ’s’, civil != ’c’, civil != ’v’ e civil != ’d’. Mais uma vez tivemos que construir expressões
relacionais completas, para não gerar erro de sintaxe. Um erro muito comum é também confundir a comparação
com uma string, fazendo civil != s ao invés de civil != ’s’. Sem as aspas na primeira expressão compara-
se duas variáveis, com as aspas na segunda expressão compara-se a variável civil com o valor textual ’s’, que
é o que realmente desejamos fazer.
4
Questão 1
Uma indústriade tubos de aço possui uma máquina para cortar tubos em sua linha de produção. A
máquina de corte será controlada pelo seu programa, que verifica se os comprimentos dos tubos cortados estão
dentro de uma determinada margem de erro, em relação ao comprimento desejado. Os tubos com comprimento
inadequado são rejeitados. No ińıcio da operação da máquina, são especificados o comprimento desejado para
os tubos (número real), a margem de erro aceitável (número real) e a quantidade de tubos demandada (número
inteiro). Para cada tubo cortado, seu comprimento é fornecido como entrada no programa, que avalia se ele
está dentro da margem de erro aceitável, rejeitando ou aceitando o mesmo. A operação da máquina deve
parar quando tiver sido obtido o número de tubos demandados, com comprimentos dentro da margem de erro
especificada. Ao final da operação da máquina, o programa imprime o total de tubos cortados e o número de
tubos rejeitados, tal como mostrado no exemplo de execução do programa, a seguir.
Para avaliar se o tubo está na margem de erro, você deve implementar e usar a função avaliaTubo, que
recebe como entradas o comprimento do tubo, o comprimento de corte desejado e a margem de erro aceitável,
ela faz a verificação e retorna True caso o tubo seja aceito e False caso ele seja rejeitado.
Exemplo 1:
Comprimento de corte dos tubos: 10
Margem de erro aceitável: 0.2
Quantidade de tubos demandada: 3
Comprimento do tubo cortado: 9.7
Acima da margem de erro, tubo rejeitado
Comprimento do tubo cortado: 9.9
Comprimento do tubo cortado: 10.3
Acima da margem de erro, tubo rejeitado
Comprimento do tubo cortado: 10
Comprimento do tubo cortado: 10.2
Fim da produção, demanda atendida.
Total de tubos cortados: 5
Total de tubos rejeitados: 2
Exemplo 2:
Comprimento de corte dos tubos: 25
Margem de erro aceitável: 3
Quantidade de tubos demandada: 3
Comprimento do tubo cortado: 24
Comprimento do tubo cortado: 28
Comprimento do tubo cortado: 25.8
Fim da produção, demanda atendida.
Total de tubos cortados: 3
Total de tubos rejeitados: 0
5
Questão 2
Você foi contratado por uma empresa qúımica que precisa resolver algumas fórmulas matemáticas para
desenvolver produtos qúımicos. Você foi o escolhido para encontrar o fatorial de um número. Calcular o
fatorial de um número só faz sentido quando estamos trabalhando com números naturais. Essa operação é
bastante comum na análise combinatória, facilitando o cálculo de arranjos, permutações, combinações e demais
problemas envolvendo contagem. O fatorial é representado pelo śımbolo “!”. Definimos como n! (n fatorial) a
multiplicação sucessiva de n por todos os seus antecessores até chegar em 1. A equação do fatorial pode ser
definida como: n! = n × (n − 1) × (n − 2) × ... × 3 × 2 × 1. Observe que o número definido é sempre inteiro,
mas, o programa “força” a entrada de um número maior do que 0 (zero).
Para resolver este problema você deve implementar e usar a função Fatorial, que recebe como argumento
o valor de n, calcula e retorna o valor de n!.
Exemplos de execução a seguir.
Exemplo 1:
Informe o número que deseja calcular o Fatorial: −2
Número inválido, defina outro: 4
O Fatorial de 4 é: 24
Exemplo 2:
Informe o número que deseja calcular o Fatorial: 0
Número inválido, defina outro: 5
O Fatorial de 5 é: 120
Exemplo 3:
Informe o número que deseja calcular o Fatorial: −5
Número inválido, defina outro: −2
Número inválido, defina outro: 0
Número inválido, defina outro: 6
O Fatorial de 6 é: 720
Exemplo 4:
Informe o número que deseja calcular o Fatorial: 7
O Fatorial de 7 é: 5040
Exemplo 5:
Informe o número que deseja calcular o Fatorial: 1
O Fatorial de 1 é: 1
6
Questão 3
Você empresta dinheiro com cobrança de juros simples, que é calculada da seguinte forma: J = C × t×m,
onde: J é o valor dos juros devido; C é o capital emprestado; t é a taxa de juros do peŕıodo; e m é a quantidade
de meses para quitação da d́ıvida.
A taxa de juros depende do capital emprestado: para valores menores ou iguais a R$ 10.000,00, a taxa de
juros é de 10% ao mês (ou seja, t = 0, 1), já para valores maiores do que R$ 10.000,00, a taxa de juros é de 7%
ao mês (ou seja, t = 0, 07).
Implemente um programa que receba inicialmente o valor de capital total (T , real) que você possui para
fazer empréstimos. Em seguida, você vai realizar empréstimos enquanto tiver capital total suficiente. A cada
empréstimo realizado você recebe duas entradas: C (real) e m (inteiro); e determina a taxa de juros t, levando
em consideração o valor do capital emprestado, calcula o valor de juros devido e imprime a taxa de juros
aplicada (valor percentual, com 0 casas decimais), o juros devido calculado (J , com 2 casas decimais) e o valor
total da d́ıvida (soma do capital emprestado e o juros devido, também com 2 casas decimais). Ao final de cada
empréstimo, você atualiza seu capital total (T = T − C). O programa encerra no momento exato em que um
valor do capital total T for insuficiente para fornecer o empréstimo pretendido C, imprimindo uma mensagem
de encerramento com o capital total final (com duas casas decimais). Observe que, neste caso, o empréstimo é
negado, m não é solicitado, e o programa é encerrado.
Para resolver este problema você deve implementar e usar a função calculaJ, que recebe como argumentos
os valores de C e m, calcula e retorna o valor de J e o valor da taxa de juros aplicada (10 ou 7).
Exemplos de execução a seguir.
Exemplo 1:
Capital Total para empréstimo: 10000
Capital emprestado: 20000
Empréstimo negado, capital total é de R$ 10000.00.
Exemplo 2:
Capital Total para empréstimo: 20000
Capital emprestado: 9001
Quantidade de meses para quitação: 4
Taxa de juros aplicada: 10%.
Juros devido: 3600.40.
Valor total: 12601.40.
Capital emprestado: 10104
Quantidade de meses para quitação: 3
Taxa de juros aplicada: 7%.
Juros devido: 2121.84.
Valor total: 12225.84.
Capital emprestado: 5643
Empréstimo negado, capital total é de R$ 895.00.
Exemplo 3:
Capital Total para empréstimo: 1250
Capital emprestado: 1250
Quantidade de meses para quitação: 5
Taxa de juros aplicada: 10%.
Juros devido: 625.00.
Valor total: 1875.00.
Capital emprestado: 1
Empréstimo negado, capital total é de R$ 0.00.
7
Questão 4
Seja n um número inteiro positivo. Dizemos que n é perfeito se ele for igual à soma de seus divisores inteiros
positivos, com exceção do próprio n. Por exemplo: Os divisores de 6 são {1, 2, 3, 6}. Logo 6 é perfeito, pois
1 + 2 + 3 = 6.
Implemente um programa que solicite diversos valores inteiros para n e verifique se cada um deles é perfeito.
O programa deve admitir entradas do usuário enquanto os valores forem maiores que zero.
Para resolver este problema você deve implementar e usar a função verificaPerfeito, que recebe como
argumento o valor de n, verifica e imprime a mensagem de sáıda indicando se o valor é perfeito ou não, e não
retorna nada.
Siga o padrão de entrada e sáıda apresentado nos exemplos a seguir.
Exemplo 1:
Digite um número: 10
10 <> 8: número não é perfeito
Digite um número: 6
6 == 6: número é perfeito
Digite um número: −1
Exemplo 2:
Digite um número: 8128
8128 == 8128: número é perfeito
Digite um número: 8130
8130 <> 11454: número não é perfeito
Digite um número: 496
496 == 496: número é perfeito
Digite um número: 6
6 == 6: número é perfeito
Digite um número: 0
Exemplo 3:
Digite um número: 200
200 <> 265: número não é perfeito
Digite um número: −200
Exemplo 4:
Digite um número: 0
8

Continue navegando