trabalho 3 (notação polaca)

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.
 
queres que te façam o trabalho?!
pah, estuda, tenta fazer e aparece com duvidas especificas.. não a pedir pra fazer o tpc.
 
Última edição:
Um exemplo de notação polaca é teres dois numeros na stack por exemplo 1 1 e depois aplicas um +. Retira-se (pop) os dois numeros aplicas a operação (+) e pões na stack o resultado (2).
 
O meu problema é que o prof desistiu de fazer código nas aulas e ainda não temos o módulo de lista simples (listasimples.c e listasimples.h) a funcionar. Sem isso a funcionar sem erros Não conseguiremos fazer nada, dito pelos próprios professores. Aguém me ajuda a por a lista.c a funcionar? Tenho já os ficheiros de teste (programas) para a coisa....

Qualquer coisa [email protected]
Obrigado
 
S|N disse:
O meu problema é que o prof desistiu de fazer código nas aulas e ainda não temos o módulo de lista simples (listasimples.c e listasimples.h) a funcionar. Sem isso a funcionar sem erros Não conseguiremos fazer nada, dito pelos próprios professores. Aguém me ajuda a por a lista.c a funcionar? Tenho já os ficheiros de teste (programas) para a coisa....

Qualquer coisa [email protected]
Obrigado


se não sabes fazer um simples módulo de listas com funções de inserção, remoção, adição, etc... não mereces estar no curso em que estás (apesar de não saber qual é) :x2:
 
fap disse:
se não sabes fazer um simples módulo de listas com funções de inserção, remoção, adição, etc... não mereces estar no curso em que estás (apesar de não saber qual é) :x2:

O curso é eng física.... Para começar não tivemos programação em lado nenhum a não ser no ensino superior... Os profs só explicam algoritmos (bem fáceis de entender) mas não ensinam a PROGRAMAR. Invés disso os profs divertem-se a fazem quadrados, setinhas e bolinhas explicando os algoritmos. Não é que não seja necessário mas que se lembrem também que os alunos de eng fisica não vêm de tecnológicos com programação desde o 10º ano.... Essa é a nossa principal dificuldade uma vez que não mexemos muito em computadores! Desculpem se fui injusto mas ainda estou a quente de não perceber nada prático daquilo. Tenho que ter pelo menos 1.5 no trabalho para ir a exame (de 0 a 3) e corro o risco de acabar o semestre a saber algo de algoritmos mas sem saber programar :S :'( em C.
 
Se alguem me disser o que fazer faço o melhor que conseguir. Não sou preguiçoso! Quero mesmo fazer o trabalho mas preciso de um guideline.... Tenho listasimples.c e listasimples.h incompletas.
Acho boa ideia começar por ai.... Se alguem me explicar como implementar as listas na pilha......

"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."
 
Back
Topo