Buscar

Projeto de controlo de trafego aéreo

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

//Faltando libertar memoria
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <string.h>
typedef struct LISTA{
	char cidade[50];
	char piloto[50], copiloto[50], tri1[50], tri2[50], tri3[50];
	int distancia;
	int nump_e;		// numero de entradas de pessoas
	int nump_s;		// numero de saida de pessoas
	int embDesemb;	// tempo de embarque/desembarque de pessoas
	int bordo;		// tempo de saida do aviao apos todos os passageiros estiverem a bordo
	int menort;		// tempo total de um só cidade
	int totalp;		// numero total de pessoas transportadas, encontra-se na pilha
	int tempot;		// Duração total da viagem completa
	LISTA *prox;
}Lista;
void iniciar(Lista*, Lista*, Lista*);
void inserir(Lista*, Lista*, int, Lista*);	// função que faz introdução das 6 cidades iniciais
void inserirD(Lista*, Lista*, int, Lista*);	// funcao de insercão dos dodos
void imprimir(Lista*, Lista*, Lista*);	//imprimir tudo
void impcid(Lista*, Lista*, Lista*);	//imprimir por pesquisa de cidade
int addfila(Lista*, int);
int addpilha(Lista*, Lista*);
int selectionSort(Lista*);
main(){
	system("color 02");
	Lista *lista = (Lista*)malloc(sizeof(Lista));
	Lista *fila = (Lista*)malloc(sizeof(Lista));
	Lista *pilha = (Lista*)malloc(sizeof(Lista));
	
	if(!lista && !fila && !pilha){
		printf("Memoria Insuficiente!\n");
		exit(1);
	}
	iniciar(lista, fila, pilha);
	int op, k;
	
	printf("Entre a capacidade do aviao: ");
	scanf("%d", &k);
	
	inserir(lista, fila, k, pilha);
	
	do{
		system("cls");
		printf("\n\t\t\t\t<<<<<<MENU>>>>>>\n");
		printf("\n\t\t\t1 - Inserir Mais Uma Cidade\n");
		printf("\n\t\t\t2 - Imprimir Relatorio Completo\n");
		printf("\n\t\t\t3 - Pesquisar Dados Por Cidade\n");
		printf("\n\t\t\t0 - Terminar O Programa\n\n");
		printf("Escolhe a opcao: ");
		scanf("%d", &op);
		system("cls");
		
		switch(op){
			case 0: exit(1); break;
					
			case 1: inserirD(lista, fila, k, pilha);
					system("cls");
					imprimir(lista, fila, pilha);
					break;
					
			case 2: imprimir(lista, fila, pilha);
					break;
				
			case 3: impcid(lista, fila, pilha);
					break;
					
			default: printf("Escolhe outra opcao: \n");
		}
		
	}while(op);
	free(lista);
	free(fila);
	free(pilha);
}
void iniciar(Lista *lista, Lista *fila, Lista *pilha){
	lista->prox = lista;
	fila->prox = NULL;
	pilha->prox = NULL;
}
void inserir(Lista *lista, Lista*fila, int k, Lista *pilha){
	int q = 6;
	while(q){
		inserirD(lista, fila, k, pilha);
		q--;
	}
	system("cls");
	imprimir(lista, fila, pilha);
}
void inserirD(Lista *lista, Lista *fila, int k, Lista *pilha){
	Lista *novo = (Lista*)malloc(sizeof(Lista));
	if(!novo){
		printf("Sem Espaco na Memoria\n");
		return;
	}
	novo->prox = lista;	// para que se seja circular
	Lista *tmp = lista->prox;
		
	if(tmp == lista){
		printf("Entre o nome do Piloto: ");
		scanf("%s", novo->piloto);
		printf("Entre o nome do Copiloto: ");
		scanf("%s", novo->copiloto);
		printf("Entre o nome do tripulante 1: ");
		scanf("%s", novo->tri1);
		printf("Entre o nome do tripulante 2: ");
		scanf("%s", novo->tri2);
		printf("Entre o nome do tripulante 3: ");
		scanf("%s", novo->tri3);
		
		printf("\nEntre nome da cidade: ");
		scanf("%s", novo->cidade);
				
		novo->nump_e = addfila(fila, k);
		novo->menort = addpilha(pilha, fila);
		
		tmp->prox = novo;
		return;
	}
	printf("Entre o Nome Da Proxima Cidade: ");
	scanf("%s", novo->cidade);
	
	novo->nump_e = addfila(fila, k);
	novo->menort = addpilha(pilha, fila);
	
	while(tmp->prox != lista)
		tmp = tmp->prox;	
	tmp->prox = novo;
}
void imprimir(Lista *lista, Lista *fila, Lista *pilha){
	int teste = 0, x = 0, ll = 0, lll = 0, tes = 0, i = 1, j=1;
	
	Lista *tmp = lista->prox;
	Lista *tmp1 = fila->prox;
	Lista *tmp2 = pilha->prox;
	
	while(tmp != lista && tmp1){
		while(j){
			printf("Piloto: %s\nCopiloto: %s\nTripulante 1: %s\nTripulante 2: %s\nTripulante 3: %s\n\n", 
				tmp->piloto, tmp->copiloto, tmp->tri1, tmp->tri2, tmp->tri3);
				printf("\n_____________________________________________________________________________\n");
				printf("| V_Numero | Cidade| Tempo_voo | Ent_Pessoas | S_Pessoas | Emb/Demb| S_Cidade");
				printf("\n|____________________________________________________________________________\n");
	
			j--;
		}
		printf("| %.2d %8s %2d h %4d %4d %2dmn %2dmn \n", teste+1, tmp->cidade, 
			tmp1->distancia, tmp1->nump_e, tmp1->nump_s, tmp1->embDesemb, tmp1->bordo, tmp1->menort);
	
		tmp = tmp->prox;
		tmp1 = tmp1->prox;
		teste ++;
		getch();	
	}
	printf("|___________________________________________________________________________\n");
	if(teste == 0){
		printf("\nLista Vazia\n");
	}
	
	system("color 06");
	printf("\n\t\t\t Pessoas Tempo Trajetos ");
 printf("\n\t\t\t___________________________\n");
	
	while(tmp2){
		printf("\t\t\t|%4d | %4dmn | %4dmn |\n", tmp2->totalp, tmp2->tempot, tmp2->menort);
		
		while(i){
			ll = tmp2->totalp;
			lll = tmp2->tempot;
			i--;
		}
		tmp2 = tmp2->prox;
	}
	getch();
	printf("\t\t\t|_______|________|________|\n");
	x = selectionSort(pilha);
	
	system("color 03");
	printf("\nTotal De Pessoas Transportadas: %4d\n", ll);
	printf("Duracao Total Da Rota Efetuada (I e V): %4dmn\n", lll);
	printf("Menor Tempo De Trajeto: %dmn\n", x);
	getch();
}
int addfila(Lista *fila, int k){
	srand(time(NULL));
	Lista *novo = (Lista*)malloc(sizeof(Lista));
	if(!novo){
		printf("Memoria Insuficiente\n");
		exit(1);
	}
	int nA=0, Na=0;
	novo->prox = NULL;
	
	if(fila->prox == NULL){
		novo->distancia = 1+rand()%10;
		novo->nump_e = rand()%k;
		novo->nump_s = 0;
		novo->embDesemb = 10+rand()%10;
		novo->bordo = 15;
		novo->menort = novo->distancia*60 + novo->embDesemb + novo->bordo;
				
		fila->prox = novo;
		return 1;
	}
	Lista *tmp = fila->prox;
	
	while(tmp){
		nA += tmp->nump_e;
		Na += tmp->nump_s;
		tmp = tmp->prox;
	}
	
	novo->nump_s = rand()%(nA-Na);
	novo->nump_e = rand()%(k-((nA-Na)-(novo->nump_s)));
	novo->distancia = 1+rand()%10;
	novo->embDesemb = 10+rand()%10;
	novo->bordo = 15;
	novo->menort = novo->distancia*60 + novo->embDesemb + novo->bordo;
	
	tmp = fila->prox;
	while(tmp->prox != NULL){
		tmp = tmp->prox;
	}
	tmp->prox = novo;
}
int addpilha(Lista *pilha, Lista *fila){
	Lista *novo = (Lista*)malloc(sizeof(Lista));
	if(!novo){
		printf("Sem Espaca\n");
		exit(1);
	}
	int tp = 0, e=0, s=0, dc = 0;
	
	Lista *tmp = fila->prox;
	while(tmp){
		tp += tmp->nump_e;
		e += tmp->embDesemb;
		s += tmp->bordo;
		dc += tmp->distancia;
		novo->menort = tmp->menort;	//tmp->embDesemb + (tmp->distancia)*60 + tmp->bordo;
		tmp = tmp->prox;
	}
	novo->totalp = tp;
	dc = dc*60;
	novo->tempot = e+s+dc;
	
	Lista *cab = pilha->prox;
	pilha->prox = novo;
	novo->prox = cab;
}
void impcid(Lista *lista, Lista *fila, Lista *pilha){
	Lista *tmp = lista->prox;
	Lista *tmp1 = fila->prox;
	
	int teste = 0;
	char cid[50];
	
	printf("Entre o nome da cidade a pesquisar: ");
	scanf("%s", cid);
	
	printf("\nN-voo |Cidade |T-Voo |E-Pessoas |S_Pessoas |Emb/Demb |S-Cidade |dur.voo");
	printf("\n__________________________________________________________________________\n");
	while(tmp != lista && tmp1){
		if(strcmp(cid, tmp->cidade)==0){
			printf(" %.2d %8s %2dh %4d %4d %2dmn %2dmn %4dmn\n", teste+1, tmp->cidade, 
				tmp1->distancia, tmp1->nump_e, tmp1->nump_s, tmp1->embDesemb, tmp1->bordo, tmp1->menort);
			teste ++;
			getch();
		}
		tmp = tmp->prox;
		tmp1 = tmp1->prox;
		teste ++;
	}
	if(teste == 0){
		printf("\nLista Vazia\n");
		getch();
	}
	int x = selectionSort(pilha);
	printf("\n\nMenor tempo de Trajeto: %dmn\n", x);
	getch();
}
int selectionSort(Lista *pilha){
	int swap;
	Lista *aux1;
	Lista *aux2;
	
	for(aux1 = pilha->prox;
aux1!=NULL; aux1 = aux1->prox){
		
		for (aux2 = aux1->prox; aux2!=NULL; aux2 = aux2->prox){ 
			
			if(aux2->menort < aux1->menort){
				swap = aux2->menort;
				aux2->menort = aux1->menort;
				aux1->menort = swap;
			}
		} 
	}
	aux1 = pilha->prox;
	return aux1->menort;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais