Atps Estrutura de Dados

29
UNIVERSIDADE ANHANGUERA UNIVERSIDADE ANHANGUERA CENTRO DE EDUCAÇÃO A DISTÂNCIA FACULDADE DE NEGOCIOS DE BH (FNBH) CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Luciano Souza Mendes RA: 7983723790 Marco Antônio Ferreira de Oliveira RA: 7983716585 Taciana Lopes De Deus RA: 1299516284 ESTRUTURA DE DADOS.

description

Atps com programa da empresa VOEBEM

Transcript of Atps Estrutura de Dados

UNIVERSIDADE ANHANGUERA

UNIVERSIDADE ANHANGUERA

CENTRO DE EDUCAÇÃO A DISTÂNCIA FACULDADE DE NEGOCIOS DE BH (FNBH)

CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Luciano Souza Mendes RA: 7983723790

Marco Antônio Ferreira de Oliveira RA: 7983716585

Taciana Lopes De Deus RA: 1299516284

ESTRUTURA DE DADOS.

Belo Horizonte 2014

UNIVERSIDADE ANHANGUERA

UNIVERSIDADE ANHANGUERA

CENTRO DE EDUCAÇÃO A DISTÂNCIA FACULDADE DE NEGOCIOS DE BH (FNBH)

CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

ESTRUTURA DE DADOS.

Luciano Souza Mendes RA: 7983723790

Marco Antônio Ferreira de Oliveira RA: 7983716585

Taciana Lopes De Deus RA: 1299516284

Belo Horizonte 2014

UNIVERSIDADE ANHANGUERA

Descrever e exemplificar o que é alocação estática de memória.É um processo que consiste em solicitar/utilizar memória durante o processo de execução de um programa de computador. A alocação de memória no computador pode ser dividida em dois grupos principais: Alocação Estática: os dados tem um tamanho fixo e estão organizados sequencialmente na memória do computador. Um exemplo típico de alocação estática são as variáveis globais e arrays. Alocação Dinâmica: os dados não precisam ter um tamanho fixo, pois podemos definir para cada dado quanto de memória que desejamos usar. Sendo assim vamos alocar espaços de memória (blocos) que não precisam estar necessariamente organizados de maneira sequencial, podendo estar distribuídos de forma dispersa (não ordenada) na memória do computador. Na alocação dinâmica, vamos pedir para alocar/desalocar blocos de memória, de acordo com a nossa necessidade, reservando ou liberando blocos de memória durante a execução de um programa. Para poder “achar” os blocos que estão dispersos ou espalhados na memória usamos as variáveis do tipo Ponteiro (indicadores de endereços de memória). A alocação é estática, pois acontece antes que o programa comece a ser executado:

char c; int i; int v[10];

Às vezes, a quantidade de memória a alocar só se torna conhecida durante a execução do

programa. Para lidar com essa situação é preciso recorrer à alocação dinâmica de memória. A

alocação dinâmica é gerenciada pelas funções malloc e free, que estão na biblioteca stdlib. 

Para usar esta biblioteca, é preciso dizer :

#include <stdlib.h> 

A função  malloc  (abreviatura de memory allocation) aloca um bloco de bytes consecutivos

na memória do computador e devolve o endereço desse bloco.  O número de bytes é

especificado no argumento da função. No seguinte fragmento de código, malloc aloca 1 byte:

char *ptr;

ptr = malloc( 1);

scanf( "%c", ptr);

O endereço devolvido por malloc é do tipo "genérico"  void *.   O programador armazena

esse endereço num ponteiro de tipo apropriado. No exemplo acima, o endereço é armazenado

num ponteiro-para-char.

1

UNIVERSIDADE ANHANGUERA

Para alocar um tipo-de-dado que ocupa vários bytes, é preciso recorrer ao operador sizeof,

que diz quantos bytes o tipo especificado tem:

typedef struct {

int dia, mes, ano;

} data;

data *d;

d = malloc( sizeof (data));

d->dia = 31; d->mes = 12; d->ano = 2008;

[As aparências enganam: sizeof não é uma função.]

Overhead. Cada invocação de malloc aloca um bloco de bytes consecutivos maior que o

solicitado: os bytes adicionais são usados para guardar informações administrativas sobre o

bloco de bytes (essas informações permitem que o bloco seja corretamente desalocado, mais

tarde, pela função free).  O número de bytes adicionais pode ser grande, mas não depende do

número de bytes solicitado no argumento de malloc.  Não é recomendável, portanto, invocar

malloc repetidas vezes com argumento muito pequeno.  É preferível alocar um grande bloco

de bytes e retirar pequenas porções desse bloco na medida do necessário.

int dia, mes, ano;

} data;

int main( void) {

printf( "sizeof (data) = %d\n", sizeof (data));

printf( "sizeof (data *) = %d\n", sizeof (data *));

return 0;

}

A memória é finita:

Se a memória do computador já estiver toda ocupada, malloc não consegue alocar mais

espaço e devolve NULL. Convém verificar essa possibilidade antes de prosseguir:

2

UNIVERSIDADE ANHANGUERA

ptr = malloc( sizeof (data));

if (ptr == NULL) {

printf( "Socorro! malloc devolveu NULL!\n");

exit( EXIT_FAILURE);

}

A codificação frequente e repetida desse teste é cansativa para o programador e desvia a

atenção do leitor. Por isso, vamos usar a seguinte versão alternativa de malloc:

void *mallocc( size_t nbytes)

{

void *ptr;

ptr = malloc( nbytes);

if (ptr == NULL) {

printf( "Socorro! malloc devolveu NULL!\n");

exit( EXIT_FAILURE);

}

return ptr;

}

O parâmetro de mallocc é do tipo size_t.  Em muitos computadores, size_t é equivalente

a unsigned   int .

Fazer um programa em Linguagem C que implemente uma estrutura

avião(structaviao), permitindo o cadastro e a exibição:

#include 

#include 

#include 

struct aviao 

3

UNIVERSIDADE ANHANGUERA

char modelo[8]; 

char fabricante[30]; 

int passageiros; 

float comprimento; 

float altura; 

float velocidade; 

float altitude; 

char motor [10]; 

struct aviao *prox; 

}; 

struct aviao *aux, *inicio = NULL, *final = NULL; 

struct aviao* cria(void) 

return NULL; 

 struct aviao* insere_final() 

int x; 

printf("Entre com um numero inteiro: "); 

scanf("%i",&x);  

aux = (struct aviao*) malloc (sizeof(struct aviao)); 

aux->passageiros = x; 

aux -> prox = (struct aviao *) NULL; 

if(inicio == NULL) 

inicio = final = aux; 

else 

final -> prox = aux; 

final = aux; 

return inicio; 

}  

int lista_vazia(struct aviao *lista) 

if(lista == NULL) 

return 1; 

else 

return 0; 

}  

void visualiza_lista_final(struct aviao *lista) 

4

UNIVERSIDADE ANHANGUERA

{  

if(!lista_vazia(lista)) 

aux = lista; 

while(aux != (struct aviao *) NULL) 

printf("Valor da Lista: %i\n", aux->passageiros); 

aux = aux -> prox; 

} } 

else 

printf("\nTentou imprimir uma lista vazia!");

getch();}  struct aviao* busca(struct aviao* lista, int busca) { bool achou = 0; if(!lista_vazia(lista)) { for(aux=lista;aux!=NULL;aux=aux->prox) { if(aux->passageiros == busca) printf("Valor encontrado.\n"); achou = 1; } } 

if(!achou) printf("Valor não encontrado.\n"); } else { printf("\nTentou buscar de uma lista vazia"); } getch(); return NULL; }  struct aviao* excluir(struct aviao *lista, int valor) { struct aviao *ant = NULL; aux = lista; 

if(!lista_vazia(lista)) { while(aux!= NULL && aux->passageiros != valor) { 

5

UNIVERSIDADE ANHANGUERA

ant = aux; aux = aux->prox; }  if(aux == NULL) { printf("\nNao foi possivel a exclusao. Elemento não encontrado!"); getch(); return lista; }  if(ant == NULL) lista = aux->prox; else ant->prox = aux->prox; free(aux); printf("Elemento removido com sucesso!\n"); getch(); return lista; } else { printf("\nTentou remover de uma lista vazia"); getch(); return lista; } } 

Fazer um programa em Linguagem C que criem uma estrutura de dados voo(struct voo)para a empresa VOEBEM, que servirá para implementar funções para controle da lista dos voos:

#include #include #include 

void cadastrarVoo(); void consultaVoo(); void removeVoo(); 

struct Voo { int numerovoo, datavoo, horariovoo; char aeroportosaida[30], aeroportochegada[30], rota[20]; int tempovoo, passageiros; } 

6

UNIVERSIDADE ANHANGUERA

struct Voo voo; int main() { int opcao; 

REFAZ: printf("\n\n==================================="); printf("\n\n 1 - Cadastrar Voo"); printf("\n 2 - Consultar Voo"); printf("\n 3 - Excluir Voo"); printf("\n 0 - Sair"); printf("\n\n===================================\n"); scanf(" %i",&opcao); 

switch(opcao) { case 0: { return -1; break; } case 1: { cadastrarVoo(); goto REFAZ; break; } case 2: { consultaVoo(); goto REFAZ; break; } case 3: { removeVoo();goto REFAZ; break; } default: { printf("\n Opcao Invalida\n\n Digite Novamente\n\n"); goto REFAZ; break; } } getch(); return; } void cadastrarVoo() { printf("\nDigite o numero do voo\n"); 

7

UNIVERSIDADE ANHANGUERA

scanf("%i",&voo.numerovoo); 

printf("\nDigite a data do voo\n"); scanf("%i",&voo.datavoo); 

printf("\nDigite o horario de saida do voo\n"); scanf("%i",&voo.horariovoo); 

printf("\nDigite o aeroporto de saida do voo\n"); scanf("%s",&voo.aeroportosaida); 

printf("\nDigite o aeroporto de chegada do voo\n"); scanf("%s",&voo.aeroportochegada);printf("\nDigite a rota do voo\n"); 

scanf("%s",&voo.rota); 

printf("\nDigite o tempo estimado do voo\n"); 

scanf("%i",&voo.tempovoo); 

printf("\nDigite o numero de passageiros do voo\n"); 

scanf("%i",&voo.passageiros); 

printf("\n\n Voo Cadastrado com sucesso."); 

return; 

void consultaVoo() 

printf("\n\n Numero do Voo.: %i", voo.numerovoo); 

printf("\n\n Data de Saida do Voo.: %i", voo.datavoo); 

printf("\n\n Horario de Saida do Voo.: %i", voo.horariovoo); 

printf("\n\n Aeroporto de Saida.: %s", voo.aeroportosaida); 

printf("\n\n Aeroporto de Chegada.: %s", voo.aeroportochegada); 

printf("\n\n Rota do Voo.: %s", voo.rota); 

printf("\n\n Tempo estimado do Voo.: %i", voo.tempovoo); 

printf("\n\n Numero de passageiros a bordo.: %i", voo.passageiros); 

return; 

8

UNIVERSIDADE ANHANGUERA

void removeVoo() 

int numvoo; 

char exclui; 

NUMEROVOO:printf("\n Digite numero do Voo\n"); 

scanf("%i",&numvoo); 

if(numvoo == voo.numerovoo) 

printf("\n\n Deseja realmente excluir o voo? [y/n] "); 

scanf("%s",&exclui);if((exclui != 'y') && (exclui != 'n')) 

printf("\n Digitacao Incorreta"); 

goto NUMEROVOO; 

else 

if(exclui == 'y') 

voo.numerovoo = 0; 

voo.datavoo = 0; 

voo.horariovoo = 0; 

//voo.aeroportosaida = ''; 

//voo.aeroportochegada = ''; 

//voo.rota = ''; 

voo.tempovoo = 0; 

voo.passageiros = 0; 

printf("\n\n Voo %i Excluido com sucesso.", numvoo); 

return; 

else 

return; 

9

UNIVERSIDADE ANHANGUERA

else 

printf("\n Numero do voo nao existe\n"); 

return; 

return; 

Passo 3 (Equipe) 

Fazer um programa em LinguagemC que implemente a estrutura passagem (struct passagem)

para a empresa VOEBEM que servirá para implementar funções para controle da lista de

passagens aéreas vendidas. 

Implementar a função cadastrarPassagem() que deve permitir o cadastro de uma nova

passagem; 

Implementar a função consultaPassagem() que deve permitir obter informações sobre a

passagem com base na digitação do número da passagem. 

#include 

#include 

#include 

void cadastrarPassagem(); 

void consultaPassagem(); 

truct Passagem 

int numeropassagem, 

numerovoo, 

dataembarque, 

horarioembarque; 

char portaoembarque[30]; 

10

UNIVERSIDADE ANHANGUERA

}; 

struct Passagem pass; 

int main() 

int opcao; 

REFAZ: printf("\n\n==================================="); 

printf("\n\n 1 - Cadastrar Passagem"); 

printf("\n 2 - Consultar Passagem"); 

printf("\n 0 - Sair"); 

printf("\n\n===================================\n"); 

scanf(" %i",&opcao); 

switch(opcao) 

case 0: 

return -1; 

break; 

case 1: 

cadastrarPassagem(); 

goto REFAZ; 

break; 

case 2: 

consultaPassagem(); 

goto REFAZ; 

break; 

default: 

{printf("\n Opcao Invalida\n\n Digite Novamente\n\n"); 

goto REFAZ; 

break; 

11

UNIVERSIDADE ANHANGUERA

getch(); 

return; 

void cadastrarPassagem() 

printf("\nDigite o numero da passagem\n"); 

scanf("%i",&pass.numeropassagem); 

printf("\nDigite o numero do voo\n"); 

scanf("%i",&pass.numerovoo); 

printf("\nDigite a data do embarque\n"); 

scanf("%i",&pass.dataembarque); 

printf("\nDigite o horario de embarque\n"); 

scanf("%i",&pass.horarioembarque); 

printf("\nDigite o portao de embarque)

Fazer um programa em Linguagem C que implemente a estrutura taxiamento(structtaxiamento) para controlar a Liberação para Taxiamento das Aeronaves para decolagem na pista de voos. O taxiamento e as decolagens devem obedecer uma fila para não haver choques entre as aeronaves a decolar e que estão pousando.

//Biblioteca biblioteca.h

#include 

#include 

//estrutura para aviao

typedef struct {

int numeroVoo;

char modeloAviao;

char empresaAerea;

12

UNIVERSIDADE ANHANGUERA

char horarioSaida;

} taxiamento;

typedef struct tcelula{

taxiamento item;

struct tcelula *prox;

}ftcelula;

typedef struct {

ftcelula *frente;

ftcelula *tras;

}tfila;

void inicializaFila(tfila *fila);

void cadastrarTaxiamento(taxiamento x, tfila *fila);

int vaziaFila(tfila *fila);

void imprimeFila(tfila *f);

void autorizaTaxiamento(tfila *fila, taxiamento x);

//Classe main.c

#include "biblioteca.h"

int menuGeral(){ //abre função menu geral

int op;

printf("\t\t===Escolha uma opca===\n\n");

printf("\t\t1 - Controle taxiamento\n");printf("\t\t2 - Controle bagegem\n");

printf("\t\t0 - sair\n\n");

printf("\t\tEscolha uma opcao: ");

scanf("%d", &op);

printf("\n\n");

return op;

} // fecha funcao menu geral

13

UNIVERSIDADE ANHANGUERA

int main (){ //abre funçao meain

//variaveis gerais

int op, opV, opB;

//variaveis para recebeminto dos dados de voo

tfila f;

taxiamento t;

inicializaFila(&f); //inicializa a fila

op = menuGeral(); //recebe o parametro de menuGeral para iniciar o case.

switch (op){ //abre switch

case 1:

//recebendo dados de voo

//receber opcao de menu para cadastrar voo

printf("\t\t===Taxiamento Aéreo===\n\n");

printf("\t\t1 - Cadastrar Decolagem \n");

printf("\t\t2 - Ver sequência de decolagem\n");

printf("\t\t0 - sair\n\n");

printf("\t\tEscolha uma opcao: ");

scanf("%d", &opV);

printf("\n\n");

if (opV == 1){ // se a opcao for 1, ele ira recolher os dados do voo;

printf("informe o numero do voo");

scanf("%d", &t.numeroVoo);

printf("informe o modelo da aeronave");

scanf("%d", &t.modeloAviao);

printf("informe a empresa aérea");

scanf("%d", &t.empresaAerea);

printf("informe a hora de saida");

scanf("%d", &t.horarioSaida);

cadastrarTaxiamento(t, &f); //insere o voo cadastrado na fila de decolagem

} else

if (opV==2){

14

UNIVERSIDADE ANHANGUERA

autorizaTaxiamento (&f, t); //retira o voo da lista e imprime na tela para o cliente ver a

//sequencia de decolagens

Fazer um programa em Linguagem C que implemente a estrutura bagagem (structbagagem) .para o controle de armazenamento das bagagens no compartimento de cargasImplementara função cadastraBagagem() que deve permitir o cadastro de bagagens dospassageiros. O cadastro deve obedecer à disciplina de inserção dos dados LIFO (Last InFirst Out). Implementar a função recuperaBagagem() que deve resgatar as bagagens que foramempilhadas pela função cadastraBagagem().

#include 

#include 

// estrutura bagagem

struct bagagem

{

int codigoBag;

int numeroPassagem;

int numeroVoo;

int dataEmbarque;

int horaEmbarque;

int portaoEmbarque;

struct bagagem* prox; // ponteiro para o próximo

}; 

int main (int argc, char *argv[])

{

struct bagagem* inicio = NULL,*fim, *novo,*aux,*imprime; // ponteiro para a struct voo

int opcao = 0;

// enquanto for de 3

while(opcao != 3)

{

15

UNIVERSIDADE ANHANGUERA

printf("\n");

printf("[1] Cadastrar Bagagem \n");

printf("[2] Recuperar Bagagem \n");

printf("[3] Sair \n");

scanf("%d", &opcao);

if(opcao == 1)

{

// aloca memória

novo = (struct bagagem*)malloc(sizeof(struct bagagem));

// atualiza fim do ponteiro

novo->prox = (struct bagagem*)NULL;

printf("\n");

printf("Digite

codigo da bagagem: ");

scanf("%d", &novo->codigoBag);

printf("Digite o numero da passagem: ");

scanf("%d", &novo->numeroPassagem);

printf("Digite o numero do Voo: ");

scanf("%d", &novo->numeroVoo); 

printf("Data do embarque: ");

scanf("%d", &novo->dataEmbarque); 

printf("Horario de Embarque: ");

scanf("%d", &novo->horaEmbarque); 

printf("Portao de embarque: ");

scanf("%d", &novo->portaoEmbarque); 

if(inicio==(struct bagagem*)NULL)

{

inicio = novo;

fim = inicio;

}

16

UNIVERSIDADE ANHANGUERA

else

{

//atribuindo o apontamento do primeiro registro para o ultimo da pilha

novo->prox = inicio;

//apontando o novo registro para o primeiro da pilha 

inicio = novo;

}

}

else if(opcao == 2)

// proximo_voo->prox = NULL;

// proximo_ponto aponta para o mesmo de ini_ponto, começa do início

imprime = inicio;

printf("\n");

// mostra todos os dados

// enquanto proximo_ponto for diferente de NULL

while(imprime != NULL)

{

printf(" Recuperar bagagem :\n Codigo: %d, Numero da Passagem: %d, Numero do Voo: %d,

Data de Embarque: %d, Horario de Embarque: %d, Portao de Embarque: %d \n", imprime-

>codigoBag, imprime->numeroPassagem,imprime->numeroVoo, imprime-> dataEmbarque,

imprime->horaEmbarque, imprime->portaoEmbarque);

imprime = imprime->prox; // aponta para o próximo

}

}

}

/*

O próximo é NULL porque só sabemos que uma lista encadeada chegou

ao fim quando o próximo elemento aponta para NULL

17

UNIVERSIDADE ANHANGUERA

*/

return 0;Fazer um programa em Linguagem C que implemente um levantamento de rotas entre uma Cidade A e uma Cidade B por meio de um Grafo, utilizando Matriz de Adjacência. Considerar um total de dez cidades e fazer a ligação entre elas considerando as distâncias e tempo voo. Para percorrer da Cidade A para a Cidade B, considerar como melhor opção a distância e o tempo de voo. A Figura 1 apresentada a seguir, representa um mapa de rotas de voos de cidades brasileiras. Considerar, por exemplo, o deslocamento entre a cidade de Belo Horizonte à Fortaleza. Podem-se considerar as seguintes rotas de voos:1. Belo Horizonte → Fortaleza.2. Belo Horizonte → São Luís → Fortaleza.3. Belo Horizonte → Recife → Fortaleza.

4. Belo Horizonte → Salvador → Recife → Fortaleza.

a distância e o tempo de voo.

#include 

#include 

#include 

#include 

//prototipo das fun‡oes

void zerarVariaveis();

void montarGrafo();

void verificarAdjacencia();

void imprimirMatriz();

void comecarDeNovo();

int retornaIndice(char nome[30]);

void insereNoVetor(char nome[30]);

void caminhamentoAmplitude();

void caminhamentoProfundidade();

int pegaVerticeAdjNaoVisitado(int indice);

void zeraAsVisitas();

void insereNaFila(int indice);

int filaVazia();

int removeDaFila();

18

UNIVERSIDADE ANHANGUERA

void push(int indice);

int pop();

int pilhaVazia();

//defini‡Æo da estrutura de dados e das variaveis globais0

#define MAXNOS 10

#define PARES 5

int matriz[MAXNOS][MAXNOS];

struct no

{

int visitado;

char descricao[30];

};

struct no vetor[MAXNOS];

int quantosNos;

struct pilha

{

int vetor[MAXNOS]; //MAXNOS + 1 para evitar de causar overflow

int topo;

};

struct pilha p;

struct fila

{

int vetor[MAXNOS]; //MAXNOS + 1 para evitar de causar overflow

int inicio, fim, quantos;

};

struct fila f;

19

UNIVERSIDADE ANHANGUERA

void push(int indice)

{

if (p.topo == MAXNOS)

puts (" Overflow na Pilha");

else

{

p.topo++;

p.vetor[p.topo] = indice;

}

}//push

int pop()

{

int indice = -1;

if (p.topo == -1)

puts ("Underflow na Pilha");

else

{

indice = p.vetor[p.topo];

p.topo--;

}

return (indice);

}//pop

int pilhaVazia()

{

int vazio = 1;

if (p.topo > -1)

vazio = 0;

return vazio;

}

20

UNIVERSIDADE ANHANGUERA

void insereNaFila(int indice)

{

if (f.quantos == MAXNOS)

puts ("Overflow na Fila");

else

{

if (f.fim == (MAXNOS-1))

f.fim = 0;

else

f.fim++;

f.vetor[f.fim] = indice;

f.quantos++;

}

}

int filaVazia()

{

int vazio = 1;

if (f.quantos > 0)

vazio = 0;

return vazio;

}

int removeDaFila()

{

int indice = -1;

if (f.quantos == 0)

puts ("Pau Geral de Underflow na Fila");

else

{

indice = f.vetor[f.inicio];

21

UNIVERSIDADE ANHANGUERA

f.quantos--;

if (f.inicio == (MAXNOS-1))

f.inicio = 0;

else

f.inicio++;

}

return (indice);

}

void zerarVariaveis()

{

int i, j;

p.topo = -1;

f.inicio = f.quantos = 0;

f.fim = -1;

quantosNos = -1;

for (i = 0; i < MAXNOS; i++)

{

for (j = 0; j < MAXNOS; j++)

matriz[i][j] = 0;

vetor[i].visitado = 0;

strcpy(vetor[i].descricao, " ");

}

}

int pegaVerticeAdjNaoVisitado(int indice)

{

int coluna, retorna = -1;

for (coluna = 0; coluna

22

UNIVERSIDADE ANHANGUERA

Referências bibliográficas:

1 <https://docs.google.com/open?id=0B_uLQd5hdqlWdU9tQi1yS1pTQXUzNEQ1d3Bsbk

ZBUQ>.

<https://docs.google.com/open?id=0B_uLQd5hdqlWUVV6N0FxbzdRZm1KT0d2Y282b

U1Zdw>

<https://docs.google.com/open?id=0B_uLQd5hdqlWQXdYT19jQUJUd2Vob1BYQ3dWZ

Ekydw>

<https://docs.google.com/open?id=0B_uLQd5hdqlWTVFzdzZRYTZSSDJRRm9hLVg1Rj

RxZw>

<https://docs.google.com/open?id=0B_uLQd5hdqlWcnBnQVk0YVpTUXFzUmMyc1N

WaVpvQQ>.

23