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

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

Capítulo 1 – Conceitos Básicos 1 Segunda-feira, 22 de Outubro de 2007 UNIBRATEC – Ensino Superior e Técnico em Informática Aula 15 – Tipos de Dados Avançados.

Apresentações semelhantes


Apresentação em tema: "Capítulo 1 – Conceitos Básicos 1 Segunda-feira, 22 de Outubro de 2007 UNIBRATEC – Ensino Superior e Técnico em Informática Aula 15 – Tipos de Dados Avançados."— Transcrição da apresentação:

1 Capítulo 1 – Conceitos Básicos 1 Segunda-feira, 22 de Outubro de 2007 UNIBRATEC – Ensino Superior e Técnico em Informática Aula 15 – Tipos de Dados Avançados Segunda-feira, 22 de Outubro de 2007 DHD – Desenvolvimento em Hardware

2 Capítulo 1 – Conceitos Básicos 2 Segunda-feira, 22 de Outubro de 2007 UNIBRATEC – Ensino Superior e Técnico em Informática Aula 15 – Tipos de Dados Avançados Segunda-feira, 22 de Outubro de 2007 Prof. Frederico Brito Fernandes DHD – Desenvolvimento em Hardware 15 Tipos de Dados Avançados 1.Modificadores de Acesso 2.Ponteiros para Funções 3.Alocação Dinâmica 4.orCut: parte 3

3 3 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Modificadores de Tipos Modificadores já estudados: –long,short, signed e unsigned –Ex: short int a; unsigned char c; long double;

4 4 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Modificadores de Tipos const –Faz com que a variável não possa ser modificada no programa –Ex: const float PI=3.141; –Qual a diferença entre declarar uma constante (com #define) e usar o modificador const? Ex: #include int sqr (const int *num); main (void){ int a=10; int b; b=sqr (&a); } int sqr (const int *num){ return ((*num)*(*num)); } Não é possível modificar o valor de num dentro da função sqr(): *num=3; //gera erro

5 5 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Modificadores de Tipos volatile –Informa ao compilador que o valor da variável pode ser alterada a qualquer momento Isso impede alguns bugs inesperados Ex: Suponha que a variável TECLADO o conteúdo de um registrado especial do teclado que possui o valor digitado pelo usuário char TECLADO; int i; char c; for (i = 1; i <= 10; i++){ c = TECLADO; printf(%c,c); } char TECLADO; int i; char c; c = TECLADO; for (i = 1; i <= 10; i++){ printf(%c,c); } DepoisDeOtimizado Solução: volatile char TECLADO;

6 6 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Modificadores de Tipos static –Depende se a variável é: Global ( altera a visibilidade ) –A variável fica acessível apenas no arquivo onde foi declarada Local ( altera a durabilidade ) –A variável é inicializada apenas uma vez, e seu valor não é perdido Ex: #include static float nota; void sucessor(){ static int i=0; i++; printf(%d,i); } main (void){ sucessor(); sucessor(); sucessor(); }

7 7 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Modificadores de Tipos auto –Define que a variável terá duração automática Ex: #include void sucessor(){ auto int i=0; i++; printf(%d,i); } main (void){ sucessor(); sucessor(); sucessor(); } Raramente usado, pois: Por default, as variáveis já são automáticas

8 8 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Modificadores de Tipos extern –Permite fazer uma alusão a uma variável declarada em outro arquivo Ex: #include #include empregado.h extern int n_empregados;main(){ printf(%d, ); printf(%d, n_empregados);} int n_empregados = 250; empregado.h principal.c

9 9 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Modificadores de Tipos register –Permite que uma variável seja armazenada em algum registrador Por que? –Velocidade Ex: main (void){ register int count; for (count=0;count<10;count++){... } –Observações: Não use variáveis globais, para não ocupar o tempo inteiro o reg Nem sempre o compilador consegue atender ao pedido

10 10 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Modificadores de Tipos Auto-avaliação (1) const (3) extern (5) register (7)void (2) volatile (4) static (6) auto ( ) informa ao compilador que o valor da variável não pode ser alterado por nenhum comando do programa, mas que pode ser inicializado ( ) informa ao compilador que nenhum valor será devolvido pela função ( ) informa ao compilador que a variável pode ser modificada por algum evento que não está sob o controle do programa ( ) avisa ao compilador que as variáveis que o seguem já foram declaradas em outro lugar ( ) torna a variável permanente, mantendo seu valor entre chamadas ( ) quando apontadores forem passados para a função, garante que nenhum código na função poderá modificar os objetos apontados ( ) armazena o valor da variável em um registrador da CPU, acelerando operações ( ) usada para declarar variáveis locais automáticas, mas muito pouco usada por já ser o padrão (default) ( ) avisa ao compilador que a variável em questão será largamente usada e deve permanecer acessível da forma mais eficiente possível ( ) permite ao compilador conhecer a variável sem criar armazenamento para ela novamente em outro modulo

11 11 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (2) Ponteiros para funções Ponteiro para uma variável int: int *p; Ponteiro para uma função que retorna um inteiro: int (*ptrPraFuncao)(int a); int sucessor(int b){ return ++b; } main(){ ptrPraFuncao = sucessor; printf(%d\n, (*ptrPraFuncao)(1)); printf(%d\n, ptrPraFuncao(3)); } O nome da função usada sem parênteses, indica que você está usando o endereço da onde o código da função começa São equivalentes! O uso do parênteses é fundamental. O que seria? int* ptrPraFuncao(int a);

12 12 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (2) Ponteiros para funções Ex:

13 13 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Alocação Dinâmica C permite a criação de memória para variáveis em tempo de execução Isso quer dizer que posso criar vetores dinâmicos Funções da stdlib.h: –malloc(tamanho) permite a alocação de memória capaz de armazenar tamanho bytes. –free(pont) libera a memória alocada associada com o ponteiro pont. –calloc(tamanho, qtde) permite a alocação de memória capaz de armazenar ( tamanho * qtde) bytes. –realloc(pont, tamanho) redimensiona o bloco apontado pelo pont, para ter o novo tamanho

14 14 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Alocação Dinâmica: malloc Protótipo: void *malloc(tamanho); Detalhes : –Devolve um ponteiro do tipo void (sem tipo) para o início (1º byte) da área de memória alocada. –Isto significa que o valor deste ponteiro pode ser atribuído a qualquer variável do tipo ponteiro. Para isto deve ser utilizado sempre um typecasting. Ex.: se x é ponteiro para inteiro então explicitar isto com x = (int *) malloc( sizeof(int) ); –tamanho é a quantidade de bytes alocado.

15 15 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Alocação Dinâmica: malloc Ex: int *vet; vet = malloc(sizeof(int)*10); vet[0] = 2; vet[1] = 3; vet[2] = 0; ??????? [118][116][114][112][110][108][106][104][102][100]vet Criação dinâmica de vetores Forma Não Dinâmica: int vet[10]; Forma Dinâmica: int *vet;

16 16 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Alocação Dinâmica: auto-avaliação Dadas as definições abaixo, implemente o que se pede no slide seguinte: typedef struct { char [50]; char nome [20]; char sobrenome [50]; char telefone [20]; int ocupado; }tUsuario; tUsuario vet[6] = { "Fred", "Fernandes", " ",1}, "Fulano", "de Tal", " ", 0}, "Cicrano", "da Silva Araújo Tavares", " ", 1}, Mattos", ",0}, Carlos",Moreira", ",1}, };

17 17 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Alocação Dinâmica: auto-avaliação a)Crie um programa que permita que o usuário digite um valor inteiro N, e em seguida crie um vetor de N tUsuario b)Crie uma função que receba um número inteiro n, e retorne um vetor de n tUsuario c)Faça uma função que recebe um vetor de tUsuario, e retorne o número de posições ocupadas d)Crie uma função que recebe um vetor de tUsuario e retorne um outro vetor de tUsuario com apenas as posições ocupadas. Ex: para o vetor vet (slide anterior), seria retornado um vetor de 4 usuários

18 18 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (4) orCut: Persistência de Dados Iremos finalizar o mini-projeto orCut, para estudar o uso de arquivos e ponteiros em um problema real Siga as etapas abaixo: a)Download do Projeto 2 – procure a aula do dia 13/04, e faça o download do arquivo orCut_Parte2.zip. Se você já tem ele na sua máquina, poderá usá-lo sem precisar fazer o download novamente b)Implementações Obs: Irei dar exemplos para o aluno Antônio Carlos (tAmigo). Porém, você deverá trabalhar no arquivo que lhe foi destinado na parte 2 do Projeto. Ex: Eduardo -> tComunidade e Rejane ->tUsuario. Os alunos Juliana e Rafael devem implementar apenas a função b.5 b.1) Faça uma função que receba um vetor de tAmigo, e o nome de arquivo, e que grave esse vetor completo no arquivo void gravaArqAmigos(tAmigo vet[], char arq[]); b.2) Faça uma função que receba o nome de um arquivo e de um vetor de tAmigo, e armazene os dados desse arquivo nesse vetor passado void recuperaArqAmigos(char arq[], tAmigo vet[]);

19 19 Segunda-feira, 22 de Outubro de 2007 Aula 15 – Tipos de Dados Avançados DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (4) orCut: Persistência de Dados b.3) Faça uma função que receba o nome de um arquivo, e que retorne um vetor, com apenas os elementos que não estão vazios tAmigo * recuperaArqAmigosValidos(char arq[]); b.4) Faça uma função que receba um vetor de tAmigo, e o nome de arquivo, e que grave APENAS os elementos válidos (cujos campos ocupado forem iguais a 1) desse vetor no arquivo void gravaArqAmigos(tAmigo vet[], char arq[]); ATENÇÃO: Projetos que nem sequer compilem, serão desprezados Faça um teste, usando o arquivo index.c, que contém vetores com valores já inicializados QUERO RECEBER: o projeto completo, independente da parte que você trabalhou, contendo um teste real, e rodando, no arquivo index.c b.5) Faça uma função que receba o nome de um arquivo, e que gere uma lista encadeada dos elementos válidos (ou seja, que contiverem ocupado igual a 1) desse arquivo. (Obs: só Juliana e Rafael devem implementar o b.5) tAmigo * recuperaArqAmigosEmListaLigada(char arq[]);// Juliana; tUsuario * recuperaArqUsuariosEmListaLigada(char arq[]);// Rafael;


Carregar ppt "Capítulo 1 – Conceitos Básicos 1 Segunda-feira, 22 de Outubro de 2007 UNIBRATEC – Ensino Superior e Técnico em Informática Aula 15 – Tipos de Dados Avançados."

Apresentações semelhantes


Anúncios Google