Sie sind auf Seite 1von 19

ECT2303 – Linguagem de Programação

Aula 12 þ Funções e Vetores I

Einstein Santos

UFRN

12 de setembro de 2018

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


Sumário

1 Vetores como argumentos de funções

2 Vetores x passagem por referência

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


Sumário

1 Vetores como argumentos de funções

2 Vetores x passagem por referência

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


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

. Escreva um programa em C++ que utilize uma função auxiliar para


realizar a operação A = B + C, onde A, B e C são vetores de tamanho
N, sendo B e C lidos na função main(). O vetor resposta A deve ser
exibido na função auxiliar.

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


Vetores como argumentos de funções
Exemplo 1 – Implementação (versão 1)

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
1 soma (B ,C , N ) ;
5 void soma ( int Y [100] , int Z [100] ,
2
int T ) ;
3 return 0;
6
4 }
7 int main ()
5
8 {
6 void soma ( int Y [100] , int Z [100] ,
9 int B [100] , C [100] , N ;
int T )
10
7 {
11 do {
8 int X [100];
12 cout <<" Digite o tamanho dos
9
vetores ( <=100) : " ;
10 for ( int i =0; i < T ; i ++)
13 cin >>N ;
11 X [ i ] = Y [ i ] + Z [ i ];
14 } while (N <=0 || N >100) ;
12
15
13 cout <<" O vetor soma é : " ;
16 cout <<" Digite os elementos de B
14 for ( int i =0; i < T ; i ++)
: ";
15 cout <<X [ i ] <<" " ;
17 for ( int i =0; i < N ; i ++)
16
18 cin >>B [ i ];
17 cout << endl ;
19
18 }
20 cout <<" Digite os elementos de C
: ";
21 for ( int i =0; i < N ; i ++)
22 cin >>C [ i ];

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


Vetores como argumentos de funções
Exemplo 1 – Implementação (versão 2)

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
5 void soma ( int Y [] , int Z [] , int T ) 1 soma (B ,C , N ) ;
; 2
6 3 return 0;
7 int main () 4 }
8 { 5
9 int B [100] , C [100] , N ; 6 void soma ( int Y [] , int Z [] , int T )
10 7 {
11 do { 8 int X [100];
12 cout <<" Digite o tamanho dos 9
vetores ( <=100) : " ; 10 for ( int i =0; i < T ; i ++)
13 cin >>N ; 11 X [ i ] = Y [ i ] + Z [ i ];
14 } while (N <=0 || N >100) ; 12
15 13 cout <<" O vetor soma é : " ;
16 cout <<" Digite os elementos de B 14 for ( int i =0; i < T ; i ++)
: "; 15 cout <<X [ i ] <<" " ;
17 for ( int i =0; i < N ; i ++) 16
18 cin >>B [ i ]; 17 cout << endl ;
19 18 }
20 cout <<" Digite os elementos de C
: ";
21 for ( int i =0; i < N ; i ++)
22 cin >>C [ i ];

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


Vetores como argumentos de funções
Exemplo 1 – Implementação (versão 3)

1 # include < iostream >


2 using n a m e s p a c e std ;
3
4 # define TAM 100
5 1 soma (B ,C , N ) ;
6 void soma ( int Y [] , int Z [] , int T ) 2
; 3 return 0;
7 int main () 4 }
8 { 5
9 int B [ TAM ] , C [ TAM ] , N ; 6 void soma ( int Y [] , int Z [] , int T )
10 7 {
11 do { 8 int X [ TAM ];
12 cout <<" Digite o tamanho dos 9
vetores ( <=100) : " ; 10 for ( int i =0; i < T ; i ++)
13 cin >>N ; 11 X [ i ] = Y [ i ] + Z [ i ];
14 } while (N <=0 || N >100) ; 12
15 13 cout <<" O vetor soma é : " ;
16 cout <<" Digite os elementos de B 14 for ( int i =0; i < T ; i ++)
: "; 15 cout <<X [ i ] <<" " ;
17 for ( int i =0; i < N ; i ++) 16
18 cin >>B [ i ]; 17 cout << endl ;
19 18 }
20 cout <<" Digite os elementos de C
: ";
21 for ( int i =0; i < N ; i ++)
22 cin >>C [ i ];

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


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

. Reescreva o programa anterior de forma que a exibição do vetor soma


A seja realizada na função main().

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


Vetores como argumentos de funções
Exemplo 1 – Implementação (versão 1)

1 # include < iostream >


1 cout <<" Digite os elementos de C
2
: ";
3 using n a m e s p a c e std ;
2 for ( int i =0; i < N ; i ++)
4
3 cin >>C [ i ];
5 # define TAM 100
4
6
5 soma (A ,B ,C , N ) ;
7 void soma ( int X [] , int Y [] , int Z
6
[] , int T ) ;
7 cout <<" O vetor A é : " ;
8
8 for ( int i =0; i < N ; i ++)
9 int main ()
9 cout <<A [ i ] <<" " ;
10 {
10
11 int A [ TAM ] , B [ TAM ] , C [ TAM ] , N ;
11 cout << endl ;
12
12
13 do {
13 return 0;
14 cout <<" Digite o tamanho dos
14 }
vetores ( <=100) : " ;
15
15 cin >>N ;
16 void soma ( int X [] , int Y [] , int Z
16 } while (N <=0 || N >100) ;
[] , int T )
17
17 {
18 cout <<" Digite os elementos de B
18 for ( int i =0; i < T ; i ++)
: ";
19 X [ i ] = Y [ i ] + Z [ i ];
19 for ( int i =0; i < N ; i ++)
20 }
20 cin >>B [ i ];

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


Vetores como argumentos de funções
Exemplo 2 – Implementação (versão 2)

1 # include < iostream >


1 cout <<" Digite os elementos de C
2
: ";
3 using n a m e s p a c e std ;
2 for ( int i =0; i < N ; i ++)
4
3 cin >>C [ i ];
5 void soma ( int X [] , int Y [] , int Z
4
[] , int T ) ;
5 soma (A ,B ,C , N ) ;
6
6
7 int main ()
7 cout <<" O vetor A é : " ;
8 {
8 for ( int i =0; i < N ; i ++)
9 int N ;
9 cout <<A [ i ] <<" " ;
10
10
11 do {
11 cout << endl ;
12 cout <<" Digite o tamanho dos
12
vetores : " ;
13 return 0;
13 cin >>N ;
14 }
14 } while (N <=0) ;
15
15
16 void soma ( int X [] , int Y [] , int Z
16 int A [ N ] , B [ N ] , C [ N ];
[] , int T )
17
17 {
18 cout <<" Digite os elementos de B
18 for ( int i =0; i < T ; i ++)
: ";
19 X [ i ] = Y [ i ] + Z [ i ];
19 for ( int i =0; i < N ; i ++)
20 }
20 cin >>B [ i ];

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


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

. Implemente um programa em C++ que leia três vetores de tamanho


N na função main() e que utilize uma função auxiliar para calcular
a média aritmética dos elementos do vetor cujo somatório dos seus
elementos seja o menor. A média deve ser exibida na função auxiliar.

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


Vetores 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 ;
4 1 float MA ( float X [] , float Y [] ,
5 float MA ( float X [] , float Y [] , float Z [] , int T )
float Z [] , int T ) ; 2 {
6 3 float m1 =0 , m2 =0 , m3 =0;
7 int main () 4
8 { 5 for ( int i =0; i < T ; i ++) {
9 int N ; 6 m1 += X [ i ];
10 7 m2 += Y [ i ];
11 cout <<" Digite o valor de N : " ; 8 m3 += Z [ i ];
12 cin >>N ; 9 }
13 10
14 float A [ N ] , B [ N ] , C [ N ]; 11 if (( m1 <= m2 ) && ( m1 <= m3 ) )
15 12 return ( m1 / T ) ;
16 cout <<" Digite os elementos de A 13 else if (( m2 <= m1 ) && ( m2 <= m3 )
, B e C , alternadame nte : " ; )
17 for ( int i =0; i < N ; i ++) 14 return ( m2 / T ) ;
18 cin >>A [ i ] >>B [ i ] >>C [ i ]; 15 else if (( m3 <= m1 ) && ( m3 <= m2 )
19 )
20 cout <<" A média aritmética é : " 16 return ( m3 / T ) ;
<< MA (A ,B ,C , N ) << endl ; 17 }
21
22 return 0;
23 }

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


Sumário

1 Vetores como argumentos de funções

2 Vetores x passagem por referência

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


Vetores x passagem por referência
Observações

Os vetores (e matrizes em geral) são considerados um tipo de dado


bastante grande, pois são formados por “diversas variáveis”.
Devido a isso, a linguagem C++ determina ser mais eficiente existir
uma única cópia do vetor na memória, sendo, portanto, irrelevante o
número de funções que o acessem.
Assim, não são passados os valores contidos no vetor, somente o seu
endereço de memória.
O nome de um vetor desacompanhado de colchetes representa o en-
dereço de memória onde o vetor foi armazenado.

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


Vetores x passagem por referência
Exemplo – Implementação

1 // Programa que lê um vetor e que


calcula e exibe a média
aritmética dos elementos
2
3 # include < iostream > 1 int main ()
4 2 {
5 using n a m e s p a c e std ; 3 int N ;
6 4
7 void leVetor ( float X [] , int N ) 5 cout <<" Digite a quantidade de
8 { elementos : " ;
9 cout <<" Digite os elementos de A 6 cin >>N ;
: "; 7
10 for ( int i =0; i < N ; i ++) 8 float A [ N ];
11 cin >>X [ i ]; 9
12 } 10 leVetor (A , N ) ;
13 11
14 float MA ( float Y [] , int N ) 12 cout <<" A média aritmética é : "
15 { << MA (A , N ) << endl ;
16 float x ; 13
17 14 return 0;
18 for ( int i =0; i < N ; i ++) 15 }
19 x += Y [ i ];
20
21 return x / N ;
22 }

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


Vetores x passagem por referência
Exemplo – Execução

1 Digite a quantidade de elementos : 5


2
3 Digite os elementos de A : 5 4 7 6 1
4
5 A média aritmética é : 4.6

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


Vetores x passagem por referência
Exemplo adaptado – Implementação

1 # include < iostream >


2
3 using n a m e s p a c e std ;
4
1 int main ()
5 void leVetor ( float X [] , int N )
2 {
6 {
3 int N ;
7 cout <<" Endereço de X : " <<X <<"
4
" < <& X [0] << endl ;
5 cout <<" Digite a quantidade de
8
elementos : " ;
9 cout <<" Digite os elementos de A
6 cin >>N ;
: ";
7
10 for ( int i =0; i < N ; i ++)
8 float A [ N ];
11 cin >>X [ i ];
9 cout <<" Endereço de A : " <<A <<"
12 }
" < <& A [0] << endl ;
13
10
14 float MA ( float Y [] , int N )
11 leVetor (A , N ) ;
15 {
12
16 float x ;
13 cout <<" A média aritmética é : "
17 cout << endl <<" Endereço de Y : "
<< MA (A , N ) << endl ;
<<Y <<" " < <& Y [0] << endl ;
14
18
15 return 0;
19 for ( int i =0; i < N ; i ++)
16 }
20 x += Y [ i ];
21
22 return x / N ;
23 }

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


Vetores x passagem por referência
Exemplo adaptado – Execução

1 Digite a quantidade de elementos : 5


2
3 Endereço de A : 0 x7ffe3aba9bd0 0 x7ffe3aba9bd0
4
5 Endereço de X : 0 x7ffe3aba9bd0 0 x7ffe3aba9bd0
6
7 Digite os elementos de A : 5 4 7 6 1
8
9 A média aritmética é :
10
11 Endereço de Y : 0 x7ffe3aba9bd0 0 x7ffe3aba9bd0
12
13 4.6

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


Funções e Vetores I

Fim da aula 12

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