25
MC 102 – Algoritmos e programação de computadores Profa. Wanessa Machado do Amaral Aula 23 – Registros ou estruturas

MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

MC 102 – Algoritmos e programação de computadoresProfa. Wanessa Machado do Amaral

Aula 23 – Registros ou estruturas

Page 2: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Registos

Um registro é um tipo de variável composta.

É uma variavel que contém diversas variáveis(chamadas de campos), usualmente de tipos diferentes, mas que dentro de um determinado contexto fazem sentido se agrupadas. Exemplos:

● Registro de alunos (nome, RA, medias de provas, medias de labs, etc...)

●Registro de pacientes (Nome, endereco, historico de doencas, etc...)

Page 3: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Registos

Motivação do uso de registros:

quando há necessidade de guardar informação de vários tipos numa só entidade (ou struct).

Page 4: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Declaração de um registro

A primeira parte da criação de um registro é declarar seuformato. Isso é feito utilizando a palavra chave struct, daseguinte forma:

struct registroAluno {int ra;int idade;char nome[];float media;

};

Page 5: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Declaração de uma variável do registro

A proxima etapa é declarar uma variavel do tipo struct nome_do_tipo_da_estrutura, que será usada dentro de seu programa, como no exemplo abaixo:

#include <stdio.h>

struct ficha { int ra; float media;

};main () {

struct ficha f;}

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 6: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Acessando campos do registro

Podemos acessar individualmente os campos de umdeterminado registro, utilizando a seguinte estrutura:

nome_do_registro.nome_do_campo

Exemplo: struct ficha {

int ra; float media;

};main () {

struct ficha f;f.ra = 012345;

}MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 7: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Acessando campos do registro

Ler conteúdo:printf ("Digite o ra do aluno: ");scanf ("%d", &f.ra);

Exibir conteúdo:printf ("O aluno %d tirou media %f\n", f.ra, f.media);

Copiar conteúdo entre dois registros:registro_1 = registro_2

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 8: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Inicialização do registro

struct Cliente{char nome[100];char endereco[100];long telefone;} ;

main(){ struct Cliente x = {"Maria José", "Rua 12, nº 2, 3500-089 Campinas", 232456719};

printf("%s %s %ld", x.nome, x.endereco, x.telefone);}

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 9: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Diferenças entre vetores e structs

Nos registros, ao contrário dos arrays, os elementos não são necessariamente do mesmo tipo.

Os elementos de um registro não são indexados, como num array. O acesso é feito pelos identificadores (membros) e não por índices.

Ex: f.ra = 012345;

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 10: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Registros como parâmetros de funçõesAssim como os outros tipos de dados, float, int, etc... os registros podem ser recebidos como parâmetros de funções:

void incluir(struct Cliente reg, char nome[100]){ strcpy(reg.nome,nome);}

Também é possível uma função retornar um tipo struct:

struct Cliente incluir(struct Cliente reg, char nome[100]){ strcpy(reg.nome,nome); return reg;}

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 11: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Registros como parâmetros de funções#include <stdio.h>struct Cliente{char nome[100];char endereco[100];};

struct Cliente incluirRegistro(struct Cliente reg){ strcpy(reg.nome,"Maria"); strcpy(reg.endereco,"Campinas"); return reg;}main(){ struct Cliente x; x = incluirRegistro(x); printf("%s %s", x.nome, x.endereco);} MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 12: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Passagem de registros por referênciaAs funções podem receber os registros tanto como valor, como o exemplo anterior, como por referência.

Exemplo:

incluirRegistro(struct Cliente *reg){

strcpy(reg->nome,"Maria"); strcpy(reg->endereco,"Campinas");

}

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 13: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Passagem de registros por referência#include <stdio.h>struct Cliente{char nome[100];char endereco[100];};

incluirRegistro(struct Cliente *reg){ strcpy(reg->nome,"Maria"); strcpy(reg->endereco,"Campinas");}

main(){ struct Cliente x; incluirRegistro(&x); printf("%s %s", x.nome, x.endereco);} MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 14: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Vetor de registros

Pode ser declarado quando necessitarmos de diversas copias de um registro (por exemplo, para cadastrar todos os alunos de uma mesma turma).

struct ficha { int ra; float media;

};main () {

struct ficha f[5];f[0].ra = 012345;f[0].media = 9.5;

}

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 15: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

ExercíciosDada a estrutura de registros de alunos:struct ficha {

long ra; char nome[100];float CR; };

Considere um vetor de registros do tipo ficha:struct ficha alunos[10];

Crie funções (passando parametros por referência) que:1) inclua um novo registro no vetor.2) altere um registro do vetor.3) imprima na tela todos os registros do vetor.

Obs: use somente variáveis locais.Todos os scanfs devem estar na função main.

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Page 16: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

MC 102 – Algoritmos e programação de computadoresProfa. Wanessa Machado do Amaral

Aula 23 – Enumeration

Page 17: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Enumeration

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Enum é um tiop de dados criado pelo programador, com valores pré-definidos por ele.

São utilizados para aumentar a legibilidade do código.

Um enumeration consiste num conjunto de constantes inteiras, chamados de membros, que recebem um nome.

Ex:

enum DAY {saturday, sunday, monday, tuesday, wednesday, thursday, friday } workday;

Page 18: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Enumeration

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Uma variável do tipo enumeration armazena um dos valores inteiros do conjunto, associado a um dos membros.

enum DAY {saturday, sunday, monday, tuesday, wednesday, thursday, friday } workday;

No exemplo acima, por padrão, 0 é o inteiro associado a saturday. Os demais identificadores são numerados automaticamente. Ex: wednesday é associado a 4. Com esta sintaxe, já é declarada uma variável workday do tipo enum DAY.

Page 19: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Enumeration

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Exemplos:

enum cor {red, blue, green, yellow};

enum dia {domingo, 2f, 3f, 4f, 5f, 6f,sabado};

enum fruta {apple, orange=10, lemon};

enum boolean {FALSE, TRUE};

Page 20: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Enumeration

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Declaração e atribuição de uma variável do tipo enumeration:

enum DAY today = wednesday;

Também é possível atribuir o inteiro correspondente à constante, por exemplo:

enum DAY today;today = ( enum DAY ) ( 4);

Page 21: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Enumeration

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Vantagens do uso de enum:

int main(){enum cores corDaJanela = amarela;if (corDaJanela == verde)

...}

Page 22: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Exemplo

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

#include <stdio.h>int main(int argc, char* argv[]){

enum MES { janeiro=1, fevereiro, marco,

abril, maio, junho, julho,agosto, setembro, outubro,novembro, dezembro };

enum MES mesCorrente = dezembro;printf ("%d", mesCorrente);

}// atribui explicitamente valor 1 a janeiro. Por default, janeiro seria 0

Page 23: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Exemplo 2

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

#include <stdio.h>enum boolean {FALSE,TRUE};main(){ enum boolean b; int x=3,y=2; b = x > y; if (b==TRUE) printf("Verdadeiro");}

Page 24: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Enumeration

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis, comparações, e demais operações.

Para imprimir o valor de uma variável enum, você deve tratá-la como um inteiro, usando %d no printf.

Se você quiser imprimir a string correspondente, tem que criar uma função para isso.

Page 25: MC 102 – Algoritmos e programação de computadores Profa ...wmamaral/mc102/files/aula... · Note que os nomes dos membros só são utilizados para facilitar atribuição das variáveis,

Enumeration

MC102 – Profa.Wanessa Machado do Amaral - 1s2010

#include <stdio.h>enum DIAS { domingo, segunda, terca, quarta, quinta, sexta, sabado };

char *tipo_para_string(enum DIAS x) {if (x == domingo)

return "domingo";else if (x == segunda)

return "segunda";}int main(){

enum DIAS hoje = segunda;printf ("%s", tipo_para_string(hoje));

}