1 / 33

Aula 05 Comandos de Repetição while

Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle. Aula 05 Comandos de Repetição while. Andréa Iabrudi andrea.iabrudi@iceb.ufop.br. O que vimos até agora. Alguns tipos de dados básicos:

shanna
Download Presentation

Aula 05 Comandos de Repetição while

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle Aula 05Comandos de Repetiçãowhile Andréa Iabrudi andrea.iabrudi@iceb.ufop.br

  2. O que vimos até agora • Alguns tipos de dados básicos: • numéricos: integer, float(simple, double), complex • lógico • string (sequência de caracteres) • Expressões • numéricas • lógicas x^(2*y) – sqrt(3.7*%pi) x < 3 & (y > 10 | y < -1)

  3. O que vimos até agora • Variáveis • área de memória que armazena algum dado e é referenciada por meio de um nome • Comando de Atribuição • Comandos de Desvio x = x+3^(2*y) ifx < 2 then z = 2*x elseifx == 2 | x == 3 then z = x +10 elseif x>10 & x<30 then z = x * 5 else z = 46 end

  4. O que vimos até agora • Matrizes e vetores • Indexação de matrizes • Operações e funções sobre matrizes M = [3, 4; 1 2] M(2,1) = M(1,2) + 10 M(2,:) = M(1,:) + M(:,2) x = sum((M .* [1, 2; 2, 1]) ^ 2)

  5. Exemplo1 • 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].

  6. Exemplo 1 - solução

  7. Exemplo 1 - solução Se o usuárioerraraodigitar o valor do PH, elenãoterá chance de corrigirseuerro, fornecendo um novo valor Queremosmodificar o programa de modoque, se o valor fornecidonão for válido, o usuáriopossadigitarnovamente um valor, atéquedigiteum valor válido.

  8. Comandos de repetição • Vamosprecisar de um comando de repetição • A digitação de um novo valor devesersolicitada, enquanto o valor digitadoanteriormentenão for válido.

  9. Validando o valor de entrada ph = input(“Informe o PH da solução: ”) whileph<0 | ph>14 printf(“pH inválido: deveser de 0 a 14”) ph = input(“Informe o PH da solução: ”) end

  10. O Comando while • while <condição> • <bloco while> • end • Execução do comando while: • primeiro, a condiçãoéavaliada • se a condição for verdadeira, então o bloco de comandosdentro do while éexecutado, e volta-se aopasso 1. • se a condição for falsa, o comando while termina, e a execuçãoprossegue a partir do comandoimediatamentesubsequenteaocomando while. UFMG DCC001 2013-1

  11. Exemplo 1 – nova solução

  12. Exemplo 1 – nova solução

  13. Comandowhile: Quevaloressãoimpressospeloseguintetrecho de programa? x = 1 while x < 5 printf('x = %g',x) x = x + 1 end x = 1 x = 2 x = 3 x = 4

  14. Comandowhile: Loops infinitos Quandoeste loop iráparar? Semintervenção, nunca. Cuidado com o uso de while! x = 1 while x < 10 printf('x = %g',x) x = x - 1 end

  15. Exemplo 2 – Máximo Divisor Comum • MDC(a,b) ondea e bsãointeiros • MDC(a,b)é o maiorinteirogque divide a e b • Istoé, a = g.m e b=g.n, ondem,nsãointeiros, e, paratodointeirocque divide a e b, temosquec divide g • Exemplo: MDC(21,12) = 3 • Se MDC(n,m) = 1, m e n sãoditosprimos entre si. Ex: MDC(9,5) = 1

  16. MDC – Como calcular? • Algoritmode Euclides: • criadoem 300 A.C., e emusoaté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 maiorpeladiferença entre o maior e o menor e repetir o processo, atéqueosdoisvaloressejamiguais (istoé, atéque a=b)

  17. Algoritmo de EuclidesExemplo

  18. Laço para Cálculo do Máximo Divisor Comum - - - - - - 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

  19. Laço para Cálculo do Máximo Divisor Comum - - - - - - 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

  20. MDC – Implementação • Método: • se a = b, o mdc(a,b)éigual a a (ou a b) • senão, substituir o maiorpeladiferença entre o maior e o menor e repetir o processo, atéqueosdoisvaloressejamiguais (istoé, atéque a=b) a e b devem ser inicializados antes do loop Qual deve ser a condição? • while <condição> • <bloco while> • end Como deve ser o corpo do loop? UFMG DCC001 2013-1

  21. O ProgramaEuclides.sce 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) UFMG DCC001 2013-1

  22. Algoritmo de EuclidesMais um exemplo Subtrações sucessivas podem ser feitas por divisão

  23. Euclides.scemaiseficiente 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? UFMG DCC001 2013-1

  24. Algoritmo de EuclidesDe novo Em Scilab, omdcde dois números a e b pode ser calculado usando-se a função pré-definida gcd, do seguinte modo: gcd(uint8([ab]))

  25. Exemplo 3 – Pesquisaemtabela I • Suponhaquetemosumatabela com notasfinais de alunos, no seguinteformato: • Queremosconstruir um programaqueleia a matrícula de um aluno e informesua nota matrícula nota …

  26. Representação da tabela de notas • A tabelaérepresentada no programacomoumamatrizNx2, onde a 1acolunacontémosnúmeros de matrículas e a 2acolunacontém as notascorrespondentes: Notas = [1313012, 9.0 1312410, 7.5 1226784, 8.0 … ]

  27. Como fazer a pesquisanatabela? • A idéiaépercorrercadalinha da tabela, a partir 1a, atéencontrarposiçãoemqueocorre o número de matrículaprocurado. • começamos a partir1alinha • se o valor na 1a coluna e linhacorrenteé o no. de matrículaprocurado, entãofim • senão, passamospara a próximalinha e repetimos, voltandoaopasso2 Vamos precisar de uma variável para manter a informação de qual é a linha corrente. O que acontece se o número de matrícula procurado não ocorre na tabela?

  28. Pesquisaemtabela Notas = … m = input(”Informe a matrícula: ”); [N,C] = size(Notas); lin = 1; whileNotas(lin,1) <> m & lin <= N lin = lin + 1 end if lin > N then printf(“Matrículanãoencontrada”) else printf(”Nota = %g”,Notas(lin,2)) end

  29. Filtrandovaloresquesatisfazemumapropriedade • Considerenovamente a tabela com as notasfinais de alunos. • Queremos agora obterosnúmeros de matrícula e notas de todososalunosqueforamaprovados.

  30. Como filtraros dados desejados? • A idéiaépercorrertoda a tabela, a partir da primeiralinha, e selecionar as entradasnatabelataisque o valor nasegundacolunaé ≥ 6.0 • começamos com umamatriz de aprovadosvazia e iniciamos a pesquisa da 1alinha • se o valor nalinhacorrente, 2a col, for ≥ 6.0, adicionamos o alunoàmatriz de aprovados. • senão, passamospara a próximacolunae repetimos, voltandoaopasso2 De que variáveis vamos precisar? Qual deve ser a condição do loop?

  31. Exemplo 4 - Pesquisaemtabela II Notas = … Aprov = [] [N,C] = size(Notas); lin= 1; whilelin <= N if Notas(lin,2) >= 6.0 then Aprov = [Aprov; Notas(lin,:)] end lin = lin + 1 end disp(Aprov) Matriz vazia Estende a matriz Aprov

  32. Pesquisaemtabela - find -->[i,j] = find(M<= 3) j = 1. 1. 3. i = 1. 2. 1. -->[l,c] = find(M > 10) c = [] l = [] -->M = [1,7,3; 2,8,9] M = 1. 7. 3. 2. 8. 9. -->[i,j] = find(M==3) j = 3. i = 1.

  33. Pesquisaemtabela - extração -->v3 = M(M<= 7) v3 = 1. 2. 7. 3. -->v4 = M(M > 10) v4 = [] -->M = [1,7,3; 2,8,9] M = 1. 7. 3. 2. 8. 9. -->v1 = M(M==3) v1 = 3. -->v2 = M(M==10) v2 = []

More Related