Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Slides:



Advertisements
Apresentações semelhantes
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Advertisements

Laboratório de programação III Linguagem C
Linguagem de Programação VI Tipos de Dados Compostos - structs
Construção de Algoritmos AULA 07
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
Nivelamento de C: Tipos Estruturados de Dados
Nivelamento de C: Ponteiros e Alocação Dinâmica
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
Programação II Estruturas de Dados
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Alocação Dinâmica de Memória
Programação II Estruturas, uniões e enumerações
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Linguagem de Programação 1
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo Programação II Estruturas Professora: Norminda Luiza.
Universidade de Brasília
Linguagem C Funções.
Estruturas de Dados Heterogêneas (struct)
Estruturas de Dados Heterogêneas (struct)
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
Revisão da Linguagem C.
Apontadores ou Ponteiros
Vamos agora aprender a utilizar estruturas.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
Definição de Tipos Estruturas e Ponteiros
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 05 Aquiles Burlamaqui UERN
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de Dados Avançada
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Prof. Ricardo Santos PONTEIROS
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação de Computadores I – Ponteiros Profa. Mercedes Gonzales Márquez.
Ponteiros em C Prof. Kariston Pereira
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Fundamentos de Programação 1
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação

Estrutura de Dados Compostos (Structs) e Unions

Definição Uma estrutura (struct) ou registro em C é uma coleção de um ou mais valores, agrupados sob um único nome. Estruturas constituem um recurso importante para organizar os dados utilizados por um programa graças à possibilidade de tratar um grupo de valores como uma única variável

Estruturas anônimas O exemplo abaixo cria uma estrutura chamada de estrutura anônima. Esse tipo de estrutura não pode ser referenciada em outras partes do programa. struct { int dia; int mes ; int ano; } hoje; Serve somente para declaração de variáveis do tipo da estrutura Não será possível declarar outras variáveis do mesmo tipo da variável hoje Para resolver isso deve-se declarar estruturas usando rótulos

Exemplo de criação de estrutura rotulada struct ponto { int x; int y; }; struct funcionario { int registro; char nome[30]; char depto[5]; float salario; }; As variáveis variáveis que fazem parte de uma estrutura são denominadas membros e são identificadas por nomes O rótulo dessas estruturas são ponto e funcionario e usa-se eles para declaração de variáveis

Exemplo de uso As declarações de ponto e funcionario, definem os respectivos tipos de dados, que podem ser utilizados em declarações de variáveis. Exemplos: struct ponto p1, p2, p3; struct funcionario Joao; Na primeira declaração, estão sendo declaradas as variáveis p1, p2 e p3 do tipo ponto. Na segunda declaração, é declarada a variável Joao do tipo funcionário.

Exemplo de uso Para uma variável do tipo ponto, dizemos que x e y são seus campos ou membros. Os campos de uma variável podem ser acessados individualmente como variáveis usando-se o nome da variável seguido de "." e o nome do campo. Exemplos: p1.x = 10; p1.y = 20; p2.x = p1.x + 5; p2.y = p2.y + 5; Além disso, é possível atribuir a uma estrutura o valor de outra estrutura do mesmo tipo. Exemplos: funcionario f = Joao; p3 = p2;

Estruturas complexas Os campos de uma estrutura podem ser de qualquer tipo: tipos simples (int, char, float, etc), vetores, ou até mesmo estruturas. Exemplo: struct retangulo { struct ponto pa; struct ponto pb; }

Declaração com valores iniciais Ao declararmos uma estrutura, podemos também definir o seu valor inicial, de forma análoga a aquela utilizada para vetores. Exemplos: struct ponto origem = {0,0};... struct ponto trapezio[] = { { 5,5}, {5, 10}, {10,5}, {10,13} };...

Exemplo de programa usando estruturas #include #include // uma estrutura Pessoa struct Pessoa{ char *nome; int idade; }; int main() { // declara uma variável do tipo struct struct Pessoa cliente; cliente.nome = "Osmar J. Silva; cliente.idade = 36; // obtém os dados printf("O nome do cliente e: %s\n", cliente.nome); printf("A idade do cliente e: %d\n", cliente.idade); return 0; }

Estruturas rotuladas e nomeadas É possível criar um tipo baseado em uma estrutura Para isso utiliza-se typedef na declaração struct tipo_data{ int dia, mes, ano; }; typedef struct tipo_data DATA; Para criar uma estrutura rotulada e nomeada pode-se usar typedef struct tipo_data{ int dia, mes, ano; } DATA; ATENÇÃO: DATA é o nome to tipo Agora pode ser declarada uma variável dessa forma DATA d; Não existe mais a necessidade de struct tipo_data d; ATENÇÃO: DATA é o nome to tipo Agora pode ser declarada uma variável dessa forma DATA d; Não existe mais a necessidade de struct tipo_data d; Forma mais comum de declarar

Usando ponteiros com structs struct data{ int dia; int mês; int ano; }; Definindo uma variável do tipo data struct data dt; Definindo um ponteiro para dt struct data *pdt=&dt; Fazendo referência a um elemento da estrutura dt.dia ou (*pdt).dia ou pdt->dia dt.mes ou (*pdt).mes ou pdt->mês dt.ano ou (*pdt).ano ou pdt->ano

Uso de estruturas com funções Uma vez que o tipo de uma estrutura foi declarado, é possível utilizá-lo em outras declarações (variáveis simples, vetores, funções, etc).... struct ponto poligono[10];... float dist(struct ponto p, ponto q) { int dx = p.x - q.x; int dy = p.y - q.y; return sqrt((double)dx*dx + (double)dy*dy); }

Passagem de estrutura por referência Uma estrutura pode ser passada como parâmetro por referência numa função. Quando se usa uma referência (apontador), o acesso aos campos da mesma é feito através do operador "->" ao invés de ".". Exemplo: void moveP(struct ponto* p, int dx, int dy){ p -> x += dx; p -> y += dy; }... void moveR(struct retangulo* r, ind dx, ind dy){ moveP(&(r -> pa), dx, dy); moveP(&(r -> pb), dx, dy); } Observe o uso de -> ao invés de.

Retornando uma estrutura Uma função pode ter uma estrutura como valor de retorno struct ponto constroiPonto(int x, int y){ struct ponto temp; temp.x = x; temp.y = y; return temp; }... struct ponto Origem = constroiPonto(0,0);

Alocação dinâmica de estruturas É preciso armazenar esse endereço retornado pela malloc num ponteiro de tipo apropriado Para alocar um tipo de dado que ocupa vários bytes, é preciso recorrer ao operador sizeof, que diz quantos bytes o tipo especificado tem DATA *d; d = malloc (sizeof (DATA)); d->dia = 31; d->mes = 12; d->ano = 2008;

#include typedef struct tipo_data{ int dia, mes, ano; } DATA; int main (void) { DATA *d; d = malloc (sizeof (DATA)); d->dia = 31; d->mes = 12; d->ano = 2008; printf("Data: %d / %d / %d \n", d->dia, d->mes, d->ano); free(d); return 0; }

Union Uma union determina uma única localização de memória onde podem estar armazenadas várias variáveis diferentes. A declaração de uma união é semelhante à declaração de uma estrutura: union nome_do_tipo_da_union{ tipo_1 nome_1; tipo_2 nome_2;... tipo_n nome_n; } variáveis_union;

Union Exemplo union angulo { float graus; float radianos; }; As variaveis graus e radianos que, apesar de terem nomes diferentes, ocupam o mesmo local da memória. Isto quer dizer que só gastamos o espaço equivalente a um único float.

#include #define GRAUS 'G' #define RAD 'R' union angulo { int graus; float radianos; }; void main() { union angulo ang; char op; printf("\nNumeros em graus ou radianos? "); scanf("%c",&op); if (op == GRAUS) { ang.graus = 180; printf("\nAngulo: %d\n",ang.graus); } else if (op == RAD) { ang.radianos = ; printf("\nAngulo: %f\n",ang.radianos); } else printf("\nEntrada invalida!!\n"); } Exemplo de uso de union

#include union numero { char Ch; int I; float F; }; main (void) { union numero N; N.graus = 123; printf ("%f",N.F); return 0; } O programa acima é muito perigoso pois você está lendo uma região da memória, que foi "gravada" como um inteiro, como se fosse um ponto flutuante. Tome cuidado! O resultado pode não fazer sentido. CUIDADO!!!!!

Enumerações Numa enumeração podemos dizer ao compilador quais os valores que uma determinada variável pode assumir. Sua forma geral é: enum nome_do_tipo_da_enumeração {lista_de_valores} lista_de_variáveis; Vamos considerar o seguinte exemplo: enum dias_da_semana {segunda, terca, quarta, quinta, sexta,sabado, domingo}; O programador diz ao compilador que qualquer variável do tipo dias_da_semana só pode ter os valores enumerados

#include enum dias_da_semana {segunda, terca, quarta, quinta, sexta, sabado, domingo}; main (void) { enum dias_da_semana d1,d2; d1=segunda; d2=sexta; if (d1==d2) { printf ("O dia e o mesmo."); } else { printf ("São dias diferentes."); } return 0; } O compilador pega a lista de valores e associa, a cada um, um número inteiro. Então, ao primeiro da lista, é associado o número zero, o segundo ao número 1 e assim por diante. As variáveis declaradas são então variáveis int.

Enumerações Pode-se criar um enum com valores incrementados com valores iniciais diferentes de zero Exemplo: enum { ARGENTINA = 3, ITALIA, BRASIL }; Aqui Italia = 4 e Brasil = 5