Sie sind auf Seite 1von 27

ECT2303 – Linguagem de Programação

Aula 23 þ Funções e Matrizes I

Einstein Santos

UFRN

26 de outubro de 2018

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


Sumário

1 Matrizes como argumentos de funções

2 Matrizes x passagem por referência

3 Exercícios

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


Sumário

1 Matrizes como argumentos de funções

2 Matrizes x passagem por referência

3 Exercícios

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


Matrizes como argumentos de funções
Exemplo 1 – Enunciado

. Escreva um programa em C++ que leia na função main() duas ma-


trizes inteiras A e B, ambas de ordem mxn, e que utilize uma função
auxiliar soma para realizar a operação A + B e outra função auxiliar
subtracao para realizar a operação A - B. As matrizes resultantes
das operações devem ser exibidas em suas respectivas funções auxi-
liares.

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


Matrizes como argumentos de funções
Exemplo 1 – Implementação

1 # include < iostream >


2
3 using n a m e s p a c e std ; 1 do {
4 2 cout <<" Digite o número de
5 # define L 50 colunas ( <=50) : " ;
6 # define C 50 3 cin >>n ;
7 4 } while (n <=0 || n >50) ;
8 void leMatriz ( int [][ C ] , int , 5
int ) ; 6 cout <<" Digite os elementos da
9 void soma ( int [][ C ] , int [][ C ] , matriz A : " << endl ;
int , int ) ; 7 leMatriz (A ,m , n ) ;
10 void subtracao ( int [][ C ] , int 8
[][ C ] , int , int ) ; 9 cout <<" Digite os elementos da
11 matriz B : " << endl ;
12 int main () 10 leMatriz (B ,m , n ) ;
13 { 11
14 int A [ L ][ C ] , B [ L ][ C ] , m , n ; 12 soma (A ,B ,m , n ) ;
15 13 subtracao (A ,B ,m , n ) ;
16 do { 14
17 cout <<" Digite o número de 15 return 0;
linhas ( <=50) : " ; 16 }
18 cin >>m ;
19 } while (m <=0 || m >50) ;

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


Matrizes como argumentos de funções
Exemplo 1 – Implementação (cont.)

1 void leMatriz ( int X [][ C ] , int m , int n ) {


2 for ( int i =0; i < m ; i ++)
3 for ( int j =0; j < n ; j ++)
4 cin >>X [ i ][ j ];
5 }
6
7 void soma ( int X [][ C ] , int Y [][ C ] , int m , int n ) {
8 cout <<" Matriz soma : " << endl ;
9 for ( int i =0; i < m ; i ++) {
10 for ( int j =0; j < n ; j ++) {
11 cout <<X [ i ][ j ] + Y [ i ][ j ] <<" " ;
12 }
13 cout << endl ;
14 }
15 }
16
17 void subtracao ( int X [][ C ] , int Y [][ C ] , int m , int n ) {
18 cout <<" Matriz subtração : " << endl ;
19 for ( int i =0; i < m ; i ++) {
20 for ( int j =0; j < n ; j ++) {
21 cout <<X [ i ][ j ] - Y [ i ][ j ] <<" " ;
22 }
23 cout << endl ;
24 }
25 }

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


Matrizes como argumentos de funções
Exemplo 2 – Enunciado

. Reescreva o programa da questão anterior de modo que as matrizes


resultantes das operações sejam exibidas na função main().

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


Matrizes como argumentos de funções
Exemplo 2 – Implementação

1 # include < iostream > 1 do {


2 using n a m e s p a c e std ; 2 cout <<" Digite o número de
3 # define L 50 colunas ( <=50) : " ;
4 # define C 50 3 cin >>n ;
5 4 } while (n <=0 || n >50) ;
6 void leMatriz ( int [][ C ] , int , 5
int ) ; 6 cout <<" Digite os elementos da
7 void escreveMatriz ( int [][ C ] , matriz A : " << endl ;
int , int ) ; 7 leMatriz (A ,m , n ) ;
8 void soma ( int [][ C ] , int [][ C 8
] , int [][ C ] , int , int ) 9 cout <<" Digite os elementos da
; matriz B : " << endl ;
9 void subtracao ( int [][ C ] , int 10 leMatriz (B ,m , n ) ;
[][ C ] , int [][ C ] , int , 11
int ) ; 12 soma (A ,B , SM ,m , n ) ;
10 13
11 int main () 14 cout <<" Matriz soma : " << endl ;
12 { 15 escreveMatriz ( SM ,m , n ) ;
13 int A [ L ][ C ] , B [ L ][ C ] , SM [ L ][ 16
C ] , SB [ L ][ C ] , m , n ; 17 subtracao (A ,B , SB ,m , n ) ;
14 18
15 do { 19 cout <<" Matriz subtração : " << endl ;
16 cout <<" Digite o número de 20 escreveMatriz ( SB ,m , n ) ;
linhas ( <=50) : " ; 21
17 cin >>m ; 22 return 0;
18 } while (m <=0 || m >50) ; 23 }

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


Matrizes como argumentos de funções
Exemplo 2 – Implementação (cont.)

1 void leMatriz ( int X [][ C ] , int m , int n ) {


2 for ( int i =0; i < m ; i ++)
3 for ( int j =0; j < n ; j ++)
4 cin >>X [ i ][ j ];
5 }
6
7 void escreveMatriz ( int X [][ C ] , int m , int n ) {
8 for ( int i =0; i < m ; i ++) {
9 for ( int j =0; j < n ; j ++)
10 cout <<X [ i ][ j ] <<" " ;
11 cout << endl ;
12 }
13 }
14
15 void soma ( int X [][ C ] , int Y [][ C ] , int Z [][ C ] , int m , int n ) {
16 for ( int i =0; i < m ; i ++)
17 for ( int j =0; j < n ; j ++)
18 Z [ i ][ j ] = X [ i ][ j ] + Y [ i ][ j ];
19 }
20
21 void subtracao ( int X [][ C ] , int Y [][ C ] , int Z [][ C ] , int m , int n )
{
22 for ( int i =0; i < m ; i ++)
23 for ( int j =0; j < n ; j ++)
24 Z [ i ][ j ] = X [ i ][ j ] - Y [ i ][ j ];
25 }

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


Matrizes como argumentos de funções
Exemplo 3 – Enunciado

. Escreva um programa em C++ que leia na função main() uma matriz


inteira A, de ordem mxn, e que utilize uma função auxiliar para gerar
uma matriz B formada a partir de A, segundo a seguinte lei de forma-
ção: Bij = 0, se Aij for par e Bij = 1, se Aij for ímpar. A matriz B deve
ser exibida na função main().

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


Matrizes como argumentos de funções
Exemplo 3 – Implementação

1 # include < iostream >


2
3 using n a m e s p a c e std ;
1 do {
4
2 cout <<" Digite o número de
5 # define TAM 100
colunas : " ;
6
3 cin >>n ;
7 void leMatriz ( int [][ TAM ] , int ,
4 } while (n <=0 || n >100) ;
int ) ;
5
8 void escreveMatriz ( int [][ TAM ] ,
6 cout <<" Digite os elementos da
int , int ) ;
matriz A : " << endl ;
9 void operacao ( int [][ TAM ] , int
7 leMatriz (A ,m , n ) ;
[][ TAM ] , int , int ) ;
8
10
9 operacao (A ,B ,m , n ) ;
11 int main ()
10
12 {
11 cout <<" Os elementos da matriz B :
13 int A [ TAM ][ TAM ] , B [ TAM ][ TAM ] ,
" << endl ;
m, n;
12 escreveMatriz (B ,m , n ) ;
14
13
15 do {
14 return 0;
16 cout <<" Digite o número de
15 }
linhas : " ;
17 cin >>m ;
18 } while (m <=0 || m >100) ;

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


Matrizes como argumentos de funções
Exemplo 3 – Implementação (cont.)

1 void leMatriz ( int X [][ TAM ] , int m , int n ) {


2 for ( int i =0; i < m ; i ++)
3 for ( int j =0; j < n ; j ++)
4 cin >>X [ i ][ j ];
5 }
6
7 void escreveMatriz ( int X [][ TAM ] , int m , int n ) {
8 for ( int i =0; i < m ; i ++) {
9 for ( int j =0; j < n ; j ++) {
10 cout <<X [ i ][ j ] <<" " ;
11 }
12 cout << endl ;
13 }
14 }
15
16 void operacao ( int X [][ TAM ] , int Y [][ TAM ] , int l , int c ) {
17 for ( int i =0; i < l ; i ++) {
18 for ( int j =0; j < c ; j ++) {
19 if ( X [ i ][ j ]%2==0) {
20 Y [ i ][ j ] = 0;
21 } else {
22 Y [ i ][ j ] = 1;
23 }
24 }
25 }
26 }

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


Matrizes como argumentos de funções
Exemplo 4 – Enunciado

. Escreva um programa em C++ que leia na função main() uma matriz


real 2x2 e que utilize uma função auxiliar para verificar se a matriz é ou
não invertível. A mensagem deve ser emitida na função main(). Dica:
uma matriz é invertível se seu determinante for diferente de zero.

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


Matrizes como argumentos de funções
Exemplo 4 – Implementação

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
5 bool determinante ( double [][2]) ;
1 return 0;
6
2 }
7 int main ()
3
8 {
4 bool determinante ( double A [][2])
9 double M [2][2];
5 {
10
6 double d ;
11 cout <<" Digite os elementos da
7
matriz M : " << endl ;
8 d = A [0][0]* A [1][1] - A [0][1]* A
12 for ( int i =0; i <2; i ++) {
[1][0];
13 for ( int j =0; j <2; j ++) {
9
14 cin >>M [ i ][ j ];
10 if ( d !=0.0) {
15 }
11 return true ;
16 }
12 } else {
17
13 return false ;
18 if ( determinante ( M ) ) {
14 }
19 cout <<" A matriz é invertível
15 }
!\ n " ;
20 } else {
21 cout <<" A matriz não é
invertível !\ n " ;
22 }

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


Matrizes como argumentos de funções
Exemplo 5 – Enunciado

. Faça um programa em C++ que utilize uma função auxiliar que recebe
uma linha por vez de uma matriz de inteiros positivos e que substitua
todo elemento repetido na linha por -1. A matriz modificada deve ser
exibida na função main().

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


Matrizes como argumentos de funções
Exemplo 5 – Implementação

1 # include < iostream >


2 # include < cstdlib >
3 # include < ctime > 1 do {
4 2 cout <<" Digite o número de
5 using n a m e s p a c e std ; colunas ( <=50) : " ;
6 3 cin >>n ;
7 void geraMatriz ( int [][50] , int , 4 } while (n <=0 || n >50) ;
int ) ; 5
8 void escreveMatriz ( int [][50] , int 6 geraMatriz (A ,m , n ) ;
, int ) ; 7
9 void operaMatriz ( int [] , int ) ; 8 cout <<" Matriz gerada : " << endl ;
10 9 escreveMatriz (A ,m , n ) ;
11 int main () 10
12 { 11 for ( int i =0; i < m ; i ++)
13 srand ( time ( NULL ) ) ; 12 operaMatriz ( A [ i ] , n ) ;
14 13
15 int A [50][50] , m , n ; 14 cout <<" Matriz final : " << endl ;
16 15 escreveMatriz (A ,m , n ) ;
17 do { 16
18 cout <<" Digite o número de 17 return 0;
linhas ( <=50) : " ; 18 }
19 cin >>m ;
20 } while (m <=0 || m >50) ;

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


Matrizes como argumentos de funções
Exemplo 5 – Implementação (cont.)

1 void geraMatriz ( int X [][50] , int m , int n )


2 {
3 for ( int i =0; i < m ; i ++)
4 for ( int j =0; j < n ; j ++)
5 X [ i ][ j ] = rand () %11;
6 }
7
8 void escreveMatriz ( int X [][50] , int m , int n )
9 {
10 for ( int i =0; i < m ; i ++) {
11 for ( int j =0; j < n ; j ++)
12 cout <<X [ i ][ j ] <<" " ;
13 cout << endl ;
14 }
15 }
16
17 void operaMatriz ( int X [] , int n )
18 {
19 for ( int i =0; i <n -1; i ++)
20 if ( X [ i ] != -1)
21 for ( int j = i +1; j < n ; j ++)
22 if ( X [ i ] == X [ j ])
23 X [ j ] = -1;
24 }

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


Matrizes como argumentos de funções
Exemplo 6 – Enunciado

. Escreva um programa em C++ que utilize uma função auxiliar que re-
ceba uma matriz quadrada de inteiros de ordem ímpar. Os inteiros da
matriz devem pertencer a um intervalo [a;b] definido pelo usuário. A
função auxiliar deve retornar o produto entre a soma dos elementos
da linha central e a soma dos elementos da coluna central da matriz
recebida. O valor retornado deve ser exibido.

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


Matrizes como argumentos de funções
Exemplo 6 – Implementação

1 # include < iostream >


2 # include < cstdlib >
3 # include < ctime > 1 cout <<" Digite o limite inferior
4 do intervalo : " ;
5 using n a m e s p a c e std ; 2 cin >>a ;
6 3
7 void geraMatriz ( int [][50] , int , 4 do {
int , int ) ; 5 cout <<" Digite o limite
8 void escreveMatriz ( int [][50] , int superior do intervalo : " ;
); 6 cin >>b ;
9 int operaMatriz ( int [][50] , int ) ; 7 } while (b < a ) ;
10 8
11 int main () 9 geraMatriz (A ,n ,a , b ) ;
12 { 10
13 srand ( time ( NULL ) ) ; 11 cout <<" Matriz gerada : " << endl ;
14 12 escreveMatriz (A , n ) ;
15 int A [50][50] , n , a , b ; 13
16 14 cout <<" Produto : " << operaMatriz
17 do { (A , n ) << endl ;
18 cout <<" Digite a ordem ímpar 15
da matriz ( <=50) : " ; 16 return 0;
19 cin >>n ; 17 }
20 } while (( n <=0) || (n >50) || ( n
%2==0) ) ;

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


Matrizes como argumentos de funções
Exemplo 6 – Implementação (cont.)

1 void geraMatriz ( int X [][50] , int n , int a , int b ) {


2 for ( int i =0; i < n ; i ++)
3 for ( int j =0; j < n ; j ++)
4 X [ i ][ j ] = rand () %( b - a +1) + a ;
5 }
6
7 void escreveMatriz ( int X [][50] , int n ) {
8 for ( int i =0; i < n ; i ++) {
9 for ( int j =0; j < n ; j ++)
10 cout <<X [ i ][ j ] <<" " ;
11 cout << endl ;
12 }
13 }
14
15 int operaMatriz ( int X [][50] , int n ) {
16 int somal =0 , somac =0;
17
18 for ( int i =0; i < n ; i ++) {
19 somal += X [ n /2][ i ];
20 somac += X [ i ][ n /2];
21 }
22
23 return ( somal * somac ) ;
24 }

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


Sumário

1 Matrizes como argumentos de funções

2 Matrizes x passagem por referência

3 Exercícios

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


Matrizes x passagem por referência
Estudo de caso: exemplo implementado

1 do {
1 # include < iostream >
2 cout <<" Digite a ordem da
2 # include < cstdlib >
matriz : " ;
3 # include < ctime >
3 cin >>n ;
4
4 } while (( n <=0) ||( n >50) ) ;
5 using n a m e s p a c e std ;
5
6
6 cout <<" Digite o limite inferior
7 void geraMatriz ( float [][50] , int
: ";
, float , float ) ;
7 cin >>a ;
8 void escreveMatriz ( float [][50] ,
8
int ) ;
9 do {
9
10 cout <<" Digite o limite
10 int main ()
superior : " ;
11 {
11 cin >>b ;
12 srand ( time ( NULL ) ) ;
12 } while (b < a ) ;
13
13
14 int n ;
14 geraMatriz (A ,n ,a , b ) ;
15 float A [50][50] , a , b ;
15
16
16 escreveMatriz (A , n ) ;
17 cout <<" -->> " <<A <<" " < <& A
17
[0][0] <<" " < <& A [0] << endl
18 return 0;
;
19 }

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


Matrizes x passagem por referência
Estudo de caso: exemplo implementado

1 void geraMatriz ( float X [][50] , int n , float a , float b )


2 {
3 cout <<" -->> " <<X <<" " < <& X [0][0] <<" " < <& X [0] << endl ;
4
5 for ( int i =0; i < n ; i ++)
6 for ( int j =0; j < n ; j ++)
7 X [ i ][ j ] = (b - a ) *( rand () / float ( RAND_MAX ) ) + a ;
8 }
9
10
11
12 void escreveMatriz ( float Y [][50] , int n )
13 {
14 cout <<" -->> " <<Y <<" " < <& Y [0][0] <<" " < <& Y [0] << endl ;
15
16 for ( int i =0; i < n ; i ++) {
17 for ( int j =0; j < n ; j ++)
18 cout <<Y [ i ][ j ] <<" " ;
19 cout << endl ;
20 }
21 }

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


Matrizes x passagem por referência
Estudo de caso: simulação

-->> 0x7fff48f38380 0x7fff48f38380 0x7fff48f38380

Digite a ordem da matriz: 3


Digite o limite inferior: 1
Digite o limite superior: 5

-->> 0x7fff48f38380 0x7fff48f38380 0x7fff48f38380


-->> 0x7fff48f38380 0x7fff48f38380 0x7fff48f38380

1.2857 2.61527 3.38518


3.48736 2.27851 4.39657
4.43476 2.2724 3.26943

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


Sumário

1 Matrizes como argumentos de funções

2 Matrizes x passagem por referência

3 Exercícios

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


Exercícios

1. Implemente um programa em C++ que leia na função main() uma


matriz inteira de ordem mxn e que utilize uma função auxiliar para
calcular a sua transposta. A matriz transposta deve ser exibida na
função main().
2. Dizemos que uma matriz quadrada inteira é um quadrado mágico se
a soma dos elementos de cada linha, a soma dos elementos de cada
coluna e a soma dos elementos das diagonais principal e secundária
são todas iguais. Escreva um programa em C++ que leia na função
main uma matriz quadrada A de ordem n e que utilize uma função
auxiliar para verificar se a matriz forma um quadrado mágico ou não.
Uma mensagem deve ser exibida informando o resultado da verifica-
ção. Exemplo de um quadrado mágico:
 
8 0 7
 4 5 6 
3 10 2

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


Funções e Matrizes I

Fim da aula 23

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

Das könnte Ihnen auch gefallen