Lecture Notes para apoio à UC de Fundamentos de Programação (LEFT) [download]
Pasta Google Drive com Sample Code [open]

  • M1 – Computação, Computadores, Programação, Introdução à linguagem Python.
  • M2 – Como abordar um problema de programação. Estruturas básicas da programação imperativa.
  • M3 – Estruturas básicas da programação imperativa em Python: Comandos básicos, expressões, afetações. Comando alternativo (if then else else if); Ciclos (while, for). I/O básico no terminal (input / print).
  • M4 – Condicionais e Ciclos, combinação de ciclos e condicionais, acumulação de informação durante o ciclo, limitada e ilimitada.
  • M5 – Estruturação de programas e sua importância; funções; parâmetros; variáveis Locais; excepções (introdução); declarações de tipos (introdução).
  • M6 – Modularização de programas em funções (1); Manipulação de Pontos e Rectângulos; Representações de dados usando tipos estruturados; Tuplos; Dataclasses; Anotações de Tipos e verificação usando a extensão MyPy.
  • M7 – Processamento de strings; Algoritmos simples de processamento de texto; Slicing de strings e sequências
  • M8 – Modularização de programas em funções (2): Desenvolvimento de App Phone Book. Listas e Dicionários com Dataclasses; Variáveis Locais e Globais; I/O básico para ficheiro.
  • M9 – Modularização de programas em funções (3): Simulação de movimento de foguetão espacial usando modelo físico detalhado: Cálculo Numérico; aproximação computacional de sistema dinâmico através de diferenças finitas; Deteção de extremos (máximos e ou mínimos); Visualização gráfica usando PyGame.
  • M10 -Modularização de programas em funções (4); Máquina de Estado (Conceitos fundamentais); Máquina de Estado Universal.
  • M11 – Grafos: representação de grafo usando dicionário e listas. Algoritmos de Grafos. Deteção de ciclos. Algoritmo de Pesquisa em Largura num Grafo (BFS).
  • M12 – Modularização de programas por decomposição funcional top-down (1). Ordenação usando a função sort de Python; I/O; Ficheiros de texto; Processamento de Texto; Cross-reference e Multiplicidade de Palavras;
  • M13 – Modularização de programas por decomposição funcional top-down (2). Geração de números (pseudo-aleatórios), biblioteca Python random. Anotações de Tipo. I/O Ficheiros de texto. Caso de Estudo: Modelo de Linguagem NanoLM usando uma cadeia de markov e bigramas.
  • M14 – Modelo de Memória da linguagem Python; Memória; Objectos; Referências; Modos de cópia shallow copy / deep copy; Visualização de estruturas de dados ligadas
  • M15 – Algoritmos de Inserção e Pesquisa em arrays (memória de acesso sequencial / linear): inserção linear em posição indicada : O(n); inserção linear no fim: O(1) em geral; pesquisa linear: O(n): pesquisa ordenada: O(n): inserção ordenada: O(n). Introdução à complexidade e notação Big O.
  • M16 – Algoritmos de Ordenação: insertion sort, selection sort. Análise simplificada de complexidade temporal: O(n) e O(n2). Complexidade de operações associadas aos tipos nativos de Python
  • M17 – Pesquisa Binária. Algoritmos recursivos de divisção e conquista. Análise simplificada de complexidade temporal: O(log n). Análise Empírica da eficiência O(log n).
  • M18 – Algoritmos de Ordenação: heap sort. Análise simplificada de complexidade temporal: O(nlog n). Modelação de fila com proridade usando um heap.
  • M19 – Algoritmos de Grafos. Noção de Grafo. Problema do Caminho mais curto num grafo pesado. Algoritmo de Dijkstra. Análise de Complexidade do Algpritmo de Dijkstra, solução O(n2) e solução O(nlog n) usando fila com prioridades em heap.
  • M20 – Recursão. Programação funções definidos recursivamente. Exemplos: factorial, máximo divisor comum, combinações binomiais. Use de memorização.
  • M21 – Definição de estruturas de dados recursivas. Árvores Binárias de Pesquisa: inserção; pesquisa; remoção; percurso em-ordem.
  • M22 – Algoritmos recursivos de ordenação. TreeSort. QuickSort. Análise Simplificada de Complexidade.
  • M23 – Programação Funcional em Python. Princípios de Programação sem estado mutável. Combinadores. Funções lambda. Parâmetros Funcionais. Funções de Ordem Superior. Map e Reduce. Compreensão de listas. Geradores.
  • M24 – Programação com Objectos em Python. Objectos e Classes. Variáveis de instância e métodos. Tipos Abstratos de Dados e Encapsulamento. Estruturação de Programas em classes. Programando uma classe Fila de Espera usando objectos. Reprogramando a app Phone Book (M8) em estilo OO.