Você está na página 1de 26

Linguagem de Programação

Registros e structs
Unidade 1: Conceitos de programação orientada a objetos

Objetivos:

● Compreender os conceitos Registros e structs;


● Aplicar estes conceitos em exemplos.

2
Unidade 1: Conceitos de programação orientada a objetos

Plano de Aula
● Definição de Registros e structs;
● Exemplos;
● Definição de struct como tipo;

3
Registros e structs
● Um registro é um pacote de variáveis, possivelmente
de tipos diferentes. Cada variável é um campo do
registro. Na linguagem C, registros são conhecidos
como structs (o nome é uma abreviatura de
structure).
● Podemos dizer que structs são conjuntos de dados de
forma estruturada.
● As variáveis internas contidas pela struct são
denominadas membros da struct.

4
Registros e structs
● Sintaxe:
struct nome
{
tipo1 dado1;
tipo2 dado2;

tipon dadon;
};

5
Definição e manipulação de structs
● O seguinte exemplo declara um registro x com três
campos que pode ser usado para armazenar datas:
struct {
int dia;
int mes;
int ano;
} x;

6
Definição e manipulação de structs
● É uma boa ideia dar um nome à classe de todos os
registros de um mesmo tipo. No nosso exemplo, dma é
um nome apropriado:
struct dma {
int dia;
int mes;
int ano;
};
struct dma x; // um registro x do tipo dma
struct dma y; // um registro y do tipo dma

7
Definição e manipulação de structs
● Para se referir a um campo de um registro, basta
escrever o nome do registro e o nome do campo
separados por um ponto:
x.dia = 31;
x.mes = 12;
x.ano = 2018;

8
Definição e manipulação de structs
Exemplo1:
struct dma {
int dia;
int mes;
Int ano;
};
Int main ()
{ struct dma X1;
X1.dia = 3;
X1.mes = 7;
X1.ano = 2018;
} 9
Definição e manipulação de structs
Exemplo2:
struct dma {
int dia;
int mes;
Int ano;
} X1;
Int main ()
{
X1.dia = 3;
X1.mes = 7;
X1.ano = 2018;
} 10
Definição e manipulação de structs

Registros podem ser tratados como um novo
tipo-de-dados. Depois da seguinte definição, por
exemplo, poderemos passar a dizer data no lugar de
struct dma:
typedef struct dma data;
data x, y;

11
Definição e manipulação de structs
Exemplo3:
Struct dma {
Int dia;
Int mês;
Int ano;
};
Typedef struct dma data
Int main ()
{
data X1;
X1.dia = 18;
X1.mes = 7;
X1.ano = 2018;
}
12
Definição e manipulação de structs
Exemplo4:
typedef struct dma {
Int dia;
Int mês;
Int ano;
} data;
Int main ()
{
data X1;

X1.dia = 18;
X1.mes = 7;
X1.ano = 2018;
}
13
Definição e manipulação de structs
Altere o código para que a data seja inserida pelo usuário.

14
Definição e manipulação de structs
Altere o código para que a data seja inserida pelo usuário.
int main ()
{
#include <iostream> data X1;
#include <cstdlib>
#include <string> cout<<"\n insira o dia: ";
cin>>X1.dia;
using namespace std; cout<<"\n insira o mes: ";
cin>>X1.mes;
//struct dma{ cout<<"\n insira o ano: ";
typedef struct dma { cin>>X1.ano;
int dia;
int mes; cout << "A data eh: "<<endl;
int ano; cout <<X1.dia;
}data;//X1; cout << "/"<<X1.mes;
cout << "/"<<X1.ano<<endl;
//typedef struct dma data;
system("pause");
return 0;

}
15
Definição e manipulação de structs
Usando struct, crie um programa que receba o cadastro de um aluno com matrícula,
nome e curso e imprima os dados cadastrados em seguida.

16
Definição e manipulação de structs
#include <iostream>
#include <cstdlib> int main()
#include <string>
{
using namespace std; struct aluno a1,a2;
cout<<"\n matricula: ";
cin>>a1.matricula;
struct aluno cout<<"\n Nome: ";
{ fflush(stdin);
int matricula; gets(a1.nome);
char nome[50]; cout<<"\n Curso: ";
char curso[50]; gets(a1.curso);
}; a2=a1;
cout<<"\n \n Matricula: "<<a2.matricula;
cout<<"\n \n Nome: "<<a2.nome;
cout<<"\n \n Curso: "<<a2.curso<<endl;

system("pause");
return 0;

}
14
Definição e manipulação de structs
Faça o mesmo procedimento do programa anterior, agora com o cadastro de 4
alunos.

18
Definição e manipulação de structs
#include <iostream>
#include <string>

using namespace std;

struct Ficha_Aluno
{
int matricula;
string nome;
string curso;
};
typedef struct Ficha_Aluno Aluno;

14
Definição e manipulação de structs
int main ()
{

Aluno novoaluno[4];
for(int i=0;i<4;i++)
{
cout << "Digite a matricula do aluno "<<i+1<<endl;
cin >> novoaluno[i].matricula;
fflush(stdin);
cout << "Digite o nome do aluno"<<endl;
getline(cin, novoaluno[i].nome);
cout << "Digite o curso do aluno"<<endl;
getline(cin, novoaluno[i].curso);
cout << "Aluno cadastrado com sucesso!"<<endl;
}
for(int i=0;i<4;i++)
{
cout << "Matricula: " <<novoaluno[i].matricula<<endl;
cout << "Nome: " <<novoaluno[i].nome<<endl;
cout << "Curso: " <<novoaluno[i].curso<<endl<<endl;
}

system ("pause");

} 14
Structs e ponteiros
Cada registro tem um endereço na memória do computador. (Você
pode imaginar que o endereço de um registro é o endereço de seu
primeiro campo.) É muito comum usar um ponteiro para guardar o
endereço de um registro. Dizemos que um tal ponteiro aponta para o
registro. Por exemplo,
data *p; // p é um ponteiro para registros dma
data x;
p = &x; // agora p aponta para x
(*p).dia = 31; // mesmo efeito que x.dia = 31
(Cuidado! Graças às regras de precedência, a expressão *p.dia
equivale a *(p.dia) e tem significado muito diferente de (*p).dia .)
A expressão p->mes é uma abreviatura muito útil para a expressão
(*p).mes :
p->dia = 31; // mesmo efeito que (*p).dia = 31
21
Structs e ponteiros
int main ()
#include <iostream> {
#include <cstdlib>
#include <string> data X1;
data *x2;
using namespace std; x2 = &X1;
x2->dia=15;
typedef struct dma { x2->mes=12;
int dia,mes,ano; x2->ano=2025;
}data;
//(*x2).dia=15;
//(*x2).mes=12;
//(*x2).ano=2025;
cout << "A data eh: "<<endl;
cout <<X1.dia;
cout << "/"<<X1.mes;
cout << "/"<<X1.ano<<endl;

system("pause");
return 0;
22
}
Definição e manipulação de structs
Exemplo. A função abaixo recebe a data de início de um evento
e a duração do evento em dias. Ela devolve a data de fim do
evento.
data fimEvento (data inicio, int duracao) {
data fim;
...
...
fim.dia = ...
fim.mes = ...
fim.ano = ...
return fim;
} 17
Definição e manipulação de structs

O código foi omitido porque é um tanto enfadonho: deve levar
em conta a existência de meses com 31 dias, de meses com
30 dias, com 29 dias, etc. Eis como essa função poderia ser
usada:
int main () {
data a, b;
int d;
cin>> a.dia; cin>> a.mes; cin>>
a.ano; cin>> d;
b = fimEvento (a, d);
cout<< b.dia<< b.mes<< b.ano;
return EXIT_SUCCESS;
} 18
Definição e manipulação de structs
Exercício:
1. Complete o código da função fimEvento do slide anterior.
2.Escreva uma função que receba dois structs do tipo dma, cada um
representando uma data válida, e devolva o número de dias que
decorreram entre as duas datas.
3.Escreva uma função que receba um número inteiro que
representa um intervalo de tempo medido em minutos e devolva o
correspondente número de horas e minutos (por exemplo, converte
131 minutos em 2 horas e 11 minutos). Use uma struct como a
seguinte:
struct hm {
int horas;
int minutos;
}; 19
Bibliografia:
● DEITEL, H. M.; DEITEL, P. J. C++:Como
Programar. 3. Ed. Porto Alegre (RS): Bookman,
2001. 1098p
● SOUZA, M. A. F., GOMES, M. M.,SOARES, M.
V., CONCILIO, R., Algoritmos e Lógica de
Programação, Editora Cengage Learning, São
Paulo, 2008.
● Sergio Barbosa Villas-Boas, C / C++ e
Orientação a Objetos em Ambiente
Multiplataforma
26

Você também pode gostar