Beispiel #1
0
int main()
{

    printf("\n\n\tAgenda de Auxulio ao Docente!\t\n\n");

    Agenda* ag = criaAgenda();
    Aula *a = criaAula();
    ///  a->adiavelAula = 2;
    Orientacao *o = criaOrientacao();
    Reuniao *r= criaReuniao();
    Evento *ev = criaEvento();
    Particular *pa = criaParticular();
    Atendimento *at = criaAtendimento();

    int idProfessor, novaprioridade, opcao;
    char opcao2, opcao3, *data, *hora, nomeProfessor[100];


    while ((opcao = menuOp1()) != 12)
    {
        switch(opcao)
        {
        case 1:

            printf("\n\t\tAgenda Criada! \n");
            printf("\nDigite o nome do professor: ");
            getchar();
            scanf(" %s", nomeProfessor);
            printf("\nDigite um inteiro para o Id: ");
            scanf(" %d", &idProfessor);
            ag = insereAgenda(ag,idProfessor, nomeProfessor);
            fflush(stdin);
            break;

        case 2:
            printf(" \t[a] - Insere Aula na agenda \n"); //Consulta por aula
            printf(" \t[b] - Insere Orientacao na agenda \n"); //Consulta por orientacao
            printf(" \t[c] - Insere Reuniao na agenda\n"); //Consulta por reuniao
            printf(" \t[d] - Insere Evento na Agenda \n"); //Consulta por evento
            printf(" \t[e] - Insere compromisso particular na Agenda \n");//Consulta por particular
            printf(" \t[f] - Insere Atendimento Agenda \n\n");

            printf(" \t[g] - Exibir Aula\n");
            printf(" \t[h] - Exibir Orientacao\n");
            printf(" \t[i] - Exibir Reuniao na agenda\n");
            printf(" \t[j] - Exibir Evento na Agenda \n");
            printf(" \t[k] - Exibir compromisso particular\n");
            printf(" \t[l] - Exibir Atendimento \n\n");

            printf(" \t[m] - Remove Aula \n");
            printf(" \t[n] - Remove Orientacao \n");
            printf(" \t[o] - Remove Reuniao\n");
            printf(" \t[p] - Remove Evento  \n");
            printf(" \t[q] - Remove compromisso particular\n");
            printf(" \t[r] - Remove Atendimento \n\n");

            /// Busca não funciona
            printf(" \t[s] - Buscar  Aula \n"); //Consulta por aula
            printf(" \t[t] - Buscar Orientacao \n"); //Consulta por orientacao
            printf(" \t[u] - Buscar Reuniao\n"); //Consulta por reuniao
            printf(" \t[v] - Buscar Evento  \n"); //Consulta por evento
            printf(" \t[w] - Buscar compromisso particular\n");//Consulta por particular
            printf(" \t[x] - Buscar Atendimento \n\n");
            printf(" \n\t opcao eh - ");
            fflush(stdin);
            scanf("%c", &opcao2);

            if(opcao2 == 'a')
            {
                int idAula, prioridadeAula, novaPrioridade, adiavelAula, statusAula;
                char data_aula[12], hora_aula[8], nome_da_disciplina[100], priori;
                ///Aula* insereAula(Aula* aula, int idAula, int adiavelAula, int statusAula, char *data_aula, char *hora_aula, char *nome_da_disciplina, int prioridadeAula
                printf("\nDigite o nome do professor: ");
                scanf(" %s", nomeProfessor);
                getchar();
                printf("\nDigite um inteiro para o Id: ");
                scanf(" %d", &idProfessor);
                ag = insereAgenda(ag,idProfessor, nomeProfessor);
                fflush(stdin);
                printf("\nDigite os dados sobre a Aula\n");
                fflush(stdin);
                printf("\n id: ");
                scanf(" %d", &idAula);
                fflush(stdin);
                printf("\n data: ");
                scanf(" %s", data_aula);
                getchar();
                fflush(stdin);
                printf("\n hora: ");
                scanf(" %s", hora_aula);
                getchar();
                fflush(stdin);
                printf("\n nome Disciplina: ");
                gets(nome_da_disciplina);

                //scanf(" %s", nome_da_disciplina);
                //getchar();
                fflush(stdin);
                printf("\n A prioridade da aula eh 2\nDeseja alterar? entre com 's' para sim e 'n' para nao!\n\tOpcao:   ");
                scanf(" %c", &priori);
                if(priori == 's')
                {
                    printf("\n Qual a prioridade desta aula? Classificacao: 1 a 4 --> ");
                    scanf(" %d", &novaPrioridade);
                    prioridadeAula = novaPrioridade;
                }
                if(priori == 'n')
                {
                    prioridadeAula = 2;
                }

                printf("\n Adiavel: ");
                scanf(" %d", &adiavelAula);

                printf("\n status da aula eh 1: ");
                statusAula = 1;

                printf("\n");
                a = insereAula(a, idAula, adiavelAula, statusAula, data_aula, hora_aula, nome_da_disciplina, prioridadeAula);
                printf("Inserindo na agenda\n");
                ag = insereAulaNaAgenda(ag, a, idAula, adiavelAula, statusAula, data_aula, hora_aula, nome_da_disciplina, prioridadeAula);
                fflush(stdin);
                VisualizaAulaNaAgenda(ag,a);

            }
            else if(opcao2 == 'b')
            {
                int idOrientacao,  prioridadeOrientacao, novaPrioridade, duracao_orientacao, adiavelOrientacao, statusOrientacao;
                char data_orientacao[12], hora_orientacao[8], nome_do_aluno_orientado[100], titulo_do_projeto[100], priori;
                ///Orientacao* insereOrientacao(Orientacao* orientacao, int idOrientacao, int duracao_orientacao, int adiavelOrientacao, int statusOrientacao, char *data_orientacao, char *hora_orientacao, char *nome_do_aluno_orientado, char *titulo_do_projeto, int prioridadeOrientacao);
                printf("\nDigite o nome do professor: ");
                getchar();
                scanf(" %s", nomeProfessor);
                printf("\nDigite um inteiro para o Id: ");
                scanf(" %d", &idProfessor);
                ag = insereAgenda(ag,idProfessor, nomeProfessor);
                fflush(stdin);
                printf("\nDigite os dados sobre a Orientacao\n");
                fflush(stdin);
                printf("\n Id: ");
                scanf(" %d", &idOrientacao);
                getchar();
                fflush(stdin);
                printf("\n Duracao em minutos: ");
                scanf(" %d", &duracao_orientacao);
                getchar();
                fflush(stdin);
                printf("\n Data: ");
                scanf(" %s", data_orientacao);
                getchar();
                fflush(stdin);
                printf("\n Hora: ");
                scanf(" %s", hora_orientacao);
                getchar();
                fflush(stdin);
                printf("\n Nome auluno orientado: ");
                scanf(" %s", nome_do_aluno_orientado);
                getchar();
                fflush(stdin);
                printf("\n Titulo projeto: ");
                scanf(" %s", titulo_do_projeto);
                getchar();
                fflush(stdin);
                printf("\n A prioridade da orientacao eh 1\n.Deseja alterar? entre com 's' para sim e 'n' para nao!\n\tOpcao:  ");
                scanf(" %c", &priori);
                if(priori == 's')
                {
                    printf("\nQual a prioridade desta orientacao? Classificacao: 1 a 4 --> ");
                    scanf(" %d", &novaPrioridade);
                    prioridadeOrientacao = novaPrioridade;
                }
                if(priori == 'n' )
                {
                    prioridadeOrientacao = 1;
                }

                printf( "\n adiavel: ");
                scanf("%d", &adiavelOrientacao);
                printf("\n status: ");
                scanf("%d", &statusOrientacao);

                o = insereOrientacao(o, idOrientacao, duracao_orientacao, adiavelOrientacao, statusOrientacao, data_orientacao, hora_orientacao, nome_do_aluno_orientado, titulo_do_projeto, prioridadeOrientacao);

                // printf("\nO que foi inserido na orientacao: ");
                //VisualizaOrientacao(o);
                ag = insereOrientacaoNaAgenda(ag, o, idOrientacao, duracao_orientacao, prioridadeOrientacao, adiavelOrientacao, statusOrientacao, data_orientacao, hora_orientacao, nome_do_aluno_orientado, titulo_do_projeto);
                //printf("\nO que foi inserido na agenda:");
                //VisualizaOrientacaoNaAgenda(ag, o);

            }
            else if(opcao2 == 'c')
            {
                int idReuniao, prioridadeReuniao, novaPrioridade, duracao_reuniao, adiavelReuniao, statusReuniao;
                char data_reuniao[12], hora_reuniao[8], nome_da_reuniao[100], priori;
                ///Reuniao* insereReuniao(Reuniao* reuniao, int idReuniao, int duracao_reuniao, int adiavelReuniao, int statusReuniao, char *data_reuniao, char *hora_reuniao, char *nome_da_reuniao, int prioridadeReuniao);
                printf("\nDigite o nome do professor: ");
                getchar();
                scanf(" %s", nomeProfessor);
                printf("\nDigite um inteiro para o Id: ");
                scanf(" %d", &idProfessor);
                ag = insereAgenda(ag,idProfessor, nomeProfessor);
                fflush(stdin);
                printf("\nDigite os dados sobre a Reuniao\n");
                fflush(stdin);
                printf("\n Id: ");
                scanf(" %d", &idReuniao);
                getchar();
                fflush(stdin);
                printf("\n Duracao em minutos: ");
                scanf("%d", &duracao_reuniao);
                getchar();
                fflush(stdin);
                printf("\n Data: ");
                scanf(" %s", data_reuniao);
                getchar();
                fflush(stdin);
                printf("\n Hora: ");
                scanf(" %s", hora_reuniao);
                getchar();
                fflush(stdin);
                printf("\n  Nome da reuniao: ");
                scanf(" %s", nome_da_reuniao);
                getchar();
                fflush(stdin);
                printf("\n A prioridade da reuniao eh 4\n.Deseja alterar? entre com 's' para sim e 'n' para nao!\n\tOpcao:  ");
                scanf(" %c", &priori);
                if(priori == 's')
                {
                    printf("\nQual a prioridade desta reuniao? Classificacao: 1 a 4 --> ");
                    scanf(" %d", &novaPrioridade);
                    prioridadeReuniao = novaPrioridade;
                }
                if(priori == 'n' )
                {
                    prioridadeReuniao = 4;
                }

                printf("\n adiavel: ");
                scanf(" %d", &adiavelReuniao);
                printf("\n status: ");
                scanf(" %d", &statusReuniao);

                r = insereReuniao(r, idReuniao, duracao_reuniao, adiavelReuniao, statusReuniao, data_reuniao, hora_reuniao, nome_da_reuniao, prioridadeReuniao);

                //printf("\nO que foi inserido: ");
                // VisualizaReuniao(r);
                ag = insereReuniaoNaAgenda(ag, r, idReuniao, prioridadeReuniao, duracao_reuniao, adiavelReuniao, statusReuniao, data_reuniao, hora_reuniao, nome_da_reuniao);
                //printf("\nOq foi inserido na agenda: ");
                //VisualizaReuniaoNaAgenda(ag, r);

            }
            else if(opcao2 == 'd')
            {
                int idEvento, prioridadeEvento, novaPrioridade, duracao_evento, adiavelEvento, statusEvento;
                char data_evento[12], local_do_evento[100], nome_do_evento[100], priori;
                ///Evento* insereEvento(Evento* evento, int idEvento, int duracao_evento, int adiavelEvento, int statusEvento, char *data_evento, char *local_evento, char *nome_do_evento, int prioridadeEvento);
                printf("\nDigite o nome do professor: ");
                getchar();
                scanf(" %s", nomeProfessor);
                printf("\nDigite um inteiro para o Id: ");
                scanf(" %d", &idProfessor);
                ag = insereAgenda(ag,idProfessor, nomeProfessor);
                fflush(stdin);
                printf("\n\nDigite as informacoes sobre Evento\n");
                fflush(stdin);
                printf("\n id: ");
                scanf(" %d", &idEvento);
                getchar();
                fflush(stdin);
                printf("\n duracao em dias : ");
                scanf(" %d", &duracao_evento);
                getchar();
                fflush(stdin);
                printf("\n data: ");
                scanf(" %s", data_evento);
                getchar();
                fflush(stdin);
                printf("\n  local: ");
                scanf(" %s", local_do_evento);
                getchar();
                fflush(stdin);
                printf("\n nome do evento: ");
                scanf(" %s", nome_do_evento);
                getchar();
                fflush(stdin);
                printf("\n A prioridade do evento eh 3\n.Deseja alterar? entre com 's' para sim e 'n' para nao!\n\tOpcao:  ");
                scanf(" %c", &priori);
                if(priori == 's')
                {
                    printf("\nQual a prioridade deste evento? Classificacao: 1 a 4 --> ");
                    scanf(" %d", &novaPrioridade);
                    prioridadeEvento = novaPrioridade;
                }
                if(priori == 'n' )
                {
                    prioridadeEvento = 3;
                }

                printf("\n adiavel: ");
                scanf(" %d", &adiavelEvento);
                printf("\n status: ");
                scanf(" %d", &statusEvento);

                ev = insereEvento(ev, idEvento, duracao_evento, adiavelEvento, statusEvento, data_evento, local_do_evento, nome_do_evento, prioridadeEvento);

                //printf("\nO que foi inserido: ");
                //VisualizaEvento(ev);
                ag = insereEventoNaAgenda(ag, ev, idEvento, prioridadeEvento, duracao_evento, adiavelEvento, statusEvento, data_evento, local_do_evento, nome_do_evento);
                //printf("\nOq foi inserido na agenda: ");
                //VisualizaEventoNaAgenda(ag, ev);

            }
            else if(opcao2 == 'e')
            {
                int idParticular, prioridadeParticular, duracao_particular, novaPrioridade, adiavelParticular, statusParticular;
                char data_particular[12], hora_particular[8], razao[100], priori;
                ///Particular* insereParticular(Particular* particular, int idParticular, int duracao_particular, int adiavelParticular, int statusParticular, char *data_particular, char *hora_particular, char *razao, int prioridadeParticular);
                printf("\nDigite o nome do professor: ");
                getchar();
                scanf(" %s", nomeProfessor);
                printf("\nDigite um inteiro para o Id: ");
                scanf(" %d", &idProfessor);
                ag = insereAgenda(ag,idProfessor, nomeProfessor);
                fflush(stdin);
                printf("\nDigite os dados sobre o Particular\n");
                fflush(stdin);
                printf("\n Id: ");
                scanf(" %d", &idParticular);
                getchar();
                fflush(stdin);
                printf("\n Duracao em minutos: ");
                scanf(" %d", &duracao_particular);
                getchar();
                fflush(stdin);
                printf("\n data: ");
                scanf(" %s", data_particular);
                getchar();
                fflush(stdin);
                printf("\n hora: ");
                scanf(" %s", hora_particular);
                getchar();
                fflush(stdin);
                printf("\n razao: ");
                scanf(" %s", razao);
                getchar();
                fflush(stdin);
                printf("\n A prioridade do compromisso particular eh 2\n.Deseja alterar? entre com 's' para sim e 'n' para nao!\n\tOpcao:  ");
                scanf(" %c", &priori);
                if(priori == 's')
                {
                    printf("\nQual a prioridade deste compromisso particular? Classificacao: 1 a 4 --> ");
                    scanf(" %d", &novaPrioridade);
                    prioridadeParticular = novaPrioridade;
                }
                if(priori == 'n' )
                {
                    prioridadeParticular = 2;
                }

                printf("\n adiavel: ");
                scanf(" %d", &adiavelParticular);
                printf("\n status: ");
                scanf(" %d", &statusParticular);

                printf("\n\n Particular \n");
                pa = insereParticular(pa, idParticular, duracao_particular, adiavelParticular, statusParticular, data_particular, hora_particular, razao, prioridadeParticular);

                //printf("\nOque foi iserido: ");
                //VisualizaParticular(pa);
                ag = insereParticularNaAgenda(ag, pa, idParticular, prioridadeParticular, duracao_particular, adiavelParticular, statusParticular, data_particular, hora_particular, razao);
                //printf("\nOque foi inserido na agenda: ");
                //VisualizaParticularNaAgenda(ag, pa);

            }
            else if(opcao2 == 'f')
            {
                int idAtendimento, prioridadeAtendimento, duracao_atendimento, novaPrioridade, adiavelAtendimento, statusAtendimento;
                char data_atendimento[12], horario_atendimento[20], disciplina_atendimento[100], priori;
                ///Atendimento* insereAtendimento(Atendimento *atendimento, int idAtendimento, int adiavelAtendimento, char *data_atendimento, char *horario_atendimento, char *disciplina_atendimento, int prioridadeAtendimento);;
                printf("\nDigite o nome do professor: ");
                getchar();
                scanf(" %s", nomeProfessor);
                printf("\nDigite um inteiro para o Id: ");
                scanf(" %d", &idProfessor);
                ag = insereAgenda(ag,idProfessor, nomeProfessor);
                fflush(stdin);
                printf("\nDigite os dados sobre o Atendimento\n");
                fflush(stdin);
                printf("\n id: ");
                scanf(" %d", &idAtendimento);
                getchar();
                printf("\n data: ");
                scanf(" %s", data_atendimento);
                getchar();
                fflush(stdin);
                printf("\n hora: ");
                scanf(" %s", horario_atendimento);
                getchar();
                fflush(stdin);
                printf("\n Disciplina: ");
                scanf(" %s", disciplina_atendimento);
                getchar();
                fflush(stdin);
                printf("\n A prioridade do atendimento eh 4\n.Deseja alterar? entre com 's' para sim e 'n' para nao!\n\tOpcao:  ");
                scanf(" %c", &priori);
                if(priori == 's')
                {
                    printf("\nQual a prioridade deste compromisso particular? Classificacao: 1 a 4 --> ");
                    scanf(" %d", &novaPrioridade);
                    prioridadeAtendimento = novaPrioridade;
                }
                if(priori == 'n' )
                {
                    prioridadeAtendimento = 4;
                }

                printf("\n adiavel: ");
                scanf(" %d", &adiavelAtendimento);
                at = insereAtendimento(at, idAtendimento, adiavelAtendimento, data_atendimento, horario_atendimento, disciplina_atendimento, prioridadeAtendimento);

                //printf("\nOque foi inserido: ");
                // VisualizaAtendimento(at);
                //printf("\nOque inserido: ");
                //VisualizaAtendimentoNaAgenda(ag,a);
            }

            if(opcao2 == 'g')
            {
                printf("\n Impressao de todas as aulas:\n");
                VisualizaAula(a);
            }

            if(opcao2  == 'h')
            {
                printf("\n Impressao de todas as Orientacoes: ");
                VisualizaOrientacao(o);

            }
            if(opcao2  == 'i')
            {
                printf("\nImpressao de todas as reunioes: ");
                VisualizaReuniao(r);

            }
            if(opcao2  == 'j')
            {
                printf("\nImpressao de todos os eventos: ");
                VisualizaEvento(ev);
            }
            if(opcao2  == 'k')
            {
                printf("\nImpressao de todos compromissos particulares: ");
                VisualizaParticular(pa);
            }
            if(opcao2  == 'l')
            {
                printf("\nImpressao de todos os atendimento: ");
                VisualizaAtendimento(at);
            }
            if(opcao2  == 'm')
            {
                printf("\nRemover aula!");
                fflush(stdin);
                printf("\nDigite a data: ");
                scanf(" %s", data);
                getchar();
                fflush(stdin);
                printf("\nHora: ");
                scanf(" %s", &hora);
                getchar();

                a = removeAula(a, data, hora);

            }
            if(opcao2  == 'n')
            {
                printf("\nRemover orientacao!");
                fflush(stdin);
                printf("\nDigite a data: ");
                scanf(" %s", data);
                getchar();
                fflush(stdin);
                printf("\nHora: ");
                getchar();
                scanf(" %s", hora);

                o = removeOrientacao(o, data, hora);
            }
            if(opcao2  == 'o')
            {
                printf("\nRemover reuniao!");
                fflush(stdin);
                printf("\nDigite a data: ");
                scanf(" %s", data);
                getchar();
                fflush(stdin);
                printf("\nHora: ");
                scanf(" %s", hora);
                getchar();

                r = removeReuniao(r, data, hora);
            }
            if(opcao2  == 'p')
            {
                printf("\nRemover evento!");
                fflush(stdin);
                printf("\nDigite a data: ");
                scanf(" %s", &data);
                getchar();
                fflush(stdin);
                printf("\nHora: ");
                scanf(" %s", &hora);
                getchar();

                ev = removeEvento(ev, data, hora);
            }
            if(opcao2  == 'q')
            {
                printf("\nRemover compromisso particular!");
                fflush(stdin);
                printf("\nDigite a data: ");
                scanf(" %s", &data);
                getchar();
                fflush(stdin);
                printf("\nHora: ");
                scanf(" %s", &hora);
                getchar();

                pa = removeAula(pa, data, hora);
            }
            if(opcao2  == 'r')
            {
                printf("\nRemover atendimento!");
                fflush(stdin);
                printf("\nDigite a data: ");
                scanf(" %s", &data);
                getchar();
                fflush(stdin);
                printf("\nHora: ");
                scanf(" %s", &hora);
                getchar();

                at = removeAtendimento(at, data, hora);

            }

            if(opcao2  == 's')
            {
                printf("\nBusca Aula!\n Digite a data: ");
                fflush(stdin);
                scanf(" %s", &data);
                getchar();
                consultaDataAula(a, data);
            }
            if(opcao2  == 't')
            {
                printf("\nBusca Orientacao!\n Digite a data: ");
                fflush(stdin);
                scanf(" %s", &data);
                getchar();
                consultaDataOrientacao(o, data);
            }
            if(opcao2  == 'u')
            {
                printf("\nBusca Reuniao!\n Digite a data: ");
                fflush(stdin);
                scanf(" %s", &data);
                getchar();
                consultaDataReuniao(r, data);
            }
            if(opcao2  == 'v')
            {
                printf("\nBusca Evento!\n Digite a data: ");
                fflush(stdin);
                scanf(" %s", &data);
                getchar();
                consultaDataEvento(ev, data);
            }

            if(opcao2  == 'w')
            {
                printf("\nBusca compromisso particular!\n Digite a data: ");
                fflush(stdin);
                scanf(" %s", &data);
                getchar();
                consultaDataParticular(pa, data);
            }
            if(opcao2  == 'x')
            {
                printf("\nBusca Atendimento!\n Digite a data: ");
                fflush(stdin);
                scanf(" %s", &data);
                getchar();
                fflush(stdin);
                printf("\nHorario: ");
                scanf(" %s", &hora);
                getchar();
                consultaDataAtendimento(at, data, hora);
            }
            break;

        case 3:
            printf("\nListagem da agenda completa com todos os eventos: ");
            VisualizaAgenda(ag);
            //VisualizaAulaNaAgenda(ag, a);
            //VisualizaOrientacaoNaAgenda(ag, o);
            //VisualizaReuniaoNaAgenda(ag, r);
            //VisualizaEventoNaAgenda(ag, ev);
            ///VisualizaParticularNaAgenda(ag, pa);
            //VisualizaAtendimentoNaAgenda(ag, at);
            break;

        case 4:
            printf("\n adicionar topico referente a agenda geral: ");
            break;
        case 5:
            printf("\n adicioar topico ");
            break;

        case 6:

            printf("\nLista de disciplinas que a Facom oferece aos cursos\n");
            printf("\nGraguacao em Ciencia da Computacao e Sistema da Informacao\n Mestrado e Doutorado em Ciencia da Computacao:\n");
            exibeDocListaDisciplina();

            break;

        case 7:
            fflush(stdin);
            printf("\t\t\nBibliotecas UFU\n");
            exibeDocListaBibliotecas();
            break;
        case 8:
            fflush(stdin);
            printf("\t\t\nLista de contatos do professores da Facom\n");
            exibeDocListaContatoProfessores();
            break;
        case 9:
            fflush(stdin);
            printf("\t\t\nLista de enderecos UFU\n");
            exibeDocListaEnderecos();
            break;

        case 10:
            fflush(stdin);
            printf("\t\t\nLista de informacoes do Campus Santa Monica\n");
            exibeDocInfoCampus();
            break;

        case 11:
            fflush(stdin);
            printf("\t\t\nLista de salas de disciplinas\n");
            exibeDocListaDeSalas();
            break ;

        case 12:

            printf("\n\t\t\tFinalizando!");
            exit(0);
            break;
        }

    }
    return 0;
}
Beispiel #2
0
Sinais* simula(t_circuito* circuto, Sinais* entradas)
{
    int i, j, validos;
    Tempo t;

    Transicao *listaTr = NULL;
    Transicao *itTr = NULL;

    Evento *fila = NULL;
    Pulso *p = NULL;

    ListaComponente *portasAlteradas = NULL;
    Componente gate = NULL;
    ValorLogico resultado;

    Sinais *saidas = novaSinais();

    if(!circuto || !entradas)
        return NULL;

    validos = 0;

    // Validação da correspência das entradas entre os arquivos '.v' e '.in'
    for( i=0 ; i < circuto->listaFiosEntrada->tamanho ; i++ )
    {
        for( j=0 ; j < entradas->quantidade ; j++ )
        {
            if( iguais( circuto->listaFiosEntrada->itens[i]->nome, entradas->lista[j].nome ) )
            {
                circuto->listaFiosEntrada->itens[i]->sinalEntrada = &(entradas->lista[j]);
                validos++;
                break;
            }
        }
    }

    ///
    printf("\nENTRADAS:\n  .v = %d\n .in = %d\n batem = %d\n\n",
           circuto->listaFiosEntrada->tamanho,
           entradas->quantidade,
           validos);
    ///

    if(validos < circuto->listaFiosEntrada->tamanho)
    {
        printf("O arquivo de entradas tem menos sinais de entrada que o circuito.\n");
        return NULL;
    }

    // Inicialização da fila de eventos com os valores das entradas
    fila = NULL;

    for( i=0 ; i < circuto->listaFiosEntrada->tamanho ; i++ )
    {
        t = 0;

        p = circuto->listaFiosEntrada->itens[i]->sinalEntrada->pulsos;
        while(p->valor != nulo)
        {
            insereEvento(&fila, t, circuto->listaFiosEntrada->itens[i], p->valor);
            t = t + p->tempo;

            p++;
        }

        insereEvento(&fila, t, circuto->listaFiosEntrada->itens[i], x); // este sinal fica até infitito
    }

    // ATENÇÃO: Sabemos que todos os componentes são inicializados com o valorDinamico em xis

    // A partir daqui, ocorre a simulação propriamente dita, usado fila de eventos
    t = 0;

    while(fila)
    {
        portasAlteradas = novaListaComponente();

        t = fila->quando;

        listaTr = popEvento(&fila);
        itTr = listaTr;

        // atualiza valores de fios e faz uma lista das portas alteradas pelas transicoes em listaTr
        while(itTr)
        {
            if(itTr->fio->valorDinamico != itTr->novoValor) // apenas se houver mudança de valor no fio
            {
                for( i=0 ; i < itTr->fio->listaSaida->tamanho ; i++ )
                {
                    if( !contemComponente( portasAlteradas, itTr->fio->listaSaida->itens[i] ) ) {
                        insereComponente( portasAlteradas, itTr->fio->listaSaida->itens[i] );
                    }
                }

                if(itTr->fio->tipo.operador == output)
                {
                    if( !(itTr->fio->sinalSaida) )
                        itTr->fio->sinalSaida = novoSinal( itTr->fio->nome );

                    addPulso( itTr->fio->sinalSaida, itTr->fio->valorDinamico, t - itTr->fio->sinalSaida->duracaoTotal );
                }

                itTr->fio->valorDinamico = itTr->novoValor;
            }

            itTr = itTr->proximo;
        }

        free(listaTr); // popEvento não liberou a lista de transições, fazemos isso aqui
        listaTr = NULL;

        for( i=0 ; i < portasAlteradas->tamanho ; i++ )
        {
            gate = portasAlteradas->itens[i];

            switch( gate->tipo.operador )
            {
            case op_not:
                if(gate->listaEntrada->itens[0]->valorDinamico == x)
                    resultado = x;
                else if (gate->listaEntrada->itens[0]->valorDinamico == zero)
                    resultado = um;
                else if (gate->listaEntrada->itens[0]->valorDinamico == um)
                    resultado = zero;

                // cria eventos relativ. às saidas da porta
                for(j=0 ; j < gate->listaSaida->tamanho ; j++)
                {
                    insereEvento(&fila, t + gate->tipo.atraso, gate->listaSaida->itens[j], resultado);
                }

                break;

            case op_buf:
                // cria eventos relativ. às saidas da porta
                for(j=0 ; j < gate->listaSaida->tamanho ; j++)
                {
                    insereEvento(&fila, t + gate->tipo.atraso, gate->listaSaida->itens[j], gate->listaEntrada->itens[0]->valorDinamico);
                }

                break;

            case op_and:
                resultado = um;

                // computa o valor
                for(j=0 ; j < gate->listaEntrada->tamanho ; j++)
                {
                    if(gate->listaEntrada->itens[j]->valorDinamico == x)
                    {
                        resultado = x;
                        break;
                    }
                    else if(gate->listaEntrada->itens[j]->valorDinamico == zero)
                    {
                        resultado = zero;
                    }
                }

                // cria eventos relativ. às saidas da porta
                for(j=0 ; j < gate->listaSaida->tamanho ; j++)
                {
                    insereEvento(&fila, t + gate->tipo.atraso, gate->listaSaida->itens[j], resultado);
                }

                break;

            case op_or:
                resultado = zero;

                // computa o valor
                for(j=0 ; j < gate->listaEntrada->tamanho ; j++)
                {
                    if(gate->listaEntrada->itens[j]->valorDinamico == x)
                    {
                        resultado = x;
                        break;
                    }
                    else if(gate->listaEntrada->itens[j]->valorDinamico == um)
                    {
                        resultado = um;
                    }
                }

                // cria eventos relativ. às saidas da porta
                for(j=0 ; j < gate->listaSaida->tamanho ; j++)
                {
                    insereEvento(&fila, t + gate->tipo.atraso, gate->listaSaida->itens[j], resultado);
                }

                break;

            case op_xor:
                if(gate->listaEntrada->itens[0]->valorDinamico == x || gate->listaEntrada->itens[1]->valorDinamico == x)
                {
                    resultado = x;
                }
                else
                {
                    if ( (gate->listaEntrada->itens[0]->valorDinamico == um && gate->listaEntrada->itens[1]->valorDinamico == zero) ||
                         (gate->listaEntrada->itens[0]->valorDinamico == zero && gate->listaEntrada->itens[1]->valorDinamico == um) )
                    {
                        resultado = um;
                    }
                    else
                    {
                        resultado = zero;
                    }
                }

                // cria eventos relativ. às saidas da porta
                for(j=0 ; j < gate->listaSaida->tamanho ; j++)
                {
                    insereEvento(&fila, t + gate->tipo.atraso, gate->listaSaida->itens[j], resultado);
                }

                break;

            case op_nand:
                resultado = um;

                // computa o valor
                for(j=0 ; j < gate->listaEntrada->tamanho ; j++)
                {
                    if(gate->listaEntrada->itens[j]->valorDinamico == x)
                    {
                        resultado = x;
                        break;
                    }
                    else if(gate->listaEntrada->itens[j]->valorDinamico == zero)
                    {
                        resultado = zero;
                    }
                }

                // fazemos a negação do resultado se este for diferente de x
                if(resultado != x)
                    resultado = (resultado == zero ? um : zero);

                // cria eventos relativ. às saidas da porta
                for(j=0 ; j < gate->listaSaida->tamanho ; j++)
                {
                    insereEvento(&fila, t + gate->tipo.atraso, gate->listaSaida->itens[j], resultado);
                }

                break;

            case op_nor:
                resultado = zero;

                // computa o valor
                for(j=0 ; j < gate->listaEntrada->tamanho ; j++)
                {
                    if(gate->listaEntrada->itens[j]->valorDinamico == x)
                    {
                        resultado = x;
                        break;
                    }
                    else if(gate->listaEntrada->itens[j]->valorDinamico == um)
                    {
                        resultado = um;
                    }
                }

                // fazemos a negação do resultado se este for diferente de x
                if(resultado != x)
                    resultado = (resultado == zero ? um : zero);

                // cria eventos relativ. às saidas da porta
                for(j=0 ; j < gate->listaSaida->tamanho ; j++)
                {
                    insereEvento(&fila, t + gate->tipo.atraso, gate->listaSaida->itens[j], resultado);
                }

                break;

            case op_xnor:
                if(gate->listaEntrada->itens[0]->valorDinamico == x || gate->listaEntrada->itens[1]->valorDinamico == x)
                {
                    resultado = x;
                }
                else
                {
                    if ( (gate->listaEntrada->itens[0]->valorDinamico == um && gate->listaEntrada->itens[1]->valorDinamico == um) ||
                         (gate->listaEntrada->itens[0]->valorDinamico == zero && gate->listaEntrada->itens[1]->valorDinamico == zero) )
                    {
                        resultado = um;
                    }
                    else
                    {
                        resultado = zero;
                    }
                }

                // cria eventos relativ. às saidas da porta
                for(j=0 ; j < gate->listaSaida->tamanho ; j++)
                {
                    insereEvento(&fila, t + gate->tipo.atraso, gate->listaSaida->itens[j], resultado);
                }

                break;

            default:
                break;
            }
        }

    }

    // copia as saidas da simulação do ciruito para o retorno
    for(i=0 ; i < circuto->listaFiosSaida->tamanho ; i++)
        addSinalPronto(saidas, circuto->listaFiosSaida->itens[i]->sinalSaida);

    return saidas;
}