33
Aula 05 Comandos de Repetição while Andréa Iabrudi [email protected] 1 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

  • Upload
    shanna

  • View
    37

  • Download
    1

Embed Size (px)

DESCRIPTION

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 [email protected]. O que vimos até agora. Alguns tipos de dados básicos: - PowerPoint PPT Presentation

Citation preview

Page 1: Aula 05 Comandos de Repetição while

Aula 05Comandos de Repetição

while

Andréa [email protected]

1

Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM

Programação de Computadores I – BCC701www.decom.ufop.br/moodle

Page 2: Aula 05 Comandos de Repetição while

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

2

O que vimos até agora

x^(2*y) – sqrt(3.7*%pi)

x < 3 & (y > 10 | y < -1)

Page 3: Aula 05 Comandos de Repetição while

Variáveis◦ área de memória que armazena algum dado e é

referenciada por meio de um nome

Comando de Atribuição

Comandos de Desvio

3

O que vimos até agora

x = x+3^(2*y)if x < 2 then

z = 2*xelseif x == 2 | x == 3 then

z = x +10elseif x>10 & x<30 then

z = x * 5else

z = 46end

Page 4: Aula 05 Comandos de Repetição while

Matrizes e vetores◦ Indexação de matrizes

◦ Operações e funções sobre matrizes

4

O que vimos até agoraM = [3, 4; 1 2]

M(2,1) = M(1,2) + 10M(2,:) = M(1,:) + M(:,2)

x = sum((M .* [1, 2; 2, 1]) ^ 2)

Page 5: Aula 05 Comandos de Repetição while

5

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].

Exemplo1

Page 6: Aula 05 Comandos de Repetição while

6

Exemplo 1 - solução

Page 7: Aula 05 Comandos de Repetição while

7

Exemplo 1 - soluçãoSe 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.

Page 8: Aula 05 Comandos de Repetição while

Comandos de repetição 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.

8

Page 9: Aula 05 Comandos de Repetição while

Validando o valor de entrada

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

9

Page 10: Aula 05 Comandos de Repetição while

O Comando while

Execução do comando while:1. primeiro, a condição é avaliada2. se a condição for verdadeira, então 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

Page 11: Aula 05 Comandos de Repetição while

Exemplo 1 – nova solução

11

Page 12: Aula 05 Comandos de Repetição while

Exemplo 1 – nova solução

12

Page 13: Aula 05 Comandos de Repetição while

Que valores são impressos pelo seguinte trecho de programa?

Comando while:

x = 1while x < 5 printf('x = %g',x) x = x + 1end

x = 1x = 2x = 3x = 4

Page 14: Aula 05 Comandos de Repetição while

Quando este loop irá parar?

Sem intervenção, nunca.Cuidado com o uso de while!

Comando while: Loops infinitos

x = 1while x < 10 printf('x = %g',x) x = x - 1end

Page 15: Aula 05 Comandos de Repetição while

Exemplo 2 – Máximo Divisor Comum

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

Page 16: Aula 05 Comandos de Repetição while

MDC – Como calcular? 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)

Page 17: Aula 05 Comandos de Repetição while

Algoritmo de EuclidesExemplo

252 105252-105=147 105147-105=42 105

42 6342 63-42=2121 42-21=21

Page 18: Aula 05 Comandos de Repetição while

m 56n 12

a 56 44 32 20 8 8 4

b 12 12 12 12 12 4 4

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

Page 19: Aula 05 Comandos de Repetição while

m 56n 12

a 56 44 32 20 8 8 4

b 12 12 12 12 12 4 4

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

Page 20: Aula 05 Comandos de Repetição while

MDC – Implementação 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?

Page 21: Aula 05 Comandos de Repetição while

O Programa Euclides.sce

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; endendprintf("mdc(%g,%g) = %g",m,n,a)

Page 22: Aula 05 Comandos de Repetição while

Algoritmo de EuclidesMais um exemplo

44 1244-12=32 1232-12=20 1220-12=8 12

8 12-8=48-4=4 4

4 4

Subtrações sucessivas podem ser feitas por divisão

Page 23: Aula 05 Comandos de Repetição while

Euclides.sce mais eficiente

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;endprintf("mdc(%g,%g) = %g",m,n,a)

Porque não é necessário determinar qual, a ou b, é maior?

Page 24: Aula 05 Comandos de Repetição while

Algoritmo de EuclidesDe novo

44 1212 44 mod 12 = 88 12 mod 8 = 44 8 mod 4 = 0

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

Page 25: Aula 05 Comandos de Repetição while

Suponha que temos uma tabela com notas finais de alunos, no seguinte formato:

Queremos construir um programa que leia a matrícula de um aluno e informe sua nota

25

Exemplo 3 – Pesquisa em tabela I

1313012 9.51312410 7.51226784 8.0

matrícula

nota

Page 26: Aula 05 Comandos de Repetição while

A tabela é representada no programa como uma matriz Nx2, onde a 1a coluna contém os números de matrículas e a 2a coluna contém as notas correspondentes:

Notas = [1313012, 9.0 1312410, 7.5 1226784, 8.0 … ]

26

Representação da tabela de notas

Page 27: Aula 05 Comandos de Repetição while

A idéia é percorrer cada linha da tabela, a partir 1a, até encontrar posição em que ocorre o número de matrícula procurado. 1. começamos a partir 1a linha2. se o valor na 1a coluna e linha corrente é

o no. de matrícula procurado, então fim3. senão, passamos para a próxima linha e

repetimos, voltando ao passo 2

27

Como fazer a pesquisa na tabela?

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?

Page 28: Aula 05 Comandos de Repetição while

Pesquisa em tabelaNotas = …m = input(”Informe a matrícula: ”);[N,C] = size(Notas); lin = 1; while Notas(lin,1) <> m & lin <= N lin = lin + 1endif lin > N then printf(“Matrícula não encontrada”)else printf(”Nota = %g”,Notas(lin,2))end

Page 29: Aula 05 Comandos de Repetição while

Considere novamente a tabela com as notas finais de alunos.

Queremos agora obter os números de matrícula e notas de todos os alunos que foram aprovados.

29

Filtrando valores que satisfazem uma propriedade

Page 30: Aula 05 Comandos de Repetição while

A idéia é percorrer toda a tabela, a partir da primeira linha, e selecionar as entradas na tabela tais que o valor na segunda coluna é ≥ 6.01. começamos com uma matriz de aprovados

vazia e iniciamos a pesquisa da 1a linha2. se o valor na linha corrente, 2a col, for ≥ 6.0,

adicionamos o aluno à matriz de aprovados. 3. senão, passamos para a próxima coluna e

repetimos, voltando ao passo 2

30

Como filtrar os dados desejados?

De que variáveis vamos precisar?

Qual deve ser a condição do loop?

Page 31: Aula 05 Comandos de Repetição while

Exemplo 4 - Pesquisa em tabela IINotas = …Aprov = [][N,C] = size(Notas); lin = 1; while lin <= N if Notas(lin,2) >= 6.0 then

Aprov = [Aprov; Notas(lin,:)] end lin = lin + 1enddisp(Aprov)

Matriz vaziaEstende a matriz Aprov

Page 32: Aula 05 Comandos de Repetição while

-->M = [1,7,3; 2,8,9] M = 1. 7. 3. 2. 8. 9. -->[i,j] = find(M==3) j = 3. i = 1.

32

Pesquisa em tabela - find-->[i,j] = find(M<= 3) j = 1. 1. 3. i = 1. 2. 1. -->[l,c] = find(M > 10) c = [] l = []

Page 33: Aula 05 Comandos de Repetição while

-->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 = []

33

Pesquisa em tabela - extração-->v3 = M(M<= 7) v3 = 1. 2. 7. 3.

-->v4 = M(M > 10) v4 = []