Estrutura de Dados - Aula 03

511 visualizações

Publicada em

Estrutura de Dados - Anhanguera
AULA 03 – REVISÃO: PONTEIROS, ESTRUTURAS E VETORES

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
511
No SlideShare
0
A partir de incorporações
0
Número de incorporações
42
Ações
Compartilhamentos
0
Downloads
45
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Estrutura de Dados - Aula 03

  1. 1. ANHANGUERA – 2015.2 ESTRUTURA DE DADOS AULA 03 – REVISÃO: PONTEIROS, ESTRUTURAS E VETORES Prof. Thomás da Costa thomascosta@aedu.com
  2. 2. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES REVISÃO: PONTEIROS, ESTRUTURAS E VETORES
  3. 3. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES Revisão O que vamos relembrar: • Ponteiros. • Ponteiros e... • Mais ponteiros. • Estruturas. • Vetores. • O básico de funções. Não revisaremos nessa ordem, mas ponteiro é muito importante para disciplina de Estrutura de Dados, por isso vamos estudar primeiro. O conteúdo do material é o mesmo utilizado em Programação Estruturada 2. Vamos começar !!!
  4. 4. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES PONTEIROS
  5. 5. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES É um tipo de variável que armazena um endereço de memoria referente a uma outra variável. O ponteiro não armazena diretamente um valor como os outros tipos em C++. Ponteiros O que é?:
  6. 6. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORESPONTEIROS, ESTRUTURAS E VETORES Para operação com ponteiros, utilizamos dois operadores unários: Ponteiros Operadores: Operador Descrição * Utilizado para declarar um ponteiro e para retornar o valor & Utilizado para retornar o endereço de memória da variável Vamos ver como declarar uma variável do tipo ponteiro !!!
  7. 7. ESTRUTURA DE DADOS – Prof. Thomás da Costa Declarando uma variável do tipo ponteiro: int *ptr; Tipo da variável Nome da variável Operador unário PONTEIROS, ESTRUTURAS E VETORES Ponteiros
  8. 8. ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo 1#include <iostream> using namespace std; int main() { int *ptr; cout << ptr << endl; } Declarando um ponteiro Exibe o endereço da variável, neste caso, nenhum endereço foi atribuído
  9. 9. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES Ponteiros Declaração e atribuição de ponteiros: Variável ponteiro Atribuindo o endereço de memória int *ptr; int valor; valor = 1500; ptr = &valor;
  10. 10. ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo 2 #include <iostream> using namespace std; int main() { int valor; int *ptr; valor = 1500; ptr = &valor; cout << ptr << endl; cout << *ptr << endl; } ptrvalor 0x23fe480x23fe44 0x23fe480x23fe44 0x23fe441500
  11. 11. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES Ponteiros Mais detalhes: - Ponteiro armazena o endereço de memória - O operador & mostra o endereço da variável - O operador * é utilizado na declaração do ponteiro - Exibindo o valor de um ponteiro com cout é mostrado o endereço referenciado - Utilizando o operador * seguido pelo nome da variável de ponteiro é exibido o valor atribuído no endereço de memória referente. Vamos ver mais um exemplo !!!
  12. 12. ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo 3 #include <iostream> using namespace std; int main() { int valor; int *ptr; int total; valor = 1600; ptr = &valor; total = *ptr; cout << *ptr << endl; cout << total << endl; } ptrvalor 0x23fe480x23fe44 total 0x23fe40 0x23fe480x23fe44 0x23fe401600 0x23fe44 1600
  13. 13. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES Ponteiros Importante: A atribuição de valores para ponteiros, deve ser do mesmo tipo. Quando as variáveis são de tipos diferentes, vamos ter um erro de compilação.
  14. 14. ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo 4 #include <iostream> using namespace std; int main() { // PROGRAMA COM ERRO NAO COMPILA !!!! int *ptr_inteiro; double valor; valor = 345.76; ptr_inteiro = &valor; cout << *ptr_inteiro << endl; } ERRO !!!
  15. 15. ESTRUTURA DE DADOS – Prof. Thomás da Costa Atribuição de valores: Podemos atribuir um valor diretamente para um ponteiro. Para isso utilizamos o operador * antes do nome da variável do tipo ponteiro. *ptr = 999; Variável do tipo ponteiro Atribuindo um valor PONTEIROS, ESTRUTURAS E VETORES Ponteiros
  16. 16. ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo 5 #include <iostream> using namespace std; int main() { int *ptr; int x; ptr = &x; *ptr = 999; cout << &x << endl; cout << ptr << endl; cout << *ptr << endl; } xptr 0x23fe440x23fe48 0x23fe48 0x23fe440x23fe44 999
  17. 17. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES Ponteiros Resumo: • Um ponteiro armazena uma posição de memória. • Esta posição de memória é referente a um valor. • Atribuição de ponteiros deve acontecer se for do mesmo tipo. • Existem dois tipo de operadores unários para trabalhar com ponteiros. • O operador & retornar o endereço de memória da variável. • O operador * é utilizado para declarar um ponteiro e para retornar o valor. • Vamos utilizar bastante na disciplina de Estrutura de Dados.
  18. 18. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES VETORES
  19. 19. ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo: #include <iostream> #include <string.h> using namespace std; int main() { int k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // inicializando um vetor for (int i=9;i>=0;i--) { k[i] = i; cout << k[i] << "n"; } char nome1[10] = "João"; // uma string char nome2[10] = "Maria"; strcat(nome2, " das Graças"); // concatena duas strings cout << "Nome1, Nome2: " << nome1 << "," << nome2 << "n"; cout << "Tamanho do Nome1: " << strlen(nome1) << "n"; // tamanho de uma string cout << "Tamanho do Nome2: " << strlen(nome2) << "n"; cout << "Comparando:" << strcmp(nome1, nome2) << "n"; // compara duas strings char usuario[100]; gets(usuario);// lê a string do teclado cout << "Usuário: " << usuario; } Criando um vetor com 10 posições Inicializando um vetor Atribuindo um valor na posição Ler um vetor de char pelo teclado PONTEIROS, ESTRUTURAS E VETORES Vetores
  20. 20. ESTRUTURA DE DADOS – Prof. Thomás da Costa PONTEIROS, ESTRUTURAS E VETORES ESTRUTURAS
  21. 21. ESTRUTURA DE DADOS – Prof. Thomás da Costa O que é: É um conjunto de variáveis que representam características de um determinado domínio ou de um tipo. A estrutura pode definir uma entidade e possui grande semelhança com registros de banco de dados. O agrupamento de variáveis pode ser de qualquer tipo, sendo denominado de membro da estrutura. Estruturas PONTEIROS, ESTRUTURAS E VETORES
  22. 22. ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo: Quais são as informações de um Aluno para a Faculdade? - Nome - Matrícula - Série - Turma - Curso No exemplo acima temos a estrutura Aluno que contém as informações ou as características de um aluno. Muito semelhante a um registro de banco de dados. Podemos dizer que em uma estrutura, estamos armazenando informações agrupadas logicamente. PONTEIROS, ESTRUTURAS E VETORES Estruturas
  23. 23. ESTRUTURA DE DADOS – Prof. Thomás da Costa Estruturas em C/C++: struct aluno { char nome[255]; int ra; int serie; int turma; char curso[100]; }; Nome da estrutura Palavra reservada que identifica uma estrutura Membros da estrutura Chaves definem o início e o fim da estrutura Termina com ponto e vírgula PONTEIROS, ESTRUTURAS E VETORES Estruturas
  24. 24. ESTRUTURA DE DADOS – Prof. Thomás da Costa Memória: Uma estrutura armazena vários tipos de dados e ocupa a memória de acordo com a quantidade de membros declarados na estrutura. struct aluno { char nome[255]; int ra; int serie; int turma; char curso[100]; }; Membro Bytes char nome[255] 255 int ra 4 int serie 4 int turma 4 char curso[100] 100 TOTAL: 367 PONTEIROS, ESTRUTURAS E VETORES Estruturas
  25. 25. ESTRUTURA DE DADOS – Prof. Thomás da Costa struct aluno { char nome[255]; int ra; int serie; int turma; char curso[100]; } aluno_anhanguera; struct aluno aluno_tecnologia; aluno aluno_curso; Declarando uma variável do tipo Estrutura: Existem 3 formas de declarar uma variável de estrutura: PONTEIROS, ESTRUTURAS E VETORES Estruturas
  26. 26. ESTRUTURA DE DADOS – Prof. Thomás da Costa Acessando membros de uma estrutura: Para acessar um membro de uma estrutura utilizamos o operador ponto (.) ... struct aluno { char nome[255]; int ra; int serie; int turma; char curso[100]; } aluno_anhanguera; ... int main() { cout << aluno_anhanguera.nome << endl; } Acessando um membro O membro “nome” da estrutura será impresso na tela PONTEIROS, ESTRUTURAS E VETORES Estruturas
  27. 27. ESTRUTURA DE DADOS – Prof. Thomás da Costa Atribuindo valores para membros de uma estrutura: Programação Estruturada II #include <iostream> using namespace std; struct demonstracao { char caracter; double valor1; float valor2; int valor3; } demo; int main() { demo.caracter = 'A'; demo.valor1 = 3.2; demo.valor2 = 6.7; demo.valor3 = 45; cout << demo.caracter << endl; cout << demo.valor1 << endl; cout << demo.valor2 << endl; cout << demo.valor3 << endl; } Atribuição de valores PONTEIROS, ESTRUTURAS E VETORES Estruturas
  28. 28. ESTRUTURA DE DADOS – Prof. Thomás da Costa Atribuindo valores para membros de uma estrutura: #include <iostream> #include <string.h> using namespace std; struct demonstracao { char string[100]; int vetor_inteiro[10]; double vetor_double[5]; } demo; int main() { strcpy(demo.string, "Valor da String:"); demo.vetor_inteiro[0] = 1; demo.vetor_inteiro[2] = 2; demo.vetor_double[4] = 5.6; cout << demo.string << endl; cout << demo.vetor_inteiro[0] << endl; cout << demo.vetor_inteiro[2] << endl; cout << demo.vetor_double[4] << endl; } Vetor de char usar strcpy Atribuição de valores em vetores PONTEIROS, ESTRUTURAS E VETORES Estruturas
  29. 29. ESTRUTURA DE DADOS – Prof. Thomás da Costa Resumo: - É definida pela palavra struct - Possuem um nome - Representa algum domínio, tipo ou uma entidade - Os tipos de uma estrutura são agrupadas logicamente - Composta de membros que são tipos de variáveis (int, double, float, char) - Seus membros são acessados utilizando o ponto (.) - Para atribuir valores (int, double, char e etc), utilizamos o operador igual (=), idêntico a atribuição de uma variável - Utilizamos o strcpy para atribuir um valor para um vetor de char - Os comandos cin e gets funcionam da mesma forma para os membros de uma estrutura - Vetores também são acessado da mesma forma, através de seus índices PONTEIROS, ESTRUTURAS E VETORES Estruturas
  30. 30. ESTRUTURA DE DADOS – Prof. Thomás da Costa MODULARIZAÇÃO E FUNÇÕES PONTEIROS, ESTRUTURAS E VETORES
  31. 31. ESTRUTURA DE DADOS – Prof. Thomás da Costa O que é Modularização: É o processo de decompor um programa em partes menores, facilitando a manutenção e o entendimento pelos desenvolvedores. Com isso podemos ter rotinas reutilizáveis para outros programas e aplicações. Além disso, conseguimos efetuar atividades paralelas na construção do código-fonte, na qual mais de um desenvolvedor pode atuar no trabalho. PONTEIROS, ESTRUTURAS E VETORES Funções
  32. 32. ESTRUTURA DE DADOS – Prof. Thomás da Costa Veja o exemplo abaixo: Um carro é composto por vários componentes (portas, rodas, motor e etc). Esses componentes tornam o carro modular. Cada parte tem uma finalidade, todas juntas formam o carro. Caso uma peça tenha problema, fazemos o ajuste neste local sem afetar o restante do carro. PONTEIROS, ESTRUTURAS E VETORES Funções
  33. 33. ESTRUTURA DE DADOS – Prof. Thomás da Costa Benefícios da Modularização em um programa: - Componentes menores formam um programa - Programa fica mais legível para compreensão - Facilidade na manutenção da aplicação - Funcionalidade pode ser reutilizada em outros programas - Previne duplicação de código e retrabalho PONTEIROS, ESTRUTURAS E VETORES Funções
  34. 34. ESTRUTURA DE DADOS – Prof. Thomás da Costa Modularização em C/C++: Em C++ a modularização é feita a partir de blocos de funcionalidades, denominado funções. PONTEIROS, ESTRUTURAS E VETORES Funções
  35. 35. ESTRUTURA DE DADOS – Prof. Thomás da Costa Estrutura de uma função: Retorno da função Nome da função Parâmetros da função Corpo da função Escopo de início e fim da função double somar(double x, double y) { double resultado = x + y; return resultado; } PONTEIROS, ESTRUTURAS E VETORES Funções
  36. 36. ESTRUTURA DE DADOS – Prof. Thomás da Costa Estrutura de uma função: - Tipos de retorno da função - double, float, int, char, void, vetores e outros tipos - Parâmetros da função - Cada parâmetro é composto pelo tipo, nome e separados por virgulas - Retorno da função - Quando uma função deve retornar um valor, devemos usar a palavra reservada return seguido de um valor, variável ou operação do mesmo tipo de retorno - Corpo da função - Código fonte com a funcionalidade que a função deve executar - Protótipo - As funções possuem protótipos para definir sua estrutura PONTEIROS, ESTRUTURAS E VETORES Funções
  37. 37. ESTRUTURA DE DADOS – Prof. Thomás da Costa Como Utilizar em C++: As quatro funções da calculadora Protótipo das funções #include <iostream> using namespace std; double somar(double x, double y); double subtrair(double x, double y); double multiplicar(double x, double y); double dividir(double x, double y); int main() { double x, y; cout << "Digite os valores para somar:n"; cin >> x >> y; cout << somar(x, y); cout << "Digite os valores para subtrair:n"; cin >> x >> y; cout << subtrair(x, y); cout << "Digite os valores para multiplicar:n"; cin >> x >> y; cout << multiplicar(x, y); cout << "Digite os valores para dividir:n"; cin >> x >> y; cout << dividir(x, y); } Chamando uma função double somar(double x, double y) { double resultado = x + y; return resultado; } double subtrair(double x, double y) { double resultado = x - y; return resultado; } double multiplicar(double x, double y) { double resultado = x * y; return resultado; } double dividir(double x, double y) { double resultado = x / y; return resultado; } PONTEIROS, ESTRUTURAS E VETORES Funções
  38. 38. ESTRUTURA DE DADOS – Prof. Thomás da Costa Chamando uma função: Chamando a função “somar” passando os parâmetros 10 e 15 Retornando o valor para a variável “valor” Protótipo da função #include <iostream> using namespace std; double somar(double x, double y); int main() { double valor; valor = somar(10,15); } ... PONTEIROS, ESTRUTURAS E VETORES Funções
  39. 39. ESTRUTURA DE DADOS – Prof. Thomás da Costa Resumo: • Possuem um nome • Podem possuir um retorno ou não • Tem parâmetros com tipo e nome, separados por virgulas • A função tem um corpo, aonde é definido e escrito oque a função vai executar • Tem um protótipo para definir a função • São reutilizáveis • Ajuda a deixar o código mais simples • Funções quando usadas corretamente deixa muito mais fácil o entendimento do programa • Organização do código • Retornam valores com a palavra reservada return • void é tipo que não retorna valor na função PONTEIROS, ESTRUTURAS E VETORES Funções
  40. 40. Obrigado !!! ANHANGUERA – 2015.2

×