MC-102 Algoritmos e Programação de Computadores IC-UNICAMP. Aula 21 - Registros. Por: Luís Augusto Angelotti Meira (Sala IC-71) 1S2005



Documentos relacionados
MC-102 Aula 19 Registros

INF 1005 Programação I

Capítulo 2: Introdução à Linguagem C

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Técnicas de Programação I

Programação científica C++

Linguagem C. Novos tipos de dados

Registros. Técnicas de Programação. Rafael Silva Guimarães

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

17 - Funções e Procedimentos em C Programação Modular

Algoritmos e Programação Estruturada

Variáveis e Comandos de Atribuição

Aula 1 Tipo Abstrato de Dados

Estruturas II UFOP 1/1

INF 1005 Programação I

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Estruturas (registros)

Algoritmos e Programação

Tipos de Dados Simples

MC-102 Aula 17 Strings e Matrizes

Estruturas de Dados. Alguns dados não costumam ser tão simples assim... Podem ser compostos por vários dados distintos

INF 1620 P1-10/04/02 Questão 1 Nome:

Estrutura de Dados Básica

Programação de Computadores I. Ponteiros

Introdução a Computação

Module Introduction. Programação. Cap. 10 Estruturas (Structs)

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Programação de Computadores I Registros na Linguagem C PROFESSORA CINTIA CAETANO

INF 1007 Programação II

Estruturas (Registros)

Tipo de Dados em Linguagem C

Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

struct LISTA item quant

Introdução à Programação

9. Estruturas em C Registros

IFTO LÓGICA DE PROGRAMAÇÃO AULA 01

Fundamentos de Programação

Introdução a POO. Introdução a Linguagem C++ e POO

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

Tipo Abstrato de Dados

2ª Lista de Exercícios

Métodos Computacionais. Árvores

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Estrutura de Dados Conceitos Iniciais

Algoritmo e Técnica de Programação - Linguagem C

PROGRAMAÇÃO DE COMPUTADORES (Teoria)

Algoritmos e Estruturas de Dados I

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Busca. Pesquisa sequencial

Apresentar os conceitos básicos e as estruturas de linguagem relacionadas à tomada de decisão ofertadas pela linguagem C, tais como:

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto

Estruturas de entrada e saída

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 4

1 Funções básicas de implementação de arquivos

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

ALGORITMOS E PROGRAMAÇÃO PARA COMPUTADORES II

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Tipos de Dados Definidos Pelo Usuário. Estruturas Uniões Enumerações O Comando sizeof O Comando typedef

Programação 1. Rafael Vargas Mesquita. ftp://ftp.ci.ifes.edu.br/informatica/rafael/

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

Programação: Tipos, Variáveis e Expressões

9 Comandos condicionais

ESTRUTURA DE UM PROGRAMA EM C++ Estrutura de um Programa em C++

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais.

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Tipos de Dados Avançados Vetores e Matrizes

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Linguagem C Funções definidas pelo usuário. Lógica de Programação

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

O Processo de Programação

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Linguagem de Programação I

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

Estrutura, União e Enumeração em C

CURSO BÁSICO DE PROGRAMAÇÃO AULA 7

Fundamentos de Programação

ESTRUTURA CONDICIONAL

Técnicas de Programação: ESTRUTURAS, UNIÕES E TIPOS DEE UFPB

Programação: Estruturas de seleção

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle

Plano de Aula. if(condição) { bloco de comandos; } else { bloco de comandos2; }

Solucionário de. Programação

Programação de Computadores I. Linguagem C Vetores

MC-102 Algoritmos e Programação de Computadores

Curso de C para Engenharias

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

Componentes da linguagem C++

Algoritmo e Programação

Transcrição:

MC-102 Algoritmos e Programação de Computadores IC-UNICAMP Esta aula foi baseada em [1]. Aula 21 - Registros Por: Luís Augusto Angelotti Meira (Sala IC-71) 1S2005 1 Objetivos Conceituar tipos de dados definidos pelo usuário. Utilizar struct e typedef para criar registros. 2 Motivação Dados que são relacionados podem ser salvos em uma única estrutura ou registro. 3 Aula e Exemplos 3.1 Definição Estruturas são tipos de variáveis que agrupam dados geralmente desiguais; enquanto matrizes são tipos de variáveis que agrupam dados similares. Os itens de dados de uma estrutura são chamados membros, enquanto os itens de uma matriz são chamados elementos. 3.2 Como Declarar Para se criar um registro, utiliza-se o comando struct. Sua forma geral é: struct nome_do_tipo_da_estrutura { tipo_1 nome_1; tipo_2 nome_2; tipo_3 nome_3;... tipo_n nome_n; var_1, var_2; Veja um exemplo de registro.

struct ficha { char nome[20]; int idade; int RG; ficha1, ficha2; 3.3 Como Acessar Para se acessar um campo de um registro, digita-se o nome da variável que contem o registro, por exemplo, ficha1 seguida de um ponto, seguida do nome do capo. Exemplo: strcpy(ficha1.nome,"jo~ao da Silva"); ficha1.idade = 5; ficha1.rg = 567891011; printf("nome:%s\nidade %d\nrg %d\n",ficha1.nome,ficha1.idade, ficha1.rg); Os comandos acima irão imprimir: Nome:Jo~ao da Silva idade 5 RG 567891011 Para se acessar um elemento de um vetor: ficha1.nome[3] = A ; 3.4 Como Copiar Errata: Diferentemente de pascal, onde é necessário copiar campo a campo, em C é possivel atribuir dois registros. Ex: typedef struct venda { int pecas; float preco; venda ; void insere( venda * A, int pecas, float preco){ (*A).pecas = pecas; A-> preco = preco; void imprime(venda C, venda D) { printf("%d pecas %f reais\n", C.pecas, C.preco);

printf("%d pecas %f reais\n", D.pecas, D.preco); int main (){ struct venda A, B; insere(&a,5,100); //*********************** B = A; //*********************** imprime (A,B); cuja saída será: 5 pecas 100.000000 reais 5 pecas 100.000000 reais Para se copiar um registro em outro existem duas possibilidades: Copiar-se campo a campo ou copiar todos os campos em um único comando. strcpy(ficha2.nome,ficha1.nome); ficha2.idade = ficha1.idade; ficha2.rg = ficha1.rg; printf("nome:%s\nidade %d\nrg %d\n\n\n",ficha2.nome,ficha2.idade, ficha2.rg); // Limpa ficha2 strcpy(ficha2.nome,"nada"); ficha2.idade = 0; ficha2.rg = 0; memcpy(&ficha2,&ficha1,28); printf("nome:%s\nidade %d\nrg %d\n\n\n",ficha2.nome,ficha2.idade, ficha2.rg); A saída deste programa, considerando os dados inseridos, será: Nome:Jo~ao da Silva idade 5 RG 567891011 Nome:Jo~ao da Silva idade 5 RG 567891011 A função memcopy copia os dados do endereço &ficha1 para o endereço &ficha2. O número de bytes copiados é 28. 20 bytes do vetor nome, 4 bytes para idade e 4 bytes para RG.

4 Passando Estruturas para Funções Estruturas podem ser passadas para funções da mesma forma que variáveis. Porém é necessário criar um tipo, através de typedef. typedef struct venda { int pecas; float preco; venda ; void insere( venda * A, int pecas, float preco){ (*A).pecas = pecas; A-> preco = preco; void imprime(venda C, venda D) { printf("%d pecas %f reais\n", C.pecas, C.preco); printf("%d pecas %f reais\n", D.pecas, D.preco); int main (){ struct venda A, B; insere(&a,5,100); insere(&b,7,200); imprime (A,B); Cuja saída será: 5 pecas 100.000000 reais 7 pecas 200.000000 reais 5 Funções Podem Retornar um Registro Veja o exemplo: typedef struct venda { int pecas; float preco;

venda ; venda novavenda( int pecas, float preco){ venda A; A.pecas = pecas; A preco = preco; return A; void imprime(venda C, venda D) { printf("%d pecas %f reais\n", C.pecas, C.preco); printf("%d pecas %f reais\n", D.pecas, D.preco); int main (){ struct venda A, B; A = novavenda(5,100); B = novavenda(7,200); imprime (A,B); 5.1 Vetor de Registros e Registros Aninhados Obs: O Comando sizeof retorna o tamanho do registro. É possivel criar um vetor de registros. Exemplo: #include <string.h> struct tipo_endereco{ int numero; int CEP; char logradouro[100]; char bairro[100]; char cidade[100]; char estado[3]; ; int main(void){ struct tipo_endereco endereco[10]; endereco[0].numero = 100;

endereco[0].cep = 2345678; strcpy(endereco[0].logradouro,"rua Jaçana"); strcpy(endereco[0].bairro,"perdizes"); strcpy(endereco[0].cidade,"s~ao Paulo"); strcpy(endereco[0].estado,"sp"); printf("%s n.o. %d \n%s %s %s\ncep %d\n",endereco[0].logradouro, endereco[0].numero, endereco[0].bairro, endereco[0].cidade, endereco[0].estado, endereco[0].cep); memcpy(&endereco[1],&endereco[0],sizeof(struct tipo_endereco)); endereco[1].numero = 200; endereco[1].cep = 123123; printf("\n\n%s n.o. %d \n%s %s %s\ncep %d\n",endereco[1].logradouro, endereco[1].numero, endereco[1].bairro, endereco[1].cidade, endereco[1].estado, endereco[1].cep); Cuja saída será: Rua Jaçana n.o. 100 Perdizes S~ao Paulo SP CEP 2345678 Rua Jaçana n.o. 200 Perdizes S~ao Paulo SP CEP 123123 É possivel criar registros aninhados. Exemplo: #include <string.h> struct tipo_endereco{ int numero;

int CEP; char logradouro[100]; char bairro[100]; char cidade[100]; char estado[3]; ; struct tipo_ficha{ char nome[100]; struct tipo_endereco endereco; ; struct tipo_repositorio{ char nome_repositorio[100]; int tamanho; struct tipo_ficha ficha[100]; ; int main(void){ struct tipo_repositorio repositorio; struct tipo_endereco endereco; repositorio.tamanho = 2; int i; strcpy(repositorio.nome_repositorio,"catalogo Inicial"); strcpy(repositorio.ficha[0].nome,"jo~ao"); endereco.numero = 100; endereco.cep = 2345678; strcpy(endereco.logradouro,"rua Jaçana"); strcpy(endereco.bairro,"perdizes"); strcpy(endereco.cidade,"s~ao Paulo"); strcpy(endereco.estado,"sp"); memcpy(&repositorio.ficha[0].endereco,&endereco,sizeof(struct tipo_endereco)); memcpy(&repositorio.ficha[1],&repositorio.ficha[0],sizeof(struct tipo_ficha)); strcpy(repositorio.ficha[1].nome,"josé"); repositorio.ficha[1].endereco.numero = 200; repositorio.ficha[1].endereco.cep = 123456; printf("%s\n",repositorio.nome_repositorio); for(i = 0 ; i < repositorio.tamanho; i++){ printf("ficha %d\n",i+1); printf("nome %s\n",repositorio.ficha[i].nome); printf(" %s",repositorio.ficha[i].endereco.logradouro); printf("n.o. %d\n",repositorio.ficha[i].endereco.numero); printf(" %s",repositorio.ficha[i].endereco.bairro); printf(" %s",repositorio.ficha[i].endereco.cidade); printf(" %s\n",repositorio.ficha[i].endereco.estado); printf("cep %d\n\n",repositorio.ficha[i].endereco.cep);

A saída do programa acima será: Ficha 1 Nome Jo~ao Rua Jaçanan.o. 100 Perdizes S~ao Paulo SP CEP 2345678 Ficha 2 Nome José Rua Jaçanan.o. 200 Perdizes S~ao Paulo SP CEP 123456 6 Tipos Enumerados Pode-se definir tipos por meio da palavra chave enum, que ajuda a tornar mais clara a escrita do programa. O tipo da variável enum é sempre int e recebe automaticamente os valres {1, 2, 3,.... veja o exemplo: enum mes { Jan =1, Fev, Mar, Abril, Maio, Junho, Julho, Agos, Set, Out, Nov, Dez; int main(){ mes m1, m2; m1 = Abril; m2 = Jan; mes m3; m3 =(mes)(m2+m1); printf("%d %d %d\n",m1,m2,m3); if(m1 > m2 ) printf("m1 %d \n",m1); else printf("m2 %d \n",m2); Que terá como saída:

4 1 5 m1 4 O compilador associa automaticamente o valor do item i igual ao valor do item i 1 somado de um. O primeiro item recebe sempre zero. O programador pode atribuir um valor especifico a um dado item. No programa acima jan recebeu 1. O padrão é iniciar com zero. Os itens seguintes foram obitidos somando-se sempre 1. (Fev = 2, Mar = 3 ) Veja o exemplo: enum direcao {Leste=100, Norte=200, Oeste=350, Sul ; enum sexo {max, fem; enum chave {ON, OFF; int main(){ direcao p1,p2,p3,p4,p5; p1 = Leste; p2 = Norte; p3 = Oeste; p4 = Sul; p5 = (direcao)(p1+p2); printf("%d %d %d %d %d\n",p1,p2,p3,p4,p5); chave key; key = ON; if(key == ON) { key = OFF; printf("desligado\n"); Cuja saída será: 100 200 350 351 300 desligado 7 Exercícios 1) Assuma que as seguinte declarações tenham sido feitas: struct corpo{ float altura; float peso; ; struct corpo Joao;

a) Reescreva as instruções acima para definir a estrutura e declarar a variável de uma única vez. struct corpo{ float altura; float peso; Joao; b) Escreva uma instrução que indique que a altura de João é 1.68. Joao.altura = 1.68; c) Escreva estruturas necessárias para definir o tipo casal contendo duas estruturas do tipo corpo. struct casal{ struct corpo Mas,Fem; ; d) escreva uma instrução necessária para escrever uma matriz com 10 estruturas do tipo casa; struct casal cas[10]; e) Escreva as instruções necessárias para preencher o primeiro elemento da matriz anterior com os dados de Maria (alt=1.63, peso = 59.5) e de José (alt= 1.78, peso = 82.6). cas[0].mas.altura = 1.78; cas[0].mas.peso = 82.6; cas[0].fem.altura = 1.63; cas[0].fem.peso = 59.5; 3) Assuma que st1, st2 e st3 são variáveis de um mesmo tipo de estrutura. Quais instruções são validas: a) st1 = st2; b) st1 = st2 + st3; c) st1 = st2 = st3; d) st1 = st2 + 5; R: a,c 4) Dada a instrução: aaa.bbb.ccc = 25; a) ccc é membro da estrutura bbb;

b) bbb é membro da estrutura aaa; c) aaa é membro da estrutura bbb; d) aaa é membro da estrutura ccc. R: a = V, b = V, c = F, d = F 5) a) Escreva uma estrutura para conter três membros do tipo int chamados: hora, minuto e segundo. Atribua o nome tempo a esta estrutura. b) Escreva uma estrutura para armazenar dados de um estacionamento. Ela deve ser capaz de armazenar o número da chapa do carro, a marca, a hora de entrada e a hora de saída do estacionamento. Utilize dois membros do tipo tempo, definido em a) para as horas de entrada e saída. c) Crie uma variável com tipo igual a estrutura definida em c) e atribua valores a esta estrutura. struct tempo{ int hora, minuto, segundo; ; struct cliente{ int chapa; char marca[20]; struct tempo t1,t2; ; int main(void){ struct cliente c1; c1.chapa = 1234; strcpy(c1.marca,"ford"); c1.t1.hora = 13; c1.t1.minuto = 30; c1.t1.segundo = 15; c1.t2.hora = 15; c1.t2.minuto = 40; c1.t2.segundo = 15; 6) a) Escreva uma intrução que defina um tipo enumerado FRUTA com nomes Pêra, Maçã, Figo, Manga e Uva. b) Declare variáveis do tipo FRUTA de nomes Ana e Joao e atribuas a ela os valores de Figo e Uva, respectivamente.

c) Quais atribuições são validas? Ana = Banana; Joal = Pera; Manga = Ana; Diferenca = Joao - Ana; enum FRUTA { Pera, Maca, Figo, Manga, Uva; int main(){ FRUTA Ana, Joao; FRUTA Diferenca; Ana = Figo; Joao = Uva; // Ana = Banana; Erro Banana n~ao pertence ao enum FRUTA Joao = Pera; // Manga = Ana; Erro. Diferenca = (FRUTA)(Joao - Ana); Referências [1] Henrique José dos Santos. Curso de linguagem c, ufmg. Universidade Federal de Minas Gerais.