COS-121

Estrutura de Dados e Algoritmos

2 Semestre de 2014

Professor Ricardo Farias


Aula 04


Tópicos desta aula.

Linguagem C

Struct

Estrutura de dado hetêrogenea, usada para representar o que em outras linguagens é chamado de registro. Em outras palavras, é uma coleção de variáveis referenciada por um nome, que fornece uma maneira conveniente de se manter informações relacionadas agrupadas.
Cada uma das variáveis que compoem a struct é chamada de membro (ou campo) da struct.



Exemplo:
	struct Produto {
		int codigo;
		float preco;
	};

struct Dt_dma { int dia, mes, ano; };



Quando se declara a struct, um tipo de dado novo é criado.
Deve-se declarar a variável do tipo struct:
	struct Produto prod;   // prod é a variável do tipo struct Produto

	struct Dt_dma dt_nasc; // dt_nasc é uma variável do tipo struct Dt_dma



Para se atribuir valores aos campos da struct:
	prod.codigo = 104;  // atribuido o valor 104 ao campo codigo da variável prod

	dt_nasc.ano = 2009; // atribuido o valor 2009 ao campo ano da variável dt_nasc



Struct e Ponteiro
   struct Dt_dma *p;       // p é um ponteiro para registros do tipo Dt_dma
   struct Dt_dma  dt_nasc; // dt_nasc é uma variável do tipo Dt_dma
   p = &dt_nasc;           // p aponta para dt_nasc
   p-> ano = 2009;         // atribui o valor 2009 ao campo ano da variável dt_nasc
   (*p).ano = 2009;        // atribui o valor 2009 ao campo ano da variável dt_nasc

Observação:
O acesso ao membro de uma struct através de ponteiro utiliza o operador seta (hifem seguido do sinal maior).
O comando:
	p->ano = 2009;

equivale a:
	(*p).ano = 2009

Para dar um nome ao novo tipo de dado criado utiliza-se typedef:
   typedef struct Dt_dma data; 
   data  dt_nasc;  
   data *p;
   p = &dt_nasc;

Exemplo de codigo:
	#include 

	struct Produto{

		int cod;
		float preco;

	};


	void leProd(struct Produto *q){

		int i;

		for (i=0; i<3; i++){

			printf("Codigo? ");
			scanf("%d", &q->cod);
			printf("Preco? ");
			scanf("%f", &q->preco);
			q++;
		
		}

	}


	void mostraProd(struct Produto *q){

		int i;
	
		printf("Novo preco\n");
		for (i=0; i<3; i++){
	
			printf("Codigo: %d - Preco: %.2f\n",q->cod, q->preco);
			q++;
	
		}

	}


	void aumenta (struct Produto *p) {

		int i;

		// Aumentando o preco
		for (i=0; i<3; i++){
			p->preco *= 1.15;
			p++;
		}
	
	}


	void main(){

		struct Produto prod[3];

		leProd( & prod [0] );

		aumenta( & prod[0] );

		mostraProd( & prod[0] );
	
	}