Baixe o app para aproveitar ainda mais
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; }
Compartilhar