Exercícios adicionais sobre comandos de repetição - DECOM-UFOP

Propaganda
Programação de Computadores I
UFOP
DECOM
2013–2
Exercícios de Revisão
Comandos de Repetição
Sumário
1
Testes de Compreensão
1
2
Exercícios de Programação
2
1 Testes de Compreensão
1. Determine o valor de n ao final de cada um dos trechos de programa a seguir, e determine
também o número de iterações executadas em cada loop.
n=1;
while modulo(n,10)<>0
n=n+1;
end
n=2;
while n <= 200
n=n^2;
end
n=2;
while ir > 200
n=n^2;
end
2. Determine os valores das variáveis v1, v2 e v3 ao final da execução de cada um dos
trechos de programa a seguir.
v = [2 5 8 3];
[L,C] = size(v)
for i=1:C
v1(1,i) = v(1,i)+10
v2(1,i) = v(1,L-i);
v3(1,i) = v(1,i) > 3
end
m = [1 5 3 8; 2 4 0 1; 0 1 2 3];
[L,C] = size(v)
for i=1:C
v1(1,i) = v(1,i)+v(2,i)
v2(1,i) = v(1,i) > v(2,i);
v3(1,i) = v(i,1) + v(i,2)
end
1
2 Exercícios de Programação
1. Quando um resistor (R), um capacitor (C ), e uma bateria (V ) são conectadas em série, a
carga no capacitor (Q) aumenta ao longo do tempo, de acordo com a fórmula a seguir, se
o capacitor estiver completamente descarregado, no instante de tempo t = 0:
Q(t) = CV (1 − e −t /RC )
Escreva um programa para monitorar a carga no capacitor, até que uma determinada carga
seja atingida. Seu programa deve ler os seguintes dados: a voltagem da bateria (V ), os
valores da resistência (R) do resistor e da capacitância (C) do capacitor, e o valor da carga
(Q) a ser obtida no capacitor. O programa deve imprimir uma tabela da carga do capacitor
em cada instantes de tempo, a partir do instante inicial t = 0, em intervalos de 0.1, até que
seja atingida a carga desejada no capacitor.
Exemplo de execução da aplicação
Carga de capacitor
---------------------Voltagem da bateria: 9
Valor da resistência: 4
Valor da capacitância: 3
Carga desejada: 2
Tempo
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
Carga
0.00
0.22
0.45
0.67
0.89
1.10
1.32
1.53
1.74
1.95
2. Você vai construir um programa para controlar o congelador da sua geladeira para gelar
sua cerveja na temperatura que você gosta – super gelada! A idéia é que o congelador
tem sensores de temperatura interna e de temperatura externa, e você pode programar a
temperatura desejada para a cerveja. O visor do congelador exibe uma mensagem avisando quando a cerveja está na temperatura desejada, e quanto tempo foi necessário para
atingir essa temperatura. Ele também avisa quando a cerveja está prestes a congelar, ou
seja, quando a temperatura da cerveja chaga a 0o C.
Como não dispomos aqui desses sensores, seu programa deverá ler 3 valores de temperatura: a temperatura interna TC , a temperatura externa TE , isto é, a temperatura da cerveja
no momento em que ela é colocada no congelador, e a temperatura desejada TD . Vamos
supor que a cerveja é colocada no congelador no momento em que é informada a temperatura desejada. A partir daí, a temperatura da cerveja Ti , depois de decorridos i minutos
após a cerveja ser colocada na geladeira, é calculada do seguinte modo:
T0 = TE
Ti+1 = Ti − K (Ti − TC )
onde K é uma constante de resfriamento, cujo valor vamos supor que seja K = 0.05. O
programa deve exibir as duas mensagens solicitadas, como mostra o exemplo a seguir.
2
Exemplo de execução da aplicação
Cerveja gelada!
---------------Temperatura externa: 27
Temperatura do congelador: -3
Temperatura desejada da cerveja: 4
Sua cerveja está gelada!
Temperatura = 4 C, tempo =
29 min
Sua cerveja congelou!
Temperatura = -0 C, tempo =
45 min
3. Suponha que você deposita R$ 500,00 reais em uma conta de investimento, no início de
cada mês. No final de cada mês, é creditado um rendimento de 1% do saldo total da conta.
Por exemplo, no final do do primeiro mês, o saldo da conta seria R$ 505,00, e ao final do
segundo mês seria R$ 1015,10. Escreva um programa que calcule e imprima o saldo da
conta, ao final de cada mes, ao longo do período de 1 ano, a partir do mes em que é feito
o primeiro depósito.
Exemplo de execução da aplicação
Conta de Investimento
-----------------------Mês
Saldo
1
505.00
2
1015.10
3
1530.20
\vdots
12
6404.70
4. Os plano de cargos e salários de uma determinada empresa consiste de 7 diferentes níveis
de salário mensal: 1.500,00, 2.400,00, 3.500,00, 5.000,00 7.000,00, 9.000,00 e 12000.
O número de empregados da empresa em cada um desses níveis de salário é, respectivamente: 3000, 2500, 1500, 1000, 400, 100 e 25. Escreva um programa que imprima uma
tabela com os valores dos níveis de salário e o número de empregados em cada nível, e
calcule e imprima também os seguintes dados:
(a) O salário mensal médio
(b) O número de empregados com salário acima e abaixo do salário médio.
(c) O salário médio pago (i.e., a soma dos salários mesnsais pagos a todos os funcionários dividido pelo número de funcionários).
Exemplo de execução da aplicação
Plano de Salários
-----------------------Nível
Valor
Empregados
1
1500.00
3000
2
2400.00
2500
3
3500.00
1500
\vdots
7
12000,00
25
Salário médio: 4900.00
Empregados com salário acima do médio: 577
Empregados com salário abaixo do médio: 7000
Média de pagamentos mensais:
3
5. As tabelas a seguir apresentam dados de produção e venda mensal de minério em duas
mineradoras pertences à companhia Ouro Preto Minas S.A. Escreva um programa que leia
os dados dessas tabelas na forma de 2 matrizes, M1 e m2 , respectivamente. O programa
deve então calcular o lucro de cada uma das mineradoras, em cada mês, assim como o
lucro total no período, de toda a companhia. Para efeito deste cálculo, considere que todo
o minério produzido em um mês é vendido neste mesmo mês. Determine também qual
das duas mineradoras deu maior lucro no período.
Produção (ton)
Custo (R$/ton)
Venda (R$/ton)
1200
4,00
4,50
Mineradora Cachoeira
1000 1500 2100 1800
4,50 3,90 3,50 3,80
4,50 5,00 4,80 4,50
Produção (ton)
Custo (R$/ton)
Venda (R$/ton)
1800
4,00
4,50
Mineradora Itabirito
1500 1500 2000 1700
5,00 4,00 3,80 4,10
4,50 4,80 4,50 4,70
1500
4,00
4,10
2000
3,50
4,50
1900
3,50
4,70
1600
4,00
4,10
2100
3,60
4,60
1900
3,70
4,70
6. Uma sequência é um palíndromo se ela é igual ao seu reverso. Por exemplo, as seguintes
sequeências de numeros inteiros são palíndromos:
010
123321
3247423
Escreva um programa que leia, repetidamente, uma sequência de números (como um vetor
de linha) e determine se a sequência lida é um palíndromo ou não, conforme exemplificado
a seguir. O programa deve terminar quando for digitada uma sequência vazia.
Exemplo de execução da aplicação
Palíndromo
-----------------------Digite uma sequência de números:
É um palíndromo
[1 3 5 4 5 3 1]
Digite uma sequência de números:
Não é um palíndromo
[1 3 5 4]
Digite uma sequência de números:
Tchau
[ ]
7. Escreva um programa que leia um vetor de algarismos decimais e obtenha o número decimal correspondente, conforme exemplificado a seguir. Seu programa deve verificar se
cada elemento do vetor dado como entrada é um algarismo decimal.
Exemplo de execução da aplicação
Algarismos -> Número
-----------------------Digite uma sequência de algarismos:
Entrada inválida!
Digite uma sequência de algarismos:
Número decimal = 34531
[3 12 31]
[3 5 4 5 3 1]
8. Escreva um programa que leia um número inteiro não negativo e determine a sequência
de algarismos que compõem esse número. Seu programa deve verificar se a anetrada é um
valor válido, isto é, um número inteiro ≥ 0, conforme exemplificado a seguir:
4
Exemplo de execução da aplicação
Número -> Algarismos
-----------------------Digite um número inteiro >=0:
3.56
Entrada inválida!
Digite um número inteiro >=0: 34531
Número decimal = [3 5 4 5 3 1]
9. Escreva um programa que leia um número inteiro positivo n e determine todos os divisores
de n, exceto o próprio n. Por exemplo:
Exemplo de execução da aplicação
Divisores de n
-------------Digite um número inteiro positivo: 220
Divisores: 1 2 4 5 10 11 20 22 44
55
110
10. Dois números inteiros positivos n1 e n2 são ditos amigos se a soma dos divisores de n1 é
igual a n2 e vice-versa.1 Por exemplo, 220 e 284 são números amigos, pois a soma dos
divisores de 220 é 1+2+4+5+10+11+20+22+44+55+110=284 e a soma dos divisores de
284 é 1+2+4+71+142=220. A tabela a seguir relaciona alguns outros pares de números
amigos:
n1 220 2620 12285 17296 69615
n2 284 2924 14595 18416 87633
Exemplo de execução da aplicação
Números amigos
-------------Digite n1: 220
Digite n2: 284
São amigos
Exemplo de execução da aplicação
Números amigos
-------------Digite n1: 756
Digite n2: 41
Não são amigos
11. Um número é primo se ele não é divisor de nenhum outro número exceto ele próprio e 1.
Escreva um programa que leia um número inteiro positivo n e determine se ele é primo.
Exemplo de execução da aplicação
Números primos
---------------Digite um número inteiro positivo: 4058879
Não é primo
1 Veja,
por exemplo: http://www.shyamsundergupta.com/amicable.htm.
5
Exemplo de execução da aplicação
Números primos
---------------Digite um número inteiro positivo: 2147483647
É primo
Dica: A solução natural para este problema consiste em testar se o número lido, n, é
divisível por 2, 3, 4 · · · , e assim sucessivamente, até encontrarmos um número k, tal que
n seja divisível por k, ou concluirmos que n é primo. Para que valores de k devemos
testar se n divide k? Naturalmente, poderíamos testar para valores de k = 2, 3, . . . (n − 1).
Entretanto, podemos restringir essa faixa de valores, de modo a tornar nosso programa
√
mais eficiente: k = 2, 3, . . . , b nc. As seguintes estratégias podem também ser adotadas
para tornar o programa ainda mais eficiente:
(a) Teste inicialmente se n é par, isto é, se n é divisível por 2. Em caso afirmativo, o
programa termina imediatamente, informando que n não é primo.
(b) Se n não for par, podemos testar a divisibilidade de n apenas para números ímpares,
√
isto é, para k = 3, 5, 7, . . . , b nc.
12. O valor de π pode ser aproximado pela seguinte série:
π
1
1
1
=
+
+
+...
8 1x3 5x7 9x11
A tabela a seguir mostra como o valor calculado considerando-se n termos da série aproximase de π, à medida que n cresce.
n
1
2
3
..
.
π-aprox
2.666666666667
2.895238095238
2.976046176046
10
..
.
3.091623806668
20
..
.
3.116596556794
100
..
.
3.136592684839
1000
..
.
3.141092653621
10000
3.141542653590
Escreva um programa que leia um valor n ≥ 1 e calcule um valor aproximado para π,
usando n termos da série acima.
Exemplo de execução da aplicação
Valor aproximado de pi
-----------------------Número de iterações: 100
pi = 3.136592684839
13. Em Análise Numérica, o Método de Newton-Raphson é um método para encontrar aproximações sucessivas para os zeros de uma função f : R → R.2 Este método pode ser
2 Para saber mais sobre este método veja, por exemplo http://en.wikipedia.org/wiki/Newton%27s_method.
6
usado para o cálculo de aproximações sucessivas para a raiz quadrada de um número real
r, conforme explicado a seguir. Começamos "adivinhando"um valor x 0 qualquer como
√
√
uma aproximação para r. A partir daí, obtemos valores cada vez mais próximos de r
, por meio de iterações sucessivas, onde, em cada iteração n ≥ 1, calculamos um valor
√
aproximando x n para r, do seguinte modo:
x n = x n−1 −
x 2n−1 − r
2x n−1
√
Por exemplo, considere o cálculo de uma aproximação para 10, começando
√ com x 0 = 5.
Por meio de iterações sucessivas, obtemos as seguintes aproximações para 10:
n xn
0 x0 = 5
1
x1 = x0 −
2
x2 = x1 −
3
x3 = x2 −
4 x4 = x3 −
.. ..
. .
x 02 −10
2x 0
x 12 −10
2x 1
x 22 −10
2x 2
x 32 −10
2x 3
52 −10
2.5 = 3.5
2 −10
3.5 − 3.5
2.3.5 = 3.1785714
2 −10
3.1785714 − 3.1785714
2.3.1785714 =
2 −10
3.1623194 − 3.1623194
2.3.1623194 =
=5−
=
=
=
3.1623194
3.1622777
Escreva um programa para cálculo de um valor aproximado para a raiz quadrada de um
número real r, usando o método de Newton. Você pode usar como uma aproximação
inicial o valor x 0 = r/2. Você vai construir duas diferentes versões do programa:
(a) O programa deve ler o número real r e um número inteiro positivo n e calcular um
√
valor aproximado para r, usando n iterações do método de Newton-Raphson.
Exemplo de execução da aplicação
Cálculo de raiz quadrada
------------------------Número: 10.5
Iterações: 10
Raiz de 10.5 = 3.240370349204
(b) O programa deve ler o número real r e um erro de aproximação desejado δ e calcular
√
um valor aproximado para r tal que o erro de aproximação seja ≤ δ. Em outras
√
palavras, o programa deve calcular valores aproximados para r em sucessivas iterações, até que a diferença entre os valores calculados em iterações consecutivas
– x n − x n−1 – seja menor ou igual a δ. Imprima também o número de iterações
√
requeridas para se obter uma aproximação para r com o erro desejado.
Exemplo de execução da aplicação
Cálculo de raiz quadrada
------------------------Número: 10.5
Erro: 0.000001
Raiz de 10.5 = 3.240370349204
Número de iterações =
5
14. Uma matriz quadrada M é um quadrado mágico se todos os seguintes cálculos resultam
em um mesmo valor, o qual é chamado de constante mágica da matriz M: 3
• a soma de todos os valores, em cada linha de M
3 Veja
http://en.wikipedia.org/wiki/Magic_square.
7
• a soma de todos os valores, em cada coluna de M
• a soma de todos os valores na diagonal de M
• a soma de todos os valores na diagonal secundária de M
É possível construir um quadrado mágico n × n para qualquer valor de n, exceto para
n = 2. A figura a seguir ilustra um quadrado mágico 3 × 3:
Escreva um programa que leia um matriz e verifique se ela é ou não um quadrado mágico.
Se a matriz dada como entrada não for uma matriz quadrada, o programa deve simplesmente responder que ela não é um quadrado mágico.
Exemplo de execução da aplicação
Quadrado mágico
----------------Digite uma matriz quadrada: [2 7 6; 9 5 1; 4 3 8]
É um quadrado mágico: k =
15
Dica:
(a) O operador de comparação de igualdade (==) pode também ser usado para verificar
se todos os valores de uma matriz ou vetor são iguais ao um determinado valor. Uma
expressão da forma M == n, onde M é uma matriz de números e n é um número,
resulta em uma matriz de valores lógicos (%t ou %t), em que cada elemento é o
resultado de comparar o elemento correspondente de M com o valor n. Por exemplo:
-->M = [1 2 1; 2 2 1]
M =
1.
2.
2.
2.
1.
1.
-->K = M == 1
K =
T F T
F F T
(b) A função and recebe como argumento uma matriz de valores lógicos M e retorna
como resultado a conjunção de todos os valores de M. Por exemplo, supondo que K
é a matriz do exemplo acima, teríamos:
-->and(K)
ans =
F
-->and([%t %t %t])
ans =
T
8
Download