Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 1 Universidade Federal de Ouro Preto -‐ UFOP Departamento de Computação -‐ DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle } O pH de uma solução aquosa é medido por sua acidez. A escala do pH varia entre 0 e 14, inclusive. Uma solução como pH igual a 7 é dita neutra; uma solução com o pH maior que 7 é dita básica; e uma solução com o pH menor que 7 é dita ácida. Escreva um programa que leia o pH de uma solução e imprima se a solução é neutra, básica ou ácida. O programa deve testar se o valor fornecido como entrada é um valor válido, isto é, se está no intervalo fechado [0,14]. 2 2 3 4 Se o usuário errar ao digitar o valor do PH, ele não terá chance de corrigir seu erro, fornecendo um novo valor Queremos modificar o programa de modo que, se o valor fornecido não for válido, o usuário possa digitar novamente um valor, até que digite um valor válido. 3 } Vamos precisar de um comando de repetição } A digitação de um novo valor deve ser solicitada, enquanto o valor digitado anteriormente não for válido. 5 ph = input(“Informe o PH da solução: ”) while ph<0 | ph>14 printf(“pH inválido: deve ser de 0 a 14”) ph = input(“Informe o PH da solução: ”) end 6 4 } Execução do comando while: 1. primeiro, a condição é avaliada 2. se a condição for verdadeira, o bloco de comandos dentro do while é executado, e volta-se ao passo 1. 3. se a condição for falsa, o comando while termina, e a execução prossegue a partir do comando imediatamente subsequente ao comando while. UFMG DCC001 2013-1 while <condição> <bloco while> end 8 5 9 Que valores são impressos pelo seguinte trecho de programa? x = 1 while x < 5 printf('x = %g',x) x = x + 1 end x = 1 x = 2 x = 3 x = 4 6 Quando este loop irá parar? Sem intervenção, nunca. Cuidado com o uso de while! x = 1 while x < 10 printf('x = %g',x) x = x - 1 end } Sequência de Fibonacci: 0 1 1 2 3 5 8 13 21 34 55 … } A partir do terceiro número da sequência, cada número é obtido como a soma dos dois números anteriores. } Faça um programa que leia um número positivo n e imprima todos os números da sequência de Fibonacci que são menores do que n 7 } Temos que ler o valor de n e calcular e imprimir, repetidamente, um novo número da sequência de Fibonaci, enquanto esse número calculado for menor do que n. } Precisamos de uma variável (fibC) para armazenar o número corrente da sequência. } Precisamos também de uma variável (fibP) para armazenar o próximo número da sequência, pois cada valor da é calculado como a soma dos dois anteriores } Os valores iniciais de fibC e fibP devem ser 0 e 1 } A impressão e cálculo de novos valores é feita dentro de um comando de repetição: ◦ A condição de teste verifica se o número de Fibonacci corrente (fibC) é menor do que n ◦ No corpo do comando de repetição, devemos imprimir o número de Fibonacci corrente (fibC) e calcular novamente os dois próximos números da sequência, isto é, modificar os valores de fibC e fibP. 8 UFMG DCC001 2013-1 n = input(“Valor limite: "); fibC = 0; fibP = 1; printf(“Nos. de Fibonacci < %g:\n”,n) while fibC < n printf(” %g”,fibC) next = fibC + fibP fibC = fibP fibP = next end 9 } Uma maneira natural de armazenar os valores da sequência de Fibonacci é utilizando um vetor --> v = [] v = [] --> v = [v 3] v = 3. --> v = [2+5 v] v = 7. 3. cria a variável v e atribui a ela um vetor vazio “estende” o vetor v, acrescentando um novo valor no final do vetor “estende” o vetor v, acrescentando um novo valor no início do vetor UFMG DCC001 2013-1 n = input(“Valor limite: "); fibC = 0; fibP = 1; fibs = [] while fibC < n fibs = [fibs fibC] next = fibC + fibP fibC = fibP; fibP = next end printf(“Nos. de Fibonacci < %g:”,n) disp(fibs) 10 UFMG DCC001 2013-1 } A versão 2 é preferível em relação à 1: ◦ separa mais claramente a parte do programa que efetua o cálculo da parte que exibe resultados. } A função disp pode ser usada para imprimir um vetor. Mais adiante, veremos como podemos imprimir um vetor usando printf, especificando um formato para impressão dos seus elementos } MDC(a,b) onde a e b são inteiros ◦ MDC(a,b) é o maior inteiro g que divide a e b ◦ Isto é, a = g.m e b=g.n, onde m,n são inteiros, e, para todo inteiro c que divide a e b, temos que c divide g ◦ Exemplo: MDC(21,12) = 3 ◦ Se MDC(n,m) = 1, m e n são ditos primos entre si. Ex: MDC(9,5) = 1 11 } Algoritmo de Euclides: ◦ criado em 300 A.C., e em uso até hoje! } Idéia: ◦ mdc(a,a) = a ◦ se a > b, mdc(a,b) = mdc(a-b,b) ◦ se b > a, mdc(a,b) = mdc(a, b-a) } Método: ◦ se a = b, o mdc(a,b) é igual a a (ou a b) ◦ senão, substituir o maior pela diferença entre o maior e o menor e repetir o processo, até que os dois valores sejam iguais (isto é, até que a=b) 252 105 252-105=147 105 147-105=42 105 42 105-42=63 42 63-42=21 42-21=21 21 12 m 56 n 12 a 56 44 32 20 8 8 4 b 12 12 12 12 12 4 4 - - - - - - Em cada passo, o maior entre a e b é substituído pela diferença entre a e b Valores iniciais colocados na preparação do loop O loop termina quando a = b m 56 n 12 a 56 44 32 20 8 8 4 b 12 12 12 12 12 4 4 - - - - - - Em cada passo, o maior entre a e b é substituído pela diferença entre a e b Valores iniciais colocados na preparação do loop O loop termina quando a = b 13 } Método: ◦ se a = b, o mdc(a,b) é igual a a (ou a b) ◦ senão, substituir o maior pela diferença entre o maior e o menor e repetir o processo, até que os dois valores sejam iguais (isto é, até que a=b) UFMG DCC001 2013-1 while <condição> <bloco while> end a e b devem ser inicializados antes do loop Qual deve ser a condição? Como deve ser o corpo do loop? UFMG DCC001 2013-1 m = input("m = "); n = input("n = "); a = m; b = n; while a <> b if a > b then a = a-b; else b = b-a; end end printf("mdc(%g,%g) = %g",m,n,a) 14 44 12 44-12=32 12 32-12=20 12 20-12=8 12 8 12-8=4 8-4=4 4 4 4 Subtrações sucessivas podem ser feitas por divisão UFMG DCC001 2013-1 m = input("m = "); n = input("n = "); a = m; b = n; while b <> 0 aux = b b = modulo(a,b); a = aux; end printf("mdc(%g,%g) = %g",m,n,a) Porque não é necessário determinar qual, a ou b, é maior? 15 44 12 12 44 mod 12 = 8 8 12 mod 8 = 4 4 8 mod 4 = 0
Compartilhar