Buscar

Aula27 - Tipos Estruturados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 38 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 38 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 38 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ECT1203 Linguagem de Programação
2014.2
Profa. Caroline Rocha
Aula 27 – Tipos Estruturados
Universidade Federal do Rio Grande do Norte
Escola de Ciências e Tecnologia
Hora de silenciar o celular
• Manter o celular sempre desligado/silencioso quando 
estiver em sala de aula
• Nunca atender o celular em sala de aula
Objetivo da Aula
• Responder a seguinte pergunta:
▫ Eu sei como armazenar uma informação de um tipo
(variável), sei como armazenar várias informações do
mesmo tipo (matrizes)... E se eu quiser armazenar
informações de tipos diferentes?
• Mostrar o que são tipos estruturados como funcionam e
para que servem.
Roteiro
• Definição de novos tipos com struct
• Elementos do struct
• Exemplos
• Exercícios
• Muitas vezes precisamos agrupar informações de tipos
diferentes sob um mesmo nome.
• Por exemplo, como armazenar o nome, a idade e o
salário de um funcionário?
Motivação
const int MAX = 100;
int main(){
char nome[MAX];
int idade;
float salario;
cout << “Digite o nome do funcionário: ”;
cin.getline(nome, MAX);
cout << “Digite a idade: ”;
cin >> idade;
cout << “Digite o salario: ”;
cin >> salario;
cout << nome << “: ” << idade << “ anos, R$” << 
salario << endl;
return 0;
}
Tipos Estruturados ou 
Estruturas de Dados Heterogêneas
• Uma estrutura é uma coleção de um ou mais valores, 
possivelmente de tipos diferentes, agrupados sob um 
único nome. 
• Estruturas constituem um recurso importante para 
organizar os dados utilizados por um programa pois 
trata um grupo de valores como uma única variável.
Uma estrutura é um tipo de dado cujo 
formato é definido pelo programador.
const int MAX = 100;
struct Funcionario{
char nome[MAX];
int idade;
float salario;
}; 
int main(){
Funcionario novato;
cout << “Informe o nome do funcionário: ”;
cin.getline(novato.nome, MAX);
cout << “Informe a idade: ”;
cin >> novato.idade;
cout << “Informe o salario: ”;
cin >> novato.salario;
cout << novato.nome << “: ” 
<< novato.idade << “ anos, R$” << 
novato.salario << endl;
return 0;
}
Definição de uma estrutura
Sintaxe:
struct <nome_da_estrutura>{
<tipo> <identificadores>;
<tipo> <identificadores>;
...
} ;
Cada identificador
define um membro
da estrutura
Declarando variáveis de estrutura
• Definição de uma estrutura Aluno:
• Declaração de variáveis do tipo Aluno:
Aluno std1, std2;
std1 std2
nome
matricula sexo
curso
nome
matricula sexo
curso
struct Aluno{
char nome[100];
int matricula;
char curso[100];
char sexo;
};
#include <iostream>
using namespace std;
const int MAX 100;
struct Aluno{
char nome[MAX], curso[MAX];
int matricula;
char sexo;
};
int main(){
Aluno aluno;
cout << “Nome: “; cin.getline(aluno.nome,MAX);
cout << “Curso: “; cin.getline(aluno.curso,MAX);
cout << “Matricula: “; cin >> aluno.matricula;
cout << “Sexo: “; cin >> aluno.sexo;
switch(aluno.sex){
case ‘M’: cout << “Sr. ” << aluno.nome <<endl; break;
case ‘F’: cout << “Sra. ” << aluno.nome <<endl;
}
return 0;
}
Definindo 
estrutura
Declarando variável de 
estrutura
Acessando 
membros de 
estrutura
struct Data {
int dia;
int mes;
int ano;
};
struct contaBancaria{
char nome[100];
char contaNo[10];
double saldo;
Data nasc;
};
Estruturas aninhadas
Estruturas aninhadas
struct Ponto{ 
double x, y;
};
struct Linha{
Ponto p1, p2;
};
struct Triangulo{ 
Ponto p1, p2, p3;
};
Ponto P; 
Linha L;
Triangulo T;
(P.x, P.y)
(L.p1.x, L.p1.y)
(T.p2.x, T.p2.y)
(T.p1.x, T.p1.y)
(T.p3.x, T.p3.y)
(L.p2.x, L.p2.y)
Estruturas aninhadas
struct Ponto{ 
double x, y;
};
struct Linha{
Ponto p1, p2;
};
Linha L;
L
p1
yx
p2
yx
(L.p1.x, L.p1.y)
(L.p2.x, L.p2.y)
Estruturas aninhadas
Utilizando as estruturas
anteriores:
1. Declare variáveis para
representar cada uma das 
situações da figura ao lado;
2. Atribua os valores constantes
no gráfico às variáveis
criadas no item 1;
(4, 11)
(2, 7)
(6, 5)
(2, 0)
((8, 3)
(10, 9)
Estruturas aninhadas
(4, 11)
(2, 7)
(6, 5)
(2, 0)
((8, 3)
(10, 9)
Ponto P;
Linha L;
Lriangulo T;
P.x = 4;
P.y = 11;
L.p1.x = 2;
L.p1.y = 7;
L.p2.x = 10;
L.p2.y = 9;
T.p1.x = 2;
T.p1.y = 0;
T.p2.x = 6;
T.p2.y = 5;
T.p3.x = 8;
T.p3.y = 3;
#include <iostream>
using namespace std;
struct Ponto{
double x, y;
};
struct Linha{
Ponto p1, p2;
};
struct Triangulo{
Ponto p1, p2, p3;
};
int main(){
Ponto P; Linha L; Triangulo T;
P.x = 4; P.y = 11;
L.p1.x = 2; L.p1.y = 7;
L.p2.x = 10; L.p2.y = 9;
T.p1.x = 2; T.p1.y = 0;
T.p2.x = 6; T.p2.y = 5;
L.p3.x = 8; T.p3.y = 3;
cout<< P.x <<“ “<< P.y << endl;
cout<< L.p1.x <<“ “<< L.p1.y <<“ “<< L.p2.x <<“ “<< L.p2.y << endl;
cout<< T.p1.x <<“ “<< T.p1.y <<“ “<< T.p2.x <<“ “<< T.p2.y<<“ “
<<T.p3.x<<“ “<<T.p3.y<<endl;
return 0;
}
(4, 11)
(2, 7)
(6, 5)
(2, 0)
((8, 3)
(10, 9)
• Em um programa, queremos armazenar uma lista 
com o nome, a matricula, o curso e o sexo de vários 
alunos.
• Como podemos fazer isso?
Vetor de estruturas
#include <iostream>
using namespace std;
const int MAXSTR 100;
const int MAXALUNOS 140;
struct Aluno{
char nome[MAXSTR], curso[MAXSTR];
int matricula;
char sexo;
};
int main(){
Aluno turma[MAXALUNOS];
int nalunos;
cin >> nalunos;
for (int i=0; i<nalunos; i++){
cout << “Nome: “; cin.getline(turma[i].nome,MAXSTR);
cout<<“Curso: “; cin.getline(turma[i].curso,MAXSTR);
cout << “Matricula: “; cin >> turma[i].matricula;
cout << “Sexo: “; cin >> turma[i].sexo;
}
...
}
Vetor como membro de estrutura
struct Ponto{
double x, y;
};
struct Quadrado{
Ponto vertice[4];
};
Declare uma variável do tipo Quadrado e atribua
valores usando os dados do gráfico. 
(4, 3) (10, 3)
(4, 1) (10, 1)
#include <iostream>
using namespace std;
struct Ponto{
double x, y;
};
struct Quadrado{
Ponto vertice[4];
};
int main(){
Quadrado qdo ;
qdo.vertice[0].x = 4; qdo.vertice[0].y = 3;
qdo.vertice[1].x =10; qdo.vertice[1].y = 3;
qdo.vertice[2].x = 4; qdo.vertice[2].y = 1;
qdo.vertice[3].x =10; qdo.vertice[3].y = 1;
for(int i =0; i < 4; i++){
cout << qdo.vertice[i].x << “ ”
<< qdo.vertice[i].y << endl;
return 0;
}
(10, 3)
(4, 1) (10, 1)
(4, 3)
Exercício
Distância entre pontos:
Escreva um programa que, tendo como dados de 
entrada dois pontos quaisquer no plano, (x1,y1) e 
(x2,y2), calcule a distância entre eles.
Inicialização de estruturas
A inicialização de estruturas é semelhante à 
inicialização de matrizes.
struct Data{
int dia;
char mes[10];
int ano;
};
Data natal = {25,“Dezembro”,2011};
struct Ponto{
double x,y;
};
Ponto origem = {0,0};
Inicialização de vetores de estruturas
struct Ponto{
double x, y;
};
Ponto trapezio[] = 
{ {5,5}, {5,10}, {10,5}, {10,13} };
Inicialização de estruturas aninhadas
struct Ponto{
double x,y;
};
struct Linha{
Ponto p1, p2;
};
Linha l={{1.0,2.0},
{3.5,4.8}};
struct Data{
int dia;
char mes[10];
int ano;
};
struct Pessoa{
string nome;
Data nasc;
};
Pessoa chico = 
{“Francisco”, 
{10, “Maio”, 1970} };
Atribuições entre estruturas
Data natal = {25, “Dezembro”, 2011};
Data feriado = natal;
• A informação contida em uma variável de uma 
estrutura pode ser atribuída a outra variável. 
• O bloco de memória associado à variável original é 
todo (todos os campos) copiado para a variável 
destino.• A atribuição só é permitida entre variáveis de 
mesmo tipo.
Atribuições entre estruturas
Aluno turma[100];
strcpy(turma[98].nome, “Fulano de Tal”);
turma[98].matricula = 12345;
strcpy(turma[98].curso, “BCT”);
turma[98].sexo = ‘M’;
turma[0] = turma[98];
. . .
0 1 2 … 98 99
Fulano de Tal
12345 M
BCT
Criando um sistema para biblioteca
Defina o tipo livro, contendo as seguintes 
informações:
código, título e número de páginas
const int MAX 200;
struct Livro {
int id;
char titulo[MAX];
int paginas; 
};
int main() {
Livro biblioteca[10];
for (int i=0; i<10; i++) {
biblioteca[i].id = i; 
cout <<“Dados do livro : “ << i+1 << endl;
cout <<“ -Titulo: ”;
cin.getline(biblioteca[i].titulo,MAX);
cout <<“ -Numero de Paginas:”;
cin >> biblioteca[i].paginas;
} 
... 
return 0; 
}
Sistema biblioteca
Como organizar a biblioteca com estantes, as 
estantes com prateleiras e as prateleiras com livros ?
Sistema biblioteca
struct Livro {
int id;
char titulo[200];
int paginas; 
};
struct Estante {
Livro prateleiras[5][10]; 
};
struct Biblioteca{
Estante estantes[10]; 
};
Sistema biblioteca
Como imprimir os dados de todos os livros da 
biblioteca?
Passando estruturas para funções
• As estruturas podem ser passadas para funções da 
mesma forma que variáveis simples.
• A passagem pode ser feita por valor ou referência.
struct Venda{
int pecas;
float preco;
};
void imprimeVenda(Venda v){
cout << “VENDA\n”;
cout << “Pecas: ” << v.pecas << endl;
cout << “Preco: ” << v.preco << endl;
}
int main(){
Venda abril;
...
imprimeVenda(abril);
...
return 0;
}
Passando estruturas por valor
A chamada à função 
imprimeVenda() cria uma variável 
v para conter a cópias da variável 
abril, enviada como argumento.
Passando estruturas por referência
struct Venda{
int pecas;
float preco;
};
void imprimeVenda(Venda& v){
cout << “VENDA\n”;
cout << “Pecas: ” << v.pecas << endl;
cout << “Preco: ” << v.preco << endl;
}
int main(){
Venda abril;
... 
imprimeVenda(abril);
... 
return 0;
}
Na passagem por referência, não há cópias 
de variáveis, evitando-se o uso 
desnecessário de espaço.
A variável v de imprimeVenda() é uma 
referência constante para a variável abril
de main().
Passando estruturas por referência
struct Venda{
int pecas;
float preco;
};
void imprimeVenda(const Venda& v){
cout << “VENDA\n”;
cout << “Pecas: ” << v.pecas << endl;
cout << “Preco: ” << v.preco << endl;
}
void somaVendas(const Venda& x, const Venda& y, Venda& total){
total.pecas = x.pecas + y.pecas;
total.preco = x.preco + y.preco;
}
int main(){
Venda A, B, T;
...
somaVendas(A,B,T);
listaVenda(T);
... 
return 0;
}
A variável T de main() é modificada 
dentro função totalVendas() através 
da referência total.
Funções que retornam uma estrutura
struct Venda{
int pecas;
float preco;
};
Venda novaVenda(){
Venda nova;
cout << “Nova Venda\n”;
cout << “Numero de pecas:”;
cin >> nova.pecas;
cout << “Preco:”;
cin >> nova.preco;
return nova;
}
void imprimeVenda(const Venda& v){
cout<< “VENDA\n”;
cout<<“Pecas: ”<<v.pecas<<endl;
cout<<“Preco: ”<<v.preco<<endl;
}
void somaVendas(const Venda& x, 
const Venda& y, Venda& total){
total.pecas = x.pecas + y.pecas;
total.preco = x.preco + y.preco;
}
int main(){
Venda A, B, T;
A = novaVenda();
B = novaVenda();
somaVendas(A,B,T);
imprimeVenda(T);
return 0;
}
Exercício
Agenda telefônica: 
Construa um sistema em que o usuário possa cadastrar, 
alterar, remover, listar e procurar contatos.

Outros materiais