Vetores e Matrizes em C/C++

Slides:



Advertisements
Apresentações semelhantes
Matrizes clássicas e vectores em C++
Advertisements

Linguagens de Programação
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 08) Prof. Alessandro Bernardo.
VETORES AULA 01 Roteiro da aula Referência ao Programa: Estrutura de Dados.  Variáveis Compostas homogenias   Objetivo: apresentar VETOR.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
INE5408 Estruturas de Dados Ponteiros, passagem de parâmetros e modelos de memória.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Isabel Cafezeiro
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Alocação Dinâmica de Memória.
Estrutura de Dados (DPADF 0056) Aula 8 – Estr. Clássicas - Lista Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Estrutura Sequencial COUT CIN
Estruturas de Dados Aula 2: Estruturas Estáticas
INF1007: Programação 2 8 – Listas Encadeadas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Estrutura Sequencial COUT CIN
Polimorfismo e suas aplicações em C++.
Introdução à Programação
Algoritmo e Estrutura de Dados I
INF1007: Programação 2 2 – Alocação Dinâmica
Programação em C++ Compiladores
INE5408 Estruturas de Dados
Estruturas de Decisão.
OO – Engenharia Eletrônica
Algoritmos e Estruturas de Dados I
Apresentação do Laboratório Falar sobre as máquinas, 14 unidades
Estrutura de Dados Revisão
Introdução à Computação para Engenharia MAC2166
Linguagem C Para programadores Python
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Métodos de Pesquisa e Ordenação
INF1007: Programação 2 6 – Ordenação de Vetores
Estruturas de Dados Aula 5: Matrizes
Estrutura de dados Pilhas e filas
Prof. Wellington Franco
FUNDAMENTO DE PROGRAMAÇÃO
Introdução à Programação BCC 201 Aula
FUNDAMENTO DE PROGRAMAÇÃO
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Métodos de Pesquisa e Ordenação
Introdução à Programação BCC 201 Aula
Estrutura Sequencial COUT CIN
Capítulo IV – Árvores Gerais
FUNDAMENTO DE PROGRAMAÇÃO PROF. WELLINGTON FRANCO
Prof. Wellington Franco
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
aritmética de ponteiros
PROGRAMAÇÃO I UNIDADE 3.
Orientação a Objetos - Programação em C++
Programação de Computadores I – Ponteiros
Técnicas de Programação
Listas Encadeadas.
Curso Profissional de Técnico de Gestão e Programação de Sistemas de Informação Ano Letivo 2017/2018 Programação e Sistemas de Informação 10º Ano.
Algoritmos Prof.: Carlos Alberto _1:
Aula 22 Modularização 22/10/08.
Estruturas de Dados Dinâmicas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
DHD – Desenvolvimento em Hardware
Orientação a Objetos - Programação em C++
Programação de Computadores I – Ponteiros
DHD – Desenvolvimento em Hardware
Rosemary Silveira Filgueiras Melo
Computação Eletrônica Vetores e Matrizes
Estruturas de Dados em C
Strings.
Estruturas definidas pelo programador
Computação Eletrônica
Programação II Mateus Raeder.
CALCULADORA CARACTERE E VARIÁVEIS COMPOSTAS OU VETORES EM JAVA
Transcrição da apresentação:

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

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++

Vetores: Definição e Motivação

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

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

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

Declarando e Inicializando Vetores

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 ];

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;

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

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

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};

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;

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

Passando Vetores para Funções

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)

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 }

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

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 }

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

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 }

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 }

Busca em Vetor

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);

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

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

Ordenação em Vetor

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};

Uso de Vetores com Classes

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; }

Matrizes: Definição e Motivação

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]

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]

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

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

Declarando Matrizes

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]

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

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 11 - 12

Passando Matrizes para Funções

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)

Vector usando a Biblioteca Padrão de C++

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);

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; }

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

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; }

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; }

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

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