Escolar Documentos
Profissional Documentos
Cultura Documentos
CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO
O objetivo é desenvolver em C++ um simulador Para cada uma das portas lógicas:
de circuitos lógicos, composto por portas lógi- o O tipo de porta (AND, NOT, etc.).
cas de 2 ou mais entradas (ou de uma entrada, o O nº de entradas da porta (exceto NOT).
no caso da NOT) dos seguintes tipos: o Para cada entrada da porta:
NOT (NEGAÇÃO) A origem do sinal lógico: uma porta
AND (E), NAND (NOT AND) ou uma das entradas do circuito.
OR (OU), NOR (NOT OR) Para cada uma das saídas do circuito:
XOR (OU EXCLUSIVO), NXOR (NOT XOR) o A origem do sinal lógico: uma porta ou
uma das entradas do circuito.
As entradas e saídas do circuito e das portas
devem lidar com sinais lógicos verdadeiros (T - Tendo em vista que um dos objetivos principais
TRUE), falsos (F - FALSE) ou indefinidos (? - do projeto é praticar a utilização do polimor-
UNDEF), realizando as operações lógicas bási- fismo baseado em métodos virtuais, além de
cas (AND, OR e NOT) das seguintes maneiras: utilizar regras de boa programação, algumas
regras devem ser obrigatoriamente seguidas:
A B A AND B A B A OR B O aplicativo deve ser programado basean-
? ? ? ? ? ? do-se em objetos polimórficos para mode-
? F F ? F ? lagem das portas lógicas. Ou seja, não deve
? T ? ? T T haver instruções de controle de fluxo (if,
F ? F F ? ? switch, ternários, etc.) que mudem a
F F F F F F forma de execução de acordo com o tipo
F T F F T T da porta (OR, NOT, NAND, etc.), exceto no
T ? ? T ? T tratamento imediatamente seguinte à lei-
T F F T F T tura (do arquivo ou da interface) do tipo de
T T T T T T porta a ser incluído no circuito.
As classes que representam as portas lógi-
cas e o simulador de circuitos devem se
A B A XOR B A NOT A
basear e utilizar o tipo bool3S fornecido,
? ? ? ? ?
sem modificá-lo ou ignorá-lo.
? F ? F T
O programa deve se basear na implemen-
? T ? T F
tação parcial fornecida das classes das por-
F ? ?
tas e da classe Circuito, sem modificar
F F F
suas declarações. Além das funcionalidades
F T T já concluídas, devem ser desenvolvidos ou
T ? ? completados todos os métodos previstos
T F T na implementação parcial, incluindo:
T T F o Construtores, destrutores e sobrecarga
de operadores.
A simulação deve ser capaz de lidar com circui- o Definição de novo circuito pelo console
tos contendo ciclos, calculando as saídas ou (digitar), mesmo que na versão final
informando que uma ou mais saídas ficam a interface seja visual.
UNDEF quando não for possível a sua determi- o Leitura de circuito de arquivo (ler).
nação (TRUE ou FALSE). o Impressão em stream (imprimir).
o Salvamento em arquivo (salvar), uti-
Os dados de entrada a serem fornecidos pelo lizando o método imprimir.
usuário, via interface ou arquivo, são: o Geração das saídas para uma dada
Número de entradas e saídas do circuito. combinação das entradas (simular).
Número de portas lógicas do circuito.
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE
CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO
ARQUIVO
EXEMPLOS DE ARQUIVOS
CIRCUITO 3 3 6
PORTAS
1) OR 3: 5 -2 3
2) XO 2: 5 3
3) NA 2: -2 -3
4) NT 1: -2
5) AN 2: -1 4
6) NO 2: 2 3
SAIDAS
1) 2
2) 1
3) 6
ALGORITMOS
SIMULAR CIRCUITO: | | |
| | | // Simula a porta
// TIPO DE DADO Port | | | simularports[i](in_port)
Port: | | |
vector<int> id_in | | | Se (out_portports[i] == UNDEF)
// ids das entradas da porta: | | | | tudo_def ← false
bool3S out_port // Saída da porta | | | Caso contrário
| | | | alguma_def ← true
// DADOS GLOBAIS | | | Fim Se
vector<Port> ports | | |
// portas do circuito | | Fim Se
vector<int> id_out | Fim Para
// ids das saídas do circuito Enquanto (!tudo_def && alguma_def)
Repita
| tudo_def ← true;
| alguma_def ← false;
|
| Para i de 0 a Num_portas-1
| | Se (out_portports[i] == UNDEF)
| | | // Ajusta tamanho de in_port
| | | // igual ao num de entradas
| | | // da porta a ser simulada
| | | ajusta_tamanho(in_port,
| | | Ninports[i])
| | |
| | | Para j de 0 a Ninports[i]-1
| | | | // De onde vem a entrada?
| | | | id ← id_in[j]ports[i];
| | | | // Obtém valor da entrada
| | | | Se (id>0)
| | | | | // De outra porta
| | | | | in_port[j] ←
| | | | | out_portports[id-1]
| | | | Caso contrário
| | | | | // De entrada do circuito
| | | | | in_port[j] ←
| | | | | in_circ[-id-1]
| | | | Fim Se
| | | Fim Para
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE
CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO
SUGESTÃO DE DESENVOLVIMENTO