Planeamento

Aulas Teóricas

Apresentação

Apresentação: programa, bibliografia e avaliação. Introdução sumária do sistema Mathematica como ferramenta de cálculo numérico/ simbólico e de visualização gráfica. Computação simbólica versus computação numérica. [aulaT01.nb]

Conceitos básicos de programação

Expressões: breve referência à representação interna; expressões numéricas; expressões Booleanas. Tipos básicos. Atribuição imediata. Termos e valores versus variáveis e células de memória. Valores versus mudanças de estado. Termos versus comandos. Escrita de resultados. Definição de funções: abstracção funcional (Function).

Conceitos básicos de programação (conc)

Formas alternativas de definição de funções: atribuição paramétrica imediata e diferida. Arquivo em ficheiros. Listas: definição por extensão, compreensão (Table), construção (lista vazia, Append, Prepend, Insert, Take, Rest). Acesso aos elementos de uma lista (First, Last, Part). Outras operações sobre listas: Length, MemberQ, Select.

Programação recursiva

Programação recursiva: expressões condicionais (If); exemplos com números naturais e listas. Encapsulação de variáveis (Module). Variáveis locais versus variáveis globais. Funções locais versus funções globais. [aulaT04.nb]

Programação recursiva (conc)

Exemplos complementares de programação recursiva. [aulaT04x.nb]

Miniteste.

Programação imperativa

Iniciação à programação imperativa: primeiro exemplo;
composição sequencial (;), alternativa (If) e iterativa (While) de
comandos. Exemplos elementares. Diagramas MJ. Efeitos colaterais.
Funções versus procedimentos. Termos versus comandos. Valores
versus mudanças de estado.

Programação imperativa (conc)

Exemplos complementares de programação imperativa, incluindo ordenação de listas (método da inserção), resolução de equações não lineares (método da bissecção) e integração numérica (método dos rectângulos). [aulaT05.nb]

Programação funcional

Conclusão da aula anterior (ordenação por inserção).

Programação funcional: construções básicas (Apply, Map, Nest e FixedPoint) e exemplos elementares. Exemplo complementar de programação funcional: fecho transitivo de relaçãobinária.

Programação funcional (conc)

Comparação dos três paradigmas de programação em Mathematica. Cálculo de pontos fixos. Combinador Y. Completude computacional da programação funcional. Compilação de funções. Interpretação vs compilação. [aulaT06.nb]

Introdução ao método de programação por camadas centradas nos dados.

Programação em grande escala

Programação em grande escala: método de programação por camadas centradas nos dados. Motivação: torres de Hanoi. Especificação equacional do tipo das pilhas. Equações como regras de reescrita em Mathematica. Sistemas de reescrita. Raciocínio sobre tipos de dados. Diagramas ADJ. Implementação das pilhas sobre listas.

Programação em grande escala (cont)

Implementação alternativa de pilhas. Solução do problema das torres de Hanoi sobre a camada que disponibiliza operações sobre pilhas.

Programação em grande escala (cont)

Exemplos complementares: especificação e implementações alternativas do tipo dos Booleanos. Introdução aos pacotes em Mathematica. Exemplo: pacote que disponibiliza o tipo das pilhas. Importância da capsulação das implementações.

Programação em grande escala (cont)

Aula leccionada por Jaime Ramos por impossibilidade do docente responsável.

Exemplos complementares de especificação, implementação e utilização de tipos de dados abstractos: filas de espera, árvores binárias e árvores binárias de pesquisa.

Programação em grande escala (conc)

Verificação da correcção de implementações de tipos de dados abstractos. Exemplo: verificação da implementação do tipo Bool sobre Integer. Exemplo complementar de especificação e implementação: pilhas navegáveis.

Complementos de programação imperativa

Conclusão da aula anterior: implementação de pilhas navegáveis sobre listas.

Mecanismo de passagem de parâmetros em Mathematica.

Simulação discreta estocástica

Conclusão da aula anterior: ordenação de lista in situ usando a passagem de argumento por referência - algoritmos de inserção, selecção e das trocas.

Introdução à simulação discreta estocástica - técnica do sequenciamento de eventos pendentes. Exemplo - simulação de tráfego em troço de autoestrada: identificação das categorias relevantes de eventos.

Simulação discreta estocástica (conc)

Introdução à simulação discreta estocástica - técnica do sequenciamento de eventos pendentes. Exemplo - simulação de tráfego em troço de autoestrada: identificação dos tipos de dados a implementar; pacotes dos eventos e das caps; geração de números pseudo-aleatórios; pacote de observação de variáveis pseudo-aleatórias exponenciais; variáveis de estado do simulador; programa de simulação; resultados da simulação.

Apresentação do projecto

Apresentação do projecto: simulação da experiência de Adleman.

Apoio ao projecto

Traços gerais do desenho dos tipos de dados relevantes para o projecto.

Complementos de programação - reescrita

Introdução à programação com regras de reescrita e aplicações ao processamento de linguagens e à demonstração automática.

Cálculo de Hoare

Introdução ao cálculo de Hoare: linguagem, axiomas e regras. Verificação da correcção de programas imperativos.

Cálculo de Hoare (cont)

Verificação da correcção de programas imperativos.

Cálculo Omega

Cálculo de convergência de ciclos (cálculo Omega): axiomas, regras e exemplo de aplicação. Breve referência ao método de Dijkstra de síntese de pequenos programas imperativos.

Resolução do exame tipo

Explicação da estrutura do exame escrito. Esboço da resolução do exame tipo. Apoio ao projecto.

Apoio ao projecto

Apoio ao projecto.

Aulas de Problemas

---

Aula não realizada por ainda não haver matéria teórica suficiente.

Laboratório

Instalação do sistema Mathematica. Inscrição nas fichas electrónicas. Iniciação à utilização do sistema Mathematica. [aulaP01.nb]

Programação recursiva

Exercícios de programação recursiva. [aulaP02.nb]

Programação imperativa

Exercícios de programação imperativa. [aulaP03-04.nb]

Programação imperativa (conc)

Exercícios sobre programação imperativa.

Programação funcional

Exercícios sobre programação funcional

Complementos de programação

Exercícios de programação funcional, recursiva e imperativa.

Especificação de TDAs

Exercícios de especificação de TDAs.

Tipos de dados abstractos: utilização de pacotes

Exercícios de utilização de pacotes.

Implementação de TDA

Exercícios de implementação do TDA GRAFO.

Implementação de TDA (conc)

Exercícios de implementação do TDA GRAFO.

Tipos de dados abstractos

Exercícios de revisão e consolidação da matéria dada.

Cálculo de Hoare

Verificação da correcção parcial e total de programas imperativos.