Métodos Computacionais

Objetivos

Saber
    As ferramentas de um ambiente de desenvolvimento de software.
    As construções essenciais de uma linguagem de programação imperativa.
    Introdução ao desenho e análise de algoritmos
    Noções fundamentais de bases de dados relacionais.
    Introdução à linguagem SQL

Saber Fazer
    Decompor um problema em problemas mais simples.
    Escrever um programa, numa linguagem de programação imperativa (Python).
    Testar um programa num determinado ambiente de programação.
    Desenhar e testar algoritmos numa linguagem imperativa (Python)
    Desenhar uma base de dados relacional simples
    Formular interrogações em SQL.

Soft-Skills
    Capacidade de concretização de objetivos.
    Capacidade de gestão do tempo e cumprimento dos prazos.

Caracterização geral

Código

11574

Créditos

9.0

Professor responsável

Joaquim Francisco Ferreira da Silva, Pedro Manuel Corrêa Calvente Barahona

Horas

Semanais - 4

Totais - 69

Idioma de ensino

Português

Pré-requisitos

Nenhuns.

Bibliografia

Introdução à Programação (em Python):

 • Allen B. Downey. Think Python: How to Think Like a Computer Scientist (version 2.0.17).
    http://greenteapress.com/wp/think-python-2e/

 • John V. Guttag. Introduction to Computation and Programming Using Python, MIT PRESS, 2016

 • Ernesto Costa. Programação em Python - Fundamentos e Resolução de Problemas, FCA, 2015

Algorithmia (in Python):

 • Data Structures and Algorithms in Python, by Michael T. Goodrich, Roberto Tamassia, and Michael H. Goldwasser, Wiley, 2013  

• https://doc.lagout.org/programmation/python/Data Structures and Algorithms in Python [Goodrich, Tamassia & Goldwasser 2013-03-18].pdf

Databases (Tutoriais):
    • http://www.sqlitetutorial.net/sqlite-python/
    • https://www.pythoncentral.io/introduction-to-sqlite-in-python/


Método de ensino

A matéria (teórica) é explicada na primeira parte das aulas, que é imediatamente seguida de exercícios de aplicação na segunda parte das aulas (teórico-práticas). Desta forma os alunos podem imediatamente aperceber-se dos conceitos ensinados e verificar as dificuldades que possam sentir na sua exploração. 

Método de avaliação

Regras de avaliação

Avaliação contínua

A avaliação contínua é feita através de 2 projetos e 1 teste.
O primeiro teste e projeto (T1 e P1) abrangem os tópicos de Programação, Estruturas de Dados e Algoritmos;
O segundo projeto (P2) cobre os tópicos de Bases de Dados.

Notas
A nota da avaliação contínua, Nca, é a média ponderada das notas teóricas e práticas (todas as notas entre 0 e 20)
Nca = 40% T + 60% P

A nota teórica, NT, é a média do teste, T = T1

A nota prática, NP, é a média aritmética dos projetos, P1 e P2.
P = (P1 + P2) / 2

Aprovação
Um aluno com uma nota de avaliação contínua positiva (Nca> = 9,5) obtém aprovação com uma classificação final (Nf) igual a Nca, arredondada às unidades.

Frequência
Um aluno obtém frequência se a sua nota prática for pelo menos 8 valores após o arredondamento (ou seja, P > = 7,5)

Exame
Os alunos reprovando na avaliação contínua, mas tendo obtido frequência, podem fazer um exame final. A nota teórica após o exame, NTe, é o máximo do teste e notas do exame, Nte = max(T1, E). Após o exame, a nota final, Nf, é a média ponderada das notas teóricas e práticas finais.

Nf = 40% Nte + 60% P

Os alunos que obtiveram aprovação em avaliação contínua podem melhorar sua nota final no exame. Sua nota final é obtida com as mesmas regras.

Conteúdo

1. Introdução à programação em Python
    a. Tipos de dados
        • Tipos de dados básicos (números, caracteres)
        • Estruturas de dados
            Listas, Vetores, Matrizes
            Strings
            Dicionários
    b. Programação Imperativa
        • Controle de execução
        • Execução Sequencial, Condicional e Repetida
        • Funções
            Funções encadeadas e recursivas
        • Entrada-saída
            • Sistemas de operação e tipos de arquivos
            • Arquivos de texto (leitura de / escrita para)
            • Processamento Básico de Texto

2. Algoritmos
   a. Pesquisa em Vetores
      • Sequencial vs. Bipartida
   b. Algoritmos de ordenação
      • Bolha, Inserção, QuickSort e MergeSort
      • Correcção e Complexidade
   c. Simulação
      • Variáveis e Processos​Aleatórios
      • Automatos (Estado e Transições)
   d. Propriedades de Grafos e Algoritmos
      • Polinomiais:
          • Árvores de cobertura Mínima (Prim)
          • Distâncias mais curtas (Floyd-Wrashall)
      • Não deterministicos
          • Coloração de Gráfos
          • Circuitos Hamiltoniano
      • Correcção e Complexidade
     
3. Introdução às Bases de Dados
   a. Bases de dados relacionais
      • História e Aplicações
   b. Modelação e Desenho
      • Entidades, Atributos e Chaves
      • Modelo Entidade-Relacão
      • Álgebra Relacional (Breve Apresentação)
   c. Normalização
      • Dependências Funcionais
      • Fechos
      • Formas Normais
   d. Consulta de bases de dados relacionais
      • SQL - Linguagem de Consulta Estruturada (DDL e DML)
      • Consultas - Junções, Funções de Agregação, Vistas
      • Consistência; "Triggers"

Cursos

Cursos onde a unidade curricular é leccionada: