Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 11 Estruturas (Structs) Structs

Documentos relacionados
Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 09 Estruturas

1/27. Registos (Estruturas - struct)

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

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 8 Endereçamento de Memória Endereçamento de Memória

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

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 9 Subprogramas II: Passagem de Parâmetros Subprogramas II

Ponteiros e Tabelas. K&R: Capítulo 5

1/24 FICHEIROS DE TEXTO

Programação : Engenharia Informática 6619 : Tecnologias e Sistemas de Informação. Cap. 6 Subprogramas I Subprogramas I

ESTRUTURAS DE DADOS (LEI, LM, LEE) PROGRAMAÇÃO III (LTSI) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2017/2018

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Introdução a linguagem C. Introdução à Programação 06/07

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

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

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Legibilidade do código fonte

Básico: estrutura de programa, sintaxe Interface com linha de comando

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 05 Subprogramas I

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

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

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

Métodos Computacionais. Tipos Estruturados

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

Programação: Vetores

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

ESTRUTURA DE DADOS (TCC )

Variáveis e Operadores em C

Introdução à Programação

Algoritmos e Programação

Linguagem de Programação

Linguagem C. André Tavares da Silva.

Módulo 8 Tipos Estruturados

Introdução à Programação

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: tipos de dados definidos pelo programador: struct union enum typedef

BCC202 - Estrutura de Dados I

Linguagem C: Subprogramação

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Linguagem C. Ponteiros. Alex Vidigal Bastos.

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

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

Programação de Computadores II. Cap. 5 Vetores

MC-102 Aula 21 Registros

TÉCNICAS DE PROGRAMAÇÃO. Estrutura de dados

Linguagem C ponteiros

Computação Eletrônica. Aula 08 Estruturas de Dados. Prof: Luciano Barbosa. CIn.ufpe.br

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Programação. Folha Prática 9. Lab. 9. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Programação Estruturada

Introdução à Programação em C Input / Output

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

Programação II. Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio

Prova de Programação (21090) Data: 31 de Janeiro de 2008

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Introdução à Programação em C

ponteiros INF Programação I Prof. Roberto Azevedo

Fundamentos de Programação

INF 1007 Programação II

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Computação e Programação

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

LINGUAGEM C Estrutura / Funções

Aula 25: Alocação Dinâmica

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

Alocação Dinâmica. Túlio Toffolo BCC202 Aula 02 Algoritmos e Estruturas de Dados I

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

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

Laboratório 4 Correcção de erros sintácticos e tipos de dados primitivos

Linguagem C (continuação)

3. Linguagem de Programação C

Programação de Computadores I Funções Básicas da Linguagem C PROFESSORA CINTIA CAETANO

INTRODUÇÃO À LINGUAGEM C

O que é um apontador em C (type pointer in C)?

INF1005: Programação 1. Vetores. 02/05/10 (c) Paula Rodrigues 1

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

Introdução à Linguagem C

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

Programação Estruturada

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Estruturas de Dados Homogêneas (Vetores e Matrizes) e Ponteiros em C

Arranjos. David Déharbe

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 3ª Parte Prof. Sandra Pais Soares

Índice. Capítulo 1 - Introdução

Princípios de Desenvolvimento de Algoritmos MAC122

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Linguagem de Programação. Thiago Leite Francisco Barretto

Linguagens de Programação. Rotinas, Modos e Tipos de Passagem de Parâmetros. Carlos Bazilio

INTRODUÇÃO À LINGUAGEM C

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

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Introdução a Computação

Linguagem C Princípios Básicos (parte 1)

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

11a. Aula Ponteiros e Vetores

Introdução à Computação MAC0110

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Transcrição:

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação Cap. 11 Estruturas (Structs) Structs

Sumário: Revisitação à taxonomia de tipos de dados Características gerais de tipos de dados compostos Estruturas: motivação ou a razão de ser Definição de estrutura (struct) Declaração de estruturas Diagrama de sintaxe de estruturas Inicialização de estruturas Características específicas de estruturas Operadores de acesso a estruturas Operador de atribuição de estruturas Passagem de estruturas para funções Comparação entre a passagem de alinhamentos e passagem de estruturas para funções Retorno de estruturas a partir de funções

Taxonomia de tipos de dados Tipos de Dados void Tipos Simples Tipos Compostos Tipos Numéricos Tipos Apontadores Tipos Enumerados * enum char int float double array 3 struct FILE

Características dos tipos de dados compostos - Definição pelo utilizador Não pertencem ao léxico da linguagem Requerem a utilização dum mecanismo sintáctico ou duma palavra reservada ([ ], struct, FILE,...) - Composição Têm valores compostos Exemplo (clientes dum empresa): CLIENTE x = { Josefa Boavida, Rua do Vau, nº 2, 3500-089 Viseu, 232456719; CLIENTE y = { Rui Silva, Rua da Pescada, nº 5, 1100-115 Lisboa, 213445232; - Não têm ordem Um conjunto não tem ordem ou escala Exemplo (inteiros): x < y?

Structs: motivação Quando há necessidade de guardar informação de vários tipos numa só entidade (ou struct). Exemplo: No dia-a-dia das empresas e organizações há necessidade de introduzir, alterar, eliminar e consultar dados em formulários (p.ex.: segurança social, banca, finança, bolsa, arquivo de identificação, etc). Em geral, há três dados comuns a todos estes sistemas de organização de informação: ; nome ; morada ; telefone Em C (novo tipo de dados: CLIENTE): Exemplo: typedef struct { char *nome; char *morada; long telefone; CLIENTE;

Struct: definição - Definição É uma colecção ou conjunto de elementos (ou variáveis) numa zona contígua de memória. Ao contrário dos arrays, os elementos não são necessariamente do mesmo tipo. Ao contrário dos arrays, os elementos não são indexados. Os elementos são variáveis usuais identificadas por nome. Os elementos são também designados por campos, membros ou componentes. Exemplo (declaração dum cliente c/ inicialização): CLIENTE x = { Josefa Boavida, Rua do Vau, nº 2, 3500-089 Viseu, 232456719; inicialização semelhante aos arrays x.nome x.morada x.telefone x 6

Struct: diagrama de sintaxe - Diagrama de sintaxe struct nome { tipo elemento 1 ; tipo elemento 2 tipo elemento n 7

Declaração de variáveis estruturadas Definição de tipo de dados + declaração de variável Definição de tipo de dados c/ typedef + declaração de variável struct CLIENTE { char *nome; char *morada; long telefone; ; struct CLIENTE x; typedef struct { char *nome; char *morada; long telefone; CLIENTE; CLIENTE x;

Inicialização de variáveis estruturadas - É feita da mesma forma que a dos arrays. - Exemplo (declaração dum cliente c/ inicialização): CLIENTE x = { Josefa Boavida, Rua do Vau, nº 2, 3500-089 Viseu, 232456719;

Structs: características específicas - Contiguidade Ocupa uma zona contígua de memória - Não são homogeneamente tipadas As componentes podem ter tipos diferentes de dados Exemplo (clientes): CLIENTE x = { Josefa Boavida, Rua do Vau, nº 2, 3500-089 Viseu, 232456719; CLIENTE w; - Acesso por identificador Cada componente tem um identificador Exemplo (inteiros): w.nome = Carlos Ribeiro ; w.telefone = x.telefone; Acesso para escrita Acesso para leitura

Operadores de acesso Operador. Operador struct CLIENTE { char *nome; char *morada; long telefone; ; Structs struct CLIENTE x; x.nome = Joaquim Mira ; x.morada = R. Ag.Cima, 2, 2456-001 Águeda ; x.telefone = 239675413; struct CLIENTE *x; x nome = Joaquim Mira ; x morada = R. Ag.Cima, 2, 2456-001 Águeda ; x telefone = 239675413; struct CLIENTE *x; (*x).nome = Joaquim Mira ; (*x).morada = R. Ag.Cima, 2, 2456-001 Águeda ; (*x).telefone = 239675413; 11

Operadores de atribuição struct CLIENTE x, y; struct CLIENTE { char *nome; char *morada; long telefone; ; Structs // a atribuição pode ser feita membro a membro x.nome = Joaquim Mira ; x.morada = R. Ag.Cima, 2, 2456-001 Águeda ; x.telefone = 239675413; // mas, ao contrário dos arrays, // também pode ser feita entre estruturas y = x;

Exemplo #include<stdio.h> main() { struct CLIENTE { char *nome; char *morada; long telefone; ; OUTPUT: (ecrã) struct CLIENTE x, y; x.nome = "Joaquim Mira"; x.morada = "R. Ag.Cima, 2, 2456-001 Agueda"; x.telefone = 239675413; y=x; Nome: Joaquim Mira Morada: R. Ag.Cima, 2, 2456-001 Agueda Tel.: 239675413 printf("nome: %s\n",y.nome); printf("morada: %s\n",y.morada); printf("tel.: %d\n", y.telefone);

Estruturas como parâmetros de funções O método escolhido determina que operador (. ou ) deve ser usado no corpo da função para aceder aos membros da estrutura: Passagem por cópia de valor da estrutura Passagem por cópia de valor de endereço da estrutura

Exemplo: passagem por cópia de valor da estrutura #include <stdio.h> typedef struct { float x; float y; VECTOR; float produtointerno(vector, VECTOR); int main(){ VECTOR p = {5.0,10.0; VECTOR q = {6.0,9.0; float p_q; main p_q p q float a b produtointerno p_q = produtointerno(p,q); printf( Poduto interno = %f,p_q); float produtointerno(vector a, VECTOR b){ return (a.x * b.x + a.y * b.y);

Exemplo: passagem por cópia de valor de endereço da estrutura #include <stdio.h> typedef struct { float x; float y; VECTOR; float produtointerno(vector*, VECTOR*); int main(){ VECTOR p = {5.0,10.0; VECTOR q = {6.0,9.0; float p_q; main p_q &p &q float a b produtointerno p_q = produtointerno(&p,&q); printf( Poduto interno = %f,p_q); float produtointerno(vector *a,vector *b){ return (a->x * b->x + a->y * b->y);

Comparação entre passagem de arrays e passagem de estruturas para funções Passagem de estruturas alternativa 1: passa-se o nome da estrutura, o que implica a cópia do conteúdo da estrutura para uma estrutura local da função. alternativa 2: passa-se o endereço da estrutura para uma variável apontadora que é local à função. Structs Passagem de arrays: alternativa 1: não existe!!! Não é possível copiar ou passar o conteúdo dum array para um array local duma função. De facto, ao passar o nome do array, não é feita a cópia do conteúdo do array, mas sim a cópia do endereço do array. alternativa 2: passa-se o endereço do array (i.e. do primeiro elemento), mas como o compilador interpreta o nome do array como apontador para si próprio, basta escrever o nome do array (sem índice).

Exemplo: passagem de estruturas e passagem de arrays para funções ESTRUTURAS: Structs Exemplo: passagem de estruturas e passagem de arrays // RECEBE CÓPIAS DE 2 ESTRUTURAS float produtointerno(vector a, VECTOR b); // RECEBE CÓPIAS DE 2 ENDEREÇOS PARA ESTRUTURAS float produtointerno(vector *a, VECTOR *b); ARRAYS: // RECEBE CÓPIAS DE 2 ENDEREÇOS DE ARRAYS float produtointerno(float a[], float b[]); // RECEBE CÓPIAS DE 2 ENDEREÇOS DE ARRAYS float produtointerno(float *a, float *b); 18

Exemplo: passagem por cópia de valor de endereço de array #include <stdio.h> float produtointerno(float a[], float b[]); Structs main(){ float p[2] = {5.0,10.0; float q[2] = {6.0,9.0; float p_q; main p_q p q p_q = produtointerno(p,q); printf( Produto interno = %f,p_q); float a b produtointerno float produtointerno(float a[], float b[]) { return (a[0] * b[0] + a[1] * b[1]); 19

Exemplo equivalente: passagem por cópia de valor de endereço de array #include <stdio.h> float produtointerno(float*, float*); void main(){ float p[2] = {5.0,10.0; float q[2] = {6.0,9.0; float p_q; main p_q p q p_q = produtointerno(p,q); printf( Produto interno = %f,p_q); float a b produtointerno float produtointerno(float *a, float *b) { return (a[0] * b[0] + a[1] * b[1]); 20

Retorno de estrutura a partir de função: exemplo #include <stdio.h> typedef struct { float x; float y; VECTOR; VECTOR soma(vector, VECTOR); void main(){ VECTOR p = {5.0,10.0; VECTOR q = {6.0,9.0; VECTOR s; s = soma(p,q); printf( Vector soma = {%f,%f,s.x, s.y); VECTOR soma(vector a, VECTOR b){ VECTOR vs; vs.x = a.x + b.x; vs.y = a.y + b.y; return vs; 21 main s p q vs a soma b FIM