A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Vetores e Matrizes em C/C++

Apresentações semelhantes


Apresentação em tema: "Vetores e Matrizes em C/C++"— Transcrição da apresentação:

1 Vetores e Matrizes em C/C++
ECT - UFRN Ítalo Mendes da Silva Ribeiro

2 Sumario Vetores: definição e motivação
Vetores: declaração e inicialização em C/C++ Passando vetores para funções C/C++ Busca em vetores em C/C++ Ordenação de vetores em C/C++ Uso de vetores com classes em C++ Matrizes: definição e motivação Matrizes: declaração e inicialização em C/C++ Passando matrizes para funções em C/C++ Vetores usando a biblioteca padrão de C++ (STD) Exemplos do uso de vetores e matrizes em C/C++

3 Vetores: Definição e Motivação

4 Vetores: Definição e Motivação
É um conjunto de variáveis de mesmo tipo, que possuem o mesmo identificador (nome) e são alocadas sequencialmente na memória Para se referir a uma localização ou elemento particular do vetor, usa-se o nome do vetor e a posição do elemento particular dentro de colchetes nomeDoVetor[posiçãoDoElemento] A posição de um elemento no vetor é chamado de índice O índice do primeiro elemento de um vetor em C/C++ é sempre zero

5 Vetores: Definição e Motivação
Valor do elemento do vetor 3 4 8 9 15 Vetor chamado n n[0] n[1] n[2] n[3] n[4] Nome de um elemento do vetor

6 Vetores: Definição e Motivação
O valor do índice do vetor deve ser um número inteiro Expressões são permitidas para se calcular o valor do índice desde que o resultado seja inteiro Exemplo: x = 4 e y = 2 com n[x + y] = 15;  atribuição do valor 15 para a 7º posição do vetor n

7 Declarando e Inicializando Vetores

8 tipo nomeDoVetor[tamanhoDoVetor]
Declarando Vetores Declaração de vetor em C/C++ é: tipo nomeDoVetor[tamanhoDoVetor] O tamanho do vetor deve ser um inteiro maior que zero Compilador reservar 6 elementos para um vetor do tipo inteiro chamado numeros declara-se int numeros[ 6 ];

9 Inicializando Vetores
Importante inicializar os valores das variáveis para evitar comportamentos inesperados Exemplo: inicializando todos os elementos do vetor com valor zero int n[ 5 ]; for( int i = 0; i < 5; i++ ) n[ i ] = 0;

10 Inicializando Vetores
Inicializando vetor com uma lista de valores int n[ 5 ] = {17, 18, 19 , 20, 21}; for( int i = 0; i < 5; i++ ) cout << “indice: “ << i << “, valor: ” << n[ i ] << endl; indice: 0, valor: 17 indice: 1, valor: 18 indice: 2, valor: 19 indice: 3, valor: 20 indice: 4, valor: 21

11 Inicializando Vetores
Se o tamanho da lista de inicialização do vetor for menor que o tamanho do vetor, o valor dos elementos não inicializados com a lista é definido como zero int n[ 5 ] = {17, 18}; for( int i = 0; i < 5; i++ ) cout << “indice: “ << i << “, valor: ” << n[ i ] << endl; indice: 0, valor: 17 indice: 1, valor: 18 indice: 2, valor: 0 indice: 3, valor: 0 indice: 4, valor: 0

12 Inicializando Vetores
O tamanho do vetor será o mesmo da lista de inicialização caso o tamanho do vetor seja omitido int n[ ] = {17, 18, 19 , 20, 21}; //vetor de tamanho 5 Caso a lista de inicialização seja maior que o tamanho do vetor ocorrerá um erro int n[ 3 ] = {17, 18, 19 , 20, 21};

13 Inicializando Vetores
Definir o tamanho do vetor com uma constante Tornar o algoritmo mais escalável const int tamanhoVetor = 5; int n[ tamanhoVetor ]; for( int x=0; x < tamanhoVetor; x++ ) n[ x ] = 2 * x;

14 Somando Elementos do Vetor
const int tamanhoVetor = 5; int n[ tamanhoVetor ] = {10, 15, 20, 25, 30}; int somaTotal = 0; for( int x=0; x < tamanhoVetor; x++ ) somaTotal += n[ x ]; cout << somaTotal << endl; //a soma total é 100

15 Passando Vetores para Funções

16 Passando Vetores para Funções
Passar o nome do vetor sem os colchetes como parâmetro int numeros[ 5 ]; modificaVetor( numeros, 5 ); void modificaVetor( int n[], int tamanhoDoVetor ){ } C: vetor passado por valor (cópia de todos os elementos do vetor) C++: vetor passado por referência (endereço na memória do primeiro elemento do vetor)

17 Passando Vetores para Funções
Exemplo de manipulação de vetores em funções int main(){ const int tamanhoVetor = 3; int numeros[ tamanhoVetor ] = {0, 1, 2}; cout << “valores originais do vetor” << endl; for( int i=0; i<tamanhoVetor; i++) cout << numeros[ i ] << “, “; cout << endl; //saida 0, 1, 2 modificaVetor( numeros, tamanhoVetor); cout <<“valores modificados do vetor”<< endl; for( int i=0; i<tamanhoVetor; i++) cout << numeros[ i ] << “, “; cout << endl; //saida 0, 3, 6 cout << “elemento antes da funcao: ”; cout << numeros[ 2 ] << endl; // saida 6 modificaElemento( numeros [ 2 ] ); cout << “elemento depois da funcao: “; cout << numeros[ 2 ] << end; // saida 6 return 0 }

18 Passando Vetores para Funções
void modificaVetor( int n[], int tamVetor){ for( int t=0; t<tamVetor; t++) n[ t ] *= 3; } void modificaElemento( int n ){ n *= 3; cout << “elemento na funcao: “; cout << n << endl; //saida 18 valores originais do vetor 0, 1, 2 valores modificados do vetor 0, 3, 6 elemento antes da funcao: 6 elemento na funcao: 18 Elemento depois da funcao: 6

19 Passando Vetores para Funções
Exemplo de manipulação de vetores em funções int main(){ const int tamanhoVetor = 3; int numeros[ tamanhoVetor ] = {0, 1, 2}; cout << “valores originais do vetor” << endl; for( int i=0; i<tamanhoVetor; i++) cout << numeros[ i ] << “, “; cout << endl; //saida 0, 1, 2 modificaVetor( numeros, tamanhoVetor); cout <<“valores modificados do vetor”<< endl; for( int i=0; i<tamanhoVetor; i++) cout << numeros[ i ] << “, “; cout << endl; //saida 0, 3, 6 cout << “elemento antes da funcao: ”; cout << numeros[ 2 ] << endl; // saida 6 modificaElemento( numeros [ 2 ] ); cout << “elemento depois da funcao: “; cout << numeros[ 2 ] << end; // saida 6 return 0 }

20 Passando Vetores para Funções
void modificaVetor( int n[], int tamVetor){ for( int t=0; t<tamVetor; t++) n[ t ] *= 3; } void modificaElemento( int n ){ n *= 3; cout << “elemento na funcao: “; cout << n << endl; //saida 18 valores originais do vetor 0, 1, 2 valores modificados do vetor 0, 3, 6 elemento antes da funcao: 6 elemento na funcao: 18 Elemento depois da funcao: 6

21 Passando Vetores para Funções
Exemplo de manipulação de vetores em funções int main(){ const int tamanhoVetor = 3; int numeros[ tamanhoVetor ] = {0, 1, 2}; cout << “valores originais do vetor” << endl; for( int i=0; i<tamanhoVetor; i++) cout << numeros[ i ] << “, “; cout << endl; //saida 0, 1, 2 modificaVetor( numeros, tamanhoVetor); cout <<“valores modificados do vetor”<< endl; for( int i=0; i<tamanhoVetor; i++) cout << numeros[ i ] << “, “; cout << endl; //saida 0, 3, 6 cout << “elemento antes da funcao: ”; cout << numeros[ 2 ] << endl; // saida 6 modificaElemento( numeros [ 2 ] ); cout << “elemento depois da funcao: “; cout << numeros[ 2 ] << end; // saida 6 return 0 }

22 Passando Vetores para Funções
Para impedir a modificação dos elementos de um vetor em uma função, define-se o vetor como constante no parâmetro da função Os valores do vetor poderão apenas serem lidos void modificaVetor( const int n[], int tamVetor){ for( int t=0; t<tamVetor; t++) n[ t ] *= 3; // erro de execução }

23 Busca em Vetor

24 Busca em Vetor Busca Linear
if( elemento != -1){ cout << “valor na posição: “ << elemento << endl; }else{ cout << “valor não encontrado” << endl; } return 0;} //end main int buscaLinear(const int n[], int v, int tamVetor){ for(int x=0; x < tamVetor; x++){ if( n[ x ]== v ){ return x; } return -1; Busca Linear Compara cada posicação do vetor em busca de um determinado elemento Baixo desempenho int main{ const int tamanhoVetor = 5; int numeros[ tamanhoVetor ] = {2, 7, 9, 10, 13}; int valor; cin >> valor; int elemento = buscaLinear( numeros, valor, tamanhoVetor);

25 Busca em Vetor Busca Binária Vetor deve estar ordenado int main{
const int tamanhoVetor = 5; int numeros[ tamanhoVetor ] = {2, 7, 9, 10, 13}; int valor; cin >> valor; int elemento = buscaBinaria( numeros, valor, tamanhoVetor); if( elemento != -1){ cout << “valor na posição: “ << elemento << endl; }else{ cout << “valor não encontrado” << endl; } return 0;} //end main

26 Busca em Vetor v = 10 meio 2 7 9 10 13 meio 2 7 9 10 13
int buscaBinaria(const int n[], int v, int tamVetor){ int esq = 0; 3 int dir = tamVetor – 1; 4 while(esq <= dir){ int meio = (esq+dir)/2 if(v == n[meio]){ return meio; }else{ if(v < n[meio]){ dir = meio-1; } else{ esq = meio+1; } } } //fim while return -1; } //fim buscaBinaria v = 10 meio 2 7 9 10 13 meio 2 7 9 10 13

27 Ordenação em Vetor

28 Ordenação em Vetor Ordenação por Inserção
for(int proximo=1; proximo < tamanhoVetor; proximo++){ insercao = numeros[ proximo ]; int mudaItem = proximo; while( (mudaItem > 0) && (numeros[ mudaItem-1 ] > insercao ) ){ numeros[mudaItem] = numeros[mudaItem-1]; mudaItem--; } numeros[mudaItem] = insercao; } // end for return 0;} // end main Ordenação por Inserção Implementação simples, mas com baixa eficiência Ordenação em ordem crescente int main{ const int tamanhoVetor = 5; int numeros[ tamanhoVetor ] = {7, 2, 13, 9, 10};

29 Uso de Vetores com Classes

30 Uso de Vetores com Classes
Vetor com o tipo da classe desejada class Alunos { protected: int matricula, idade; public: void setMatricula (int a) { matricula = a; } int getMatricula() { return matricula; } }; int main(){ Alunos alunos[2]; alunos[0].setMatricula(3); alunos[1].setMatricula(5); cout << alunos[0].getMatricula() << endl; cout << alunos[1].getMatricula() << endl; return 0; }

31 Matrizes: Definição e Motivação

32 Matrizes: Definição e Motivação
Vetores multimensionais Matriz que requer dois índices, possui duas dimensões e é chamada de matriz bidimensional ou vetor 2D. Matriz bidimensional é dividida em linhas e colunas Para se referir a uma localização ou elemento particular da matriz, usa-se o nome da matriz e os índices do elemento particular para linha e coluna dentro de colchetes nomeDaMatriz[índiceDaLinha][índiceDaColuna]

33 Matrizes: Definição e Motivação
Vetor chamado n[3][4] coluna 1 coluna 2 coluna 3 coluna 4 Linha 1 n[0][0] n[0][1] n[0][2] n[0][3] Linha 2 n[1][0] n[1][1] n[1][2] n[1][3] Linha 3 n[2][0] n[2][1] n[2][2] n[2][3]

34 Matrizes: Definição e Motivação
Vetor chamado n[3][4] na memória Linha 1 Linha 2 Linha 3 n[0][0] n[0][1] n[0][2] n[0][3] n[1][0] n[1][1] n[1][2] n[1][3] n[2][0] n[2][1] n[2][2] n[2][3] Coluna 1 Coluna 2 Coluna 3 Coluna 4

35 Matrizes: Definição e Motivação
Os valores dos índices da matriz devem ser números inteiros Expressões são permitidas para se calcular o valor do índice desde que o resultado seja inteiro Exemplo: x = 3 e y = 2 com n[2][x + y] = 11; atribuição do valor 11 para o elemento da linha 2 e coluna 5 da matriz n

36 Declarando Matrizes

37 tipo nomeDaMatriz[numeroDeLinhas][numeroDeColunas]
Declarando Matrizes Declaração de matrizes bidimensionais em C/C++ é: tipo nomeDaMatriz[numeroDeLinhas][numeroDeColunas] Declaração de matrizes multidimensionais em C/C++ é: tipo nomeDaMatriz[tamanhoDimensao1][tamanhoDimensao2]...[tamanhoDimensaoN] int numeros[3][5][2]

38 Inicializando Matrizes
Inicializando matriz com uma lista de valores int n[ 2 ][ 2 ] = { {3, 4}, {5, 6} }; coluna 1 coluna 2 Linha 1 3 4 Linha 2 5 6

39 Inicializando Matrizes
Se não houverem elementos suficientes na lista de inicialização os valores serão prenchidos com zero int n[ 2 ][ 2 ] = { {10}, {11, 12} }; for( int i = 0; i < 2; i++ ){ for( int j = 0; j < 2; j++) cout << n[i][j] << “ – “; cout << endl; } 10 – 0

40 Passando Matrizes para Funções

41 Passando Matrizes para Funções
Passar o nome da matriz sem os colchetes como parâmetro const int linhas = 2; const int colunas = 3; int numeros[ linhas ][ colunas ]; modificaMatriz( numeros ); É necessário definir o tamanho a partir da segunda dimensão void modificaMatriz( int n[][colunas]){ } C: vetor passado por valor (cópia de todos os elementos do vetor) C++: vetor passado por referência (endereço na memória do primeiro elemento do vetor)

42 Vector usando a Biblioteca Padrão de C++

43 Vector usando a Biblioteca Padrão de C++
Vetores em C/C++ tem potencial para erros como acesso a posições inexistentes no vetor A biblioteca padrão STD (Standard Library) possui várias funcionalidades que facilitam a utilização de vetores em C++ #include <vector> using namespace std; vector< int > inteiros(5); std::vector< int > inteiros(5);

44 Vector usando a Biblioteca Padrão de C++
Inicialização vector< int > inteiros(5); //todos os valores com zero //recebe o mesmo tamanho e conteúdo de inteiros vector< int > inteiros2( inteiros ); //tamanho 5 e todos os elementos com alor 100 vector< int > inteiros3( 5, 100 ); for(int x=0; x<tamVector; x++){ inteiros[ x ] = x * 2; }

45 Vector usando a Biblioteca Padrão de C++
Várias funções e alguns operadores inteiros.size()  tamanho do vetor inteiros.size()  verificar se o vetor está vazio inteiros.at(i)  retorna o valor do elemento da posição i inteiros.front()  retorna o primeiro elemento do vetor inteiros.back()  retorna o último elemento do vetor inteiros.push_back( elemento )  insere elemento no final do vetor inteiros == inteiros2  verifica se os dois vetores são iguais, analisando cada elemento dos vetores inteiros = inteiros2  todo o conteúdo e tamanho do vetor inteiros2 é passado para o vetor inteiros Inteiros < inteiros2  compara elementos individualmente e para na primeira ocorrência verdadeira

46 Vector usando a Biblioteca Padrão de C++
Tratamento de exceção: tentativa de acessar um elemento fora do tamanho do vetor try{ cout << inteiros.at(400) << endl; //erro: fora do tamanho }catch(out_of_range &e){ cout << “Ocorreu uma exceção: “ << e.what() << endl; }

47 Vector usando a Biblioteca Padrão de C++
Passando vetores para funções usando STD vector< int > numeros(5); void escreveVetor( vector< int > &n ){ for(int i=0; i < n.size(); i++){ cout << n.at(i) << “ “ << n[i] << endl; }

48 Referências DEITEL, Harvey. DEITEL, Paul. C++: Como programar. 5ª ed., Editora Pearson MALIK, D. S. C++ Programming: From Problem Analysis to Program Design, 5ª ed., Cengage Learning HERBERT, S. C Completo e total. 3ª ed. São Paulo: Pearson, 1997.

49 Vetores e Matrizes em C/C++
ECT - UFRN Ítalo Mendes da Silva Ribeiro


Carregar ppt "Vetores e Matrizes em C/C++"

Apresentações semelhantes


Anúncios Google