slides computação e programação memec+lean · 05/10/2015 3 alinhamento da at 6 • estruturas...

22
05/10/2015 1 D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre 2015-2016 Aula Teórica 6 Estruturas de Repetição (FOR, WHILE) A instrução break Pré-alocação de variáveis Expressão relacional • É uma expressão que analisa a relação entre duas ou mais entidades, resolvendo-se num valor verdadeiro ou falso Para que serve? • Pode ser ela própria a tarefa de computação • Mais frequentemente utiliza-se numa estrutura de selecção para decidir qual das sequências de código executar Computação e Programação 2015 / 2016 2 Wrap Up da última aula

Upload: buiminh

Post on 02-Dec-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

1

D.E.M. – Área Científica de Controlo Automação e Informática Industrial

Computação e ProgramaçãoMEMec, LEAN - 1º Semestre 2015-2016

Aula Teórica 6

• Estruturas de Repetição (FOR, WHILE)• A instrução break• Pré-alocação de variáveis

Expressão relacional

• É uma expressão que analisa a relação entre duas ou mais entidades, resolvendo-se num valor verdadeiro ou falso

Para que serve?

• Pode ser ela própria a tarefa de computação

• Mais frequentemente utiliza-se numa estrutura de selecção para decidir qual das sequências de código executar

Computação e Programação 2015 / 2016 2

Wrap Up da última aula

Page 2: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

2

Quais as estruturas de selecção do

MATLAB?

• if (possivelmente complementada com else, ou elseif), avalia qualquer condição lógica

• switch avalia uma expressão contra um conjunto de casos possíveis

Quando se utiliza uma e

outra?

• if quando:

• se avalia um intervalo de valores

• a selecção depende de várias expressões lógicas distintas

• switch quando:

• Os casos a avaliar são enumeráveis e não podem ser expressos na forma de um intervalo

Computação e Programação 2015 / 2016 3

Wrap Up da última aula

Computação e Programação 2015 / 2016

Implementação de Algoritmos em MATLAB

• Sequenciação

• Selecção

• Repetição

• Módulos

Ficheiros script

Estruturas: if

if – else

if – elseif

switch – case

Estruturas: for

while

Funções definidas pelo programador

4

Page 3: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

3

Alinhamento da AT 6

• Estruturas de Repetição

• Estrutura FOR

• Ciclos FOR encadeados

• Estrutura WHILE

• A instrução break

• Pré-alocação de variáveis

Computação e Programação 2015 / 2016

Computação e Programação 2015 / 2016

Estrutura for

Descrição: Repete um bloco de instruções um número específico de vezes

Sintaxe: for var_ctrl = expressão

sequência

end

• No MATLAB expressão pode ser qualquer vector, matriz ou escalar. A forma mais comum (também a outras linguagens de programação) é definir a expressão como um intervalo

limite_inicial : passo : limite_final

6

Page 4: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

4

Computação e Programação 2015 / 2016

Estrutura for (utilização comum)

• A variável de controlo começa por tomar o valor inicial

var_ctrl = limite_inicial

• E por cada execução do ciclo vai sendo incrementada do passo

var_ctrl = var_ctrl + passo

• O ciclo termina quando var_ctrl estiver fora do intervalo

var_ctrl ∈ [limite_inicial, limite_final]

Tudo isto é feito de forma automática

7

Computação e Programação 2015 / 2016

Estrutura for

>> for i = 1:4

fprintf('%d\n', i);

end

1

2

3

4

>> for i = 10:5:28

fprintf('%d\n', i);

end

10

15

20

25

>> for i = 100:-20:40

fprintf('%d\n', i);

end

100

80

60

40

>> x = [12 34 55 23];>> for i = 1:length(x)

fprintf('%d\n', x(i));end

12

34

55

23

Percorrer vectores

8

Page 5: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

5

Computação e Programação 2015 / 2016

Percorrer vectores

>> x = [2 4 6 8 10];

>> for i = 1:length(x)

y(i) = x(i)^2 + 2;

end

>> y

y =

6 18 38 66 102

1ª passagem pelo cicloy(1) = x(1)^2 + 2;

2ª passagem pelo cicloy(2) = x(2)^2 + 2;

3ª passagem pelo cicloy(3) = x(3)^2 + 2;

4ª passagem pelo cicloy(4) = x(4)^2 + 2;

5ª passagem pelo cicloy(5) = x(5)^2 + 2;

9

Computação e Programação 2015 / 2016

Percorrer vectores (ordem contrária)

>> x = [2 4 6 8 10];

>> for i = length(x):-1:1

y(i) = x(i)^2 + 2;

end

>> y

y =

6 18 38 66 102

Não faz o que se pretende

1ª passagem pelo cicloy(5) = x(5)^2 + 2;

2ª passagem pelo cicloy(4) = x(4)^2 + 2;

3ª passagem pelo cicloy(3) = x(3)^2 + 2;

4ª passagem pelo cicloy(2) = x(2)^2 + 2;

5ª passagem pelo cicloy(1) = x(1)^2 + 2;

10

Page 6: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

6

Computação e Programação 2015 / 2016

>> x = [2 4 6 8 10];

>> comp = length(x);

>> for i = 1:comp

y(i) = x(comp-i+1)^2+2;

end

>> y

y =

102 66 38 18 6

Percorrer vectores (ordem contrária)

Foi necessário trocar os índices!

1ª passagem pelo cicloy(1) = x(5)^2 + 2;

2ª passagem pelo cicloy(2) = x(4)^2 + 2;

3ª passagem pelo cicloy(3) = x(3)^2 + 2;

4ª passagem pelo cicloy(4) = x(2)^2 + 2;

5ª passagem pelo cicloy(5) = x(1)^2 + 2;

11

Computação e Programação 2015 / 2016

Exemplo: soma elementos*

• Entradas: x – vectorn – número de elementos a somar (inteiro)

• Saídas: apresenta resultado na variável somatorio

Algoritmo:

1. Obter do utilizador o vector x

2. Obter do utilizador o valor n

3. Inicializar somatorio = 0

4. Repetir para i entre 1 e n com passo unitário

a) Acrescentar o valor de x(i) ao valor do somatorio

5. Apresentar valor de somatorio

* Está implementado na forma de script. Para uma

implementação mais útil ver a aula de funções

12

Page 7: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

7

Computação e Programação 2015 / 2016

>> soma

Introduza o vector: [1 2 3 4 5]

Introduza n: 3

A soma é: 6.00

>> soma

Introduza o vector: [3 5 1 1]

Introduza n: 4

A soma é: 10.00

Exemplo: soma elementos*

13

Computação e Programação 2015 / 2016

Exemplo: factorial*

• Entradas: n – valor cujo factorial se prentede calcular (inteiro)

• Saídas: apresenta resultado na variável factorial_n

Algoritmo:

1. Obter do utilizador o valor n

2. Inicializar factorial_n = 1

3. Repetir para k entre 1 e n com passo unitário

a) factorial_n = factorial_n × k

4. Apresentar valor de factorial_n

* Está implementado na forma de script. Para uma

implementação mais útil ver a aula de funções

14

Page 8: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

8

Computação e Programação 2015 / 2016

Exemplo: factorial*

>> fact

Introduza n: 4

O valor do factorial é: 24

15

Computação e Programação 2015 / 2016

Exemplo: encontra mínimo*

• Entradas: obter do utilizador o vector x

• Saídas: apresenta o valor mínimo dos elementos de x

Algoritmo:

1. Obter do utilizador o vector x

2. Inicializar minimo com o valor de x(1)

3. Repetir para i entre 2 e o comprimento de x com passo unitário

a) Se x(i) < minimo

i. minimo = x(i)

4. Apresentar valor de minimo

* Está implementado na

forma de script. Para uma implementação mais útil ver a aula de funções.

16

Page 9: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

9

Computação e Programação 2015 / 2016

Exemplo: encontra mínimo*

>> encontra_minimo

Introduza o vector: [2 12 -3 1 4]

O valor mínimo em x é: -3.000000

>> encontra_minimo

Introduza o vector: [0.05 1.12 0.3]

O valor mínimo em x é: 0.050000

17

Computação e Programação 2015 / 2016

As funções sum e factorial

>> sum([1 2 3 4 5])

ans =

15

>> x = [1 2 3 4 5];

>> sum(x(1:3)) % soma dos primeiros 3 elementos de x

ans =

6

>> factorial(4)

ans =

24

• No MATLAB as funções sum e factorial estão pré-definidas não sendo necessário programá-las com ciclos

18

Page 10: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

10

Computação e Programação 2015 / 2016

>> soma

Introduza o vector: [1 2 3]

Introduza n: 5

??? Attempted to access x(4); index out of bounds becausenumel(x)=3.

Error in ==> soma at 10

somatorio = somatorio + x(i);

>>

Exemplo: soma elementos*

É preciso verificar n antes de somar os elementos

19

Computação e Programação 2015 / 2016

Exemplo: soma elementos mais robusto

Algoritmo:

1. Obter do utilizador o vector x

2. Obter do utilizador o valor n

3. Se n < 1 ou n > comprimento de x

a) Apresentar mensagem de erro

Caso contrário

a) Inicializar somatorio = 0

b) Repetir para i entre 1 e n com passo unitário

i. Acrescentar o valor de x(i) ao valor do somatorio

c) Apresentar valor de somatorio

20

Page 11: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

11

Computação e Programação 2015 / 2016

>> soma

Introduza o vector: [1 2 3]

Introduza n: 5

O valor de 'n' não é válido!

>>

Exemplo: soma elementos mais robusto

21

Alinhamento da AT 8

• Estruturas de Repetição

• Estrutura FOR

• Ciclos FOR encadeados

• Estrutura WHILE

• A instrução break

• Pré-alocação de variáveis

Computação e Programação 2015 / 2016

Page 12: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

12

Computação e Programação 2015 / 2016

Ciclos for encadeados

• A sequência de instruções dentro de um ciclo for pode conter outro ciclo for (e outro dentro deste, e outro, etc.)

• Quando tal acontece, fala-se em ciclos for encadeados

for var_ctrl_1 = expressão_1

sequência_1

for var_ctrl_2 = expressão_2

sequência_2

end

sequência_3

end

23

Computação e Programação 2015 / 2016

Ciclos for encadeados

• Os ciclos for encadeados são muitas vezesutilizados para aceder a estruturas dedados com mais de que uma dimensão,como por exemplo matrizes.

>> mat = [0.95 0.49 10.23 0.89 50.61 0.76 3];

>> [linhas, colunas] = size(mat);

>> for k = 1:linhasfor j = 1:colunas

fprintf('%.2f ', mat(k,j));end

end

0.95 0.49 1.00 0.23 0.89 5.00 0.61 0.76 3.00

(1,1) (1,2) (1,3)

(2,1) (2,2) (2,3)

(3,1) (3,2) (3,3)

Exemplo de como percorrer por linha

24

Page 13: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

13

Computação e Programação 2015 / 2016

Exemplo: tabela multiplicativa

• Entradas: –

• Saídas: apresenta tabela multiplicativa dos valores de 1 a 10

Algoritmo:

1. Repetir para i entre 1 e 10 com passo unitário

a) Repetir para j entre 1 e 10 com passo unitário

i. Apresentar resultado de i × j seguido de espaço

b) Mudar de linha

25

Computação e Programação 2015 / 2016

Ciclos for encadeados

>> tabuada1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90

10 20 30 40 50 60 70 80 90 100

Depois de percorrer todos os j muda de linha

26

Page 14: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

14

Alinhamento da AT 8

• Estruturas de Repetição

• Estrutura FOR

• Ciclos FOR encadeados

• Estrutura WHILE

• A instrução break

• Pré-alocação de variáveis

Computação e Programação 2015 / 2016

Computação e Programação 2015 / 2016

Estrutura while

Descrição: Repete um bloco de instruções um número indefinido de vezes, enquanto uma dada expressão for verdadeira

Sintaxe: while expressão

sequência

end

• ATENÇÃO: A sequência deve permitir a modificação da expressão para o valor falso, caso contrário o ciclo nunca termina denominando-se CICLO INFINITO

• Nesse caso o utilizador perde o controlo da execução do programa

28

Page 15: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

15

Computação e Programação 2015 / 2016

>> condicao = true;>> ciclos = 0;>> while condicao

ciclos = ciclos + 1;fprintf('Este é o %dº ciclo!\n', ciclos);

endEste é o 1º ciclo!Este é o 2º ciclo!Este é o 3º ciclo!...Este é o 30000º ciclo!...Este é o 300000º ciclo!

Estrutura while

Em caso de ciclo infinito, ou qualquer outro problema na

execução do MATLAB pressionar Ctrl+C

29

>> condicao = true;>> ciclos = 0;>> while condicao

ciclos = ciclos + 1;fprintf('Este é o %dº ciclo!\n', ciclos);condicao = input('Deseja repetir (true/false)? ');

endEste é o 1º ciclo!Deseja repetir? trueEste é o 2º ciclo!Deseja repetir? false>>

Computação e Programação 2015 / 2016

Estrutura while

A condição de repetição deve poder mudar de valor

dentro do ciclo

30

Page 16: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

16

Computação e Programação 2015 / 2016

Exemplo: soma parcelas

• Entradas: x – parcela

• Saídas: apresenta resultado na variável soma

Algoritmo:

1. Inicializar condicao = verdadeiro e soma = 0

2. Repetir enquanto condicao = verdadeiro

a) Obter valor para x

b) Se x = 0

A. condicao = falso

B. Apresentar soma

Caso contrário

A. soma = soma + x

B. Apresentar soma (parcial)

31

Computação e Programação 2015 / 2016

Exemplo soma parcelas

>> soma_while

Calcula uma soma.

Introduza 0 para terminar

Introduza um valor: 0.5

A soma já vai em 0.500000

Introduza um valor: 1.4

A soma já vai em 1.900000

Introduza um valor: -0.2

A soma já vai em 1.700000

Introduza um valor: 0

O resultado é 1.700000

>>

32

Page 17: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

17

Computação e Programação 2015 / 2016

Exemplo verificação de entrada

>> garante_inteiro

Introduza um inteiro positivo: 2.2

Invalido! Introduza um inteiro positivo: -1

Invalido! Introduza um inteiro positivo: 5

Obrigado, o valor introduzido foi: 5

33

Alinhamento da AT 8

• Estruturas de Repetição

• Estrutura FOR

• Ciclos FOR encadeados

• Estrutura WHILE

• A instrução break

• Pré-alocação de variáveis

Computação e Programação 2015 / 2016

Page 18: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

18

Computação e Programação 2015 / 2016

Instrução break

Descrição: Interrompe imediatamente o ciclo a que pertence (o mais interior). Não está definida fora de um ciclo.

Exemplo de utilização típica:

while true

sequência_1

if condição

break;

end

sequencia_2

end

Ao não colocar a condição no início do ciclo permite que a

sequência_1 seja sempre executada pelo menos 1 vez

35

Computação e Programação 2015 / 2016

Exemplo: soma parcelas com break

• Entradas: x – parcela

• Saídas: apresenta resultado na variável soma

Algoritmo:

1. Inicializar soma = 0

2. Repetir indefinidamente

a) Obter valor para x

b) Se x = 0

i. Apresentar soma

ii. Terminar repetição (2.)

c) soma = soma + x

d) Apresentar soma (resultado parcial)

36

Page 19: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

19

Computação e Programação 2015 / 2016

Exemplo soma parcelas com break

• Faz exactamente o mesmo que o exemplo soma

parcelas sem break

• As condições de fim de um ciclo devem ser facilmente legíveis, logo:

• Não é boa prática usar várias condições espalhadas pelo ciclo!

• Não é boa prática usar break em ciclos FOR!

37

Alinhamento da AT 8

• Estruturas de Repetição

• Estrutura FOR

• Ciclos FOR encadeados

• Estrutura WHILE

• A instrução break

• Pré-alocação de variáveis

Computação e Programação 2015 / 2016

Page 20: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

20

Computação e Programação 2015 / 2016

A pré-alocação de um array

• Os ciclos criam a possibilidade de um vector ou matriz se expandirem sucessivamente durante a execução

• Devido à maneira como o MATLAB realiza a gestão de memória esta forma é ineficaz. O próprio editor de código gera um warning quando detecta uma situação destas

39

Computação e Programação 2015 / 2016

A pré-alocação de um array

• Outra forma de expansão é a concatenação dentro de um ciclo

Concatenação

40

Page 21: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

21

Computação e Programação 2015 / 2016

A pré-alocação de um array

>> tic, exp_iterado, tocElapsed time is 0.324486 seconds.

>> tic, exp_iterado, tocElapsed time is 0.006287 seconds.

Pré-alocação de memória

41

Computação e Programação 2015 / 2016

A pré-alocação de um array

>> tic, exp_concate, tocElapsed time is 0.615073 seconds.

>> tic, exp_concate, tocElapsed time is 0.006146 seconds.

Outra forma de Pré-alocação

42

Page 22: Slides Computação e Programação MEMec+LEAN · 05/10/2015 3 Alinhamento da AT 6 • Estruturas de Repetição •Estrutura FOR •Ciclos FOR encadeados •Estrutura WHILE • A

05/10/2015

22

• Utilize ciclos for para repetições controladas por contador, e ciclos while para repetições controladas por uma condição (isto implica não utilizar break para terminar um ciclo for)

• Faça pré-alocação de memória: defina vectores e matrizes já com o seu número de elementos final, sempre que este número seja previsível. Evite sempre que possível acrescentar novos elementos dentro dos ciclos.

• Se um ciclo servir para introdução ou leitura de dados, guarde os dados num vector apenas se houver necessidade de voltar a aceder novamente aos valores individuais

Boas práticas de Programação

Computação e Programação 2015 / 2016 43

Computação e Programação 2015 / 2016

Referências

• Capítulo 4 de Stormy Attaway (2012), “Matlab: A Practical

Introduction to Programming and Problem Solving”, Elsevier.

44

As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva