Você está na página 1de 26

1.

INTRODUO
ESSA PARTE DA ATPS DESTINADA A COMPREENDERMOS ALOCAO
DINMICA
DE
MEMRIA:
CONCEITO,
FUNES
E
APLICAES.
DESENVOLVIMENTO DE FILAS E PILHAS COM ALOCAO DINMICA. GRAFOS:
CONCEITO, DEFINIO, TIPOS, APLICAES.

RELATRIO 3 - FILAS E PILHAS


PROGRAMA EM C PARA A ESTRUTURA TAXIAMENTO:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct taxiamento
{
int numeroVoo;
int horarioSaida;
char modeloAeronave[10];
char empresaAerea[10];

struct taxiamento * prox; // ponteiro para o prximo


};

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


{
struct taxiamento * inicio = NULL,*fim, *novo,*aux,*imprime; // ponteiro para a struct voo
int opcao = 0;
while(opcao != 3)
{
printf("\n");
printf("[1] Cadastrar Taxiamento\n");
printf("[2] Ordem de Autorizacao de Taxiamento \n");
printf("[3] Sair \n");
2

scanf("%d", &opcao);

if(opcao == 1)
{
// aloca memria
novo = (struct taxiamento*)malloc(sizeof(struct taxiamento));
// atualiza fim do ponteiro
novo->prox = (struct taxiamento*)NULL;

printf("\n");
printf("Digite o numero do voo: ");
scanf("%d", &novo->numeroVoo);
printf("Modelo da aeronave: ");
scanf("%s", &novo->modeloAeronave);
printf("Empresa Aerea: ");
scanf("%s", &novo->empresaAerea);
printf("Horario de Saida: ");
scanf("%d", &novo->horarioSaida);

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


{
inicio = novo;
fim = inicio;
}

else
3

{
//atribuindo o apontamento do ultimo registro para o novo
fim->prox = novo;
//apontando o ultimo registro como fim
fim = novo;
}

else if(opcao == 2)
{

// proximo_voo->prox = NULL;
// proximo_ponto aponta para o mesmo de ini_ponto, comea do incio
imprime = inicio;
printf("\n");
printf(" Ordem de decolagem:");
// mostra todos os dados
// enquanto proximo_ponto for diferente de NULL
while(imprime != NULL)
{
printf(" \n Voo numero: %d \n, Modelo Aeronave: %s \n, Empresa Aerea: %s \n, Horario de
Saida: %d\n", imprime->numeroVoo, imprime->modeloAeronave,imprime->empresaAerea,
imprime-> horarioSaida);
imprime = imprime->prox; // aponta para o prximo
}
}
4

}
/*
O prximo NULL porque s sabemos que uma lista encadeada chegou
ao fim quando o prximo elemento aponta para NULL
*/
return 0;
};

PROGRAMA EM C PARA A ESTRUTURA BAGAGEM:


#include<stdio.h>
5

#include<stdlib.h>
#include<conio.h>

struct bagagem
{
int cod_bag,num_pas,num_voo,data_emb,hor_emb,port_emb;
struct bagagem *prox;
};

struct bagagem* cria(void)


{
return NULL;
}
struct bagagem* push(struct bagagem *p ,int cod_bag, int num_pas,int num_voo ,int
data_emb ,int hor_emb,int port_emb)
{
struct bagagem *aux = (struct bagagem*)malloc(sizeof(struct bagagem));
aux->cod_bag = cod_bag;
aux->num_pas = num_pas;
aux->num_voo = num_voo;
aux->data_emb = data_emb;
aux->hor_emb = hor_emb;
aux->port_emb = port_emb;

aux->prox = p;
p = aux;
6

return aux;
}
int pilha_vazia(struct bagagem *p)
{
if(p == NULL)
return 1;
else
return 0;
}
struct bagagem *pop(struct bagagem *p)
{
int cod_bag;
struct bagagem *aux;
if(!pilha_vazia(p))
{
aux = p;
cod_bag = p->cod_bag;
p = p->prox;
free(aux);
printf("\nBagagem %i removida com sucesso.",cod_bag);
getche();
return p;
}
else
{
printf("\nNao existe bagagem para remocao!");
getche();
7

return NULL;
}
}

struct bagagem *resbagagem(struct bagagem *p , int codigobagagem)


{
struct bagagem *novo;
if(!pilha_vazia(p))
{
for(novo = p; novo != NULL; novo=novo->prox)
{
if ( codigobagagem == novo ->cod_bag)
{
printf("Codigo Bagagem: %i\n", novo -> cod_bag);
printf("Numero da Passagem: %i\n", novo -> num_pas);
printf("Numero do voo: %i\n", novo -> num_voo);
printf("Data Embarque: %i\n", novo -> data_emb);
printf("Horario Embarque: %i\n", novo -> hor_emb);
printf("Portao Embarque: %i\n", novo -> port_emb);
getche();
}
}
}
else
{
printf("\nNenhuma bagagem cadastrada!");
getche();
8

return NULL;
}
}
main()
{
struct bagagem *p;
int op, valor, retorno , cod_bag,num_pas,num_voo,data_emb,hor_emb,port_emb;
int codigobagagem;
p = cria();
while(op!=4)
{
system("cls");
printf("\nPROGRAMA EM C PARA A ESTRUTURA BAGAGEM\n\n");
printf("\nDigite 1 para Inserir a Bagagem");
printf("\nDigite 2 para Recuperar a Bagagem");
printf("\nDigite 3 para Remover uma Bagagem");
printf("\nDigite 4 para SAIR");
printf("\nOpcao: ");
scanf("%i",&op);

switch(op)
{
case 1:
printf("\nEntre com o codigo da Bagagem: ");
scanf("%i",&cod_bag);
printf("\nEntre com o numero da Passagem: ");
scanf("%i",&num_pas);
9

printf("\nEntre com o numero do Voo: ");


scanf("%i",&num_voo);
printf("\nEntre com a Data de Embarque: ");
scanf("%i",&data_emb);
printf("\nEntre com o Horario de Embarque: ");
scanf("%i",&hor_emb);
printf("\nEntre com o Portao de Embarque: ");
scanf("%i",&port_emb);
p = push(p,cod_bag,num_pas,num_voo,data_emb,hor_emb,port_emb);
break;
case 2:
printf("Insira o codigo da Bagagem que deseja Recuperar:");
scanf("%i",&codigobagagem);
resbagagem(p , codigobagagem); break;

case 3:
p = pop(p);
break;
case 4:
exit(1);break;
}

}
}

10

11

RELATRIO 4 - GRAFOS
PROGRAMA EM C PARA A ESTRUTURA GRAFOS
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
12

#define clrscr() system("cls")

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();

#define MAXNOS 10
#define PARES 5

int matriz[MAXNOS][MAXNOS];
struct no
{
int visitado;
13

char descricao[30];
};
struct no vetor[MAXNOS];
int quantosNos;

struct pilha
{
char vetor[MAXNOS+1][30];
int topo;
};
struct pilha p;

struct fila
{
int vetor[MAXNOS+1];
int inicio, fim, quantos;
};
struct fila f;

void insereNaFila(int indice)


{
if (f.quantos == MAXNOS)
puts ("Pau Geral de Overflow na Fila");
else
{
if (f.fim == (MAXNOS-1))
f.fim = 0;
14

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 = -999;
if (f.quantos == 0)
puts ("Pau Geral de Underflow na Fila");
else
{
indice = f.vetor[f.inicio];
f.quantos--;
if (f.inicio == (MAXNOS-1))
f.inicio = 0;
else
15

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 <= quantosNos; coluna++)
{
if ((matriz[indice][coluna]==1) && (vetor[coluna].visitado == 0))
16

{
retorna = coluna;
break;
}
}
return (retorna);
}

void zeraAsVisitas()
{
for (int i = 0; i < MAXNOS; i++)
vetor[i].visitado = 0;
}

int retornaIndice(char nome[30])


{
int i = 0, indice = -1;
int achou = 0;

while ((i <= quantosNos) && (!achou))


{
if(strcmp(nome, vetor[i].descricao) == 0)
{
achou = 1;
indice = i;
}
else
17

i++;
}
return indice;
}

void insereNoVetor(char nome[30])


{
quantosNos++;
strcpy(vetor[quantosNos].descricao, nome);
}

void montarGrafo()
{
clrscr();
puts("\nMontar Grafo");
int i, indice1, indice2, indice3;
char nome1[30], nome2[30], nome3[30], nome4[30], nome5[30], nome6[30], nome7[30],
nome8[30], nome9[30], nome10[30], dist_voo[10];
for (i = 0; i < PARES; i++)
{
printf("\nEntre com o nome da %do. cidade de origem: ", i+1);
gets(nome1);
printf("\nEntre com o nome do %do. cidade de destino: ", i+1);
gets(nome2);
printf("\nEntre com a distancia entre as %do. cidades: ", i+1);
gets(dist_voo);
indice1 = retornaIndice(nome1);
18

if (indice1 == -1)
{
insereNoVetor(nome1);
indice1 = retornaIndice(nome1);
}
indice2 = retornaIndice(nome2);
if (indice2 == -1)
{
insereNoVetor(nome2);
indice2 = retornaIndice(nome2);
}
indice3 = retornaIndice(dist_voo);
if (indice3 == -1)
{
insereNoVetor(dist_voo);
indice3 = retornaIndice(dist_voo);
}
matriz[indice1][indice2] = 1;
}
}
void verificarAdjacencia()
{
clrscr();
puts("\nVerificar se existe rota");
int i, indice1, indice2;
char nome1[30], nome2[30];
printf("\nEntre com o nome da 1o cidade: ");
19

gets(nome1);
printf("\nEntre com o nome da 2o cidade: ");
gets(nome2);
indice1 = retornaIndice(nome1);
indice2 = retornaIndice(nome2);

if ((indice1 == -1) || (indice2 == -1))


puts("Nao existe rota entre essas cidades");
else
{
if (matriz[indice1][indice2] == 1)
{
puts("Existe rota entre essas cidades");
}
else
puts("Nao existe rota entre essas cidades");
}
}

void caminhamentoAmplitude()
{
int indice, indiceAdj;
char nome[30];
clrscr();
puts("\nCaminhamento em Amplitude");
printf("\nEntre com o nome da cidade inicial: ");
gets(nome);
20

indice = retornaIndice(nome);
if (indice == -1)
puts("Esta cidade nao esta cadastrada");
else
{
printf("Existe rota entre essa cidades: ");
printf("%s ", vetor[indice].descricao);
vetor[indice].visitado = 1;
insereNaFila(indice);
while (!filaVazia())
{
indice = removeDaFila();
indiceAdj = pegaVerticeAdjNaoVisitado(indice);
while (indiceAdj != -1)
{
printf("%s ", vetor[indiceAdj].descricao);
vetor[indiceAdj].visitado = 1;
insereNaFila(indiceAdj);
indiceAdj = pegaVerticeAdjNaoVisitado(indice);
}
}
}
printf("\n");
zeraAsVisitas();
}
void comecarDeNovo()
{
21

clrscr();
puts("\nComecar Tudo de Novo");
zerarVariaveis();
}

int main()
{
char c, op = '1';
zerarVariaveis();
while (op != '0')
{
clrscr();
puts("

ROTAS ENTRE CIDADES\n\n");

puts("1. Montar grafo");


puts("2. Verificar se existe rota entre duas cidades:");
puts("3. Verificar se existe rota entre varias cidades");
puts("4. Comecar de novo");
puts("0. Sair");
printf("Entre com sua opcao: ");
op = getche();
switch(op)
{
case '1': montarGrafo();

break;

case '2': verificarAdjacencia();

break;

case '3': caminhamentoAmplitude(); break;


case '4': comecarDeNovo();
case '0':

break;

break;
22

default : puts("\nOpcao invalida");


}
puts("\nPressione <ENTER> para continuar");
while ((c = getchar()) != '\n');
}
}

23

24

3. CONCLUSO
NESTAS ETAPAS DA ATPS APRENDEMOS A SOLUCIONAR PROBLEMAS ATRAVS
DA ALOCAO DINMICA DE MEMRIA: CONCEITO, FUNES E APLICAES.
DESENVOLVIMENTO DE FILAS E PILHAS COM ALOCAO DINMICA. GRAFOS:
CONCEITO, DEFINIO, TIPOS, APLICAES.

25

4. REFERENCIAS
1. TENENBAUM Aaron M, LANGSAM Yedidyah, AUGENSTEIN Moshe J, Estrutura de
Dados usando C.

26

Você também pode gostar