Algoritmos
Escher
Agenda
• Estruturas Heterogêneas;
• Exercícios.
Conceitos Iniciais
Motivação:
 Tipos básicos:
Tipos de Dados Inteiros
Tipos de Dados Reais
Tipos de Dados Caracteres (String)
Variáveis guardam um só valor.
 Tipos de Dados Homogêneos
Vetores e Matrizes
Variáveis guardam coleções de objetos de mesmo tipo.
 Como guardar coleções de tipos diversos?
Conceitos Iniciais
Estruturas Heterogêneas – Estrutura (Struct):
 Para armazenar, ou agrupar, informações “relacionadas”
que têm tipos diferentes deve-se utilizar variáveis do
tipo registro, ou estrutura (struct).
 structs armazenam diversos itens de uma só vez;
 Isto significa, que numa mesma estrutura de dados, é
possível ter diversas variáveis de tipos de dados básicos
agrupadas.
Conceitos Iniciais
Estruturas Heterogêneas – Estrutura (Struct):
 Contém um número fixo de elementos chamados de
campos, ou “membros”;
 Os campos podem ser de tipos diferentes (estrutura
heterogênea);
 Cada campo tem um nome próprio chamado de
“identificador de campo”, onde campo = unidade de
registro.
Estruturas - struct
Campos x Registros:
 Registros - informações do cadastro.
 Campos - informações do registro.
Os clientes de uma empresa
nome, endereço, e-mail, cpf, ...
Os assinantes da lista telefônica
nome, telefone, endereço
Os alunos da disciplina de Matemática
matrícula, nome, faltas, notas bimestrais, situação
Estruturas - struct
Contextualizando:
 Considere que seja informado o nome de um aluno e
suas quatro notas bimestrais que deverão ser agrupadas.
 Esquema de um registro (struct) de aluno formado pelos
campos: Nome, Primeira Nota, Segunda Nota, Terceira Nota e
Quarta Nota.
Cadastro de Notas Escolares
Nome..........:_______________________
Primeira Nota.: ________
Segunda Nota..: ________
Terceira Nota.: ________
Quarta Nota...: ________
Estruturas - struct
Sintaxe:
Na linguagem C, os registros (ou structs) devem ser
definidos antes das declarações das variáveis, pois é muito
comum ocorrer a necessidade de se declarar uma ou mais
variáveis com o tipo de registro definido, conforme a
seguinte sintaxe:

Estruturas - struct
Sintaxe:
// definição do tipo registro, ou seja, definição da struct
struct <IdentificadorDoRegistro>
{
<lista dos tipos e seus campos (ou membros)>;
};
// declaração da variável do tipo registro definido,
struct <IdentificadorDoRegistro> <NomeDaVariável>;
IdentificadorDoRegistro: nome do tipo registro definido
lista dos tipos e seus campos: relação de tipos e campos do
registro.
NomeDaVariável: nome da variável declarada a partir do
tipo registro definido anteriormente.
Estruturas - struct
Campos (ou membros):
struct <IdentificadorDoRegistro>{
<tipo1> <campo1>;
<tipo2> <campo2>;
...
<tipoN> <campoN>;
};
onde:
campo1, campo2, ..., campoN: representam os nomes associados
a cada campo do registro;
tipo1, tipo2, ..., tipoN: representam qualquer um dos tipos
básicos ou ‘tipo anteriormente definido’.
Estruturas - struct
Definindo uma struct - Exemplo:
 Considere :
Cadastro de Notas Escolares
Nome..........:_______________________
Primeira Nota.: ________
Segunda Nota..: ________
Terceira Nota.: ________
Quarta Nota...: ________
 Ling. C:
// definição do tipo registro CNotasEscolar
struct CNotasEscolar {
char nome[35];
float nota1, nota2;
float nota3, nota4;
};
Estruturas - struct
Campos (ou membros):
// declaração da variável Aluno declarada a partir do tipo
registro CNotasEscolar
struct CNotasEscolar Aluno;
Este exemplo corresponde à definição de um modelo de um
registro (CNotasEscolar) e à criação de uma área de
memória chamada Aluno, capaz de conter cinco
subdivisões, ou campos: nome, nota1, nota2, nota3 e
nota4.
Estruturas - struct
Como acessar os Campos (ou membros):
 Para utilizar um campo específico do registro, deve-se
diferenciar esse campo. Para tal, utiliza-se o caractere
“.” (ponto) para estabelecer a separação do nome da
variável registro do nome do campo.
 struct CNotasEscolar {
Para denotar
char nome[35];
float nota1, nota2;
float nota3, nota4;
};
struct CNotasEscolar Aluno;
// para acessar nota1 faremos:
Aluno.nota1 = 10.0;
tipos estruturados
registro (struct)
ponto
Estruturas - struct
Operações Básicas com Struct:
 Do mesmo modo que acontece com variáveis simples,
também é possível realizar operações de atribuição (=),
leitura (cin) e escrita (cout) com variáveis tipo struct.
struct RgAluno {
char nome[35];
float nota1;
float nota2;
};
struct RgAluno Aluno,
NewAluno;
NewAluno = Aluno;
Neste caso o acesso ao registro é
feito genericamente, ou seja,
todos os campos do registro são
envolvidos na operação de
atribuição.
Estruturas - struct
Lendo e Escrevendo valor da struct:
#include <iostream>
using namespace std;
//tipo struct (Global)
struct RgAluno {
char nome[35];
float nota1;
float nota2;
};
struct RgAluno Aluno;
main () {
cout << "Nome do Aluno: ";
cin >> Aluno.nome;
cout << "Nota 1o. Bimestre: ";
cin >> Aluno.nota1;
cout << "Nota 2o. Bimestre: ";
cin >> Aluno.nota2;
//Valores Digitados
cout << "\n\n\nNome do Aluno: " <<
Aluno.nome;
cout << "\nNota 1o. Bimestre: " <<
Aluno.nota1;
cout << "\nNota 2o. Bimestre: " <<
Aluno.nota2;
//
}
Estruturas – Exercícios

1. Crie uma estrutura com os campos:
– Nome
– Endereco
– Idade

Leia a estrutura acima definida;
Escreva a mensagem “maior de idade” se idade >
18;
Escreva os dados da estrutura.

2. Reescreva o programa acima para 5 pessoas;


Estruturas - struct
Campos do registro declarados como vetor:
 Para manipular um campo do registro do tipo vetor
deve-se obedecer às manipulações próprias de cada
estrutura de dados, ou seja:
struct RgAluno {
char nome[35];
float nota [4];
};
struct RgAluno Aluno;
Aluno.nota[1] = 7.5;
Cadastro de Notas Escolares
Nome.: _____________________
0
1
2
3
Nota.:
cin << Aluno.nota[3];
Estruturas – Exercícios

3. Crie uma estrutura conforme RgAluno no slide
anterior:
Leia a estrutura;
Calcule a média;
Escreva os dados da estrutura e mostre a média;.

4. Reescreva o programa acima para 5 pessoas;



Estruturas - struct
struct RgAluno {
char nome[35];
float nota [4];
};
struct RgAluno Aluno [30];
Vetor de Registros:
 Para controlar as notas de 30 alunos, numerados de 0 até
29 seqüencialmente, basta criar um vetor no qual cada
posição é um elemento do tipo registro RgAluno.
ALUNO [ ? ]
0
1
...
29
cin << Aluno[1].nome;
Cadastro de Notas Escolares
Nome.: _____________________
0
1
2
3
Nota.:
cin << Aluno[i].nota[1];
Estruturas – Exercícios

5. Reescreva o programa do exercício 04
armazenando os dados das para 5 pessoas
em um vetor.
– Leia os dados da pessoa, calcule e armazene
a media e ao final imprima os dados das 5
pessoas.
Estruturas - struct
Utilizando struct dentro struct :
 Para cada nível da estrutura utiliza-se o caracter “.”
(ponto).
struct RgData {
int dia;
int mes;
int ano;
};
struct RgPessoa {
char nome[35];
char sexo;
struct RgData DtNascto;
};
struct RgPessoa Pessoa;
strcpy (Pessoa.nome, “Flavio Marcello");
Pessoa.sexo = ‘M’;
Pessoa.DtNascto.dia = 30;
Pessoa.DtNascto.mes = 11;
Pessoa.DtNascto.ano = 1965;
Estruturas – Exercícios

6. Reescreva o programa do exercício 05
acrescentado a data de nascimento
conforme exemplo do slide anterior.
– Leia os dados da pessoa, calcule e armazene
a media e ao final imprima os dados das 5
pessoas.
Referências
 Lopes, A. & Garcia, G. – Introdução a Programação.
 Schildt – C Completo e Total.
Obrigado
E Agora???
Exercícios!!!
Exercícios Propostos
1.
Seja a estrutura para descrever uma agenda de endereços, contendo os
seguintes campos:
nome: string de tamanho 30
idade: inteiro
telefone: string de tamanho 10
Escrever a definição da estrutura agenda globalmente.
Ler UM registro, e logo após escrever os dados lidos.
2.
Alterar o programa do exercício anterior para ler 10 registros, imprimir os
mesmos.
3.
Alterar o o programa do exercício anterior passando para função a struct e
quantidade de registro a ser lida. Faça também a impressão utilizando uma
função para tal.
FIM
Solução Ex. 01
#include <iostream>
using namespace std;
struct agenda {
char nome[30];
int idade;
char telefone[10];
};
int main()
{
struct agenda Dagenda;
cout << "\n Digite Nome : ";
cin >> Dagenda.nome;
cout << "\n Digite Idade : ";
cin >> Dagenda.idade;
cout << "\n Digite Telefone : ";
cin >> Dagenda.telefone;
// A impressão dos dados
cout << "\n Nome : " << Dagenda.nome;
cout << "\n Endereco : " << Dagenda.idade;
cout << "\n Telefone : " << Dagenda.telefone;
cout << "\n\n";
//Parada na tela.
cout << "\n\nPrograma executado com sucesso. ";
getchar(); getchar();
//Sinaliza execucao do program sem problemas
return (0);
}
Download

Struct - Udesc