[ Principal | Tarefas ]

MAC 323 - 2003

Tarefas

Nesta p�gina ser�o disponibilizados informa��es relativas �s tarefas a serem desenvolvidas para avalia��o na disciplina.


 Tarefas     Coment�rios
 

Emulador
�ltima corre��o no enunciado: 07/07/2003

Objetivos: desenvolver um applet/aplicativo para emular um computador simplificado

  1. Entrada do "programa": 3 modos, via teclado diretamente teclando sobre as c�lulas de mem�ria; via arquivo na vers�o aplicativa; e via par�metro na vers�o applet.
  2. N�mero de instru��es: 10
  3. Posi��es de mem�ria: 100
  4. N�meros: com at� 6 d�gitos, sendo 5 se negativo
  5. Um acumulador (AC) e um registrador para "Endere�o de Pr�xima Instru��o" (EPI)

Entrega: dia 27/06
Entregar: arquivo compactado (*.tgz: tar cvfz nome_grupo_tarefa3.tgz seu_diretorio_com_arquivos
Em triplas

Algumas dicas:
  1. Implementa a partir de "applet", mas deve rodar tamb�m como aplicativo
  2. Applet: permitir entrada de "programa" manual ou n�o (de acordo com configura��o) e eventualmente ler de par�metro se houver o par�metro PROGRAMA
  3. Aplicativo: permitir ler "programa" de arquivo, permitir entrada manual e permitir gravar "programa" (na mem�ria)
  4. Cada posi��o de mem�ria ter� 6 caracteres, por�m se for instru��o ser�o usados apenas os 3 primeiro (IEE: I n�mero da instru��o e EE complemento, em geral um endere�o de mem�ria)
  5. Modelo e instru��es:
      0 AC <- cEE (se EE<>00, sen�o final de progr.) | Sa�da:______________                 
      1 EE <- cAC                                    | +---+                                
      2 AC <- cAC + cEE                              | |EPI| +--+--+...+--+  o In�cio       
      3 AC <- cAC - cEE                              | +---+ |  |  |   |  |  o Passo-a-passo
      4 AC <- cAC * cEE                              |       ...             o ...          
      5 AC <- cAC / cEE                              | +--+  +--+--+   +--+                 
      6 cAC>0 => EPI <- EE                           | |AC|  |  |  |   |  |                 
      7 EE <- leitura teclado                        | +--+  +--+--+...+--+                 
      8 sa�da cEE                                    | Entrada:____________                 
      9 EPI <- EE (desvio incondicional)             |
     
Sobrecarga de comandos para conseguirmos maior "poder" de computa��o:
  1. Instru��o "0EE": "0-0000" => "final de programa"; "0-0011" => "AC <- 11"; "0--011" => "AC <- -11";
  2. Instru��o "1EE": "1-0011" => "EE <- 11"; "1--011" => "EE <- -11";
Um exemplo: como traduzir "le(x); le(y); le(z); w = x+y+z; imprime(w);" ?
Mais simples: "799...", "798...", "797...", "099...", "298...", "297...", "108...", "808...".
Aten��o � instru��o "108...", o n�mero "08" corresponde � posi��o de mem�ria 8 que corresponderia � pilha de execu��o. Mas isso � preocupa��o aos que far�o o compilador (vide abaixo se tiver curiosidade de como "compilar/gera c�digo para" isso).

Entregar via Panda2


Compilador
�ltima corre��o no enunciado: 07/07/2003

Objetivos: desenvolver um "compilador" simplificado, que gere c�digo para o emulador acima

  1. Primeiro, N�O deixe de examinar o exemplo j� pronto de "compilador" para express�es aritm�ticas em ex_compilador.tgz!!! Come�e a partir deste exemplo.
  2. Monte o diagrama sint�tico de EXPR_LOG usando o modelo no exemplo ex_compilador.tgz

Entrega: dia 27/06
Entregar: arquivo compactado (*.tgz: tar cvfz nome_grupo_tarefa3.tgz seu_diretorio_com_arquivos
Em triplas

Algumas dicas: O compilador ser� para um subconjunto reduzido para uma linguagem tipo Java, com:
  1. EXPR: com express�o artim�tica, com '+', '-', '*' e '/' (vide ex_compilador.tgz)
  2. EXPR_LOG: com express�o l�gica, com '&&', '||' e '!' ('e', 'ou' e 'n�o') e com os relacionais '<','>','<=','>=','==','!='
  3. atribui��o: 'variavel = EXPR;'
  4. if: comando de sele��o, 'if (EXPR_LOG) comando1;', 'if (EXPR_LOG) comando1; else comando2;'
  5. while: comando de repeti��o, 'while (EXPR_LOG) comando;', 'while (EXPR_LOG) { comando1; ... }'
  6. le: comando simplificado para leitura de um valor, 'le(var1,var2...)'
  7. escreve: idem para sa�da, 'escreve(var1,var2...)'
Aten��o: pegue as instru��es de "m�quina" no enunciado do "emulador".

Um exemplo: como traduzir um programa em "alto n�vel" para "linguagem de m�quina" ?
Alto n�vel: "le(x); le(y); le(z); w = x+y+z; imprime(w);" ?
C�digo de "maquina": "799...", "798...", "797...", "099...", "298...", "297...", "108...", "808...".
Relevante ao projeto Compilador: muita aten��o � instru��o "108...", o n�mero "08" corresponde � posi��o de mem�ria 8, esta posi��o corresponderia, no exemplo, � pilha de execu��o. Para conseguir gerenciar isso de modo eficiente � necess�rio adiar a montagem final do arquivo (guardando o c�digo de "m�quina" num "buffer"), e usando endere�o relativo: usa-se "end_ultima_instrucao + pos_relativa" para estas posi��es de mem�ria sendo que ao final sabe-se quantas instru��es o programa precisou e portanto o valor de "end_ultima_instrucao".

Entregar via Panda2


Buscador
�ltima corre��o no enunciado: 07/07/2003

Objetivos: construir um "processador" de conte�dos para p�ginas Web
Fazer um processador para p�ginas Web que, a partir de uma p�gina local monta buscador de palavras e p�ginas alcan��veis a partir da inicial.

Entrega: dia 27/06
Entregar: arquivo compactado (*.tgz: tar cvfz nome_grupo_tarefa3.tgz seu_diretorio_com_arquivos
Em triplas

Estrutura geral:
  1. P�ginas referenciadas: monta uma p�gina Web contendo "links" para todas as referidas pela inicial e pelas seguintes (p�ginas "alcanc�veis")
  2. Banco de palavras: fazer um banco de palavras, em mem�ria, para buscas r�pidas em qualquer das p�ginas "alcanc�veis" (implementar como B-�rvore 2-3 ou como AVL)
  3. Tempo de busca: use as fun��es internas do Java para fornecer o tempo de busca
  4. Applet: para usar vers�o applet gere um arquivo com as palavras chaves de busca e p�ginas em que ocorrem
Algumas dicas:
  1. A lista de palavras n�o deve ser construida para "palavras" dentro de TAGs, p.e., em '< td align="center">' n�o se deve inserir na �rvore de busca os termos 'td', 'align' e nem 'center'
  2. Pode usar algum algoritmo pronto de �rvore 2-3 ou de AVL, mas indique de onde veio o c�digo
  3. Implemente de modo bem "encapsulado", de modo que fique f�cil trocar a estrutura interna de representa��o (p.e., trocar de 2-3 para AVL e vice-versa)
a partir da discuss�o na lista
Para conseguir ler um arquivo remotamente a partir de um "applet" (que esteja no diret�rio "http" em que o "applet" se encontra), veja:   http://www.ime.usp.br/~leo/mac323/03-1/exemplos/ex_pega_arq.zip
Para conseguir abrir o navegador com uma p�gina espec�fica, veja o exemplo que preparei em:   http://www.ime.usp.br/~leo/mac323/03-1/exemplos/abrir_navegador.java

Entregar via Panda2


Express�es Aritm�ticas: parte gr�fica AWT
�ltima corre��o no enunciado: 28/05/2003

Objetivos: desenvolver um sistema gr�fico para a parte anterior do projeto
o usu�rio pode entrar com v�rias express�es aritm�ticas (in-fixa), digitando inclusive par�metros e escolhendo-se intervalos para visualiza��o.
Exemplo: A * x^2 + B
Sendo A e B par�metros, o usu�rio escolhe intervalo de varia��o de x, e de A ou B (um s� deles, podendo ser constante - in�cio=fim). O par�metro escolhido � o ativo.

Entrega: dia 06/06   (adida em 1 semana)
Entregar: arquivo compactado (*.tgz: tar cvfz nome_grupo_tarefa2b.tgz seu_diretorio_com_arquivos
Em duplas

Implementar:
  1. Use apenas AWT, seu programa deve funcionar tamb�m na vers�o applet e a vers�o aplicativa poder� gravar as fun��es dispon�veis.
  2. O programa deve permitir visualizar mais que uma fun��o (dentre as dispon�veis - usando os mesmos valores de janela, para x e para o par�metro "ativo")
  3. A vers�o "applet" deve ter um par�metro de configura��o (tipo
                <applet ... <param name="1" value="A * x^2 + B"> 
                               <param name="2" value="sin(x)">
                </applet>
    (vide exemplo ex_awt_mouse.zip)
Algumas dicas: (alterado em 22/05/2003)
Desenho da fun��o (x,f(x)):
  1. Precis�o: em alguma vi�vel est�tica pode ser definido o n�mero de pontos a serem empregados em cada gr�fico (quanto maior mais preciso), mas tamb�m pode ser deixado para o usu�rio definir este valor.
  2. Representa��o gr�fica: deve-se usar uma interpola��o linear entre cada par de pontos [(xi, f(xi)), (xi+1, f(xi+1))] do gr�fico   (se quiser pode deixar uma "checkbox" para o usu�rio escolher desenho com linhas ou apenas com pontos - no �ltimo caso pode desenhar o "ponto" atrav�s de um g.drawOval(x,y, raio_x,raio_y)).
Pegando coordenada (x,f(x)) do gr�fico:
  1. Coordenada: Quando o usu�rio passar o "mouse" sobre o gr�fico de uma das fun��es, digamos f(.), o programa pode listar (atrav�s de texto em alguma barra de mensagem, e no caso de "aplicativo", poder�a-se temb�m colocar um "pop-up menu").
  2. Como fazer: Usando o m�todo "mouseMoved", que pega a coordena (x,y) do "mouse" na tela, convertendo-a para a coordenada do gr�fico e fazendo uma busca nas fun��es ativas na tela.
    Veja como usar o "mouseMoved" no exemplo AWT-mouse.
Entregar via Panda2

Express�es Aritm�ticas
�ltima corre��o no enunciado: 18/03/2003

Objetivos: dada uma express�o aritm�tica (in-fixa) Exp(x), envolvendo Oper abaixo descrito, montar uma lista ligada (ou vetor, ou pilha...) em nota��o p�s-fixa e implementar m�todos de avalia��o.

Oper: a express�o poder� envolver operadores, constantes, par�metros, fun��es e vari�vel x, por exemplo,

a*(sin(x))^2 + b

Entrega: dia 25/04
Entregar: arquivo compactado (*.tgz: tar cvfz nome_grupo_tarefa2.tgz seu_diretorio_com_arquivos
Em duplas
Algumas dicas: (alterado em 22/04/2003, 14/04/2003)
  • Oper: os operadores, par�metros, fun��es e constantes aceitas
    • operadores: *, +, -, %, / e ^ (pot�ncia)
    • constantes: qualquer valor "real"
    • par�metros: quaisquer letras do alfabeto latino
    • fun��es: as fun��es da classe java.lang.Math: sin(.), cos(.), tan(.), asin(.), acos(.), atan(.), exp(.), log(.), sqrt(.)
  • Implementar um m�todo para listar a express�o na forma original (in-fixa) e sua correspondente p�s-fixa.
    O usu�rio deve poder escolher uma op��o para listar as express�es chamando este m�todo.
  • Usar as classes:
      |No| -> |NoOp|, |NoVar|, |NoConst|, |NoParam|
      |Exp| = |No inicio; m�t. avalia expressao(); m�t. converte in-p�s(); verifica sintaxe() ...|
      Vector com cada Exp criada (Vector v=new Vector(); v.addElement( ... ))
     	  
  • Usu�rio pode criar quantas express�es (Exp) desejar, sendo cada uma inserida num Vector (a express�o original pode ser armazenada como String, mas a outra tem que ficar em p�s-fixa);
  • Colocar m�todos para teste, deixando o usu�rio escolher express�o para listar, valor de par�metros, par�metro a variar, intervalos de varia��o da vari�vel x e do par�metro "ativo" e a quantidade n�meros a serem de valores. Por exemplo: listar a*x^2 + b, com a (par�metro "ativo") variando -1 entre 1, fixando-se b=1, e para cada valor do par�metro "ativo", listar 10 valores para x entre -1 entre 1 (-1, -0.9,...,0.9,1).
    O objetivo posterior deste teste � coloc�-lo na forma gr�fica, assim o usu�rio pode ver o gr�fico de a*x^2 + b e qual o impacto da varia��o do a (ver mudan�a na concavidade) e do b (mudan�a no v�rtice da par�bola).
Entregar via Panda2

Problema da satisfatibilidade
Objetivos: dada uma express�o f envolvendo N vari�veis l�gicas, encontrar valores para estas vari�veis de modo que f(v1,...,vN) = true
Entrega: dia 19/03
Entregar: arquivo compactado (*.tgz: tar cvfz nome_grupo_tarefa1.tgz seu_diretorio_com_arquivos
Em duplas
Implementar uma �rvore bin�ria, com uma classe noExp e duas sub-classes noExpOperando e noExpOperador:
  • implementar um m�todo que avalia uma express�o l�gica; e
  • implementar um m�todo que testa todas as poss�veis atribui��es para as vari�veis buscando uma que resulte true
  • conven��es: *e;   +ou;   e !n�o;  .
  • exemplo de entrada: f(.) definida por v1 * ( v2 + v3 ) + v1 * ( v2 * v3)
Entregar via Panda2

 

[ P�gina inicial | Panda2 | Lista MAC323 | Lista Java | Info ]