Você está na página 1de 7

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS

São Gabriel – Engenharia de Computação


Disciplina Curso Turno
Algoritmos e Estrutura de Dados I Engenharia de Computação Manhã
Professor
Kleber Jacques F. de Souza (kleberjfsouza@gmail.com)

Lista de Exercícios 2

1 Instruções
1. Esta é uma lista de reforço e não vale pontos.
2. Cada sessão tem por objetivo treinar uma característica dos algoritmos.
3. Tente fazer sozinho.
4. Lembre-se que todo algoritmo recebe entradas e produz saídas. As entradas pertencem a um domínio e as
saídas pertencem a um contradomínio. Sempre determine o domínio e contradomínio das entradas e saídas.
Eles te ajudaram a definir os tipos das variáveis e fazer regras de validação das entradas.
5. Busque fazer código eficiente, sempre usando SE-SENÃO ao invés de duas estruturas SE, quando possível.

2 Estruturas de repetição
1. Faça um algoritmo para imprimir os números de 1 a 10 utilizando uma estrutura ENQUANTO e um contador.

2. Faça um algoritmo para imprimir os números de 1 a 10 utilizando uma estrutura FAÇA/ENQUANTO e um


contador.

3. Faça um algoritmo para imprimir os números de 1 a 10 utilizando uma estrutura PARA e um contador.

4. Faça um algoritmo para escrever a palavra PROGRAMACAO 5 vezes utilizando um a estrutura de repetição.

5. Faça um algoritmo para ler um valor N (validar para aceitar apenas valores positivos) e imprimir apalavra
PROGRAMACAO N vezes.

6. Faça um algoritmo para ler um número inteiro e escrevê-lo na tela 10 vezes utilizando uma repetição.

7. Faça um algoritmo que imprima na tela os 10 primeiros números inteiros maiores que 100 utilizando um a
estrutura de repetição.

8. Faça um algoritmo que imprima os números ímpares existentes de entre 1(inclusive) e 9 (inclusive).

9. Faça um algoritmo para ler um valor N (validar para aceitar apenas valores positivos) e imprimir os N primeiros
números inteiros.

10. Faça um algoritmo que imprima a tabuada do 8 utilizando uma estrutura de repetição.

11. Faça um algoritmo para ler um valor X (validar para aceitar apenas valores entre 1 [inclusive] e 10 [inclusive]).
Escrever a tabuada de X.

12. Ler 10 valores e escrever quantos destes valores são negativos.

13. Ler 10 valores e contar quantos estão no intervalo [10,20] e quantos deles estão fora deste intervalo. Escrever
o resultado das duas contagens.
14. Ler o número de alunos existentes em uma turma, ler as notas destes alunos, e calcular a média aritmética
destas notas.

15. Faça um algoritmo para repetir a leitura de um número enquanto o valor fornecido for diferente de 0. Para
cada número fornecido, imprimir se ele é NEGATIVO ou POSITIVO. Quando o número 0 for fornecido a
repetição deve ser encerrada sem imprimir mensagem alguma. Use a estrutura FAÇA/ENQUANTO

16. Escreva outra versão do algoritmo para resolver o problema anterior utilizando a estrutura com teste de saída
no início da repetição (ENQUANTO).

17. Faça um algoritmo para ler uma quantidade indeterminada de valores inteiros. Para cada valor fornecido
escrever uma mensagem que indica se cada valor fornecido é PAR ou ÍMPAR. O algoritmo será encerrado
imediatamente após a leitura de um valor NULO (zero) ou NEGATIVO.

18. Um comerciante deseja fazer o levantamento do lucro das mercadorias que ele comercializa. Para isto,
mandou digitar uma linha para cada mercadoria com o código, preço de compra e preço de venda das
mesmas. Faça um algoritmo que determine e escreva quantas mercadorias proporcionam lucro < 10%, 10%
≤ lucro ≤ 20% e lucro > 20%. Determine também e escreva o valor total de compra e de venda de todas as
mercadorias, assim como o lucro total.

19. Deseja-se fazer um levantamento a respeito da ausência de alunos à primeira prova de Fundamentos de
Computação para cada uma das 14 turmas existentes. Para cada turma, é fornecido um conjunto de valores,
sendo que os dois primeiros valores do conjunto correspondem à identificação da turma (A, ou B, ou C, ...) e
ao número de alunos matriculados, e os demais valores deste conjunto contêm o número de matrícula do
aluno e a letra A ou P para o caso de o aluno estar ausente ou presente, respectivamente. Faça um algoritmo
que, para cada turma, calcule a porcentagem de ausência e escreva a identificação da turma e a porcentagem
calculada; determine e escreva quantas turmas tiveram porcentagem de ausência superior a 5%.

20. Faça um algoritmo para ler dois valores inteiros e imprimir o resultado da divisão do primeiro pelosegundo.
Se o segundo valor informado for ZERO, deve ser impressa uma mensagem de VALOR INVÂLIDO e deverá ser
lido um novo valor. Ao final do programa deve ser impressa a seguinte mensagem: VOCE DESEJA OUTRO
CÂLCULO (S/N)?. Se a resposta for S o programa deverá retornar ao começo, caso contrário deverá encerrar
a sua execução imprimindo quantos cálculos foram feitos.
OBS: O programa só deverá aceitar com a resposta para a pergunta as letras S ou N.

21. Faça um algoritmo para ler uma quantidade indeterminada de duplas de valores (2 valores de cada vez).
Escrever para cada dupla uma mensagem que indique se ela foi informada em ordem crescente ou
decrescente. A repetição será encerrada ao ser fornecido, para os elementos da dupla, valores iguais.
Para os dados de entrada abaixo Deve ser gerada a seguinte saída
54 Decrescente
72 Decrescente
38 Crescente
22
22. Faça um algoritmo para repetir a leitura de uma senha até que ela seja válida. Para cada leitura da senha
incorreta informada escrever a mensagem "SENHA INVÂLIDA". Quando a senha for informada corretamente
deve ser impressa a mensagem "ACESSO PERMITIDO" e o algoritmo deve ser encerrado.
Considere que a senha correta é o valor 1234.

23. Faça um algoritmo que receba uma sequência de números e retorne o maior e o menor número da sequência.
A quantidade de números n é fornecida pelo usuário.

24. Para que a divisão entre 2 números possa ser realizada, o divisor não pode ser nulo. Faça um algoritmo para
ler 2 valores e imprimir o resultado da divisão do primeiro pelo segundo.
OBS: O algoritmo deve validar a leitura do segundo valor (que não deve ser nulo). Enquanto for fornecido um
valor nulo a leitura deve ser repetida. Utilize a estrutura FAÇA/ENQUANTO na construção da repetição de
validação.

25. Reescreva o algoritmo para o problema anterior utilizando a estrutura ENQUANTO na construção darepetição
de validação.

26. Faça um algoritmo para ler as notas da 1a e 2a avaliações de um aluno, calcular e imprimir a média semestral.
Faça com que o algoritmo só aceite notas válidas (uma nota válida deve pertencer ao intervalo [0,10]). Cada
nota deve ser validada separadamente. Deve ser impressa mensagem "Nota inválida" caso a nota informada
não pertença ao intervalo [0,10].

27. Reescreva o algoritmo do problema anterior para que no final seja impressa a mensagem “Novo cálculo (1.sim
2.não)?”; solicitando ao usuário que informe um código (1 ou 2) indicando se ele deseja ou não executar o
algoritmo novamente. Se for informado o código 1 deve ser repetida a execução de todo o algoritmo para
permitir um novo cálculo, caso contrário ele deve ser encerrado.

28. Reescreva o algoritmo do problema anterior validando a resposta do usuário para a pergunta “Novo Cálculo
(1.sim 2.não)?” (aceitar apenas os código 1 ou 2).

29. Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Este tempo é chamado
na físico-química de MEIA-VIDA. Dada a massa inicial, em gramas, faça um algoritmo que determine o tempo
necessário para que essa massa se torne menor que 0.5 gramas. Ao final do algoritmo escreva a massa inicial
e o tempo calculado em horas, minutos e segundos.

30. Estenda o problema anterior, considerando agora que o tempo da MEIA VIDA e a massa do material
radioativo são entrados pelo usuário. Lembre-se de validar os dados.

31. Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou não de um novo produto
lançado no mercado. Para isso, forneceu o sexo do entrevistado e sua resposta (sim ou não). Sabendo-se que
foram entrevistadas 2.000 pessoas, faça um algoritmo que calcule e escreva:

• o número de pessoas que responderam sim;


• o número de pessoas que responderam não;
• a porcentagem de pessoas do sexo feminino que responderam sim;
• a porcentagem de pessoas do sexo masculino que responderam não.
32. Reescreva o exercício acima considerando que não se sabe o número de pessoas que foram entrevistadas.

33. A Federação Mineira de Futebol contratou você para escrever um programa para fazer uma estatística do
resultado de vários JOGOS. Escreva um algoritmo para ler o número de gols marcados pelo GALO FORTE
VINGADOR e o número de gols marcados pelo CRUZEIRO em um duelo, imprimindo o nome do time vitorioso
ou a palavra EMPATE. Logo após escrever a mensagem “Novo DUELO 1.Sim 2.Não?” e solicitar uma resposta.
Se a resposta for 1, o algoritmo deve ser executado novamente solicitando o número de gols marcados pelos
times em uma nova partida, caso contrário deve ser encerrado imprimindo:

(a) Quantos jogos fizeram parte da estatística.


(b) O número de vitórias do Galo.
(c) O número de vitórias do Cruzeiro.
(d) O número de Empates.
(e) Uma mensagem indicando qual o time que venceu o maior número. de duelos (ou não houve vencedor).

34. Altere o programa do exercício anterior e adicione o América na estatística do futebol mineiro. Desta vez,
avise ao usuário para digitar os seguintes códigos dos times:

• 1 – Galo
• 2 – América
• 3 – Cruzeiro
Ao final deverá ser impresso:

(a) Quantos jogos fizeram parte da estatística.


(b) Em ordem: o time com maior número de vitórias, com o número de vitórias, empates e derrota se saldo
de gols.
(c) Em ordem: o time com o segundo maior número de vitórias, com o número de vitórias, empate se
derrotas e saldo de gols.
(d) Em ordem: o time com o menor número de vitórias, com o número de vitórias, empates e derrotas e
saldo de gols.
35. Um posto de combustíveis deseja determinar qual de seus produtos tem a preferência de seus clientes. Faça
um algoritmo para ler o tipo de combustível abastecido (codificado da seguinte forma: 1.Álcool 2.Gasolina
3.Diesel 4.Fim). Caso o usuário informe um código inválido (fora da faixa de 1 a 4) deve ser solicitado um novo
código (até que seja válido). Ao ser informado o código do combustível, o seu respectivo nome deve ser
impresso na tela. O programa será encerrado quando o código informado for o número 4 escrevendo então
a mensagem : "MUITO OBRIGADO" e a quantidade de clientes que abasteceram cada tipo de combustível.

36. Supondo que a população da República Democrática dos Bruzundangas seja da ordem de 90.000.000
(noventa milhões) de habitantes com uma taxa anual de crescimento de 3% e que a população de um país
União Federalista do Milano seja de aproximadamente 200.000.000 (duzentos milhões) de habitantes com
uma taxa anual de crescimento de 1,5%. Faça um algoritmo que calcule e escreva o número de anos
necessários para que a população dos Bruzundangas alcance ou ultrapasse a população dos Milanos. Suponha
que serão mantidas essas taxas de crescimento.

37. Faça um algoritmo para uma caixa registradora. A máquina recebe os produtos comprados e a quantidade de
cada um deles e retorna o valor total da compra. A funcionária deverá entrar com o código do produto e a
quantidade. A tabela abaixo mostra os produtos existentes. Quando a funcionária terminar de entrar os
produtos ela deverá digitar código do produto = 0 (zero). Neste instante, a caixa registradora deverá retornar
o valor total da compra. Lembre-se de fazer a verificação de erros checando se a funcionária digitou os códigos
corretamente.

CÓDIGO PRODUTO PREÇO UNITÁRIO


101 ADOÇANTE LIQUIDO FINN 65 ML R$ 7,89
102 ADOÇANTE LÍQUIDO STEVIA 80 ML R$ 4,49
301 AZEITE PORTUGUÊS 200 ML R$ 4,99
401 BATATA TRADICIONAL CONGELADA MCCAIN 720 GR R$ 1,39
403 BISCOITO RECHEADO BONO 200 GR R$ 1,09
501 AGUARDENTE VELHO BARREIRO 910 ML R$ 2,98
502 CERVEJA MILLER LONG NECK 355ML R$ 1,29
503 CERVEJA KAISER LATA OU LONG NECK UNID R$ 0,78
504 CERVEJA BOHEMIA LATA OU LONG NECK R$ 1,25
505 CERVEJA ANTARCTICA LATA OU LONG NECK UNID. R$ 0,78
506 CERVEJA BRAHMA LATA OU LONG NECK R$ 0,89
38. Uma pessoa aplicou seu capital a juros e deseja saber, trimestralmente, a posição de seu investimento inicial
c. Chamando de i a taxa de juros do trimestre, escrever uma tabela que forneça, para cada trimestre, o
rendimento auferido e o saldo acumulado durante o período de x anos, supondo que nenhuma retirada tenha
sido feita. O valor de c, i e x devem ser fornecidos pelo usuário. Imprima a tabela a cada mês. Lembre-se de
validar os dados.

39. Em um frigorífico existem 10 bois. Cada boi traz em seu pescoço um cartão contendo seu número de
identificação e seu peso. Faça um algoritmo que encontre e escreva o número e o peso do boi mais gordo e
do boi mais magro.
40. Uma pesquisa sobre algumas características físicas da população de uma determinada região coletou os
seguintes dados, referentes a cada habitante, para serem analisados:

• idade em anos
• sexo (masculino, feminino)
• cor dos olhos (azuis, verdes, castanhos)
• cor dos cabelos (louros, castanhos, pretos)
Para cada habitante são informados os quatro dados acima. A fim de indicar o final da entrada, após a
sequência de dados dos habitantes, o usuário entrará com o valor –1 para a idade, o que deve ser
interpretado pelo algoritmo como fim de entrada.

41. Uma universidade deseja fazer um levantamento a respeito de seu concurso vestibular. Para cada curso, é
fornecido o seguinte conjunto de valores:

• o código da curso;
• número de vagas;
• número de candidatos do sexo masculino; • número de candidatos do sexo feminino.
A entrada de dados será interrompida quando o código do curso for igual a zero. Faça um algoritmo que
calcule e escreva, para cada curso, o número de candidatos por vaga e a porcentagem de candidatos do sexo
feminino (escreva também o código correspondente do curso); determine o maior número de candidatos por
vaga e escreva esse número juntamente com o código do curso correspondente (supor que não haja empate);
calcule e escreva o total de candidatos.

42. Deseja-se fazer uma pesquisa a respeito do consumo mensal de energia elétrica em uma determinada cidade.
Para isso, são fornecidos os seguintes dados:

• preço do kWh consumido;


• número do consumidor;
• quantidade de kWh consumidos durante o mês;
• código do tipo de consumidor (residencial, comercial, industrial).
O número do consumidor igual a zero deve ser usado para interromper a entrada de dados. Faça um
algoritmo que leia os dados descritos acima e calcule:

(a) para cada consumidor, o total a pagar,


(b) o maior consumo verificado,

(c) o menor consumo verificado,


(d) o total do consumo para cada um dos três tipos de consumidores,
(e) a média geral de consumo; e escreva:

(a) para cada consumidor, o seu número e o total a pagar, (b) o que
foi calculado nos itens b, c, d, e acima especificados.
43. Tem-se uma estrada ligando várias cidades. Cada cidade tem seu marco quilométrico. Faça um algoritmo que
leia vários pares de dados, contendo cada par os valores dos marcos quilométricos, em ordem crescente, de
duas cidades. O último par contém estes dois valores iguais. E calcule os tempos decorridos para percorrer a
distância entre estas duas cidades, com as seguintes velocidades: 20, 30, 40, 50, 60, 70 e 80 km/hora,
sabendo-se que ; onde t = tempo; e = espaço; v = velocidade; escreva os marcos quilométricos, a
velocidade e o tempo decorrido entre as duas cidades, apenas quando este tempo for superior a duas horas.

44. Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Dada a massa inicial,
em gramas, faça um algoritmo que determine o tempo necessário para que essa massa se torne menor que
0.5 gramas. Ao final do algoritmo escreva a massa inicial e o tempo calculado em horas, minutos e segundos.

45. O dia da semana pode ser calculado pela regra abaixo:


• Ler dia, mês e ano.
• Se data possui mês anterior a março (03), fazer a seguinte correção nos cálculos: ano = ano - 1 e mês = mês + 12.
• Se data for igual ou posterior a 15/10/1582, faça:
A = parte inteira de (ano / 100)
B = parte inteira de (A / 4)
C =2-A+B
Senão C = 0.
• Faça:
D = parte inteira de 365,25 x (ano + 4716)
E = parte inteira de 30,6001 x (mês + 1)
• O dia juliano será igual a: D + E + dia + C - 1524.
• Para saber o dia da semana, divide-se dia juliano por 7. O dia será: segunda-feira se resto=0; terça-feira se
resto=1; ..., sábado se resto=5; domingo se resto=6.

Faça um algoritmo que receba do usuário uma data no formato dia/mês/ano e imprima na tela em que dia
da semana esta data recairá nos próximos 10 anos. Ao final, pergunte ao usuário "NOVA DATA (‘S’ - Sim; ‘N’
- Não)? Se usuário responder sim, repita o procedimento pedindo uma nova data.

3 Programas com cálculo numérico


1. Faça um algoritmo que receba um inteiro positivo e retorne sua representação no formato binário.

2. Um usuário digita uma sequência de números x1,x2,...,xn. Faça um algoritmo que calcule a média e o desvio
padrão destes três números. A média é definida como . O desvio padrão é dado por

. A quantidade de números N é lida pelo usuário. Use a estrutura de


repetição for para resolver este problema.

3. Calcule a média e o desvio padrão de uma sequência de números como no exercício anterior, mas agora
considere que a quantidade de números n não é fornecida pelo usuário. o programa irá terminar quando o
usuário digitar o número 0 (zero).

4. Um número inteiro positivo x é chamado de número de n-Stolfi se na representação decimal de x a soma


dos dígitos módulo n. é igual ao dígito mais significativo. Por exemplo, 322 é um número de 4-Stolfi pois (3
+ 2 + 2) % 4 é igual a 3. Sua tarefa é escrever um algoritmo que, dados dois inteiros i e k, determine se o
valor de i é um número de k-Stolfi. O inteiro i deve ter exatamente 5 dígitos. Caso i tenha um número
diferente de dígitos, seu algoritmo deve retornar a mensagem “número inválido”.

5. Faça um algoritmo que calcule o seguinte somatório:

. (1)

6. Faça um algoritmo que calcule e escreva a soma dos 20 primeiros números da série:

. (2)

7. Faça um algoritmo que receba um inteiro positivo n e prove a igualdade abaixo:

(3)

8. Faça um algoritmo que receba um número real x e prove a igualdade abaixo:


(4)

Retorne quantos elementos são necessário para que a série possua precisão de 4 casas decimais se
comparada com a função exp(x) da biblioteca MATH.H.

9. Faça um algoritmo que receba um número real x e prove a igualdade abaixo:

(5)

Retorne quantos elementos são necessários para que a série possua precisão de 4 casas decimais se
comparada com a função sin(x) da biblioteca MATH.H. Faça este algoritmo com apenas uma estrutura de
repetição.

10. Faça um algoritmo que receba um número real x e um inteiro positivo n e calcule o valor aproximado do
cosseno de x calculando-se os n termos da série abaixo:

(6)
Retorne o valor do cosseno calculado com n termos Retorne qual a diferença entre o valor calculado com n
termos e o valor da função COS(X) presente na biblioteca MATH.H. Imprima os valores calculados, o número
de termos usados e o erro.

11. Sejam P(x1,y1) e Q(x2,y2) dois pontos quaisquer no plano. A sua distância é dada por:

d = p(x2 − x1)2 + (y2 − y1)2 (7)

Faça um algoritmo que leia várias linhas com quatro valores separados por vírgula, correspondentes às
coordenadas dos pontos P e Q e retorne a distância destes pares de pontos. A leitura dos dados será
interrompida quando as quatro coordenadas forem iguais a zero.

12. Faça um algoritmo que receba diversos pares de números A e B entrados pelo usuário, e determine a soma
dos cubos de todos os números pares compreendidos no intervalo entre B e A. Retorne o intervalo
pesquisado e o valor da soma calculada. a entrada de dados deverá ser interrompida quando A e B forem
iguais a zero.

13. Faça um algoritmo para calcular a raiz quadrada de um número positivo usando o roteiro abaixo, baseado
no método de aproximações sucessivas de Newton. Seja Y o número inteiro que se deseja obter a raiz
quadrada:

• a primeira aproximação para a raiz quadrada de Y é ;


• as aproximações sucessivas seguintes são: .
O algoritmo deve receber o inteiro Y do qual deseja-se obter a raiz quadrada. Ele deverá exibir o valor do
número lido e sua respectiva raiz quadrada calculada com precisão de uma, duas, três e quatro casas
decimais. Imprimir o número de iterações (repetições) necessárias para se obter cada uma das precisões
acima. Use apenas uma estrutura de repetição para resolver este algoritmo.