24
21/09/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 3 Tipos de dados Funções, Operadores e Expressões Vectores Matrizes Utilização de funções com vectores e matrizes Microprocessador só entende números inteiros em base binária • Instruções do programa devem ser-lhe fornecidas em linguagem de baixo nível Linguagens de baixo nível são difíceis de programar pelos seres humanos e propensas a erros • Programa deve ser criado preferencialmente numa linguagem de alto nível Como se traduz o programa do alto para o baixo nível para poder ser executado? • Compilador (linguagens compiladas) • Interpretador (linguagens interpretadas) • Conceito misto Computação e Programação 2015 / 2016 2 Wrap Up da última aula

Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

Embed Size (px)

Citation preview

Page 1: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/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 3

• Tipos de dados• Funções, Operadores e Expressões• Vectores • Matrizes• Utilização de funções com vectores e matrizes

Microprocessador só entende números inteiros

em base binária

• Instruções do programa devem ser-lhe fornecidas em linguagem de baixo nível

Linguagens de baixo nível são difíceis de programar pelos

seres humanos e propensas a erros

• Programa deve ser criado preferencialmente numa linguagem de alto nível

Como se traduz o programa do alto para o baixo nível para poder

ser executado?

• Compilador (linguagens compiladas)

• Interpretador (linguagens interpretadas)

• Conceito misto

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

Wrap Up da última aula

Page 2: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

2

O processamento de dados implica o seu

armazenamento temporário

Entidades Variáveis

• O programador pode definir o seu valor inicial ou não

• O seu valor pode ser gerado e/ou modificado durante a execução do programa

Entidades Constantes

• São definidas pelo programador no momento da programação

• O seu valor não pode ser modificado pelo programa

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

Wrap Up da última aula

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

Alinhamento da AT 3

• Tipos de Dados

• Funções, Operadores e Expressões

• Vectores

• Matrizes

• Utilização de funções com vectores e matrizes

Page 3: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

3

• Se a memória do computador

só armazena números inteiros

em base binária, como é que o

programa reconhece: Números

reais? Caracteres de texto? ou

mesmo Números inteiros < 0 ?

Tipos de dados

10111010 245334

11111111 245335

11000000 245336

11111000 245337

11000000 245338

11000000 245339

11110010 245340

00001001 245341

Definindo um tipo (ou classe) para o objecto!

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

• Reais

• Inteiros (com ou sem sinal)

• Caracteres (letras, dígitos, símbolos, sinais de pontuação)

• Lógicos (valores lógicos true e false)

• No MATLAB encontramos a palavra class. A definição de classe é mais abrangente do que tipo e envolve

• o tipo de dados• as operações (métodos) que podem ser executadas sobre

o tipo de dados

Tipos de dados

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

Page 4: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

4

Tipos de dados no Matlab

Tipo básicos Descrição

single, double números reais

uint8, uint16, uint32, uint64

números inteiros sem signal

int8, int16, int32, int64,

números inteiros com signal

char caracteres

logical tipo lógico

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

Tipo assumido pelo MATLAB quando se cria uma variável numérica

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

Tipos de dados no Matlab

• Exemplo de diferentes capacidades de representação

Conversion Function Class Range of Values

int8 Signed 8-bit integer -27 to 27-1

int16 Signed 16-bit integer -215 to 215-1

int32 Signed 32-bit integer -231 to 231-1

int64 Signed 64-bit integer -263 to 263-1

uint8 Unsigned 8-bit integer 0 to 28-1

uint16 Unsigned 16-bit integer 0 to 216-1

uint32 Unsigned 32-bit integer 0 to 232-1

uint64 Unsigned 64-bit integer 0 to 264-1

Page 5: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

5

Conversão de tipo: casting

>> val = 6 + 3;

>> whos

Name Size Bytes Class Attributes

val 1x1 8 double

>> vali = int32(val);

>> whos

Name Size Bytes Class Attributes

val 1x1 8 double

vali 1x1 4 int32

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

Ao avaliar uma expressão como numérica o MATLAB assume

automaticamente o tipo double

É possível explicitar o tipo de uma variável recorrendo à função com

o nome do tipo

Números reais e Encoding

• Com a excepção dos tipos uint todos os restantes tipos de informação terão que obedecer a alguma convenção para poderem ser representados na memória

• No caso dos números reais uma norma comum é a IEEE 754 (floating-point computation)

Apenas um conjunto finito de números reais terão representação exacta!!!

Figu

ra: W

ikip

edia

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

Page 6: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

6

Caracteres e Encoding

• No caso dos caracteres a convenção mais conhecida será talvez o código ASCII, que associa um dado número inteiro a um carácter, e com o qual as normas actuais são ainda compatíveis

10111010 245334

01000110 245335

01110011 245336

00100001 245337

11101011 245338

11001000 245339

11110010 245340

00001001 245341

10111010 245334

11111111 245335

11000000 245336

11111000 245337

11000000 245338

11000000 245339

11110010 245340

00001001 245341

FF 70

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

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

Código ASCII

Caracteres que representam os algarismos de 0 a 9 e respectivo código numérico

• Tabela com representação do código numérico e do carácter que lhe está associado

Letras do alfabeto maiúsculas e minúsculas e respectivo código numérico

12

Page 7: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

7

Tipo char

>> nome = 'Carlos Picareta';

>> whos

Name Size Bytes Class Attributes

nome 1x15 30 char

• No MATLAB um valor literal do tipo char é representado entre plicas, por exemplo: 'a' ou 'S' ou '?' ou '4'

• Uma cadeia de caracteres (string) é simplesmente uma sequência de caracteres: 'melancia' ou '3ª parte'

• Uma variável do tipo char é criada quando a ela se atribuium valor literal do tipo char :

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

Tipo char e conversão de tipos

>> int32('F')

ans =

70

>> char(70)

ans =

F

• A codificação de caracteres na forma de números inteiros permite realizar diversas operações com caracteres

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

Conversão de carácter para inteiro

Conversão de inteiro para carácter

Page 8: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

8

Tipo char e conversão de tipos

>> 'abcd' + 1

ans =

98 99 100 101

>> char('abcd' + 1)

ans =

bcde

>> char('PALAVRA' + 32)

ans =

palavra

• A codificação de caracteres na forma de números inteiros permite realizar diversas operações com caracteres

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

Porquê?

Uma operação algébrica implica a conversão implícitapara valores numéricos, e o resultado será numérico

No entanto o resultado poderá serreconvertido para caracteres

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

Alinhamento da AT 3

• Tipos de Dados

• Funções, Operadores e Expressões

• Vectores

• Matrizes

• Utilização de funções com vectores e matrizes

Page 9: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

9

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

• Funções / operadores incluídos no core do MATLAB ou toolboxes da distribuição

• As funções são chamadas pelo nome seguido dos argumentos de entrada entre parêntesis. Podem também ser precedidas pelos argumentos de saída:

sinal = sign(-5)

O comando help explica em pormenor, e muitas vezes com exemplos, como funciona uma dada função

Funções e operadores pré-definidos

17

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

Operadores matemáticos

Comando Descrição

+ adição- subtracção, valor simétrico* produto/ divisão “por” ( 10 / 5 = 2 ) \ divisão “para” ( 5 \ 10 = 2 ) ^ exponenciação

help matlab\ops

18

Page 10: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

10

Funções pré-definidas (alguns exemplos)

Comando Descrição

sin, cos,tan, atan

funções trigonométricas

sqrt raiz quadrada

rem resto da divisão inteira ( 11 / 5 = 2, resto = 1 )

abs valor absoluto

fix, floor, ceil, round

funções de arredondamento

help matlab\elfun

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

• As expressões podem ser criadas utilizando:

• Valores numéricos e/ou variáveis (desde que já criadas!)

• Operadores

• Funções pré-definidas e/ou criadas pelo utilizador

• Parêntesis

• Operador Ellipsis (... )

Expressões

>> resultado = ( 3 + 5 ) + sin(1.5708) ...

* 2

resultado =

10.0000Expressão

Ellipsis

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

Page 11: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

11

• Precedência dos operadores:

1. () parêntisis

2. ^ expoente

3. - sinal de negação (valor simétrico)

4. *, /, \ produto e divisão

5. + , - adição e subtracção

Regras de precedência nas expressões

>> - ( 3 + 5 ) * 2

ans =

- 16

>> - 3 + 5 * 2

ans =

7

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

Função pré-definida format

>> 2 * sin(1.4)

ans =

1.9709

>> format long

>> 2 * sin(1.4)

ans =

1.970899459976920

>> format short

>> 2 * sin(1.4)

ans =

1.9709

SÓ AFECTA A APRESENTAÇÃO,

e não a precisão com que o número é guardado

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

Age sobre o ambiente de trabalho modificando a precisão com que os valores

são apresentados na Janela de Comando

Page 12: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

12

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

Alinhamento da AT 3

• Tipos de Dados

• Funções, Operadores e Expressões

• Vectores

• Matrizes

• Utilização de funções com vectores e matrizes

Vectores e Matrizes (arrays)

• Entidades utilizados para armazenar conjuntos de dados do mesmo tipo na forma de:

• vector linha com dimensão 1 x m • vector coluna com dimensão n × 1 • matrizes com dimensão n x m

Escalar

Vector Coluna Vector Linha Matriz

1×1

3×1

1×4

3×3

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

Page 13: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

13

Criação de vectores linha

>> vlin_1 = [1 2 3 4 5 6]

vlin_1 =

1 2 3 4 5 6

>> vlin_1 = [1,2,3,4,5,6]

vlin_1 =

1 2 3 4 5 6

>> vlin_1 = 1:6

vlin_1 =

1 2 3 4 5 6

>> vlin_1 = 1:2:6

vlin_1 =

1 3 5

O sinal : representa uma iteração

(em baixo, de 1 a 6 com passo 2)

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

>> vlin_2 = 1:2:6

vlin_2 =

1 3 5

>> vlin_3 = 6:-2:1

vlin_3 =

6 4 2

>> vlin_4 = [vlin_2 vlin_3]

vlin_4 =

1 3 5 6 4 2

Criação de vectores linha

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

Concatenação de vectores linha

Page 14: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

14

Criação de vectores coluna

>> vcol_1 = [1; 2]

vcol_1 =

1 2

>> vlin = 5:2:7;

>> vcol_2 = vlin'

vcol_2 =

5 7

>> vcol = [vcol_1; vcol_2]

vcol =

1 25 7

Dentro de [ ] ou { } o

sinal ; representa separação de linha

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

Concatenação de vectores coluna

Acesso / modificação de vectores

>> vlin = [6 7 8 9]

vlin =

6 7 8 9

>> vlin(3)

ans =

8

>> vlin(3:4)

ans =

8 9

>> vlin(2) = 5

ans =

6 5 8 9

É possível usar o operador : para definir um intervalo de índices

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

Page 15: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

15

Acesso / modificação de vectores

>> vlin(7)

??? Index exceeds matrix dimensions.

>> vlin(7) = 2

vlin =

6 7 8 9 0 0 2

>> vlin(7)

ans =

2

>> vlin([5 1 3 1])

ans =

0 6 8 6

Atribui um valor a um elemento ainda não existente, provocando

a expansão do vector

É possível aceder a elementos concretos, por qualquer ordem

que se deseje, usando um vector de índices

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

Acesso / modificação de vectores

>> vlin(6) = []

lin =

6 7 8 9 0 2

>> vlin(2:4) = []

vlin =

6 0 2

A atribuição de um vector vazio permite apagar um ou mais

elementos

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

Page 16: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

16

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

Alinhamento da AT 3

• Tipos de Dados

• Funções, Operadores e Expressões

• Vectores

• Matrizes

• Utilização de funções com vectores e matrizes

Criação de matrizes

>> mat = [4 3 1; 2 5 6]

mat =

4 3 1

2 5 6

>> mat = [3 5 7; 1 2]

??? Error using ==> vertcat

CAT arguments dimensions are not consistent.

>> mat = [2:4; 3:5]

mat =

2 3 4

3 4 5

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

Page 17: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

17

Criação de matrizes

>> randi([10,30],2,3)

ans =

17 22 29

27 21 16

>> rand(2)

ans =

0.7572 0.3804

0.7537 0.5678

>> zeros(2)

ans =

0 0

0 0

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

Acesso aos elementos da matrizes

>> mat = [4 3 1; 2 5 6]

mat =

4 3 1

2 5 6

>> mat(2,3)

ans =

6

>> mat(2,:)

ans =

2 5 6

>> mat(2,2:end)

ans =

5 6

Quando surge sozinho como índice operador : representa todos os índices

de uma dada dimensão (neste caso das colunas)

Ao definir um intervalo de índices é possível fazer referência ao último sem explicitar o seu valor usando a

palavra reservada end

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

Page 18: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

18

Modificação de matrizes

>> mat = [4 3 1; 2 5 6]mat =

4 3 12 5 6

>> mat(2,3) = 9ans =

4 3 12 5 9

>> mat(2,:) = 11:2:15ans =

4 3 111 13 15

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

Atribuição de um valor escalar aoelemento da 2ª linha 3ª coluna

Atribuição de um vector de 3 elementos a toda a 2ª linha

Modificação de matrizes

>> mat(:,4) = [6 10]'

mat =

4 3 1 6

11 13 15 10

>> mat(2,6) = 18

mat =

4 3 1 6 0 0

11 13 15 10 0 18

Atribuir um valor a um elemento, linha ou coluna,

ainda não existente, provoca a expansão da matriz

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

Page 19: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

19

Modificação de matrizes

>> mat(2,4) = []

??? Subscripted assignment dimension mismatch.

>> mat(:,4) = []

mat =

4 3 1 0 0

11 13 15 0 18

>> mat(:,2:4) = []

mat =

4 0

11 18

Ao contrário dos vectores não é possível eliminar um único

elemento, mas é possível eliminar uma linha, coluna ou sub-matriz

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

Modificação de matrizes

>> mat = randi([1,100],3,4)

mat =

14 61 2 94

21 28 75 47

20 20 45 42

>> fliplr(mat)

ans =

94 2 61 14

47 75 28 21

42 45 20 20

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

Matriz aleatória com elementos entre 1 e 100

Troca a ordem das colunas

Page 20: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

20

Modificação de matrizes

>> mat

mat =

14 61 2 94

21 28 75 47

20 20 45 42

>> flipud(mat)

ans =

20 20 45 42

21 28 75 47

14 61 2 94

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

Troca a ordem das linhas

Modificação de matrizes

>> mat

mat =

14 61 2 94

21 28 75 47

20 20 45 42

>> rot90(mat)

ans =

94 47 42

2 75 45

61 28 20

14 21 20

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

Roda a matriz 90 graus(NÃO É O MESMO QUE A

TRANSPOSTA!)

Page 21: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

21

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

Informação dimensional

Comando Descrição

size dimensões da matriz

length tamanho de um vectormaior dimensão de uma matriz

numel número de elementos de uma matriz

Exemplos de utilização

>> mat = [4 3 1

2 5 6];

>> size(mat)

ans =

2 3

>> length(mat)

ans =

3

>> numel(mat)

ans =

6

Outra forma de representar uma mudança de linha

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

Page 22: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

22

Matrizes tridimensionais

>> outra_mat(:,:,1) = [5 1 4 7

6 5 2 2

3 2 4 9];

>> outra_mat(:,:,2) = [3 2 3 1

7 3 4 8

3 1 1 5];

>> outra_mat(:,:,3) = [4 1 6 5

1 8 2 3

1 9 5 2];

>> outra_mat(1,3:4,2:3)

ans(:,:,1) =

3 1

ans(:,:,2) =

6 5

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

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

Alinhamento da AT 3

• Tipos de Dados

• Funções, Operadores e Expressões

• Vectores

• Matrizes

• Utilização de funções com vectores e matrizes

Page 23: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

23

Funções aplicadas a vectores e matrizes

>> vec = 0:pi/2:2*pi

vec =

0 1.5708 3.1416 4.7124 6.2832

>> sin(vec)

ans =

0 1.0000 0.0000 -1.0000 -0.0000

>> round(sin(vec))

ans =

0 1 0 -1 0

?

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

Funções aplicadas a vectores e matrizes

>> mat = [4 3 1

2 5 6];

>> sqrt(mat)

ans =

2.0000 1.7321 1.0000

1.4142 2.2361 2.4495

>> round(sqrt(mat))

ans =

2 2 1

1 2 2

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

Page 24: Slides Computação e Programação MEMec+LEAN · PDF filelinguagem de alto nível ... Wrap Up da última aula Computação e Programação 2015 / 2016 ... 21/09/2015 5 Conversão

21/09/2015

24

• Não definir identificadores (nomes) de variáveis iguais aos identificadores (nomes) de funções

• É sempre preferível assumir que as dimensões de uma matriz são desconhecidas e utilizar as funções length e size

Boas práticas de Programação

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

Referências

• Capitulo 1 de Matlab: A Practical Introduction to Programming

and Problem Solving, Stormy Attaway (2012) Elsevier.

• Intro to MATLABhttp://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/getstart.pdf

http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/matlab_prog.pdf

• Demos relevantes: • Getting Started with MATLAB (5 min, 18 sec)

• http://www.mathworks.com/videos/matlab/getting-started-with-matlab.html

• Working in The Development Environment (4 min, 7 sec)

• http://www.mathworks.com/videos/matlab/working-in-the-development-environment.html

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

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