Saltar para:
Logótipo
This page in english Ajuda Autenticar-se
Clube de Leitura  Vamos a Livros
Você está em: Início > EIC0005

Fundamentos da Programação

Código: EIC0005     Sigla: FPRO

Áreas Científicas
Classificação Área Científica
OFICIAL Fundamentos da Programação

Ocorrência: 2019/2020 - 1S Ícone do Moodle

Ativa? Sim
Página Web: https://web.fe.up.pt/~jlopes/doku.php/teach/fpro/index
Unidade Responsável: Departamento de Engenharia Informática
Curso/CE Responsável: Mestrado Integrado em Engenharia Informática e Computação

Ciclos de Estudo/Cursos

Sigla Nº de Estudantes Plano de Estudos Anos Curriculares Créditos UCN Créditos ECTS Horas de Contacto Horas Totais
MIEIC 193 Plano de estudos a partir de 2009/10 1 - 6 70 162

Docência - Responsabilidades

Docente Responsabilidade
João António Correia Lopes Regente

Docência - Horas

Teóricas: 3,00
Teórico-Práticas: 2,00
Tipo Docente Turmas Horas
Teóricas Totais 1 3,00
João António Correia Lopes 3,00
Teórico-Práticas Totais 8 16,00
Ricardo Pereira de Magalhães Cruz 4,00
Fernando José Cassola Marques 4,00
Rui Carlos Camacho de Sousa Ferreira da Silva 4,00
João António Correia Lopes 4,00
Mais informaçõesA ficha foi alterada no dia 2019-09-20.

Campos alterados: Métodos de ensino e atividades de aprendizagem, Observações, Programa

Língua de trabalho

Português

Objetivos

1 - INTRODUÇÃO

A fluência no processo de desenvolvimento de software é um pré-requisito básico para o trabalho dos engenheiros de informática. Para usar computadores na resolução de problemas de maneira eficaz, os estudantes devem ser competentes na leitura e escrita de programas usando linguagens de programação de Alto Nível.

2 - OBJETIVOS ESPECÍFICOS

O objetivo global desta Unidade é dar ao estudante a capacidade de criar algoritmos e de usar uma linguagem de programação para implementar, testar e depurar algoritmos para resolver problemas simples.

O estudante será capaz de entender e usar os conceitos fundamentais de programação e a abordagem funcional da programação, especificamente a programação livre de efeitos (effect-free), onde as chamadas de função não têm efeitos colaterais e as variáveis são imutáveis, e de contrastar esta abordagem com a abordagem imperativa.

3 - DISTRIBUIÇÃO PERCENTUAL

Componente científica: 40%
Componente tecnológica: 60%

Resultados de aprendizagem e competências

No final da unidade, espera-se que o estudante consiga resolver problemas através do desenvolvimento de programas de complexidade média, usando as abordagens ou paradigmas de programação imperativa e funcional.

Mais especificamente, o estudante deverá ser capaz de:

  1. Projetar, implementar, testar e depurar um programa que use as construções fundamentais de programação, cálculos básicos, estruturas condicionais e iterativas padrão, entrada/saída simples, persistência (ficheiros) e exceções.
  2. Entender a abstração de dados e usar tipos de dados simples ou compostos.
  3. Entender a abstração procedimental e usar a definição de funções, passagem de parâmetros, recursão.
  4. Implementar algoritmos básicos que evitem atribuir a um estado mutável ou considerar igualdade de referência.
  5. Escrever funções úteis que aceitem e devolvam outras funções (funções de ordem mais elevada).
  6. Entender variáveis e escopo léxico num programa (incluindo closures).
  7. Definir e usar iteradores, geradores e outras operações em coleções, incluindo operações que tomam funções como argumentos (map, reduce/fold e filter) e compreensões em listas.
  8. Usar as ferramentas de programação que ajudam a escrever, testar e documentar programas em computador de acordo com as melhores práticas de programação.

Modo de trabalho

Presencial

Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)

Não são necessários conhecimentos prévios.

Programa


  • Introdução ao Pensamento Computacional, algoritmos e programação com Python.

  • Conceitos fundamentais de programação: tipos de dados simples; variáveis, expressões e declarações; fluxo de programa, condicionais, iteração; funções, passagem de parâmetros, recursão; persistência.

  • Tipos de dados compostos: strings, tuplos, conjuntos, listas, dicionários.

  • Programação livre de efeitos usando chamadas a função sem efeitos colaterais e variáveis imutáveis.

  • Funções como cidadãos de primeira classe e closures.

  • Funções de ordem superior: map, reduce/fold e filter.

  • Geradores e compreensões em listas.

  • Estratégias de resolução de problemas.

  • Ferramentas de programação, teste e depuração.

Bibliografia Obrigatória

Peter Wentworth, Jeffrey Elkner, Allen B. Downey, and Chris Meyers; How to Think Like a Computer Scientist — Learning with Python 3 (Disponível livremente em PDF e em HTML)

Bibliografia Complementar

Steven F. Lott; Building Skills in Python - A Programmer's Introduction to Python, FreeTechBooks, 2010 ([HTML])
Allen Downey; Think Python - How to Think Like a Computer Scientist, Green Tea Press, 2nd Edition, Version 2.2.23, 2015 ([HTML] [PDF])
David Mertz; Functional Programming in Python, O’Reilly Media, 2015 ([PDF])
Ernesto Costa; Programação em Python. ISBN: 978-972-722-816-4

Métodos de ensino e atividades de aprendizagem

O envolvimento contínuo do estudante com a unidade é promovido, através do estudo e discussão dos tópicos, distribuídos previamente em Notebooks Jupyter, tanto em aulas teóricas e teórico-práticas, como através de trabalhos de programação dentro e fora das aulas.

O estudante é encorajado a encontrar as melhores ideias para resolver problemas específicos, executá-las e implementar as soluções de programação, de forma elegante, legível e eficiente (em tempo e em espaço) usando a linguagem de programação Python.

São usadas ferramentas de correção automática de código para aumentar a rapidez do feedback dado aos estudantes.

As aulas teóricas (T) são usadas para apresentar e discutir os tópicos do programa, usando um computador ligado a um projetor multimédia.

As aulas teórico-práticas (TP) são usadas para ajudar os estudantes a entender os tópicos do programa e a resolver as tarefas de programação semanais.

As tarefas de programação em aula teórica e fora das aulas são dadas, semanalmente, para melhorar o desenvolvimento regular e eficaz dos processos de aprendizagem individual autónomo e são avaliadas em tarefas do Moodle.

Tarefas em sala de aula são usadas para avaliação somativa no final de cada aula teórica através de questionários no Moodle.

Os estudantes são incentivados a usar uma App Web (Play) contendo exercícios de programação selecionados por tema: exercícios (fáceis) para realizar antes da aula teórica, exercícios (dificuldade média) para realizar antes das tarefas semanais (RE) e exercícios (difíceis) para realizar antes das provas práticas em computador (PE).

Os estudantes são expostos, nos trabalhos em sala de aula, ao uso do mesmo ambiente de trabalho (IDE Spyder, PEP8 e pylint e submissão das respostas) que é usado mais tarde nas avaliações individuais (PE).

Os estudantes são incentivados a passar pela "Clínica", assegurado por monitores, nas primeiras semanas de aulas e sempre que se mostre necessário no acompanhamento em sala de aula, especialmente durante o primeiro mês.

Software

Anaconda Distribution 2019.03 for Linux (https://www.anaconda.com)
Spyder3 (included in Anaconda)
Python 3.7 (included in Anaconda)

Palavras Chave

Ciências Físicas > Ciência de computadores > Programação

Tipo de avaliação

Avaliação distribuída sem exame final

Componentes de Avaliação

Designação Peso (%)
Teste 80,00
Trabalho prático ou de projeto 20,00
Total: 100,00

Componentes de Ocupação

Designação Tempo (Horas)
Estudo autónomo 92,00
Frequência das aulas 70,00
Total: 162,00

Obtenção de frequência

Os estudantes são admitidos ao exame teórico (TE), se não excederem o limite de faltas (25% do número total de aulas teórico-práticas estimadas) e se obtiverem um mínimo de 40% pelo menos numa das duas últimas avaliações práticas em computador (MAX(PE04, PE05) >= 40%).

Fórmula de cálculo da classificação final

A avaliação será baseada nas seguintes componentes:

LE = Perguntas de resposta múltipla, sobre conceitos de programação, realizadas individualmente no Moodle em sala de aula teórica (são selecionadas as melhores 20 classificações de um total de 26)
RE = Exercícios de programação semanais para casa e nas aulas teórico-práticas (são selecionadas as melhores 10 classificações de 13)
PE = Avaliação prática em computador a realizar, individualmente, no Moodle (são selecionadas as melhores 3 classificações de 5)
TE = Avaliação teórica através de questionário de respostas múltiplas, a realizar individualmente no Moodle com consulta de um livro

Classificação final = 10% LE + 10% RE + 50% PE + 30% TE

Observações:

  1. É exigida classificação mínima de 40% na componente TE
  2. É exigida a classificação mínima de 40% em pelo menos uma das 2 últimas provas (PE04 ou PE05)
  3. Terá lugar uma segunda prova teórica (TE02) para estudantes admitidos e que faltem ao exame com justificação válida, ou de recuperação para os estudantes admitidos e que não obtiveram a nota mínima. No último caso, a nota nesta componente é limitada a 50%
  4. Se a classificação final for maior que 17, o estudante pode ser submetido a um exame oral e a nota final é a média das duas classificações
  5. Os estudantes que atingirem pelo menos 90% nas tarefas de avaliação presencial e de programação semanal (LE + RE), a meio do semestre podem optar por manter a nota e fazer um pequeno projeto para atingir a nota máxima (100%) nessas duas componentes

Provas e trabalhos especiais

A avaliação desta unidade usa três tipos de provas::

  1. Exercícios em aula teórica, ou fora de aula, relacionadas com os tópicos atuais, a serem submetidos no Moodle e classificados automaticamente
  2. Avaliação prática em computador de um conjunto de pequenos programas ou funções, utilizando o Moodle e classificados automaticamente, e com consulta de textos de referência
  3. Avaliação teórica através de um questionário de escolha múltipla no Moodle, com consulta de um livro, para avaliar a aprendizagem dos conceitos fundamentais de programação e a capacidade dos estudantes usarem e discutirem os melhores algoritmos e estruturas de dados para problemas específicos

Avaliação especial (TE, DA, ...)

No caso de estudantes que não frequentem as aulas e dispensem a avaliação semanal (LE e RE), a classificação final será a média pesada da classificação das restantes componentes de avaliação: avaliação prática em computacional (PE) e avaliação teórica (TE), realizadas tal como os estudantes ordinários.

Classificação final = 60% PE + 40% TE

Observações:

  1. É exigida classificação mínima de 40% em cada um dos componentes PE e TE
  2. É exigida a classificação mínima de 40% em pelo menos uma das 2 últimas provas (PE4 ou PE5)
  3. Terá lugar uma segunda prova teórica (TE02) para estudantes admitidos e que faltem ao exame com justificação válida, ou de recuperação para os estudantes admitidos e que não obtiveram a nota mínima. No último caso, a nota nesta componente é limitada a 50%
  4. Se a classificação final for maior que 17, o estudante pode ser submetido a um exame oral e a nota final é a média das duas classificações

Melhoria de classificação

No ano letivo seguinte, o estudante pode solicitar melhoria de classificação que inclui a avaliação prática em computador PE04 ou PE05 e a avaliação teórica TE01 ou TE02, com consulta de apenas um livro, igual à realizada pelos estudantes inscritos.

Classificação final = 60% PE + 40% TE

Observações:

  1. É exigida classificação mínima de 40% em cada um dos componentes PE e TE
  2. Se a classificação final for maior que 17, o estudante pode ser submetido a um exame oral e a nota final é a média das duas classificações

Observações

Nenhuma classificação de componente individual (LE, RE, PE, TE) pode ser reutilizada noutra inscrição na unidade curricular.
Recomendar Página Voltar ao Topo
Copyright 1996-2021 © Faculdade de Engenharia da Universidade do Porto  I Termos e Condições  I Acessibilidade  I Índice A-Z  I Livro de Visitas
Página gerada em: 2021-10-20 às 09:25:43 | Política de Utilização Aceitável | Política de Proteção de Dados Pessoais