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; n=2; while n <= 200 n=n^2; n=2; while ir > 200 n=n^2; 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 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) 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 01, até que seja atingida a carga desejada no capacitor Carga de capacitor ---------------------- Voltagem da bateria: 9 Valor da resistência: 4 Valor da capacitância: 3 Carga desejada: 2 Tempo Carga 00 000 01 022 02 045 03 067 04 089 05 110 06 132 07 153 08 174 09 195 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 0 o C Como não dispomos aqui desses sensores, seu programa deverá ler 3 valores de temperatura: a temperatura interna T C, a temperatura externa T E, isto é, a temperatura da cerveja no momento em que ela é colocada no congelador, e a temperatura desejada T D Vamos supor que a cerveja é colocada no congelador no momento em que é informada a temperatura desejada A partir daí, a temperatura da cerveja T i, depois de decorridos i minutos após a cerveja ser colocada na geladeira, é calculada do seguinte modo: T 0 = T E T i+1 = T i K (T i T C ) onde K é uma constante de resfriamento, cujo valor vamos supor que seja K = 005 O programa deve exibir as duas mensagens solicitadas, como mostra o exemplo a seguir 2
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 rimento 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 Conta de Investimento Mês Saldo 1 50500 2 101510 3 153020 \vdots 12 640470 4 Os plano de cargos e salários de uma determinada empresa consiste de 7 diferentes níveis de salário mensal: 1500,00, 2400,00, 3500,00, 5000,00 7000,00, 9000,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 (ie, a soma dos salários mesnsais pagos a todos os funcionários dividido pelo número de funcionários) Plano de Salários Nível Valor Empregados 1 150000 3000 2 240000 2500 3 350000 1500 \vdots 7 12000,00 25 Salário médio: 490000 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 va mensal de minério em duas mineradoras pertences à companhia Ouro Preto Minas SA Escreva um programa que leia os dados dessas tabelas na forma de 2 matrizes, M 1 e m 2, 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 é vido neste mesmo mês Determine também qual das duas mineradoras deu maior lucro no período Mineradora Cachoeira Produção (ton) 1200 1000 1500 2100 1800 1500 2000 1900 Custo (R$/ton) 4,00 4,50 3,90 3,50 3,80 4,00 3,50 3,50 Va (R$/ton) 4,50 4,50 5,00 4,80 4,50 4,10 4,50 4,70 Mineradora Itabirito Produção (ton) 1800 1500 1500 2000 1700 1600 2100 1900 Custo (R$/ton) 4,00 5,00 4,00 3,80 4,10 4,00 3,60 3,70 Va (R$/ton) 4,50 4,50 4,80 4,50 4,70 4,10 4,60 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: 0 1 0 1 2 3 3 2 1 3 2 4 7 4 2 3 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 Palíndromo Digite uma sequência de números: [1 3 5 4 5 3 1] É um palíndromo Digite uma sequência de números: [1 3 5 4] Não é um palíndromo 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 Algarismos -> Número Digite uma sequência de algarismos: [3 12 31] Entrada inválida! Digite uma sequência de algarismos: [3 5 4 5 3 1] Número decimal = 34531 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
Número -> Algarismos Digite um número inteiro >=0: 356 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: 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 n 1 e n 2 são ditos amigos se a soma dos divisores de n 1 é igual a n 2 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: n 1 220 2620 12285 17296 69615 n 2 284 2924 14595 18416 87633 Números amigos -------------- Digite n1: 220 Digite n2: 284 São amigos 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 Números primos ---------------- Digite um número inteiro positivo: 4058879 Não é primo 1 Veja, por exemplo: http://wwwshyamsunderguptacom/amicablehtm 5
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,, n 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,, n 12 O valor de π pode ser aproximado pela seguinte série: π 8 = 1 1x3 + 1 5x7 + 1 9x11 + A tabela a seguir mostra como o valor calculado considerando-se n termos da série aproximase de π, à medida que n cresce n π-aprox 1 2666666666667 2 2895238095238 3 2976046176046 10 3091623806668 20 3116596556794 100 3136592684839 1000 3141092653621 10000 3141542653590 Escreva um programa que leia um valor n 1 e calcule um valor aproximado para π, usando n termos da série acima Valor aproximado de pi Número de iterações: 100 pi = 3136592684839 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://enwikipediaorg/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 x2 n 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 x n 0 x 0 = 5 1 x 1 = x 0 x2 0 10 2x 0 2 x 2 = x 1 x2 1 10 2x 1 3 x 3 = x 2 x2 2 10 2x 2 4 x 4 = x 3 x2 3 10 2x 3 = 5 52 10 25 = 35 = 35 352 10 235 = 31785714 = 31785714 317857142 10 231785714 = 31623194 = 31623194 316231942 10 231623194 = 31622777 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 Cálculo de raiz quadrada - Número: 105 Iterações: 10 Raiz de 105 = 3240370349204 (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 Cálculo de raiz quadrada - Número: 105 Erro: 0000001 Raiz de 105 = 3240370349204 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://enwikipediaorg/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 Dica: Quadrado mágico ----------------- Digite uma matriz quadrada: [2 7 6; 9 5 1; 4 3 8] É um quadrado mágico: k = 15 (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 1 2 2 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