aula 19: matrizes - introdu§£o a programa§£o .2018-10-16  dada uma...

Download Aula 19: Matrizes - Introdu§£o a Programa§£o .2018-10-16  Dada uma cole§£o de N nmeros

Post on 11-Feb-2019

214 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Aula 19: MatrizesIntroduo a Programao

Tlio Toffolo & Puca Huachihttp://www.toffolo.com.br

BCC201 2018/2Departamento de Computao UFOP

http://www.toffolo.com.br

Aula anterior

Vetores

2 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Aula de hoje

1 Exerccio da ltima aula

2 Introduo

3 Definio

4 Exemplos e exerccios

5 Prxima aula

2 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Aula de hoje

1 Exerccio da ltima aula

2 Introduo

3 Definio

4 Exemplos e exerccios

5 Prxima aula

2 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exerccio da ltima aula

Ordenao

Dada uma coleo de N nmeros inteiros, implemente uma funo paracoloc-los em ordem crescente.

Uma possvel soluo trocar valores adjacentes at que nenhuma trocaseja necessria.

Para cada posio 0 i < N - 1, verificamos se vetor[i] maiorque vetor[i+1].

Se for, trocamos!

Repetimos para todas as posies 0 i < N - 1 at nenhuma trocaser necessria.

Como implementar esta funo?

3 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exerccio da ltima aula

Passo 1:

Determinar o algoritmo para resolver o problema!

Em outras palavras: como ordenar um array?

Imagine um array com 4 elementos...

Agora aplique seu algoritmo sobre este mini-array.

4 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exerccio da ltima aula

Passo 2:

Agora sim, vamos implementar o cdigo.

Criaremos uma funo para trocar elementos.

E outra para fazer todas as trocas necessrias para colocar o array emordem crescente.

5 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exerccio da ltima aula

Funo que troca dois nmeros inteiros:

1 void troca(int &a, int &b)2 {3 int aux = a;4 a = b;5 b = aux;6 }

6 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exerccio da ltima aula

Funo que troca elementos at o array ficar ordenado:

1 void ordena(int array[], int tamanho)2 {3 bool trocou;4 do {5 trocou = false;6 for (int i = 0; i < tamanho - 1; i++) {7 if (array[i] > array[i+1]) {8 troca(array[i], array[i+1]);9 trocou = true;

10 }11 }12 } while (trocou);13 }

Esta funo quase um bubblesort( um bubblesort piorado, pois poderia ser menos ineficiente)

7 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

1 #include 2 using namespace std;34 #define N 1556 void troca(int&, int&);7 void ordena(int[], int);89 int main()

10 {11 int data[N] = { 0, 9, 8, 21, 33, 1, -1, 10, 7, 11, 6, 2, 5, 4, 3 };12 ordena(data, N);1314 for (int i = 0; i < N; i++)15 cout

Aula de hoje

1 Exerccio da ltima aula

2 Introduo

3 Definio

4 Exemplos e exerccios

5 Prxima aula

8 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exemplo

Fazer um programa para ler as notas de 4 provas para 50 alunos de umaturma e calcular a mdia do aluno e mdia da turma.

Soluo: criar 4 vetores de 50 posies, sendo um para cada nota:

1 double nota1[50], nota2[50], nota3[50], nota4[50];

9 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Introduo

10 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Introduo

E se tivermos que armazenar 100 notas?

Criaremos 100 vetores com 100 nomes diferentes?

11 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Introduo

Uma soluo mais eficaz para resolver o problema o uso de matrizes:

12 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Aula de hoje

1 Exerccio da ltima aula

2 Introduo

3 Definio

4 Exemplos e exerccios

5 Prxima aula

12 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Variveis Compostas Homogneas Matrizes

As variveis compostas homogneas correspondem a um conjunto deelementos de mesmo tipo e que compartilham um mesmo nome;

Cada um dos elementos unicamente identificado por um nmerointeiro (ndice) que especifica a sua localizao dentro da estrutura;

Estas variveis podem ser unidimensionais (vetores) oumultidimensionais (matrizes);

A definio da varivel composta homognea pode ser feita da mesmaforma que definio de variveis simples.

13 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Variveis Compostas Homogneas Matrizes

Matriz uma varivel composta homognea com duas ou maisdimenses;

A definio da varivel pode ser feita da mesma forma que a definiodo vetor, porm deve ser especificado o nmero de elementos paracada dimenso da matriz;

A referncia a cada elemento deve ser feita com a utilizao de umndice para cada dimenso;

Matrizes podem ser consideradas vetores de vetores.

14 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Introduo

Por exemplo, uma matriz bi-dimensional pode ser vista como uma tabelade m linhas e n colunas.

15 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Declarao de Matrizes

[] [];

: tipo dos dados que sero armazenados no vetor (int, char,float, etc);

: nome dado varivel vetor;

: nmero de elementos da primeira dimenso;

: nmero de elementos da segunda dimenso;

As linhas e colunas so numeradas de 0 at tamanho 1.

16 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Declarao de Matrizes

Exemplo:

1 //matriz com 100 linhas e 50 colunas2 double notas[100][50];

17 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Acessando os elementos

Forma de ter acesso ao elemento de uma matriz:[][]

Exemplos:

1 //imprimir o elemento da linha 3 e coluna 10 da matriz notas2 cout

Observao

C/C++ no verifica o limite das dimenses das variveis compostas;

Se uma instruo for feita com ndices alm do limite, no haver errode execuo do programa e outros valores sero sobrepostos namemria;

Assim, dados e/ou programas sero sobrepostos;

responsabilidade do programador providenciar a verificao doslimites das dimenses das variveis compostas;

19 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exemplo

Faa um programa que leia e imprima uma matriz 43 (4 linhas e 3colunas).

20 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Declarao da matriz

Matriz (M x N)

1 #define M 42 #define N 334 int matriz[M][N]; // note que M e N so constantes

21 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Leitura dos dados da matriz

Matriz (M x N)

1 // capturando dados2 for (int i = 0; i < M; i++) { //para as linhas3 for (int j = 0; j < N; j++) { //para as colunas4 cin >> matriz[i][j];5 }6 }

22 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Impresso da matriz

Matriz (M x N)

1 // imprimindo o contedo da matriz2 for (int i = 0; i < M; i++) { //para as linhas3 for (int j = 0; j < N; j++) { //para as colunas4 cout

1 int main()2 {3 int matriz[4][3];45 // capturando dados6 for (int i = 0; i < 4; i++) { // para as linhas7 for (int j = 0; j < 3; j++) { // para as colunas8 cout

Inicializao de Matrizes I

Inicializando cada elemento da matriz (m x n) com o valor 0.

1 for (int i = 0; i < M; i++) //para as linhas2 for (int j = 0; j < N; j++) //para as colunas3 matriz[i][j] = 0;

25 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Inicializao de Matrizes II

Inicializando na declarao. Processo semelhante inicializao devetores.

1 int matriz[3][4] = { {10, 20, 30, 40},2 {50, 60, 70, 80},3 {90, 11, 22, 33} };

26 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exemplo

Dada uma matriz (45), calcular a soma de todos os elementos damatriz. Calcular tambm o somatrio dos elementos de cada linha damatriz, armazenando o somatrio em um vetor.

27 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Exemplo

1 int main()2 {3 // declarao das variveis4 float mat[4][5], somaLinha[4], total;56 // total se inicia com zero7 total = 0;89 for (int i = 0; i < 4; i++) {

10 // a soma da cada linha inicializada com zero11 somaLinha[i] = 0;1213 // somando os valores da linha em somaLinha[i]14 for (j = 0; j < 5; j++)15 somaLinha[i] += mat[i][j];1617 // somando o total de cada linha18 total += somaLinha[i];19 }20 }

28 / 39 Tlio Toffolo & Puca Huachi Introduo a Programao Aula 19: Matrizes

Matriz vs array

Matrizes bidimensionais se comportam como arrays de array...

1 int matriz[4][5] = { {11, 12, 13, 14, 15},2 {21, 22, 23, 24, 25},3 {31, 32, 33, 34, 35},4 {41, 42, 43, 44, 45} };

Logo, uma matriz bidimensional pode ser imaginada como um arrayunidimensional de 4 elementos do tipo int[] onde cada um dos 4elementos um array de 5 elementos do tipo int:

1 matriz[0] ---> {11, 12, 13, 14, 15}2 matriz[1] ---> {21, 22, 23, 24, 25}3 matriz[2]