C Estruturas. Section Summary. Adriano Cruz 1 de fevereiro de 2016

Documentos relacionados
C Estruturas. Adriano Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Métodos Computacionais. Tipos Estruturados

Computação 2. Aula 5. Diego Addan Estrutura de Dados Registros (structs)

C Comandos de Controle

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

MC-102 Aula 21 Registros

INF 1620 P2-14/10/05 Questão 1 Nome:

INF 1620 P3-29/06/04 Questão 1 Nome:

1 Exercícios com ponteiros

ESTRUTURAS COMPOSTAS. REGISTROS (Struct) Introdução à Ciência da Computação I Simone Senger Souza

C Operadores e Expressões

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Linguagem de Programação

Introdução a Programação. Tipos Estruturados de Dados

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 12 Estruturas

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Aula 24 Ponteiros, vetores e structs

INF 1620 P3-27/11/04 Questão 1 Nome:

SSC304 Introdução à Programação Para Engenharias. Estruturas. GE4 Bio

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

ESTRUTURAS COMPOSTAS. REGISTROS (Struct) Introdução à Ciência da Computação I Simone Senger Souza

INF 1620 P2-17/05/08 Questão 1 Nome:

Módulo 8 Tipos Estruturados

Computação 2. Aula 3. Diego Addan Vetores de caracteres (strings)

Introdução a Programação. Ponteiros para Estruturas, Outros Tipos de Estruturas

INF 1620 P4 11/12/06 Questão 1 Nome:

Prática de Programação. Prof. Tiago A. E. Ferreira Aula 9 Estruturas, Uniões, Enumerações e Tipos Definidos pelo Usuário

Programação: Vetores

USP - ICMC - SSC SSC o. Semestre 2010 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

C Comandos de Controle

Aula 8 - Matrizes e Strings

10. - ESTRUTURAS Características Básicas

INF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1

1 Exercícios com ponteiros

ESTRUTURA DE DADOS (TCC )

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

SSC INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL REGISTROS E ARQUIVOS. Profa. Dra. Milena Guessi Margarido

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

Programação I Funções. Prof. Carlos Alberto

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Linguagem C. André Tavares da Silva.

INF 1620 P3-25/11/05 Questão 1 Nome:

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Ponteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.

INF 1620 P4 30/06/07 Questão 1 Nome:

LINGUAGEM C Estrutura / Funções

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

Estruturas. Estruturas. Estruturas. Estruturas. Estruturas. Algoritmos e Lógica de Programação. Estruturas. Uniões Enumerações CANSI

Introdução. Ponteiros

INF 1620 P4-09/07/03 Questão 1 Nome:

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Modulo 9: Você define como éo dado... Struct e typedef

INF 1620 P4-01/07/08 Questão 1 Nome:

Fundamentos de Programação 1

Introdução à Computação

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Computação Informática

INF 1620 P3-06/12/03 Questão 1 Nome:

Linguagem C ponteiros

Computação Eletrônica. Strings. Prof: Luciano Barbosa. CIn.ufpe.br

Estruturas. K&R: Capitulo 6. Estruturas IAED, 2014/2015. Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo

Computação 2. Aula 6B. Profª. Fabiany Vetor de Estruturas (structs)

Podemos dar um nome à estrutura e referenciar esse nome na declaração das variáveis:

INF 1620 P2-23/10/04 Questão 1 Nome:

1/27. Registos (Estruturas - struct)

Estruturas (registros)

Ponteiros. prof. Fabrício Olivetti de França

13 Registros (Structs)

INF 1007 P2 23/10/10 Nome: Instruções:

Capítulo 4: Programando com Funções. Pontifícia Universidade Católica Departamento de Informática

Algoritmos e Estruturas de Dados I 01/2013. Passagem de Parâmetros e Estruturas. Pedro O.S. Vaz de Melo

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P4 07/12/2010

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Ponteiros. Baseado nos slides do Prof. Mauro.

LINGUAGEM C: ARRAYS DE CARACTERES: STRINGS

TAD: Tipo Abstrato de Dados (parte 2)

Capítulo 3: Programando com Funções

Estrutura de Dados. Cadeia de Caracteres. Roberto Araujo Ago/2013

Algoritmos e Programação

Programação Estruturada

Funções em Linguagem C Parte II

Aula 25: Alocação Dinâmica

Algoritmos e Estruturas de Dados I (DCC/003) Funções

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

Introdução Linguagem C. UDESC - Prof. Juliano Maia 1

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

INF 1620 P2-01/11/03 Questão 1 Nome:

Apêndice B. Cadeias de Caracteres (Strings)

Conceito de procedimentos e funções

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Curso de Introdução à Liguagem de. Grupo PET-Tele. Universidade Federal Fluminense. July 16, 2012

INF 1620 P3-21/06/08 Questão 1 Nome:

Transcrição:

C Estruturas Adriano Cruz adriano@nce.ufrj.br Instituto de Matemática Departamento de Ciência da Computação UFRJ 1 de fevereiro de 2016 Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 1 / 42 Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 2 / 42

Bibliografia 1 Adriano Cruz. Curso de Linguagem C, Disponível em http://equipe.nce.ufrj.br/adriano Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 3 / 42 Bibliografia 1 Adriano Cruz. Curso de Linguagem C, Disponível em http://equipe.nce.ufrj.br/adriano 2 Ulysses de Oliveira. Programando em C, Editora Ciência Moderna. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 3 / 42

O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 4 / 42 O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 2 Estruturas facilitam a manipulação dos dados nelas armazenados. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 4 / 42

O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 2 Estruturas facilitam a manipulação dos dados nelas armazenados. 3 Um exemplo poderia ser uma estrutura que armazenasse as diversas informações sobre os alunos de uma Universidade. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 4 / 42 O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 2 Estruturas facilitam a manipulação dos dados nelas armazenados. 3 Um exemplo poderia ser uma estrutura que armazenasse as diversas informações sobre os alunos de uma Universidade. 4 Nesta estrutura estariam armazenadas, sob o mesmo nome, informações do tipo: nome, registro, data de nascimento, data de ingresso, CPF, etc. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 4 / 42

O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 2 Estruturas facilitam a manipulação dos dados nelas armazenados. 3 Um exemplo poderia ser uma estrutura que armazenasse as diversas informações sobre os alunos de uma Universidade. 4 Nesta estrutura estariam armazenadas, sob o mesmo nome, informações do tipo: nome, registro, data de nascimento, data de ingresso, CPF, etc. 5 Uma estrutura pode incluir outras estruturas além de variáveis simples. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 4 / 42 Informações Demais Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 5 / 42

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 6 / 42 Definições Básicas Estrutura: um conjunto de variáveis, de tipos diversos ou não, agrupadas sob um único nome. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 7 / 42

Definições Básicas Estrutura: um conjunto de variáveis, de tipos diversos ou não, agrupadas sob um único nome. Membros: Variáveis que compõem a estrutura são os seus membros, elementos ou campos. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 7 / 42 Definições Básicas Estrutura: um conjunto de variáveis, de tipos diversos ou não, agrupadas sob um único nome. Membros: Variáveis que compõem a estrutura são os seus membros, elementos ou campos. Relação: Os elementos da estrutura podem ter alguma relação semântica. Por exemplo: alunos de uma universidade, discos de uma coleção, elementos de uma figura geométrica, etc. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 7 / 42

Exemplo I s t r u c t ALUNO { c h a r nome [40]; i n t registro; i n t ano_entrada; c h a r curso [20]; }; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 8 / 42 Exemplo II A palavra chave struct inicia a declaração da estrutura, em seguida pode aparecer um identificador (ALUNO), que subseqüentemente pode ser usado como abreviação da definição da estrutura. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 9 / 42

Exemplo II A palavra chave struct inicia a declaração da estrutura, em seguida pode aparecer um identificador (ALUNO), que subseqüentemente pode ser usado como abreviação da definição da estrutura. A declaração continua com a lista de declarações entre chaves e termina com um ;. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 9 / 42 Exemplo II A palavra chave struct inicia a declaração da estrutura, em seguida pode aparecer um identificador (ALUNO), que subseqüentemente pode ser usado como abreviação da definição da estrutura. A declaração continua com a lista de declarações entre chaves e termina com um ;. Um membro da estrutura e uma variável não membro da estrutura podem ter o mesmo nome, já que é possível distingui-las por contexto. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 9 / 42

Exemplo II A palavra chave struct inicia a declaração da estrutura, em seguida pode aparecer um identificador (ALUNO), que subseqüentemente pode ser usado como abreviação da definição da estrutura. A declaração continua com a lista de declarações entre chaves e termina com um ;. Um membro da estrutura e uma variável não membro da estrutura podem ter o mesmo nome, já que é possível distingui-las por contexto. Para definir estruturas deste tipo podemos usar a seguinte declaração: struct ALUNO paulo, carlos, ana; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 9 / 42 Declarações É possível declarar ao mesmo tempo o modelo da estrutura e as variáveis do programa. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 10 / 42

Declarações É possível declarar ao mesmo tempo o modelo da estrutura e as variáveis do programa. s t r u c t ALUNO { c h a r nome [40]; i n t registro; i n t ano_entrada; c h a r curso [20]; } paulo, carlos, ana; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 10 / 42 Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 11 / 42

Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. paulo.ano_entrada = 1999; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 11 / 42 Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. paulo.ano_entrada = 1999; Armazena o ano em que aluno paulo entrou na universidade. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 11 / 42

Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. paulo.ano_entrada = 1999; Armazena o ano em que aluno paulo entrou na universidade. Para ler o nome do curso que paulo cursa pode-se usar o comando gets(paulo.curso); Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 11 / 42 Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. paulo.ano_entrada = 1999; Armazena o ano em que aluno paulo entrou na universidade. Para ler o nome do curso que paulo cursa pode-se usar o comando gets(paulo.curso); paulo.curso é um vetor de caracteres. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 11 / 42

Estruturas dentro de estruturas Estruturas podem conter outras estruturas como membros. Por exemplo, vamos definir uma estrutura para armazenar uma data com a seguinte definição: Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 12 / 42 Estruturas dentro de estruturas Estruturas podem conter outras estruturas como membros. Por exemplo, vamos definir uma estrutura para armazenar uma data com a seguinte definição: s t r u c t DATA { i n t dia, mes, ano; }; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 12 / 42

Estruturas dentro de estruturas Agora vamos modificar a estrutura aluno de modo que ela inclua a data de nascimento do aluno. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 13 / 42 Estruturas dentro de estruturas Agora vamos modificar a estrutura aluno de modo que ela inclua a data de nascimento do aluno. s t r u c t aluno { c h a r nome [40]; i n t registro; i n t ano_entrada; c h a r curso [20]; s t r u c t DATA data_nascimento; }; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 13 / 42

Estruturas dentro de estruturas Agora vamos modificar a estrutura aluno de modo que ela inclua a data de nascimento do aluno. s t r u c t aluno { c h a r nome [40]; i n t registro; i n t ano_entrada; c h a r curso [20]; s t r u c t DATA data_nascimento; }; Para se referir ao mês de nascimento de uma variável paulo do tipo estrutura aluno usamos a declaração paulo.data_nascimento.mes Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 13 / 42 Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 14 / 42

Definindo tipos! Uma forma mais conveniente de definição de estruturas é possível com o uso do comando typedef. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 15 / 42 Definindo tipos! Uma forma mais conveniente de definição de estruturas é possível com o uso do comando typedef. Este comando permite dar a um tipo de dados um novo nome. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 15 / 42

Definindo tipos! Uma forma mais conveniente de definição de estruturas é possível com o uso do comando typedef. Este comando permite dar a um tipo de dados um novo nome. Uma utilidade é aumentar a legibilidade do programa. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 15 / 42 Definindo tipos! Uma forma mais conveniente de definição de estruturas é possível com o uso do comando typedef. Este comando permite dar a um tipo de dados um novo nome. Uma utilidade é aumentar a legibilidade do programa. Por exemplo, é possível usar o seguinte código #d e f i n e AMARELO 1 t y p e d e f i n t cores ; t y p e d e f i n t laranja; t y p e d e f i n t manga ;... laranja lima ; manga espada ; cores = AMARELO;... espada ++; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 15 / 42

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 16 / 42 Simplificando struct É comum o uso de typedef em conjunto com struct. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 17 / 42

Simplificando struct É comum o uso de typedef em conjunto com struct. Considere a definição de uma estrutura para guardar horas, minutos e segundos. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 17 / 42 Simplificando struct É comum o uso de typedef em conjunto com struct. Considere a definição de uma estrutura para guardar horas, minutos e segundos. Usando esta combinação, a definição é usualmente feita da seguinte maneira: Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 17 / 42

Simplificando struct É comum o uso de typedef em conjunto com struct. Considere a definição de uma estrutura para guardar horas, minutos e segundos. Usando esta combinação, a definição é usualmente feita da seguinte maneira: s t r u c t _TEMPO { i n t hora, minuto, segundo; }; t y p e d e f s t r u c t _TEMPO TEMPO ;... TEMPO t1 ; t1. hora = 10; t1. minuto = 15; t1. segundo = 0; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 17 / 42 Simplificando Uma forma ainda mais abreviada, junta as duas definições, ficando a definição da estrutura da seguinte maneira: Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 18 / 42

Simplificando Uma forma ainda mais abreviada, junta as duas definições, ficando a definição da estrutura da seguinte maneira: t y p e d e f s t r u c t _TEMPO { i n t hora, minuto, segundo; } TEMPO ;... TEMPO t1 ; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 18 / 42 Mais simples ainda É possível dispensar o nome da estrutura (_TEMPO) e a definição fica ainda mais simples, com a seguinte forma: Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 19 / 42

Mais simples ainda É possível dispensar o nome da estrutura (_TEMPO) e a definição fica ainda mais simples, com a seguinte forma: t y p e d e f s t r u c t { i n t hora, minuto, segundo; } TEMPO ;... TEMPO t1 ; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 19 / 42 Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 20 / 42

Atribuições entre estruturas #i n c l u d e < stdio.h > t y p e d e f s t r u c t _EMPREGADO { c h a r nome [40]; f l o a t salario; } EMPREGADO; i n t main () { EMPREGADO temp, emp1 ; puts (" Entre com nome."); gets ( emp1. nome ); puts (" Qual o salario?"); scanf ("%f", & emp1. salario); temp = emp1; printf ("O salario de %s e %.2f\n", temp. nome, temp. salario); r e t u r n 0; } Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 21 / 42 Simplificando É possível atribuir o conteúdo de uma estrutura a outra estrutura do mesmo tipo, não sendo necessário atribuir elemento por elemento da estrutura. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 22 / 42

Simplificando É possível atribuir o conteúdo de uma estrutura a outra estrutura do mesmo tipo, não sendo necessário atribuir elemento por elemento da estrutura. Esta é uma das grandes vantagens de estruturas já que o tamanho do código é reduzido e a clareza dos programas aumenta. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 22 / 42 Simplificando É possível atribuir o conteúdo de uma estrutura a outra estrutura do mesmo tipo, não sendo necessário atribuir elemento por elemento da estrutura. Esta é uma das grandes vantagens de estruturas já que o tamanho do código é reduzido e a clareza dos programas aumenta. O comando temp = emp1; faz com que todos os dados armazenados na estrutura emp1 sejam transferidos para a estrutura temp. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 22 / 42

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 23 / 42 Matrizes de Estruturas Estruturas aparecem freqüentemente na forma de matrizes. Por exemplo, a declaração ALUNO turma[100]; define uma matriz de 100 estruturas do tipo struct ALUNO. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 24 / 42

Exemplo de Matriz de Estrutura I #i n c l u d e < stdio.h> #i n c l u d e < string.h > t y p e d e f s t r u c t _ALUNO { c h a r nome [40]; f l o a t n1, n2, media ; } ALUNO ; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 25 / 42 Exemplo de Matriz de Estrutura II i n t main ( v o i d ) { ALUNO turma [4], temp ; i n t jaordenados = 0, foraordem, i; f o r (i = 0; i < 4; i ++) { gets( turma [i ]. nome ); scanf ("%f", & turma [i ]. n1); do {} w h i l e ( getchar()!= '\n '); scanf ("%f", & turma [i ]. n2); do {} w h i l e ( getchar()!= '\n '); turma [i ]. media =( turma [i ]. n1+ turma [i ]. n2) /2.0; } Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 26 / 42

Exemplo de Matriz de Estrutura III } do { foraordem = 0; f o r (i = 0; i < 4-1 - jaordenados; i ++) { i f ( turma [i ]. media > turma [i +1]. media ) { temp = turma [i ]; turma [i] = turma [i +1]; turma [i +1] = temp ; foraordem = 1; } } jaordenados ++; } w h i l e ( foraordem); f o r (i =0; i <4; i ++) { printf ("\ ndados do aluno %d\n", i); printf ("%s: %0.1f, %0.1f, %0.1f\n", turma [i]. nome, turma [i ].n1, turma [i ].n2, turma [i]. media ); } r e t u r n 0; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 27 / 42 Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 28 / 42

Passando elementos da estrutura Passando elementos da estrutura Primeiro vamos considerar o caso de passar elementos da estrutura para funções. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 29 / 42 Passando elementos da estrutura Passando elementos da estrutura Primeiro vamos considerar o caso de passar elementos da estrutura para funções. Caso os elementos da estrutura sejam variáveis de um dos tipos já vistos, a passagem é efetuada da maneira normal. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 29 / 42

Exemplo #i n c l u d e < stdio.h > t y p e d e f s t r u c t _CIRCULO { f l o a t x, y, raio; } CIRCULO; f l o a t Area ( f l o a t r) { r e t u r n 3.141516 * r * r; } i n t main ( v o i d ) { CIRCULO c; c.x = c.y = c. raio = 1.0; printf ("%f\n", Area(c. raio)); r e t u r n 0; } Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 30 / 42 Passando estruturas Estruturas, quando passadas para funções, se comportam da mesma maneira que as variáveis dos tipos que já estudamos. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 31 / 42

Passando estruturas Estruturas, quando passadas para funções, se comportam da mesma maneira que as variáveis dos tipos que já estudamos. Ao passar uma estrutura para uma função estaremos passando os valores armazenados nos membros da estrutura. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 31 / 42 Passando estruturas Estruturas, quando passadas para funções, se comportam da mesma maneira que as variáveis dos tipos que já estudamos. Ao passar uma estrutura para uma função estaremos passando os valores armazenados nos membros da estrutura. Como este tipo de passagem é feito por valor, alterações nos membros da estrutura não modificam os valores da estrutura na função que chamou. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 31 / 42

Exemplo #i n c l u d e < stdio.h > #i n c l u d e < math.h > t y p e d e f s t r u c t _PONTO { f l o a t x, y; } PONTO ; f l o a t comp( PONTO p1, PONTO p2) { r e t u r n sqrt ( pow( p2.x -p1.x,2)+ pow( p2.y -p1.y,2)); } i n t main ( v o i d ) { PONTO p1, p2 ; } printf (" x1 =? "); scanf ("%f", & p1.x); printf (" y1 =? "); scanf ("%f", & p1.y); printf (" x2 =? "); scanf ("%f", & p2.x); printf (" y2 =? "); scanf ("%f", & p2.y); printf (" Comprimento da reta = %f\n", comp(p1, p2)) ; r e t u r n 0; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 32 / 42 Passando vetores de estruturas Passando vetores de estruturas A passagem de vetores de estruturas é similar a passagem de vetores de variáveis simples. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 33 / 42

Passando vetores de estruturas Passando vetores de estruturas A passagem de vetores de estruturas é similar a passagem de vetores de variáveis simples. Exemplo Para ilustrar a passagem de vetores de estruturas para funções iremos, no exemplo anterior, substituir o trecho que ordena o vetor de alunos por uma função. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 33 / 42 Passando vetores de estruturas Passando vetores de estruturas A passagem de vetores de estruturas é similar a passagem de vetores de variáveis simples. Exemplo Para ilustrar a passagem de vetores de estruturas para funções iremos, no exemplo anterior, substituir o trecho que ordena o vetor de alunos por uma função. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 33 / 42

Exemplo v o i d Ordena ( ALUNO turma [], i n t tam) { i n t i, foraordem, jaordenados = 0; ALUNO temp ; do { foraordem = 0; f o r (i = 0; i < 4-1 - jaordenados; i ++) { i f ( turma [i ]. media > turma [i +1]. media ) { temp = turma [i ]; turma [i] = turma [i +1]; turma [i +1] = temp; foraordem = 1; } } jaordenados ++; } w h i l e ( foraordem); } Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 34 / 42 Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 35 / 42

Ponteiros para estruturas Ponteiros para estruturas Para definir ponteiros para estruturas a declaração é similar a declaração de um ponteiro normal. s t r u c t aluno { c h a r nome [40]; i n t ano_entrada; f l o a t n1, n2, media ; } * ze; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 36 / 42 Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 37 / 42

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 37 / 42 Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. O espaço de memória, é economizado por que se evita passar os dados que compõem a estrutura um por um. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 37 / 42

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. O espaço de memória, é economizado por que se evita passar os dados que compõem a estrutura um por um. O tempo é economizado porque não é necessário gastar o tempo de empilhar e desempilhar todos os elementos da estrutura no processo de passagem para a função. Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 37 / 42 Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. O espaço de memória, é economizado por que se evita passar os dados que compõem a estrutura um por um. O tempo é economizado porque não é necessário gastar o tempo de empilhar e desempilhar todos os elementos da estrutura no processo de passagem para a função. Para acessar elementos da estrutura apontada por um ponteiro usa-se o chamado operador seta (->). Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 37 / 42

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. O espaço de memória, é economizado por que se evita passar os dados que compõem a estrutura um por um. O tempo é economizado porque não é necessário gastar o tempo de empilhar e desempilhar todos os elementos da estrutura no processo de passagem para a função. Para acessar elementos da estrutura apontada por um ponteiro usa-se o chamado operador seta (->). Por exemplo para imprimir a média do aluno ze usaríamos o comando printf ("A media vale %.1f", ze -> media ); Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 37 / 42 Alocando espaço para estruturas #i n c l u d e < stdio.h> t y p e d e f s t r u c t _ALUNO { c h a r nome [40]; f l o a t n1, n2, media ; } ALUNO ; i n t main ( v o i d ) { ALUNO * maria ; maria = ( ALUNO *) malloc ( s i z e o f ( ALUNO )); i f (! maria ) exit (1); gets ( maria -> nome); scanf ("%f %f", &( maria ->n1), &( maria ->n2 )); maria -> media = ( maria ->n1 + maria ->n2) / 2; printf ("A media de %s vale %0.2 f\n", maria ->nome, maria -> media ); r e t u r n 0; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 38 / 42

Alocando espaço para vetores de estruturas I #i n c l u d e < stdio.h > #i n c l u d e < stdlib.h> t y p e d e f s t r u c t _func { c h a r nome [40]; f l o a t salario; } Tfunc ; v o i d le ( Tfunc * cadastro, i n t funcionarios) { i n t i; c h a r linha [40]; f o r (i =0; i < funcionarios; i ++) { fgets (( cadastro+i) ->nome, 39, stdin ); puts (" Salario?"); fgets ( linha, 39, stdin ); sscanf ( linha, "%f", &(( cadastro+i) -> salario)); } } Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 39 / 42 Alocando espaço para vetores de estruturas II f l o a t media ( Tfunc * cadastro, i n t funcionarios) { f l o a t media =0.0; i n t i; } f o r (i =0; i < funcionarios; i ++) { media += ( cadastro+i) -> salario; } r e t u r n media /= funcionarios; Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 40 / 42

Alocando espaço para vetores de estruturas III i n t main ( v o i d ) { Tfunc * cadastro; i n t funcionarios; c h a r linha [40]; puts (" Quantos funcionarios?"); fgets ( linha, 39, stdin ); sscanf ( linha, "%d", & funcionarios); cadastro = ( Tfunc *) malloc ( funcionarios * s i z e o f ( Tfunc )); i f (! cadastro) exit (1); le( cadastro, funcionarios); printf (" Salario medio = %.2f\n", media ( cadastro, funcionarios)); r e t u r n 0; } Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 41 / 42 The End Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ) C Estruturas 1 de fevereiro de 2016 42 / 42