Вы находитесь на странице: 1из 6

Estrutura de dados

Enviado por Fernando-Iatauro

12/10/2014

1252 Palavras

PGINA
6
DE 6

1. ALOCAO ESTTICA DE MEMRIA.


Ao desenvolver um programa em linguagem C normalmente temos que especificar
antes de comear rodar um programa as variveis que iremos utilizar, reservando espao
na memria para as mesmas, as variveis alocadas em posies fixas da memria so
chamadas de estticas, as variveis que so criadas e destrudas durante a execuo do
programa, so chamadas de dinmicas.
1.1. Formas de alocao
A alocao de memria em um computador pode ser classificada em dois grupos:
Alocao Esttica: Os dados tem tamanho fixo e esto organizados de forma sequencial
na memria do computador.
Alocao Dinmica: Os dados podem ter tamanho varivel j que podemos definir o
tamanho de memria que ser alocado para cada dado. Com isso podemos alocar blocos
de memria que podem no estar organizados sequencialmente.
1.2. Alocao Esttica de Memria
As estruturas de dados quando armazenam um conjunto de dados (exemplo: um
cadastro), podem ser organizadas de acordo com a maneira que os dados so inseridos e
retirados da memria do computador. Os tipos mais usuais de estrutura de dados so: as
listas lineares sequenciais (vetores simples), as filas, as pilhas e os deques.
Em C um tipo de dados:
typedef struct
{
char * tipologradouro;
char * logradouro;
char * numero;
char * complemento;
char * cidade;
} ENDERECO;
A declarao de uma struct feita de forma semelhante a um array.
Exemplo de declarao deum endereo com inicializao
ENDERECO a = {Avenida, Presidente Vargas, 1254, 6 andar c/j 61,
Fernandpolis}.
Diagrama de sintaxe:
A declarao de variveis pode ser feita de quatro formas, com a definio de tipo e a
declarao de variveis em instrues diferentes e na mesma instruo e com a palavra
reservada typedef.
1. Instrues diferentes:

struct ENDERECO { char * tipologradouro;


char * logradouro; char * numero; char * complemento; char * cidade; };
Struct ENDERECO a;
2. Mesma instruo:
Ssruct ENDERECO { char * tipologradouro;
char * logradouro; char * numero; char * complemento; char * cidade;
} a;
3. Instrues diferentes com typedef:
typedef struct { char * tipologradouro;
char * logradouro; char * numero; char * complemento; char * cidade; } ENDERECO;
ENDERECO a;
4. Mesma instruo com typedef:
typedef struct { char * tipologradouro;
char * logradouro; char * numero; char * complemento; char * cidade;
} a;
A inicializao de uma estrutura feita da mesma forma que um array.
ENDERECO a = {Avenida, Presidente Vargas, 1254, 6 andar c/j 61,
Fernandpolis}
O acesso aos dados efetuado por meio de identificadores.
Exemplo
a.tipologradouro = Avenida;
a.logradouro = Presidente Vargas;
Os operadores de acesso de uma estrutura so . e -> ou * o primeiro utilizado para
a passagem de valores o segundo para a atribuio por ponteiros.
Exemplo:
1. Operador ..struct ENDERECO a;
a.tipologradouro = Avenida;
a.logradouro = Presidente Vargas;
2. Operador ->.
struct ENDERECO *a;
a->tipologradouro = Avenida;
a->logradouro = Presidente Vargas;
3. Operador *.
struct ENDERECO *a;
(*a).tipologradouro = Avenida;
(*a).logradouro = Presidente Vargas;
A atribuio de valores pode ser feita membro a membro ou tambm pode ser feita entre
estruturas
Exemplo:
1. Membro a membro
struct ENDERECO a;
a.tipologradouro = Avenida;
a.logradouro = Presidente Vargas;
2. Entre estruturaas
struct ENDERECO a, b;
a = b;
a = * (&y);
1.2.1. Passagem para estruturas.
As estruturas podem ser utilizadas na passagem para funes, da mesma forma que uma
varivel elas podem ser passadas por valor ou por referencia (endereo de memria). De

acordo com o mtodo escolhido deve-se utilizar o operador correto, ou seja, . ponto
para passagem por valor e -> para a passagem por referencia.
1.2.1.1. Passagem por cpia de valor da estrutura.
Passa-se o nome da estrutura para a estrutura da funo implicando a copia do contedo
de uma estrutura para outra. Em detrimento as passagem de alinhamento, ou seja,
arrays, esse tipo de passagem no existe, ao passar o nome de um array para um array
local da funo no esta sendo feita a copia do contedo do array e sim uma copia do
endereo do array.
ESTRUTURAS: Recebe a copia da estrutura.
float produto(VETOR a);
ARRAYS: Recebe a copia doendereo do array.
float produto (float a[]);
Exemplos:
1. Passagem por cpia de valor de estrutura.
#include
typedef struct { float x;
float y;
} VETOR;
float produto (VETOR);
main(){
VETOR p = {5.0,10.0};
float p_resultado;
p_resultado = produto (p);
printf(Poduto = %f, p_resultado);
}
float produto (VETOR){
return (a.x * a.y);
}
2. Passagem por cpia de valor de endereo de array.
#include
float produto (float a);
main(){
float p[2] = {5.0,10.0};
float p_resultado;
p_resultado = produto (p);
printf(Produto = %f, p_resultado);
}
float produto (float a[]){
return (a[0] * a[1]);
}
1.2.1.2. Passagem por cpia de valor de endereo da estrutura.
Passa-se o endereo da estrutura para uma varivel de ponteiro da funo, com isso se
esta passando o mesmo endereo de memria da estrutura original para a funo. No
array a simples passagem do nome do array j a passagem do endereo de memria do
array, j que o compilador interpreta o nome do array como o apontador para ele
mesmo.
ESTRUTURAS: Recebe a copia do endereo da estrutura.
float produto(VETOR *a);
ARRAYS: Recebe a copia do endereo do array.
float produto(float *a);

Exemplos:
1. Passagem por cpia de valor de endereo de estrutura.
#include
typedef struct { float x;
float y;
} VETOR;
float produto (VETOR*);
main(){
VETOR p = {5.0,10.0};
float p_resultado;
p_resultado = produto (&p);
printf(Poduto = %f, p_resultado);
}
floatproduto (VETOR *a){
return (a->x * a->y);
}
2. Passagem por cpia de valor de endereo de array.
#include
float produto (float *a);
main(){
float p[2] = {5.0,10.0};
float p_resultado;
p_resultado = produto (p);
printf(Produto = %f, p_resultado);
}
float produto (float *a){
return (a[0] * a[1]);
}
1.2.1.3. Retorno de uma estrutura a partir de uma funo por valor.
O retorno de uma estrutura por valor nada mais do que retornar o nome da estrutura
pela funo, ou seja, retornar a copia dos valores da estrutura da funo para a estrutura
da funo que chamou a funo.
Exemplo:
#include
typedef struct {float x; float y; } VETOR;
VETOR somaesubtracao(VETOR);
main(){
VETOR p = {5.0,10.0};
VECTOR s;
s = somaesubtracao (p);
printf(Vetor soma e subtracao = {%f,%f},s.x, s.y);
}
VETOR somaesubtracao (VETOR a){
VETOR vs;
vs.x = a.x + a.y;
vs.y = a.x - a.y;
return vs;
}
1.2.1.4. Retorno por cpia de valor de endereo de estrutura.

Exemplo:
#include
typedef struct {float x; float y; } VETOR;
VETOR *somaesubtracao(VETOR);
main(){
VETOR p = {5.0,10.0};
VECTOR *s;
s = somaesubtracao (p);
printf(Vetor soma e subtracao = {%f,%f},s->x, s->y);
}
VETOR *somaesubtracao (VETOR a){
static VETOR vs;
vs.x = a.x + a.y;
vs.y = a.x - a.y;
return &vs;
}
2. PROGRAMA
Fazer um programa em Linguagem C que implemente uma estrutura avio(structaviao),
permitindo o cadastro e a exibio, com os seguintescampos:
modelo;
fabricante;
passageiros;
comprimento;
altura;
velocidade;
altitude;
motor
#include
#include
struct structaviao {
char modelo[100];
char fabricante[100];
int passageiros;
float comprimento;
float altura;
float velocidade;
float altitude;
char motor[100];
};
void saida(struct structaviao);
void entrada(struct structaviao*);
int main (){
struct structaviao a;
entrada(&a);
saida(a);

return 0;
}
void entrada(struct structaviao *b){
printf("Entre o modelo:");
scanf(" %[^\t\n]s", b->modelo);
printf("\nEntre o fabricante:");
scanf(" %[^\t\n]s", b->fabricante);
printf("\nEntre a quantidade passageiros:");
scanf("%d", &b->passageiros);
printf("\nEntre o comprimento:");
scanf("%f", &b->comprimento);
printf("\nEntre a altura:");
scanf("%f", &b->altura);
printf("\nEntre a velocidade:");
scanf("%f", &b->velocidade);
printf("\nEntre a altitude:");
scanf("%f", &b->altitude);
printf("\nEntre o motor:");
scanf(" %[^\t\n]s", b->motor);
}
void saida(struct structaviao b){
printf("\nModelo: %s \n", b.modelo);
printf("Fabricante: %s \n", b.fabricante);
printf("Quantidade de passageiros: %d \n", b.passageiros);
printf("Comprimento: %.2f \n", b.comprimento);
printf("Altura: %.2f \n", b.altura);
printf("Velocidade: %.2f \n", b.velocidade);
printf("Altitude: %.2f \n", b.altitude);
printf("Motor: %s \n", b.motor);
getch();
}

Вам также может понравиться