A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 5 Allan Lima

Apresentações semelhantes


Apresentação em tema: "Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 5 Allan Lima"— Transcrição da apresentação:

1 Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 5 Allan Lima

2 Você pode: –copiar, distribuir, exibir e executar a obra –criar obras derivadas –fazer uso comercial da obra Sob as seguintes condições: –Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. –Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. –Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. –Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. Veja aqui a licença completa

3 Roteiro Tipos avançados de dados –Estruturas –Uniões –Enumerações Arquivos cabeçalho

4 Problema Tipos primitivos são muito bons quando queremos representar coisa simples Mas e quando nós precisarmos representar com coisa mais complexas? –Computador –Pessoa –Funcionário –Bicicleta –...

5 Estruturas Agrupam diversas variáveis em um único tipo São tipos de dados criados pelo programador Sintaxe: struct nomeEstrutura { tipo1 nome1;... tipoN nomeN; } listaDeVariáveis;

6 Exemplos struct Endereco { char rua[50]; int numero; char bairro[20]; char *cidade; char sigla[3]; long int cep; }; Os atributos não podem ser inicializados dentro da própria estrutura: struct S { // ERRADO!!! float f = 2.5f; };

7 Estruturas Podemos restringir o número exato de bits que cada campo para o comportamento do campo Exemplo: struct Exemplo { int a:3; char c:4; long long l:40; };

8 Ponteiros para Estruturas Estruturas podem conter ponteiros para outras estruturas Exemplo: struct Pessoa { char nome[100]; char telefone[14]; struct Endereco *endereco; };

9 Exemplos struct Cidade { char *nome; long populacao; }; struct Estado { char *nome; char sigla[3]; struct Cidade *cidades; int numeroCidades; } pernambuco; // variável

10 Manipulação O acesso aos membros de uma estrutura é feito através dos operadores:. (Ponto) struct Cidade c; c.populacao = 10; -> struct Cidade *c = malloc(sizeof(struct cidade)); c->populacao = 10; // equivalente a (*c).populacao

11 Exemplo exemploStruct2.c exemploStruct3.c

12 Copias de Estruturas struct Cidade c1, c2; c1.nome = (char *) calloc(20, sizeof(char)); strcpy(c1.nome, "Sao Paulo); c1.populacao = ; // cuidado ao fazer cópias // de estruturas c2 = c1;

13 Copias de Estruturas São Paulo O que acontece quando fazemos: strcpy(C1.nome, Recife); ??? c2 População Nome c1 População Nome

14 Copias de Estruturas Recife c2.nome também é alterado! c2 População Nome c1 População Nome

15 Copias de Estruturas A solução: struct Cidade *clone(struct Cidade *c) { struct Cidade *copia = (struct Cidade *) malloc(sizeof(struct Cidade)); copia->nome = (char *) calloc(strlen(c->nome) + 1, sizeof(char)); strcpy(copia->nome, c->nome); copia->populacao = c->populacao; return copia; }

16 Uniões Permitem criar uma única localização de memória onde podem estar armazenadas variáveis diferentes Sintaxe: union nomeDaUniao { tipo1 nome1;... tipoN nomeN; } listaDeVariaveis;

17 Exemplo #include union MinhaUniao { long i; float l; }; int main() { union MinhaUniao uniao; uniao.i = 10; printf("%d\n", uniao.i); uniao.l = 45.4f; printf("%f\n", uniao.l); return 0; } O compilador aloca o tamanho do maior componente da união para permitir o uso de qualquer um destes

18 Exemplo exemploUnionChar.c

19 Enumerações Permitem ao programador restringir os valores de uma variável pode assumir Sintaxe: enum nome { listaDeValores } listaDeVariáveis; Exemplo: enum tiposTelefone { celular, residencial, comercial };

20 Exemplo #include enum Linguagens { Java, C, Pascal, Assembly, Haskell } minhaLinguagem; int main() { enum Linguagens outraLinguagem = Java; minhaLinguagem = C; // Imprime 0 printf("Valor de Java: %d\n", outraLinguagem); // Imprime 1 printf("Valor de C: %d\n", minhaLinguagem); return 0; }

21 Enumerações A cada valor da enumeração é atribuído um número Por default o 1° é 0, o 2° é 1,... Mas podemos modificar isto! Exemplo: enum Linguagens { Java = 0, C = 10000, Pascal = 10, Assembly = 5, Haskell = 9 };

22 sizeof É um operador e não uma função Retorna o tamanho do tipo em bytes Ajuda a manter a portabilidade Sem ele seria muito mais complicado alocar memória dinamicamente Sintaxe: sizeof(nomeDoTipo); sizeof(nomeDaVariavel);

23 Exemplo exemploSizeof.c

24 typedef Permite ao programador definir um novo nome para um tipo criado anteriormente Sintaxe: typedef nomeAtual novoNome Exemplo: exemploTypedef.c

25 Criando Grandes Projetos Grandes projetos tem muitas funções e estruturas Não faz sentido colocar todas em um único arquivo Para resolver este problema utilizamos arquivos cabeçalho

26 Arquivos Cabeçalhos São idênticos aos arquivos normais de código, porém com duas restrições: –Tem a extensão h –Não podem possuir uma função main Também são chamados de headers Os mais conhecidos são: –stdio.h, stdlib.h e string.h Por convenção só declaramos protótipo de funções em arquivos cabeçalhos

27 Arquivos Cabeçalhos Funcionamento: –O corpo das funções de um header ficam em outro local, normalmente arquivo.c –O corpo só é incluído no momento da linkagem Também podemos criar nosso próprios arquivos cabeçalhos

28 Exemplos cidade.h cidade.c main.c

29 Exercícios 1)Crie as estruturas: –Carro, guardando modelo, cor, ano, fabricante, o número de portas e o valor do aluguel. –Cliente, guardando nome, endereço, celular e data de nascimento. –Locacao, guardando a data da locação, o cliente que realizou o aluguel, o carro alugado e número de dias da locação. –Sinta-se à vontade para criar outros tipos que possam ajudar na resposta. 2)Crie um arquivo cabeçalho chamado ponto.h que irá conter as seguintes definições: –Estrutura ponto, com os atributos x e y –Função distância que calcula a distância entre dois pontos Crie também um arquivo chamado ponto.c que irá conter a definição da função distancia Por fim crie um arquivo chamado main.c que irá testar o seu header Obs.: Para calcular a raiz quadrada de um número utilize a função sqrt() definida no header math.h

30 Exercícios 3)Crie as seguintes estruturas: struct Node { // Nó da pilha int value; struct Node *next; }; struct Stack { // Pilha struct Node *first; }; –Defina também as funções: void push(struct Stack *stack, struct Node *node); Insere node no topo de stack struct Node *pop(struct Stack *stack); Remove e retorna o primeiro elemento de stack –Não se esqueça de desalocar a memória no final do programa –Sinta-se à vontade para criar funções auxiliares

31 Referências Matos, P. A. & Carvalho, G. H. P. - A Linguagem de Programação C Curso de C da UFMG –http://ead1.eee.ufmg.br/cursos/C/http://ead1.eee.ufmg.br/cursos/C/ Algumas Notas sobre Programação em C –http://paginas.fe.up.pt/~apm/C_tut/Cap_7.htmhttp://paginas.fe.up.pt/~apm/C_tut/Cap_7.htm Standart C –http://www.ccs.ucsd.edu/c/http://www.ccs.ucsd.edu/c/ Slides de Gustavo do Curso

32 Agradecimentos Gustavo Henrique Porto –Pelo material cedido para montagem da aula


Carregar ppt "Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 5 Allan Lima"

Apresentações semelhantes


Anúncios Google