49
1 Aula 03: - Funções e procedimentos - Vetores e matrizes MCTA028 Programação Estruturada Prof. João Henrique Kleinschmidt Material elaborado pelo Prof. Jesús P. Mena-Chalco 3Q-2018

Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

1

Aula 03:

- Funções e procedimentos

- Vetores e matrizes

MCTA028 – Programação Estruturada

Prof. João Henrique Kleinschmidt

Material elaborado pelo Prof. Jesús P. Mena-Chalco

3Q-2018

Page 2: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

2

Funções

Page 3: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

3

Funções (modularidade)

Consiste em dividir uma atividade em componentes, rotulados e endereçáveis

Uma função devolve um valor.

A função invocadora (main) é suspensa quando executar a outra função.

As variáveis locais nãosão conhecidas fora

da função

Page 4: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

4

Exercício 1

Crie uma função que permita

calcular uma aproximação de

PI usando a serie de

Gregory:

A função deve aceitar um

parâmetro que represente o

número de termos a ser

considerado na somatória.

4.000000

3.041840

3.131593

3.141493

Page 5: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

5

Exercício 1

Crie uma função que permita

calcular uma aproximação de

PI usando a série de

Gregory:

A função deve aceitar um

parâmetro que represente o

número de termos a ser

considerado na somatória.

4.000000

3.041840

3.131593

3.141493

Page 6: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

6

Exercício 2

Modifique a função anterior

de tal forma que faça a

somatória dos termos

maiores ou iguais a x.

A função deve aceitar um

parâmetro que represente o

valor x (precisão).

3.1215946526

3.1415924536

Page 7: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

7

Exercício 2

Modifique a função anterior

de tal forma que faça a

somatória dos termos

maiores ou iguais a x.

A função deve aceitar um

parâmetro que represente o

valor x (precisão).

3.1215946526

3.1415924536Desafio: Quantos termos são necessários?

Page 8: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

8

Procedimentos?

Page 9: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

9

Procedimentos

Na linguagem C existem apenas funções, mas saiba que

existem outras linguagens que aceitam funções e

procedimentos (em pascal: Function e Procedure):

Uma função devolve sempre um valor.

Um procedimento não devolve qualquer valor.

A forma de invocar funções e procedimentos é diferente:

Funções: x = pi(0.001)

Procedimentos: printf(“%f”, x)

Page 10: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

10

Procedimentos

Uma função que devolve “void” é chamada de procedimento.

Page 11: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

11

Procedimento: exemplo

Page 12: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

12

Vetores

Page 13: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

13

Armazenar 10 inteiros em um programa...

Usando variáveis:

Usando um vetor:

Para acessar a um elemento, use um índice.a[0] → 6a[4] → 100

Page 14: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

14

Vetores

Os elementos de um vetor são

armazenados/alocados de forma

consecutiva na memória.

Os elementos são acessados por

seu índice dentro do vetor.

10 4 -95 37 2910X:=

0 1 2 3 4 …

Page 15: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

15

Memória (hardware)

RAM HDD SSD

......

Page 16: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

16

Memória (hardware)

Geralmente o endereço do “objeto“ é o endereço do 1ro byte.

0

N

Page 17: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

17

Terminologia

01010111

11000011

01100100

11100010

0x37FD00

0x37FD01

0x37FD02

0x37FD03

4 bytes

Page 18: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

18

Vetores

Declaração de uma variável que representa um vetor de 13 inteiros

10 4 -95 37 2910 -6vetor :=

0 1 2 3 4 5 6 7 8 9 10 11 12

10 4 -95 37 2910 3 0

Índice / Deslocamento

1 2 3 4 5 6 7 8 9 10 11 12 13

PosiçãoO vetor contém 13 Elementos

Page 19: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

19

Vetores

Page 20: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

20

Vetores

1

0

4195773

0

-1939313376

32764

0

0

4195696

0

4195392

0

-1939313152

0

1

2

3

4

5

6

7

8

9

10

11

12

Page 21: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

21

Vetores

Page 22: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

22

Vetores

32741

771953096

32741

0

-1

1

0

4195773

0

-1699835760

32764

0

0

4195696

0

4195392

0

-1699835536

32764

0

-5

-4

-3

-2

-1

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Page 23: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

23

Em concreto

Um vetor é uma coleção de valores.

Três importantes características:

Os vetores representam um grupo de dados relacionados.

Todos os dados devem ter o mesmo tipo.

O tamanho do vetor é definido na sua criação/definição.

Page 24: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

24

Vetores

(*) Fonte: http://www.studytonight.com/c/datatype-in-c.php

Page 25: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

25

Vetores

Page 26: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

26

Vetores

40

20

80

10

80

Page 27: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

27

Vetores

10

10

10

10

10

Page 28: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

28

Matrizes

Page 29: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

29

Matriz bidimensional

.

.

.

linhas

colunas

0

1

2

3

0 1 2 3 4 5 ...

Page 30: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

30

Matriz bidimensional

matriz[2][0]

0

1

2

3

0 1 2 3 4 5

matriz[1][4]

Page 31: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

31

Matriz bidimensional

0000000

0000000

0000000

0000000

0000000

Page 32: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

32

Declara uma matriz Mde 100 linhas

com 200 colunas(20mil inteiros)

Material adaptado da aula de Matrizes de Ronaldo F. Hashimoto e Carlos H. Morimoto (IME/USP)

A memória do computador é linear!

Page 33: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

33

Memória (hardware)

RAM HDD SSD

......

Page 34: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

34

Estrutura da matriz na memória do computador

Material adaptado da aula de Matrizes de Ronaldo F. Hashimoto e Carlos H. Morimoto (IME/USP)

Page 35: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

35Material adaptado da aula de Matrizes de Ronaldo F. Hashimoto e Carlos H. Morimoto (IME/USP)

Disposição dos 20mil elementos da matriz M na memória

Page 36: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

36

Matriz bidimensional (imagem em níveis de cinza)

Nível=18

Page 37: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

37

Matriz tridimensional (imagem em RGB)

{Red, Green, Blue}

Page 38: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

38

Matrizes

0

1

2

3

0 1 2 3 4 5

0

1

2

3

0

1

2

3

0 1 2 3 4 5

Matriz unidimensional

(vetor/Array)

Matriz bidimensional

(2D)

Matriz tridimensional

(3D)

Page 39: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

39

Matrizes

0

1

2

3

0 1 2 3 4 5

0

1

2

3

0

1

2

3

0 1 2 3 4 5

Matriz unidimensional

(vetor/Array)

Matriz bidimensional

(2D)

Matriz tridimensional

(3D)

M[2] M[2][4] M[2][5][2]

Page 40: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

40

Dimensões?

100

200

3

Page 41: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

41

Page 42: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

42

Processamento de imagens multiespectrais (imagens do mesmo objeto, mas capturadas com diferentes comprimentos de onda eletromagnéticas)Os aparelhos consideram diferentes comprimentos de onda para cada camada.

http://all-geo.org/volcan01010/2013/01/processing-arsf-remote-sensing-data-with-open-source-gis-tools/

Page 43: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

43

Atividade em aula

Page 44: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

44

Questão 1 - a

printf("%d\n", funcao1(v1, 4));

100

printf("%d\n", funcao1(v2, 5));

80

Devolve o último elemento do vetor.

Page 45: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

45

Questão 1 - b

printf("%d\n", funcao2(v1, 4));

0

printf("%d\n", funcao2(v2, 5));

0

Devolve 0.

Page 46: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

46

Questão 1 - c

printf("%d\n", funcao3(v1, 4));

0

printf("%d\n", funcao3(v2, 5));

3

Devolve a quantidade de elementosiguais no vetor.

Page 47: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

47

Questão 2

printf("%d\n", funcao4(3, 4, M));

1

Verifica se a quantidade de elementosnegativos é igual à quantidade de númerospositivos.

Se houver mais números positivos, retornaverdadeiro (devolve 1), casocontrário, devolve 0.

Page 48: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

48

Questão 3

Indique se são verdadeiras ou faltas as seguintes afirmações(resposta correta +0,5, incorreta -0,5)

(a) [ ] Uma função em C pode devolver simultaneamente mais do que um valor.

(b) [ ] Uma função em C tem que devolver sempre um inteiro.

(c) [ ] Os parâmetros das funções podem ser do tipo void.

(d) [ ] A instrução return, termina a execução de uma função apenas se for a

(e) última instrução da função em que se encontra

(f) [ ] A instrução return, quando executada dentro da função main, termina o

(g) programa.

(h) [ ] O nome de uma função é opcional.

Page 49: Aula 03: - Funções e procedimentos - Vetores e matrizesprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_03_… · Declara uma matriz M de 100 linhas com 200 colunas

49

Questão 3

Indique se são verdadeiras ou faltas as seguintes afirmações(resposta correta +0,5, incorreta -0,5)

(a) [ F ] Uma função em C pode devolver simultaneamente mais do que um valor.

(b) [ F ] Uma função em C tem que devolver sempre um inteiro.

(c) [ F ] Os parâmetros das funções podem ser do tipo void.

(d) [ F ] A instrução return, termina a execução de uma função apenas se for a

última instrução da função em que se encontra

(e) [ V ] A instrução return, quando executada dentro da função main, termina o

programa.

(f) [ F ] O nome de uma função é opcional.

Pode devolver qualquer tipo de dado básico ou ponteiro

Em C, uma função pode devolver apenas 1 valor (tipo básico ou ponteiro)

Não. Cada parâmetro deve ter um tipo de dado associado