Alunos: Fbio Carvalho - Marco Tlio - Adriano - Sandra - David Nunes
Sumrio Tipos de dados - Registro Tipos de dados - Unio Tipos de dados - Conjunto Tipos de dados - Ponteiro Tipos de dados - Registro Um registro uma coleo de variveis, possivelmente de tipos diferentes. Cada uma dessas variveis um campo de registro. Na linguagem C, registros so conhecidos como structs (abreviatura de structures). Ex1: Definio e manipulao de structs. O exemplo abaixo declara um registro x com trs campos inteiros: struct { int dia, ms, ano; }x; Tipos de dados - Registro uma boa ideia dar um nome a estrutura, abaixo utilizaremos o nome dma como exemplo. struct dma { int dia, ms, ano; }x; struct dma x; /*um registro x do tipo dma*/ struct dma y; /*um registro y do tipo dma*/ Tipos de dados - Registro Utilizando o operador (.) para atribuir valores aos campos do registro: x.dia = 31; x.ms = 12; x.ano = 2014; Como declaramos dma tambm como y, possvel criar outra estutura no caso, Y, recebendo tambm os dados dia, ms e ano. y.dia = 18; y.ms = 10; y.ano = 2014; Tipos de dados - Unio Unio so parecidas com estruturas, mas h uma diferena fundamental: Nas unies, todos os elementos ocupam o mesmo espao de memria. Por isso, s possvel acessar um elemento por vez, j que uma mudana em um elemento causara mudana em todos os outros. A definio e a declarao de unies igual das estruturas, trocando a palavra struct por union. Os membros de uma unio podem ser de qualquer tipos de dado. Apenas um membro e, portanto, um tipo de dado, pode ser referenciado a cada vez. Tipos de dados - Unio Uma unio declarada com a palavra-chave union no mesmo formato de uma estrutura: union numero { int x; char y; }; A declarao acima indica que nmero do tipo union com os membros int x e char y. Tipos de dados - Unio Vantagens Economia de espao j que guardam-se vrias variveis no mesmo espao. Proporcionam flexibilidade de programao. Tipos de dados - Conjuntos Um tipo conjunto (set) aquele cujas variveis podem armazenar colees no-ordenadas de valores distintos de algum tipo ordinal chamado de seu tipo bsico. Diagrama sinttico para o tipo conjunto: --> set of --> tipo bsico --> Tipos de dados - Conjuntos O exemplo seguinte mostra a definio de um conjunto e algumas de suas variveis: type cores = (vermelho, azul, verde, amarelo, laranja, branco, preto); conjcores = set of cores; var conj1, conj2 : conjcores; Valores constantes podem ser atribudos s variveis conj1 e conj2, como em: conj1 := [vermelho, azul, verde, amarelo, branco]; conj2 := [preto, azul]; Tipos de dados - Conjuntos De maneira geral, conjuntos so usados para simplificar e para abreviar expresses booleanas OR compostas. Por exemplo: if (ch = a) or (ch = e) or (ch = i) or (ch = o) or (ch = u) pode ser substituda por: if ch in [ a , e , i , o , u ] ... Tipos de dados - Conjuntos Normalmente, os conjuntos so armazenados como cadeias de bits na memria. Por exemplo, se um conjunto tiver o tipo bsico ordinal [ a .. p ], as variveis deste conjunto podero usar os primeiros 16 bits de uma palavra de mquina, com o bit 1 representando um elemento presente, e o bit 0 representando um elemento ausente. Usando tal esquema, o valor do conjunto: [ a , c , h , o ] seria representado como: 101000010000010 Tipos de dados - Ponteiro Um ponteiro ( ou apontador) um tipo especial de varivel destinado a armazenar endereos. Todo ponteiro pode ter o valor NULL que um endereo invlido. Se um ponteiro p armazena o endereo de uma varivel i, podemos dizer p aponta para i ou p o endereo de i. Se um ponteiro p tem o valor diferente de NULL ento *p o valor do objeto apontado por p. int i = 888; // i recebe o valor 888 int *p; //Declarao do ponteiro p p = &i; //Onde p aponta para i 888 i *p
888 Tipos de dados - Ponteiro A declarao para um ponteiro parecida com aquela que estamos habituados a fazer para variveis comuns, exceto que o nome do ponteiro deve ser prefixado com um asterisco. Considere: int main (){ int *pnumero1; int* pnumero2; /* O ponteiro pode ser declarado igualmente aos dois modelos cima *\ return 0; } Tipos de dados - Ponteiro J sabemos que ponteiros so utilizados para armazenar endereos em memria dos nossos dados. Ento, como fazemos para obter o endereo de memria correspondentes aos dados armazenados em uma varivel? Simples, usamos o operador address-of (&). Observe o exemplo: int main (){ int num = 10; int * pnum; pnum = # /*Aponta para o valor de num na memria que equivale a 10*\ return 0; } Tipos de dados - Ponteiro H vrios tipos de ponteiros: ponteiros para caracteres, ponteiros para inteiros, ponteiros para registros, ponteiros para ponteiros para inteiros etc. No exemplo a seguir utilizaremos o ponteiro p para um inteiro. Atravs da declarao: Exemplo 1: int x, i = 888; int *p; p = &i; x = *p + 999; Rastreio X i *p
888
888 888
999 1887 Tipos de dados - Ponteiro Exemplo 2: int main() { int num = 10; int* pnum;
pnum = #
cout << "Valor da varivel num: " << number <<endl << "Enredeo da varivel pnum: " << pnumber <<endl << "Valor da varivel pnum: " << pnumber << endl << "Valor do ponetiro pnum: " << *pnumber << endl;
return 0; } Tipos de dados - Ponteiro Exemplo 2: Resultado na tela