S|N
Power Member
Olá. Este é o meu 3º trabalho na disciplina de AED. Se alguem pode-me ajudar por favor.... Não sei bem como o fazer. Alguem pode-me dizer o que raio é "notação polaca"?
Obrigado.
Trabalho nº 3
Prazo de entrega: 23 horas do dia 9 de Junho de 2005
Este trabalho visa implementar um programa para simulação parcial de uma unidade lógica de um microprocessador, designada por unidade lógica rápida (ULR).
Comecemos então pela especificação de expressões lógicas a avaliar pela unidade lógica:
* os operandos são 4 bits
* as expressões lógicas a avaliar são recebidas na forma posfixa (notação polaca)
* os operadores lógicos a utilizar nas expressões são: & (and); | (or); ^ (xor) , bem como o operador unário ~ (not).
Expressão posfixa
Considere a expressão infixa "0011 & 0110". Esta expressão avalia a conjunção, bit a bit, de 0011 com 0110. A mesma operação pode ser escrita na forma posfixa:"0011 0110 &", isto é, começando pelos dois operandos e de seguida o operador. Por exemplo, a avaliação da expressão posfixa "0011 0101 0001 & 0010 | ^ ~" resulta no valor 1111. Na forma infixa a mesma operação seria "~(0011 ^((0101 & 0001) | 0010)).
Para mais informações sobre notação polaca consultar, por exemplo, a ligação
http://en.wikipedia.org/wiki/Reverse_Polish_notation
A ULR pode ainda recorrer a uma tabela de símbolos com valores previamente guardados. Estes valores são memorizados pela ULR usando o comando cons. Os nomes pelos quais são reconhecidos estes símbolos devem ter 4 letras. A tabela de símbolos, com um número médio estimado de 50 símbolos, deve ser acedida de forma eficiente, isto é, usando uma tabela de dispersão.
A ULR deve ser implementada usando o tipo abstracto de dados Pilha, que deve ser implementado sobre listas. A gestão de memória, relacionada com a pilha, é dinâmica.
Os comandos a processar pela ULR devem ser introduzidos através de uma linha de comandos, um por linha (100 caracteres no máximo e termina com enter). Os comandos a implementar são:
* aval expr , que avalia a expressão expr e imprime no ecrã o resultado;
* cons nome valor , que adiciona à tabela de símbolos o nome que vale valor;
* impr , que imprime todos os símbolos e valores associados existentes na tabela de símbolos;
* sair , que termina a execução do programa.
Apresenta-se de seguida um exemplo de utilização da ULR:
ulr>aval 0100 1010 &
0000
ulr>aval 1100 1010 | 1000 & ~
0111
ulr>aval 0011 0101 0001 & 0010 | ^ ~
1111
ulr>cons dois 0010
ulr>aval dois
0010
ulr>cons oito 1000
ulr>aval dois 1111 & oito |
1010
ulr>sair
adeus!
A apresentação de resultados deve ser exactamente igual ao exemplo acima apresentado.
Prazos e material a entregar
O programa deve estar organizado em várias módulos, sob a forma de ficheiros .h e .c. Como sugestão, considere os seguintes nomes de ficheiros:
* elem.h
* elem.c
* listasimples.h
* listasimples.c
* pilha.h
* pilha.c
* tabdispersao.h
* tabdispersao.c
* ulr.h
* ulr.c
Todos os ficheiros devem estar identificados com o nome, número, turno e e-mail dos alunos, os quais devem ser arquivados num ficheiro ZIP para entrega electrónica até às 23 horas do dia 9 de Junho de 2005.
Importante: o trabalho começa a ser realizado durante as aulas práticas e, até ao dia 2 de Junho, os alunos devem enviar por email ao docente do respectivo turno prático os ficheiros .h que utilizam.
Obrigado.
Trabalho nº 3
Prazo de entrega: 23 horas do dia 9 de Junho de 2005
Este trabalho visa implementar um programa para simulação parcial de uma unidade lógica de um microprocessador, designada por unidade lógica rápida (ULR).
Comecemos então pela especificação de expressões lógicas a avaliar pela unidade lógica:
* os operandos são 4 bits
* as expressões lógicas a avaliar são recebidas na forma posfixa (notação polaca)
* os operadores lógicos a utilizar nas expressões são: & (and); | (or); ^ (xor) , bem como o operador unário ~ (not).
Expressão posfixa
Considere a expressão infixa "0011 & 0110". Esta expressão avalia a conjunção, bit a bit, de 0011 com 0110. A mesma operação pode ser escrita na forma posfixa:"0011 0110 &", isto é, começando pelos dois operandos e de seguida o operador. Por exemplo, a avaliação da expressão posfixa "0011 0101 0001 & 0010 | ^ ~" resulta no valor 1111. Na forma infixa a mesma operação seria "~(0011 ^((0101 & 0001) | 0010)).
Para mais informações sobre notação polaca consultar, por exemplo, a ligação
http://en.wikipedia.org/wiki/Reverse_Polish_notation
A ULR pode ainda recorrer a uma tabela de símbolos com valores previamente guardados. Estes valores são memorizados pela ULR usando o comando cons. Os nomes pelos quais são reconhecidos estes símbolos devem ter 4 letras. A tabela de símbolos, com um número médio estimado de 50 símbolos, deve ser acedida de forma eficiente, isto é, usando uma tabela de dispersão.
A ULR deve ser implementada usando o tipo abstracto de dados Pilha, que deve ser implementado sobre listas. A gestão de memória, relacionada com a pilha, é dinâmica.
Os comandos a processar pela ULR devem ser introduzidos através de uma linha de comandos, um por linha (100 caracteres no máximo e termina com enter). Os comandos a implementar são:
* aval expr , que avalia a expressão expr e imprime no ecrã o resultado;
* cons nome valor , que adiciona à tabela de símbolos o nome que vale valor;
* impr , que imprime todos os símbolos e valores associados existentes na tabela de símbolos;
* sair , que termina a execução do programa.
Apresenta-se de seguida um exemplo de utilização da ULR:
ulr>aval 0100 1010 &
0000
ulr>aval 1100 1010 | 1000 & ~
0111
ulr>aval 0011 0101 0001 & 0010 | ^ ~
1111
ulr>cons dois 0010
ulr>aval dois
0010
ulr>cons oito 1000
ulr>aval dois 1111 & oito |
1010
ulr>sair
adeus!
A apresentação de resultados deve ser exactamente igual ao exemplo acima apresentado.
Prazos e material a entregar
O programa deve estar organizado em várias módulos, sob a forma de ficheiros .h e .c. Como sugestão, considere os seguintes nomes de ficheiros:
* elem.h
* elem.c
* listasimples.h
* listasimples.c
* pilha.h
* pilha.c
* tabdispersao.h
* tabdispersao.c
* ulr.h
* ulr.c
Todos os ficheiros devem estar identificados com o nome, número, turno e e-mail dos alunos, os quais devem ser arquivados num ficheiro ZIP para entrega electrónica até às 23 horas do dia 9 de Junho de 2005.
Importante: o trabalho começa a ser realizado durante as aulas práticas e, até ao dia 2 de Junho, os alunos devem enviar por email ao docente do respectivo turno prático os ficheiros .h que utilizam.