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; }
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; }