Ir para conteúdo
Fórum Script Brasil

Jouy Durão

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre Jouy Durão

Jouy Durão's Achievements

0

Reputação

  1. EDIT: RESOLVIDO! Achei uma forma rápida e fácil, quem precisar só mandar pm. Oi! Sou novo no fórum, e já venho pedindo ajuda =P Mas é o seguinte, tenho que entregar esse exercício até quinta, e por me enrolar estudando cálculo, GA e física, acabei deixando pra última hora esse exercício! D: Esse é o cabeçalho do exercício: Escrever um programa para gerenciar passagens reservadas: O programa deve mostrar um menu com 4 opções, 1 - Reservar Passagem 2 - Cancelar Passagem 3 - Verificar Passagem Reservada 4 - Mostrar Passageiros A informação deve ser armazenada em uma lista, com nomes em ordem alfabética. Cada passageiro pode reservar apenas uma vez. O programa deve ser em C. Deve ser feito utilizando Listas Simplesmente Encadeadas. Estou utilizando o CodeBlocks. Como base, tenho o seguinte código: #include <stdio.h> #include <stdlib.h> typedef struct elemento{ int dado; struct elemento *proximo; } Elemento; typedef struct listasimples{ Elemento *inicio; int tamanho; } ListaSimples; ListaSimples *inicializaLista() { ListaSimples *l; l = (ListaSimples *)malloc(sizeof(ListaSimples)); l->inicio = NULL; l->tamanho = 0; return l; } void colocaDado(int d, ListaSimples *l, int pos){ Elemento *andarilho = l->inicio; Elemento *anterior = NULL; Elemento *novoDado; novoDado = (Elemento *)malloc(sizeof(Elemento)); novoDado->dado = d; int i = 0; while(andarilho != NULL && i < pos) { anterior = andarilho; andarilho = andarilho->proximo; i++; } if (anterior == NULL){ novoDado->proximo = l->inicio; l->inicio = novoDado; } else{ anterior->proximo = novoDado; novoDado->proximo = andarilho; } l->tamanho++; } int retiraDado(ListaSimples *l,int pos) { if (l->inicio == NULL){ printf("A lista esta vazia, não há o que retirar! \n"); return 0; } else { Elemento *andarilho = l->inicio; Elemento *anterior = NULL; Elemento *retirado; retirado = (Elemento *)malloc(sizeof(Elemento)); int i = 0; while(i < pos) { anterior = andarilho; andarilho = andarilho->proximo; i++; } retirado = andarilho; int saida = retirado->dado; if (anterior == NULL) { l->inicio = andarilho->proximo; } else{ anterior->proximo = andarilho->proximo; } free(retirado); return saida; } } void imprimeListaSimples(ListaSimples *l) { Elemento *iterador; iterador = l->inicio; if (iterador == NULL) { printf("Lista vazia!"); } else{ while (iterador != NULL) { printf("%i",iterador->dado); iterador = iterador->proximo; } } printf("\n"); } void limpaListaSimples(ListaSimples *l) { Elemento *iterador, *anterior; iterador = l->inicio; anterior = NULL; if (iterador == NULL) { printf("Lista vazia!"); } else{ while (iterador != NULL) { anterior = iterador; iterador = iterador->proximo; free(anterior); } } l->inicio = NULL; } int main(void) { ListaSimples *l = inicializaLista(); colocaDado(1,l,0); imprimeListaSimples(l); colocaDado(2,l,1); imprimeListaSimples(l); colocaDado(3,l,1); imprimeListaSimples(l); colocaDado(4,l,2); imprimeListaSimples(l); retiraDado(l,0); imprimeListaSimples(l); retiraDado(l,0); imprimeListaSimples(l); colocaDado(5,l,0); imprimeListaSimples(l); colocaDado(6,l,0); imprimeListaSimples(l); retiraDado(l,0); imprimeListaSimples(l); retiraDado(l,2); imprimeListaSimples(l); retiraDado(l,1); imprimeListaSimples(l); retiraDado(l,0); imprimeListaSimples(l); retiraDado(l,0); return 0; } e meu código está atualmente assim: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> typedef struct elemento{ char nome[20]; int dado; struct elemento *proximo; } Elemento; typedef struct listasimples{ Elemento *inicio; int tamanho; } ListaSimples; ListaSimples *inicializaLista() { ListaSimples *l; l = (ListaSimples *)malloc(sizeof(ListaSimples)); l->inicio = NULL; l->tamanho = 0; return l; } void colocaDado(char d, ListaSimples *l, int pos){ Elemento *andarilho = l->inicio; Elemento *anterior = NULL; Elemento *novoDado; novoDado = (Elemento *)malloc(sizeof(Elemento)); novoDado->nome[20] = d; int i = 0; while(andarilho != NULL && i < pos) { anterior = andarilho; andarilho = andarilho->proximo; i++; } if (anterior == NULL){ novoDado->proximo = l->inicio; l->inicio = novoDado; } else{ anterior->proximo = novoDado; novoDado->proximo = andarilho; } l->tamanho++; } int retiraDado(ListaSimples *l,int pos) { if (l->inicio == NULL){ printf("A lista esta vazia, não há o que retirar! \n"); return 0; } else { Elemento *andarilho = l->inicio; Elemento *anterior = NULL; Elemento *retirado; retirado = (Elemento *)malloc(sizeof(Elemento)); int i = 0; while(i < pos) { anterior = andarilho; andarilho = andarilho->proximo; i++; } retirado = andarilho; int saida = retirado->dado; if (anterior == NULL) { l->inicio = andarilho->proximo; } else{ anterior->proximo = andarilho->proximo; } free(retirado); return saida; } } void imprimeListaSimples(ListaSimples *l) { Elemento *iterador; iterador = l->inicio; if (iterador == NULL) { printf("Lista vazia!"); } else{ while (iterador != NULL) { //printf("%s",iterador->nome); puts(iterador->nome); iterador = iterador->proximo; } } printf("\n"); } void limpaListaSimples(ListaSimples *l) { Elemento *iterador, *anterior; iterador = l->inicio; anterior = NULL; if (iterador == NULL) { printf("Lista vazia!"); } else{ while (iterador != NULL) { anterior = iterador; iterador = iterador->proximo; free(anterior); } } l->inicio = NULL; } int main(void) { ListaSimples *l = inicializaLista(); int escolha=0; char name[20]; printf("Reservator v0.1\n"); printf("1 - Reservar Passagem\n2 - Cancelar Passagem\n3 - Verificar Passagem Reservada\n4 - Mostrar Passageiros\n"); while(escolha<1 || escolha>4) { scanf("%d",&escolha); } gets(name); colocaDado(name,l,0); imprimeListaSimples(l); colocaDado("ass",l,1); imprimeListaSimples(l); retiraDado(l,0); return 0; } Eu empaquei, e minhas dúvidas são as seguintes: 1) Como eu faço para enviar um nome, com espaços, para a lista??? 2) Como eu faço para a lista se organizar em ordem alfabética? (pensei em usar o strcmp, mas n sei como fazer isso junto da lista), 3) Como eu imprimo esses nomes da lista? Por favor, me ajudem :( To desesperado pois tenho prova de fisica na quinta, mesmo dia da entrega desse exercício que vale nota..
×
×
  • Criar Novo...