1. ANHANGUERA – 2015.2
ESTRUTURA DE DADOS
AULA 03 – REVISÃO: PONTEIROS, ESTRUTURAS E VETORES
Prof. Thomás da Costa
thomascosta@aedu.com
2. ESTRUTURA DE DADOS – Prof. Thomás da Costa
PONTEIROS, ESTRUTURAS E VETORES
REVISÃO: PONTEIROS, ESTRUTURAS E VETORES
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. ESTRUTURA DE DADOS – Prof. Thomás da Costa
PONTEIROS, ESTRUTURAS E VETORES
PONTEIROS
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. ESTRUTURA DE DADOS – Prof. Thomás da Costa
PONTEIROS, ESTRUTURAS E VETORES
VETORES
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. ESTRUTURA DE DADOS – Prof. Thomás da Costa
PONTEIROS, ESTRUTURAS E VETORES
ESTRUTURAS
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. 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. 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. 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. 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. 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. 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. 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. 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. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MODULARIZAÇÃO E FUNÇÕES
PONTEIROS, ESTRUTURAS E VETORES
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. 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. 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. 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. 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. 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. 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. 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. 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