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