Vous êtes sur la page 1sur 34

ECT2303 – Linguagem de Programação

Aula 21 þ Matrizes

Einstein Santos

UFRN

19 de outubro de 2018

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 1 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 2 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 3 / 34


Definição de matrizes

Matriz é um tipo de dado em C++ usado para representar uma coleção


de variáveis de mesmo tipo e que compartilham um mesmo nome.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 4 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 5 / 34


Declaração de matrizes
Sintaxe

TIPO NOME [ TAMANHO1 ][ TAMANHO2 ];

sendo TAMANHO1 e TAMANHO2 inteiros > 0.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 6 / 34


Declaração de matrizes
Exemplos

1) int numeros[100][30];

2) float areas[50][70], volumes[10][130];

3) double notas[3][120];

4) char nome[90][80];

5) bool bandeiras[5][10];

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 7 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 8 / 34


Referência aos elementos de uma matriz
Sintaxe

NOME [ ÍNDICE1 ][ ÍNDICE2 ]

os ÍNDICE1 e ÍNDICE2 são inteiros ≥ 0;

O ÍNDICE1 é geralmente relacionado às linhas de uma matriz mate-


mática;

O ÍNDICE2 é geralmente relacionado às colunas de uma matriz mate-


mática.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 9 / 34


Referência aos elementos de uma matriz
Exemplo

int M[2][5];

M[0][0] = -1; M[1][0] = 12;


M[0][1] = 0; M[1][1] = 25;
M[0][2] = 15; M[1][2] = 13;
M[0][3] = 67; M[1][3] = 74;
M[0][4] = 41; M[1][4] = 33;

M :
{índices das linhas}
^
(0) |-1| 0|15|67|41|
(1) |12|25|13|74|33| {elementos}
(0)(1)(2)(3)(4) {índices das colunas}

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 10 / 34


Referência aos elementos de uma matriz
Exemplo

Visão abstrata:

M :
(0)(1)(2)(3)(4)
(0) |-1| 0|15|67|41|
(1) |12|25|13|74|33|

Visão real:

M :
(0)(1)(2)(3)(4)(5)(6)(7)(8)(9)
|-1| 0|15|67|41|12|25|13|74|33|

M[i][j] = M[ i * COLUNAS + j ]

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 11 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 12 / 34


Operações de armazenamento e de leitura com
matrizes
Exemplos de armazenamento de valores em matrizes

1) for(int i=0; i<30; i++){


for(int j=0; j<10; j++){
cin >> m[i][j];
}
}
2) for(int l=0; l<M; l++){
for(int c=0; c<N; c++){
Y[l][c] = 2*l - 3*c;
}
}
3) H[0][0] = 14;
H[1][0] = H[0][0] + H[0][1];
H[1][1] = 4 * H[1][0];

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 13 / 34


Operações de armazenamento e de leitura com
matrizes
Exemplos de leitura de elementos de matrizes

1) for(int i=0; i<30; i++){


for(int j=0; j<10; j++){
cout << m[i][j];
}
}
2) for(int l=0; l<M; l++){
for(int c=0; c<N; c++){
cout << y[l][c];
}
}
3) cout <<H[0][0] <<" " <<H[0][1];
4) cout <<R[0][0] + R[9][9];

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 14 / 34


Operações de armazenamento e de leitura com
matrizes
Observação a respeito de limites excedidos em matrizes

Observação:

A linguagem C++ não verifica se os limites de uma matriz foram


excedidos. Isso fica a cargo do programador.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 15 / 34


Operações de armazenamento e de leitura com
matrizes
Observação a respeito de limites excedidos em matrizes

O código abaixo não gera erro de compilação, porém não funcionará


corretamente.
1 # include < iostream >
2
3 using n a m e s p a c e std ;
4
5 int main ()
6 {
7 int m [2][5];
8
9 for ( int i =0; i < 10; i ++) // i < 2
10 for ( int j =0; j < 10; j ++) // j < 5
11 cin >>m [ i ][ j ];
12
13 return 0;
14 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 16 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 17 / 34


Inicialização de uma matriz
Exemplos

1) int mes[2][6] = { {31 , 28 , 31 , 30 , 31 , 30} , {31 , 31 , 30 , 31 ,


30 , 31} };

2) int mes[][6] = { {31 , 28 , 31 , 30 , 31 , 30} , {31 , 31 , 30 , 31 ,


30 , 31} };

3) int x[4][3] = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {9, 10, 11} };

4) char vogal[2][6] = { {’a’, ’e’, ’i’, ’o’, ’u’, ’\0’},


{’A’, ’E’, ’I’, ’O’, ’U’, ’\0’} };

5) char vogal[2][6] = {"aeiou", "AEIOU"};

6) int y[5][5] = {}; // Inicializa todos os elementos de ’y’ com 0 (zero);

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 18 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 19 / 34


Utilização de matrizes com número definido de
elementos
Exemplo – Enunciado

. Escreva um programa em C++ que calcule e exiba a porcentagem de


nulidade de uma matriz real de ordem 10x8.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 20 / 34


Utilização de matrizes com número definido de
elementos
Exemplo – Implementação

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
5 int main ()
1 nulidade = (( double ) cont /
6 {
(10 * 8) ) * 100.0;
7 int cont =0;
2
8 double M [10][8] , nulidade ;
3 cout <<" Nulidade = " <<
9
nulidade <<" %. " << endl ;
10 for ( int i =0; i <10; i ++) {
4
11 for ( int j =0; j <8; j ++) {
5 return 0;
12 cin >> M [ i ][ j ];
6 }
13 if ( M [ i ][ j ] == 0.0) {
14 cont ++;
15 }
16 }
17 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 21 / 34


Utilização de matrizes com número indefinido de
elementos
Exemplo – Enunciado

. Faça um programa em C++ que leia uma matriz A, inteira, de ordem


mxn e que gere e exiba a matriz B composta pelos elementos da matriz
A maiores que a média aritmética dos elementos desta matriz. Os
elementos iguais ou menores que à média devem se tornar nulos na
matriz B.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 22 / 34


Utilização de matrizes com número indefinido de
elementos
Exemplo – Implementação (versão 1)

1 # include < iostream >


2 1 ma = soma / ( m * n ) ;
3 # define L 100 2
4 # define C 100 3 cout <<" Média aritmética = " <<
5 ma << endl ;
6 using n a m e s p a c e std ; 4
7 5 cout <<" Matriz B : " << endl ;
8 int main () 6 for ( int i =0; i < m ; i ++) {
9 { 7 for ( int j =0; j < n ; j ++) {
10 int m , n , A [ L ][ C ] , B [ L ][ C ]; 8 if ( A [ i ][ j ] > ma ) {
11 double soma =0.0 , ma ; 9 B [ i ][ j ] = A [ i ][ j ];
12 10 } else {
13 cout <<" Digite a ordem da matriz 11 B [ i ][ j ] = 0;
( <=100 x100 ) : " ; 12 }
14 cin >>m > > n ; 13 cout <<B [ i ][ j ] <<" " ;
15 14 }
16 for ( int i =0; i < m ; i ++) { 15 cout << endl ;
17 for ( int j =0; j < n ; j ++) { 16 }
18 cin >>A [ i ][ j ]; 17
19 soma += A [ i ][ j ]; 18 return 0;
20 } 19 }
21 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 23 / 34


Utilização de matrizes com número indefinido de
elementos
Exemplo – Implementação (versão 2)

1 # include < iostream >


1 ma = soma / ( m * n ) ;
2
2
3 using n a m e s p a c e std ;
3 cout <<" Média aritmética = " <<
4
ma << endl ;
5 int main ()
4
6 {
5 cout <<" Matriz B : " << endl ;
7 int m , n ;
6 for ( int i =0; i < m ; i ++) {
8
7 for ( int j =0; j < n ; j ++) {
9 cout <<" Digite a ordem da matriz
8 if ( A [ i ][ j ] > ma ) {
: ";
9 B [ i ][ j ] = A [ i ][ j ];
10 cin >>m > > n ;
10 } else {
11
11 B [ i ][ j ] = 0;
12 int A [ m ][ n ] , B [ m ][ n ];
12 }
13 float soma =0.0 , ma ;
13 cout <<B [ i ][ j ] <<" " ;
14
14 }
15 for ( int i =0; i < m ; i ++) {
15 cout << endl ;
16 for ( int j =0; j < n ; j ++) {
16 }
17 cin >>A [ i ][ j ];
17
18 soma += A [ i ][ j ];
18 return 0;
19 }
19 }
20 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 24 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 25 / 34


Utilização de matrizes de caracteres
Exemplo – Enunciado

. Implemente um programa em C++ que leia uma data no formato DD


MM AAAA e exiba na tela a data com o mês por extenso. Ex.: 05 03
1887 → 5 de março de 1887.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 26 / 34


Utilização de matrizes de caracteres
Exemplo – Implementação

1 # include < iostream >


2 # include < cstring >
3
4 using n a m e s p a c e std ;
5
6 int main ()
7 {
8 int dia , mes , ano ;
9 char meses [12][10]={ " janeiro " , " fevereiro " , " março " , "
abril " , " maio " , " junho " , " julho " , " agosto " , " setembro "
, " outubro " , " novembro " , " dezembro " };
10
11 cout <<" Digite a data no formato DD MM AAAA : " ;
12 cin >> dia > > mes > > ano ;
13
14 mes = mes - 1;
15
16 cout << dia <<" de " << meses [ mes ] <<" de " << ano << endl ;
17
18 return 0;
19 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 27 / 34


Utilização de matrizes de caracteres
Exemplo – Enunciado

. Escreva um programa em C++ que leia as matrículas de n alunos e que


as armazene em uma matriz de caracteres. O programa deve calcular
e exibir as quantidades de alunos ingressos nos anos de 2015, 2016
e 2017.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 28 / 34


Utilização de matrizes de caracteres
Exemplo – Implementação

1 for ( int i =0; i < n ; i ++) {


1 # include < iostream >
2 if ( mat [ i ][2]== ’1 ’ && mat [ i ][3]== ’5 ’
2
){
3 using n a m e s p a c e std ;
3 cont [0]++;
4
4 } else if ( mat [ i ][2]== ’1 ’ && mat [ i
5 int main ()
][3]== ’6 ’) {
6 {
5 cont [1]++;
7 int n , cont [3]={};
6 } else if ( mat [ i ][2]== ’1 ’ && mat [ i
8 char mat [150][11];
][3]== ’7 ’) {
9
7 cont [2]++;
10 cout <<" Digite a
8 }
quantidade de alunos :
9 }
";
10
11 cin >>n ;
11 cout <<" Quantidade de alunos de 2015:
12
" << cont [0] << endl ;
13 cin . ignore () ;
12 cout <<" Quantidade de alunos de 2016:
14
" << cont [1] << endl ;
15 cout <<" Digite as
13 cout <<" Quantidade de alunos de 2017:
matrículas : " << endl ;
" << cont [2] << endl ;
16 for ( int i =0; i < n ; i ++) {
14
17 cin . getline ( mat [ i ] ,11) ;
15 return 0;
18 }
16 }

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 29 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 30 / 34


Erros comuns
Erros comuns ao manusear matrizes

1)
for(int i=0 ; i < m ; i++){
for(int j=0 ; j < n ; j++){
cout << MAT[m][n];
}
}
2)
for(int i=0 ; i < m ; i++){
for(int j=0 ; j < n ; j++){
cin >> T[i][j];
}
}
cout << T[i][j];
3)
int m, n, A[m][n];

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 31 / 34


Sumário

1 Definição de matrizes

2 Declaração de matrizes

3 Referência aos elementos de uma matriz

4 Operações de armazenamento e de leitura com matrizes

5 Inicialização de uma matriz

6 Utilização de matrizes com número definido e indefinido de elementos

7 Utilização de matrizes de caracteres

8 Erros comuns

9 Exercícios

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 32 / 34


Exercícios

1. Implemente um programa em C++ que gere e exiba uma matriz A de


ordem mxn cujos elementos são da forma:

 2i + 7j − 2 , se i < j
2
A[i, j] = 3i − 1 , se i = j
 3
4i − 5j 2 + 1 , se i > j

2. Escreva um programa em C++ que calcule a soma dos elementos,


de uma matriz numérica quadrada lida, que estão acima da diagonal
principal. A soma calculada deve ser exibida.
3. Faça um programa em C++ que obtenha um vetor cujos elementos
sejam a soma dos elementos de cada coluna de uma matriz numérica
lida de ordem mxn. O vetor deve ser exibido.

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 33 / 34


Matrizes

Fim da aula 21

Einstein Santos (UFRN) ECT2303 – Linguagem de Programação 19 de outubro de 2018 34 / 34

Vous aimerez peut-être aussi