Código: | CC114 | Sigla: | CC114 |
Áreas Científicas | |
---|---|
Classificação | Área Científica |
OFICIAL | Ciência de Computadores |
Ativa? | Sim |
Página Web: | http://www.dcc.fc.up.pt/~fds/aulas/EDados/1314/ |
Unidade Responsável: | Departamento de Ciência de Computadores |
Curso/CE Responsável: | Licenciatura em Ciência de Computadores |
Sigla | Nº de Estudantes | Plano de Estudos | Anos Curriculares | Créditos UCN | Créditos ECTS | Horas de Contacto | Horas Totais |
---|---|---|---|---|---|---|---|
L:AST | 0 | Plano de Estudos a partir de 2008 | 1 | - | 7,5 | - | |
L:CC | 69 | Plano de estudos de 2008 até 2013/14 | 1 | - | 7,5 | - | |
MI:ERS | 176 | Plano de Estudos a partir de 2007 | 1 | - | 7,5 | - |
Reforçar as competências de programação dos alunos numa perspectiva orientada aos objectos. Será dada ênfase aos conceitos de desenho orientado aos objectos, e desenho e implementação de estruturas de dados e algoritmos básicos. Serão introduzidas noções sobre eficiência e análise de complexidade de algoritmos.
Ao concluirem esta disciplina os alunos deverão saber:
* usar os princípios básicos de uma linguagem de programação orientada aos objectos, nomeadamente herança, polimorfismo, interfaces, classes do tipo colecção e iteradores.
* escrever classes que implementem algumas estruturas de dados básicas, como sejam listas, pilhas, filas, conjuntos, dicionários, tabelas de hash, árvores e grafos.
* usar uma API que implemente listas, pilhas, filas, conjuntos, e tabelas de hash.
* desenvolver algoritmos básicos associados às estruturas de dados estudadas.
* usar algumas das técnicas algoritmicas, nomeadamente recursão, retrocesso (backtracking) e dividir-para-conquistar (divide-and-conquer).
* usar um ambiente de desenvolvimento de software (IDE) e um depurador de erros (debugger).
* Princípios de programação orientada aos objectos: herança, hierarquia de classes, polimorfismo, classes interface abstractas; classes colector e iteradores.
* Programação com eventos: métodos para lidar com eventos; propagação de eventos; lidar com excepções.
* Definição de um TAD (Tipo Abstracto de Dados). Estruturas abstractas de dados: definição e implementação; vectores e matrizes, listas, conjuntos, pilhas, filas, listas duplamente ligadas e listas circulares, tabelas de hash, árvores binárias e árvores binárias de pesquisa, árvores mais gerais, filas de prioridade e heaps.
* Estratégias para resolução de problemas: recursão, backtracking e divide-and-conquer;
* Noções básicas de análise de algoritmos: identificação de comportamento no melhor, pior e caso médio; Ordem de grandeza; medidas empíricas de performance, compromisso entre espaço e tempo.
* Métodos de ordenação: inserção, bolha, merge-sort, quicksort.
* Métodos de pesquisa: pesquisa binária em vectores ordenados, pesquisa em listas, pesquisa em profundidade e em largura em árvores.
* Breve introdução ao grafos. Implementação. Algoritmos de caminho mínimo em grafos.
Aulas Teóricas
Exposição dos conceitos associados à programação orientada a objectos, estruturas de dados e algoritmos básicos.
Aulas Teórico-Práticas
As aulas teórico-práticas serão usadas para resolução de problemas que exemplifiquem o uso das estruturas de dados e algoritmos dados nas aulas teóricas. Será usada a linguagem de programação Java na implementação dos exemplos.
Aulas Práticas
As aulas práticas serão usadas para apoio aos estudantes nas dúvidas concretas que apresentem sobre a resolução dos exercícios propostos. As aulas envolverão:
* O uso da linguagem de programação Java.
* O uso de um IDE para desenvolvimento: Eclipse ou NetBeans.
* A resolução de exercícios propostos para treino de programação.
* A resolução de exercícios propostos para efeitos de avaliação.
Designação | Peso (%) |
---|---|
Exame | 70,00 |
Trabalho laboratorial | 30,00 |
Total: | 100,00 |
Designação | Tempo (Horas) |
---|---|
Estudo autónomo | 102,50 |
Frequência das aulas | 70,00 |
Trabalho laboratorial | 30,00 |
Total: | 202,50 |
Perdem frequência os alunos que não tenham uma assiduidade às aulas superior a 60% das aulas dadas.
A avaliação tem em conta as seguintes provas:
1. Exame escrito - 70%
2. Provas práticas de resolução de problemas - 30%
A classificação final na disciplina obtém-se fazendo a soma pesada das classificações parciais das provas de avaliação.
Ficam aprovados os alunos que satisfaçam as duas condições seguintes:
1. tenham uma classificação média nos testes escritos superior ou igual a 35%.
2. tenham uma classificação final superior ou igual a 9.5 valores.
Os estudantes que não sejam aprovados pela avaliação distribuída ou que pretendam efectuar melhoria de nota, têm direito a realizar o exame de recurso para recuperar apenas as componentes de avaliação escrita (i.e. 70% da classificação final).
1. Não haverá concessão de dispensa de frequência da componente prática. A presença nas aulas é fortemente aconselhada.
2. Os alunos trabalhador-estudante não estão dispensados do cumprimento das regras para obtenção de frequência.
Os alunos que tendo tido aproveitamento na disciplina em anos lectivos anteriores e pretendam efectuar exame para melhoria de nota no presente ano lectivo, terão os seus exames avaliados para 20 valores.