<?xml version="1.0" ?>

<documento html="default" latex="article">

<titulo> Métodos de Programação III
</titulo>

<autor>
João Saraiva <br/>
<link href="mailto:jas@di.uminho.pt"> jas@di.uminho.pt </link>
</autor>

<instituicao>
<it> <large> Matemática e Ciências da Computação </large> </it> <par/>
<it> <large> Engenharia de Sistemas e Informática </large> </it> <par/>
<bold> <it> 2000/2001 </it> </bold>
</instituicao>

<par/>

<imagem ficheiro="newflash.gif">
<huge> <bold> <cor cor="green"> Novidades e Avisos </cor> </bold> </huge>
</imagem>

<par/>

<centrar>
<tabela>




<linha>
<elem> (03-09-01) </elem>
<elem align="right">
<large><bold><cor cor="red">Enúnciados dos Exame de Janeiro: </cor></bold>
  </large>
   <link href="http://www.di.uminho.pt/~jas/mp3/00-01/jan1aChamada.ps"> 1ª Chamada </link>, <link href="http://www.di.uminho.pt/~jas/mp3/00-01/jan2aChamada.ps"> 2ª Chamada </link>
</elem>
</linha>



<linha>
<elem> (20-02-01) </elem>
<elem align="right">
<large><bold> Notas do Exame e Trabalhos Práticos: </bold>
  </large>
   <link href="http://www.di.uminho.pt/~jas/mp3/00-01/notas.html"> NOTAS.
    </link>
</elem>
</linha>



<linha>
<elem> (19-01-01) </elem>
<elem align="right">
  <large>Apresentação dos Trabalhos Práticos:
  </large> 
    <par/> <cor cor="red">Data: </cor> <large><bold><cor cor="red">  5 e 6 de Fevereiro</cor></bold> </large> 
    <par/> <bold>Os grupos devem inscrever-se na D. Rosa (DI)</bold>
    <par/> A Apresentação dos trabalhos será feita em frente ao computador (a correr linux).
    <par/> Todos os elementos do grupo têm de estar presentes 
    <par/> Os grupos devem trazer os trabalhos em disquete
    <par/> <it>(Cópias do exame da 1ª Chamada estão disponiveis na D. Rosa.)</it>
</elem>
</linha>


<linha>
<elem>(09-01-01)</elem>
<elem align="right">
  <cor cor="red"> Entrega do Trabalho Prático nº 2: </cor>
    <par/> A Apresentação do trabalho será feita em frente ao computador.
    <par/> <cor cor="red">Data: </cor> Fim de Janeiro (dia a anunciar brevemente)
    <par/> <small> Não é necessário enviar o trabalho por email </small>
</elem>
</linha>

<linha>
<elem>(15-12-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 10: </bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha10.lhs">ficha10.lhs.
</link></elem>
</linha>

<linha>
<elem>(14-12-00)</elem>
<elem align="right">
  <large><bold> Aula Teórica: BNF em HASKELL</bold>
    <link href="http://www.di.uminho.pt/~jas/mp3/00-01/listas.ps">listas.ps.
    </link>
  </large>
</elem>
</linha>

<linha>
<elem>(11-12-00)</elem>
<elem align="right">
  <large><bold>Trabalho Prático nº2:</bold>
    <link href="http://www.di.uminho.pt/~jas/mp3/00-01/tp2.lhs">tp2.lhs.
    </link>
  </large>
</elem>
</linha>

<linha>
<elem>(09-12-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 9: </bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha9.lhs">ficha9.lhs.
</link></elem>
</linha>

<linha>
<elem>(06-12-00)</elem>
<elem><bold> <cor cor="red"> Trabalho Práticos Recebidos: </cor></bold>
<link pagina="http://www.di.uminho.pt/~jas/mp3/00-01/tp1Rec.html">
TPRec.html</link>
</elem>
</linha>

<linha>
<elem>(04-12-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 8: </bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha8.lhs">ficha8.lhs.
</link></elem>
</linha>

<linha>
<elem>(24-11-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 7:</bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha7.tex">ficha7.tex.
</link></elem>
</linha>

<linha>
<elem>(09-11-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 6:</bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha6.lhs">ficha6.lhs.
</link></elem>
</linha>

<linha>
<elem>(03-11-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 5:</bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha5.lhs">ficha5.lhs.
</link></elem>
</linha>

<linha>
<elem>(02-11-00)</elem>
<elem><large><bold>Trabalho Prático nº1:</bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/tp1.lhs">tp1.lhs.
</link></large></elem>
</linha>

<linha>
<elem>(30-10-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 4:</bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha4.lhs">ficha4.lhs.
</link></elem>
</linha>

<linha>
<elem>(19-10-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 3:
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha3.lhs">ficha3.lhs.
</link></bold>
<par/><bold>Módulo de Expressões Regulares em C: 
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/RegExp.c">RegExp.c
</link></bold>
<par/>
<bold>(Isto é, Exp. Reg. em <cor cor="#3366FF">120 linhas de
código C</cor>, em vez das <cor cor="#3366FF">10 de Haskell</cor>)
</bold>
<par/></elem>
</linha>

<linha>
<elem>(13-10-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 2:</bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha2.lhs">ficha2.lhs.
</link></elem>
</linha>

<linha>
<elem>(06-10-00)</elem>
<elem><bold>Ficha Teórico-Prática nº 1:</bold>
<link href="http://www.di.uminho.pt/~jas/mp3/00-01/ficha1.lhs">ficha1.lhs.
</link></elem>
</linha>

<linha>
<elem>(28-09-00)</elem>
<elem><bold>A página da disciplina está no "ar".</bold>
</elem>
</linha>

</tabela>
</centrar>


<par/>

<par/>


<capitulo nome="Equipa Docente">

<itemize>
<item> <link pagina="http://www.di.uminho.pt/~jas">João Saraiva</link> 
<itemize> <item> Teóricas: </item>
          <item> Teórico-Práticas: </item>
          <item> Dúvidas: </item></itemize>
</item>
<item> <link pagina="http://www.di.uminho.pt/~jcr">José Carlos Ramalho</link>
<itemize> <item> Teórico-Práticas: </item>
          <item> Dúvidas: </item></itemize>
</item>
</itemize>

</capitulo>


<capitulo nome="Estrutura e Funcionamento">

Exposição da matéria fundamental -- motivação, conceitos, definições,
métodos e justificações -- a nível das aulas teóricas. Resolução de
exercícios de consolidação, a nível das aulas teórico-práticas, no
quadro e no computador. Realização, no computador, extra aulas de
trabalhos concretos de aplicação, recorrendo à linguagem Haskell.

</capitulo>

<capitulo nome="Objectivos ">

É objectivo deste curso levar os alunos a:

<itemize>
<item> Aprofundar e interiorizar os conceitos fundamentais e os
métodos de programação em larga escala e a reutilização de programas,
dando especial relevo ao <it>paradigma funcional.</it> </item>

<item> Aprender o conceito de <it>Autómato Finito </it> e a teoria
associada, bem como a sua aplicação à simulação de <it>Sistemas de
Controlo</it> e à especificação e reconhecimento de <it>Linguagens
Regulares.</it> </item>

<item> Compreender os conceitos de <it>cálculo parcial ou
especialização de programas</it></item>

<item>
Aprender o conceito de gramática e como descrever estruturas de
linguagens através de gramáticas.</item>

<item> Compreender o conceito: embeber linguagens de dominio
especifico (eg, gramáticas) numa linguagem de dominio geral (eg,
Haskell).</item>

<item> Reforçar a aptidão dos alunos para desenvolver programas
correctos e eficientes (quer no paradigma funcional quer em qualquer
outro paradigma de programação).</item>

</itemize>

</capitulo>

<capitulo nome="Avaliação">

A Avaliação tem uma componente teórica e uma componente
prática, ambas obrigatórias.  

<par/>

De acordo com o regulamento actualmente em vigor na UM, a <bold>nota
teórica</bold> será obtida através da realização de <bold>1 prova individual
escrita</bold>. Essa prova tem as instâncias a seguir indicadas (um aluno
só poderá fazer melhoria na época de recurso):

<itemize>

<item> Exame, realizado na 1ª chamada da época normal, no fim do 1º
semestre</item>

<item> Exame, realizado na 2ª chamada da época normal, no fim do 1º
semestre </item>

<item> Exame, realizado na época de recurso</item>
</itemize>


A <bold>componente prática</bold> seré formada por 2 trabalhos para
realização em grupo, sendo entregues acompanhados de um
relatório sucinto e discutidos em frente ao computador:

A nota prática será a média aritmética das classificações obtidas nos
2 trabalhos avaliados.  A nota final será determinada de acordo com a
seguinte fórmula:

<par/>

<centrar>
<bold> 
NotaFinal = NotaTeorica * 0.50 + (NotaPratica - Delta / 2) * 0.50
</bold>
</centrar>

<par/>

sendo <bold><i>Delta = | NT - NP |</i></bold>

<par/>

Exige-se <bold>8 valores</bold> como nota mínima em cada parte.

</capitulo>



<capitulo nome="Programa">

<itemize>
<item> Programação baseada em Transições de Estado:  
  <itemize> 
    <item> Noções básicas </item>
    <item> Autómatos Finitos 
      <itemize>
        <item> Autómatos não-deterministas </item>
        <item> Autómatos deterministas </item>
        <item> Cálculo Parcial aplicado a Autómatos Deterministas </item>
        <item> Conversão de ANDs em ADs </item>
        <item> Conversão de AFND am AFD através de cálculo parcial </item>
        <item> Autómatos reactivos </item>
          <itemize>
            <item> Aplicação dos autómatos à simulação de Sistemas de Controlo </item>
            <item> Aplicação dos autómatos ao reconhecimento de Linguagens Regulares </item>
            <item> Definições; expressões regulares; gramáticas regulares </item>
          </itemize>
      </itemize>
    </item>
  </itemize>
</item>
<item> Programação baseada em Gramáticas:
 <itemize>
   <item> Conceito e exemplos </item>
   <item> Estrutura concreta e abstracta das linguagens formais </item>
   <item> Desenvolvimento de <it> Parsers baseados em Combinadores</it> 
          para Linguagens Formais. </item>
 </itemize>
</item>

<item> Programação baseada em multiplas travessias 
  <itemize>       
    <item> Conceitos e exemplos </item>
    <item> Programas Circulares </item> 
    <item> Catamorfismos </item>
    <item> Deflorestação </item>
    <item> Programação com atributos </item>
    <item> "profiling" de programas </item>
  </itemize>
</item>
</itemize>

</capitulo>



<capitulo nome="Sumários">

<itemize>
<item> <link pagina="http://www.di.uminho.pt/~jas/mp3/00-01/sumarios.html"> 
       Engenharia de Sistemas e Informática </link> </item>
<item> <link pagina="http://www.di.uminho.pt/~jas/mp3/00-01/sumarios.html"> 
       Matemática e Ciências da Computação </link>  </item>
</itemize>

</capitulo>

<capitulo nome="Trabalhos Práticos">

<itemize>
<item> Trabalho Prático nº1:
       <link pagina="http://www.di.uminho.pt/~jas/mp3/00-01/tp1.lhs">
        tp1.lhs </link>
</item>

<item> Trabalho Prático nº2:
       <link pagina="http://www.di.uminho.pt/~jas/mp3/00-01/tp2.lhs">
        tp2.lhs </link>
</item>

</itemize>

</capitulo>


<biblio erros="sim" ordenado="default">

<livro key="jas00">
  <tit>      Language Processing (with a Functional Flavour)       </tit>
  <aut>      João Saraiva                                          </aut>
  <ano>      2000                                                  </ano>
  <editora>  DI/UM                                             </editora>
  <edicao>   1ª                                                 </edicao>
</livro>
  
<livro key="lsb96">
  <tit>      Elementos da Teoria dos Autómatos                     </tit>
  <aut>      L.S. Barbosa                                         </aut>
  <ano>      1996                                                  </ano>
  <editora>  DI/UM                                             </editora>
  <urlps>    http://www.di.uminho.pt/~jas/mp3/nlp.ps.gz          </urlps>
</livro>


<livro key="jas95">
  <tit>      Especificação e Processamento de Linguagens           </tit>
  <aut>      João Saraiva                                          </aut>
  <ano>      1995                                                  </ano>
  <editora>  DI/UM                                             </editora>
  <edicao>   1ª                                                 </edicao>
  <urlps>    http://www.di.uminho.pt/~jas/mp3/esp_proc_ling.ps.gz  </urlps>
  <urlhtml>  http://www.di.uminho.pt/~jas/TextosPedag/espProcLing/espprocling.html </urlhtml>
</livro>
  
<livro key="FB94">
  <tit> The Language of Machines: An Introduction to Computability and Formal Languages </tit>
  <aut> R. Floid and R. Beigel </aut>
  <editora> Computer Science Press </editora>
  <ano> 1994 </ano>
</livro>

<artigo key="haskellRep">
  <tit>     Report on the Programming Language Haskell 98              </tit>
  <aut>     S.P.Jones, et al                                           </aut>
  <ano>     1999                                                       </ano>
  <urlhtml> http://www.haskell.org/onlinereport                    </urlhtml>
  <urlps>   http://www.haskell.org/definition/haskell98-report.ps.gz </urlps>
  <urlpdf>  http://www.haskell.org/definition/haskell98-report.pdf  </urlpdf>
</artigo>


<livro key="Bird98">
  <tit> Introduction to Functional Programming using Haskell </tit>
  <aut> R. Bird </aut>
  <editora> Prentice Hall </editora>
  <ano> 1998 </ano>
</livro>

<livro key="SimonThompson99">
  <tit> Haskell - The Craft of Functional Programming </tit>
  <aut> S. Thompson </aut>
  <editora> Addison-Wesley </editora>
  <ano> 1999 </ano>
  <edicao> 2ª </edicao>
</livro>


<livro key="NeilJones93">
  <tit> Partial Evaluation and Automatic Program Generation </tit>
  <aut> N. Jones, C. Gomard and P. Sestoff </aut>
  <editora> Prentice Hall </editora>
  <ano> 1993 </ano>
</livro>


<livro key="Horowitz84">
  <tit> Fundamentos de Estruturas de Dados </tit>
  <aut> E. Horowitz and S. Sahni </aut>
  <editora> Editora Campus </editora>
  <ano> 1984 </ano>
</livro>


<livro key="Carrol89">
  <tit> Theory of Finite Automata  </tit>
  <aut> J. Carroll and D. Long  </aut>
  <editora> Prentice Hall  </editora>
  <ano> 1989 </ano>
</livro>



</biblio>


</documento>



