• Nenhum resultado encontrado

Programação de Computadores I Registros

N/A
N/A
Protected

Academic year: 2022

Share "Programação de Computadores I Registros"

Copied!
31
0
0

Texto

(1)

Registros

Programação de Computadores I

Natália Batista

https://sites.google.com/site/nataliacefetmg/

nataliabatista@decom.cefetmg.br

2º semestre/ 2017

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS

(2)

1. Introdução

 Registros: são conjuntos de dados logicamente relacionados, mas de tipos diferentes.

 Exemplo:

voo

(3)

3

1. Introdução

Nome Matrícula Endereço

Curso

Aluno

(4)

1. Introdução

Número Cliente Endereço

Saldo

Conta

(5)

5

2. Registros

 São estruturas de dados capazes de agregar várias informações de tipos distintos.

 Permitem gerar novos tipos de dados.

 São variáveis compostas heterogêneas.

 A vantagem no uso dessas estruturas é permitir que os dados possam ser

organizados de forma mais clara e próxima

daquela que nós trabalhamos.

(6)

3. Campos de um registro

 Campos:

 Nome

 Matrícula

 Endereço

 Curso

Nome Matrícula Endereço

Curso

Aluno

(7)

7

4. Definição

 Definição

struct Aluno{

char Nome[100];

int Matricula;

char Endereco[100];

char Curso[30];

};

(8)

4. Definição

 Forma geral:

struct nome_do_registro{

tipo campo1;

tipo campo2;

...

tipo campoN;

Uma definição

de estrutura

corresponde à

definição de um

(9)

9

4. Definição

 A partir da estrutura definida, o programa poderá considerar que existe um novo tipo de dado a ser utilizado chamado

struct nome_do_registro.

(10)

4. Definição

Número Cliente Endereço

Saldo

Conta

Exercício: definir o registro Conta que tem a seguinte forma:

(11)

11

4. Definição

 Definição

struct Conta{

int Numero;

char Cliente[100];

char Endereco[100];

float Saldo;

};

(12)

5. Declaração

 Definição

 Declaração

struct voo{

int numero;

int passageiros;

char destino[30];

};

struct voo TAM;

struct voo AZUL;

numero passageiros

destino numero passageiros

numero

(13)

13

5. Declaração

 Definição

 Declaração

struct Conta{

int Numero;

char Cliente[30];

char Endereco[50];

float Saldo;

};

struct Conta conta1;

struct Conta conta2;

Numero Cliente Endereco

Saldo Numero

Cliente Endereco

Saldo

(14)

5. Declaração

 Definição

 Declaração

struct Conta{

int Numero;

char Cliente[30];

char Endereco[50];

float Saldo;

};

struct Conta conta1;

struct Conta conta2;

struct Conta{

int Numero;

char Cliente[30];

char Endereco[50];

float Saldo;

} conta1, conta2;

 Definição + declaração:

(15)

15

6. Preenchendo o registro

TAM.numero = 3502;

TAM.passageiros = 145;

strcpy(TAM.destino, “Manaus”);

voo

3502 145

“Manaus”

TAM

 Um campo de cada vez, com valores constantes:

(16)

6. Preenchendo o registro

struct voo TAM = {3502, 145, “Manaus”};

voo

3502 145

“Manaus”

TAM

 Carga inicial automática: declaração + inicialização

(17)

17

6. Preenchendo o registro

conta1.Numero = 5634;

strcpy(conta1.Cliente, “Joao da Silva”);

strcpy(conta1.Endereco, “Avenida Amazonas, 7675”);

conta1.Saldo = 1200000;

Número Cliente Endereço

Saldo

Conta

5634

Joao da Silva

Avenida Amazonas, 7675 1200000

conta1

 Um campo de cada vez, com valores constantes:

(18)

6. Preenchendo o registro

Número Cliente Endereço

Saldo

Conta

5634

Joao da Silva

Avenida Amazonas, 7675

1200000

conta1

 Carga inicial automática: definição + declaração + inicialização

struct Conta{

int Numero;

char Cliente[30];

char Endereco[50];

(19)

19

6. Preenchendo o registro

Fazer um programa para:

1. Declarar conta2 do tipo Conta.

2. Preencher com dados fornecidos pelo usuário.

3. Imprimir na tela os campos de conta2.

(20)

int main(){

  struct Conta conta2;

  printf("Digite o numero da conta: ");

  scanf("%d%*c", &conta2.Numero);

  printf("Digite o nome do cliente: ");

  gets(conta2.Cliente);

  printf("Digite o endereco: ");

  gets(conta2.Endereco);

  printf("Digite o saldo: ");

  scanf("%f", &conta2.Saldo);

  printf("Dados da conta:\n");

  printf("%d\n", conta2.Numero);

  printf("%s\n", conta2.Cliente);

  printf("%s\n", conta2.Endereco);

  printf("%f\n", conta2.Saldo);

 

#include <stdio.h>

struct Conta{

  int Numero;

  char Cliente[30];

  char Endereco[50];

  float Saldo;

};

(21)

21

7. Imprimindo os campos

  printf("%d\n", TAM.numero);

  printf("%d\n", TAM.passageiros);

  printf("%s\n", TAM.destino);

3502 45

“Manaus”

TAM struct voo{

int numero;

int passageiros;

char destino[30];

};

(22)

8. typedef

 Uma declaração com o prefixo typedef declara um novo nome para um tipo =>

produz sinônimos para nomes

typedef  é uma palavra reservada da linguagem

 Exemplos:

typedef unsigned char uchar;  //define o sinônimo uchar para unsigned char;

typedef int inteiro;   //define inteiro como sinônimo de int

typedef double real;   //define real como sinônimo de double

uchar simbolo;  //declarações

inteiro i, j;

(23)

23

8. typedef

typedef struct Pessoa {    int idade;

   char nome[100];

   char endereco[50];

   float salario;

} PESSOA;

struct Pessoa chefe, gerente;

OU

PESSOA chefe, gerente;

 A questão do ESCOPO: onde definir estruturas e typedef?

se for em uma função, somente a função conhece a definição

está no escopo da função

para serem visíveis em todo o

programa devem ser declaradas fora de qualquer função e no início do programa

(Adaptado dos slides da Prof.ª Cristina Murta)

(24)

9. Atribuição de registros

#include <stdio.h>

int main() {

   struct exemplo {     char c;

    int i;

    float f;

    double d;

   };

   struct exemplo s1, s2; //declarações    

   s1.c = 'a';       // '.' referencia o membro    s1.i = 1;

   s1.f = 3.14;

   s1.d = 0.00093;

   

   s2 = s1;       //atribuição!

   printf("A variável s2 contém: %c %d %f %f\n", s2.c, s2.i, s2.f, s2.d); 

(25)

25

10. Registros aninhados

 Registros dentro de registros

struct ponto { //define as coordenadas de um ponto no plano int x;

int y;

};

struct retangulo {   //define um retangulo com um par de pontos struct ponto p1;        //ponto inferior esquerdo

struct ponto p2;        //ponto superior direito };

     struct ponto p1, p2;        //   membros p1.x, p1.y, p2.x, p2.y      struct ponto max = {320,200};

     struct retangulo tela = {{0,0},{800,600}};

(Adaptado dos slides da Prof.ª Cristina Murta)

(26)

10. Registros aninhados

 Outro exemplo:

#include <stdio.h>

#include <string.h>

typedef struct DATA {   int Dia;

  char Mes[10];

  int Ano;

} Data;

typedef struct PESSOA {   int idade;

  char telefone[12];

  Data nascimento;

} Pessoa;

int main(){

  Pessoa Maria, Joao;

  Maria.idade = 20;

  strcpy(Maria.telefone, "3133333333");

  Maria.nascimento.Dia = 29;

  strcpy(Maria.nascimento.Mes, "Fevereiro");

  Maria.nascimento.Ano = 1997;

  printf("Idade: %d\n", Maria.idade);

  printf("Telefone: %s\n", Maria.telefone);

  printf("Nascimento: %d/%s/%d\n",  Maria.nascimento.Dia, 

Maria.nascimento.Mes,  Maria.nascimento.Ano);

  return 0;

(27)

27

11. Vetor de registros

struct endereco {

char nome[TAM_STRING];

char rua[TAM_STRING];

   unsigned int numero;

char cidade[TAM_STRING];

char estado[2];

   char telefone[10];

unsigned long int cep;

};

Uma vez definido o tipo, a definição das variáveis é feita da mesma forma:

struct endereco escola;

struct endereco cliente[100];

Acesso aos componentes é feito pelo operador .

variável.campo escola.nome 

cliente[i].estado

(Adaptado dos slides da Prof.ª Cristina Murta)

(28)

12. Registros e funções

#include <stdio.h>

#include <math.h>

struct ponto { //define as coordenadas de um ponto no plano   int x;

  int y;

};

struct retangulo {   //define um retangulo com um par de pontos   struct ponto p1;        //ponto inferior esquerdo

  struct ponto p2;        //ponto superior direito };

double distancia_origem (struct ponto p) {   return sqrt(p.x * p.x + p.y * p.y);

};

double area_retangulo (struct retangulo r) {

  return (r.p2.x ­ r.p1.x) * (r.p2.y ­ r.p1.y);

(29)

29

12. Registros e funções

int main() {

  struct ponto max = {300,400};

  struct ponto p1 = {0,0}, p2 = {800,600};    //membros p1.x, p1.y, p2.x, p2.y   struct retangulo tela;

  double dist, area;

  

  tela.p1 = p1;

  tela.p2 = p2;

  dist = distancia_origem(max);

  

  printf("Distancia: %lf\n", dist);

  area = area_retangulo(tela);

  

  printf("Area: %lf\n", area);

  return 0;

}

(Adaptado dos slides da Prof.ª Cristina Murta)

(30)

12. Registros e funções

 Funções podem retornar registros.

//função que inicializa um ponto

struct ponto inicializa(int x, int y){

struct ponto temp;

temp.x = x;

temp.y = y;

return temp;

}

tela.p1 = inicializa(0,0);

tela.p2 = inicializa(800, 600);

(31)

31

13. Atividades sugeridas

 Leitura e exercícios do livro-texto (Damas):

Capítulo 11.

Referências

Documentos relacionados

[r]

Mesmo nas variadas provas da vida podemos nos alegrar efusivamente, porque Deus é quem está no controle da nossa vida e ele trabalha em todas as circunstâncias

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

É perceptível, desta forma, o constante aumento do aprofundamento dos personagens: os “príncipes” têm agora não só nome e falas, mas personalidades bem desenvolvidas,

A nutrição enteral (NE), segundo o Ministério da Saúde do Brasil, designa todo e qualquer “alimento para fins especiais, com ingestão controlada de nutrientes, na forma isolada

a) Seleciona um par de cromossomos genitores dentro da população atual, com a probabilidade de seleção sendo diretamente proporcional à sua adaptação. O mesmo

Deve conhecer perfeitamente este Manual de Procedimentos ou “Bússola”, e o papel de cada ministério da Equipe de Serviço; assim como o Esquema do Curso

Podem treinar tropas (fornecidas pelo cliente) ou levá-las para combate. Geralmente, organizam-se de forma ad-hoc, que respondem a solicitações de Estados; 2)