Objetivos e resultados da aprendizagem

Programação II

 

Os principais objetivos desta Unidade Curricular são:

- aprofundar os conhecimentos de programação em linguagem C, através do estudo de alguns tópicos avançados como ficheiros binários e memória dinâmica;

- adquirir conhecimentos sobre algoritmia, em particular algoritmos recursivos, de ordenação e de pesquisa, e análise de complexidade dos algoritmos.

No final da Unidade Curricular o estudante deve ser capaz de 

- resolver problemas utilizando a linguagem de programação em C e os conceitos avançados estudados, assim como desenvolver competências de algoritmia, em particular em problemas que envolvam recursividade, ordenação e pesquisa;

- analisar a eficiência dos algoritmos, através da respetiva análise de complexidade, de forma a usar os algoritmos mais eficientes na resolução de problemas.

 

Programa

Programação II

 

PARTE A - Tópicos avançados da linguagem C

1 - Introdução: estruturas, ponteiros e ficheiros de texto

2 - Gestão de memória dinâmica

3 - Ficheiros binários

4 - O pré-processador do C. Passagem de parâmetros a main. Construção de bibliotecas de funções

5 - Introdução a "Makefiles"

PARTE B - Algoritmos

6 - Algoritmos recursivos

7 - Análise de complexidade dos algoritmos

8 - Estruturas de dados sequencial (Listas) com armazenamento sequencial

8.1 - Implementação de Listas usando memória dinâmica

8.1.1 - Criar uma Lista

8.1.2 - Inserir um elemento numa Lista

8.1.3 - Remover um elemento numa Lista

8.2 - Algoritmos de ordenação (os elementos de uma Lista)

8.2.1 - Iterativos: Selecção e Borbulhagem/Bubblesort

8.2.2 - Recursivos: Separação/Quicksort e Fusão

8.3 - Algoritmos de pesquisa (um elemento numa Lista)

8.3.1 - Iterativos: exaustiva, sequencial e binária

8.3.2 - Recursivos: binária

8.4 - Tabelas de dispersão (Hash)

 

Bibliografia

Programação II

 

"Estruturas de Dados e Algoritmos em C", 2008

António Manuel Adrego da Rocha

FCA - Editora Informática. Coleção: Tecnologias de Informação

ISBN: 9789727222957

 

"Algorithms in C, Parts 1-5 (Bundle): Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms", 3rd Edition, 2001

By Robert Sedgewick

Addison-Wesley Professional

ISBN: 0201756080

 

"Elementos de Programação com C", 3ª Edição Actualizada e Aumentada, 2006

Pedro João Valente Dias Guerreiro

FCA - Editora Informática. Coleção: Tecnologias de Informação

ISBN: 9789727225101

 

"Introdução à Programação Usando C", 2006

António Manuel Adrego da Rocha

FCA - Editora Informática. Coleção: Tecnologias de Informação

ISBN: 9789727225248

 

Avaliação

Programação II

 

A avaliação no período de Aprendizagem consiste no seguinte :

- 2 Fichas de Trabalho: 5 valores (a realizar ao longo do semestre nas aulas práticas e valendo 2.5 valores cada)

- 2 Testes Escritos: 15 valores (7 + 8)

- Assiduidade: 75%

Aprendizagem = Fichas de Trabalho + Testes Escritos

em que,

- Assiduidade < 75%  ==>  Reprovado e Não Admitido a Exame

- Fichas de Trabalho < 1.25 (em 5)  ==>  Reprovado e Não Admitido a Exame

- Aprendizagem < 5.5  ==>  Reprovado e Não Admitido a Exame

- Aprendizagem >= 9.5  ==>  Aprovado e Dispensado de Exame

- Outros casos  ==>  Reprovado e Admitido a Exame

Exames = Fichas de Trabalho + Teste Escrito

em que,

- Fichas de Trabalho (realizadas ao longo do semestre): 5 valores

- Teste Escrito (Exame): 15 valores

 

Datas dos testes

Programação II

 

Tipo

Data

Salas

Frequência 1 22/04; 18h -
Frequência 2 27/05; 18h -
Ficha Trabalho 1 18/03 - 20/03 Aula prática
Ficha Trabalho 2 03/06 – 05/06 Aula prática

Testes do ano lectivo 2018-2019 (2º Semestre):

Frequência 1: Enunciado + Resolução

Frequência 2: Enunciado + Resolução

Exame Época Normal: Enunciado

Exame Época Recurso: Enunciado

 

Resultados obtidos nos vários tipos de avaliação

Programação II

 

Ano letivo 2019/2020, 1º Semestre (necessita de senha de acesso - ver rodapé de enunciado de testes)

Fichas de Trabalho

Frequência 1

Frequência 2 (Os testes podem ser consultados durante a próxima aula prática (3ª feira, 11h)

Aprendizagem (Fichas de Trabalho + Frequência 1 + Frequência 2)

Exame Época Normal (Fichas de Trabalho + Teste Escrito)

Exame Época Recurso (Fichas de Trabalho + Teste Escrito)

 

Apontamentos

Programação II

 

PARTE A - Tópicos avançados da linguagem C

1. Estruturas (struct)

     Apontadores

     Ficheiros de texto   Exemplos

2. Gestão de memória dinâmica   

     Exemplo

3. Ficheiros binários  

     Mais sobre ficheiros binários   

     Exemplo   Enunciado

4. O pré-processador do C

     Passagem de parâmetros a main

5. Introdução a makefiles

PARTE B - Algoritmos

6. Algoritmos recursivos

7. Análise de complexidade dos algoritmos

8. Estruturas de dados sequencial (Listas) com armazenamento sequencial

8.1. Implementação de Listas usando memória dinâmica

8.2. Algoritmos de ordenação

8.2.1. Iterativos: por selecção e por troca/borbulhagem (Bubble Sort)

8.2.2. Recursivos: por separação (Quick Sort) e por fusão (Merge Sort)   Exemplos

8.3. Algoritmos de pesquisa:

8.3.1. Iterativos: Exaustiva, Sequencial e Pesquisa Binária

8.3.2. Recursivos: Pesquisa Binária

8.4. Tabelas de Dispersão (Hash)   Mais sobre Tabelas de Hash

 

Sebenta

Capítulo 1 - Introdução

Capítulo 2 - Estrutura de Dados sequencial com armazenamento sequencial

 

Outros apontamentos

Strings

 

Exemplos

Exemplo 1: Memória dinâmica + Ordenação

Exemplo 2: Memória dinâmica + Ordenação + Pesquisa

Exemplo 3: Inserção e remoção de um elemento de um vetor ordenado

Exemplo 4: Remover todos os elementos de um vetor ordenado entre E1 e E2

 

Folhas práticas

Programação II

 

Folha 1.1 - Estruturas (struct)

Folha 1.2 - Ponteiros

Folha 1.3 - Ficheiros de texto

Folha 2 - Gestão de memória dinâmica

Folha 3 - Ficheiros binários

Folha 4 - O pré-processador do C

Folha 5 - Introdução a makefiles

Folha 6 - Algoritmos recursivos

Folha 7 - Análise de complexidade dos algoritmos

Folha 8.1 - Implementação de Listas usando memória dinâmica

Folha 8.2 - Algoritmos de ordenação

Folha 8.3 - Algoritmos de pesquisa

Folha 8.4 - Tabelas de dispersão (Hash)

 

Outras folhas práticas

Strings

 

Bibliotecas

Gerar Números Aleatórios

VetoresInteiros

Ordenação (Vetores de Inteiros)

Pesquisa (VetoresInteiros)

FicheirosBinarios_PESSOA

 

Funções implementadas fornecidas:

LerVectorALUNO (lê de um ficheiro com elementos do tipo ALUNO)

 

Exercícios das folhas práticas implementados:

Ficheiros Binários - Exercício 2

 

Exemplos implementados:

Exemplo de Hash fechado

Exemplo de Hash aberto

Exemplo de Ordenação

Exemplo de Pesquisa

 

Ficheiros de texto fornecidos:

Pessoas.txt

tarefas.txt

dados.txt

dados1.txt

dados2.txt

dados3.txt

dados4.txt

dados5.txt

discos.txt

multiplos.txt

texto.txt

medicoes01.txt

medicoes02.txt

medicoes03.txt

medicoes04.txt

medicoes05.txt

Inteiros.txt

InteirosPositivos.txt

Reais.txt

ReaisPositivos.txt

ReaisNegativos.txt

InteirosSemRepetidos.txt

InteirosComRepetidos.txt

 

Entrada no sistema

Usar Conta UNIX

 

Plataformas de Avaliação

Programação II

 

Acesso através de computadores das salas 6.14 e 6.19

Plataforma de Avaliação

 

Acesso através de outros computadores

Plataforma de Avaliação

 

Horário

Programação II

 

Horas

Segunda

Sala

Terça

Sala

Quarta

Sala

Quinta

Sala

Sexta

Sala

8

  

 

 

 

 

 

 

 

 

 

9

 

 

 

 

TE

6.03

 

 

PL2

6.19

10

 

 

 

 

TE

6.03

 

 

PL2

6.19

11

 

 

 

 

ATEND

G4.2

 

 

PL3

6.19

12

 

 

 

 

 

 

 

 

PL3

6.19

13

 

 

  

  

 

 

 

 

 

 

14

 

 

 

 

PL1

6.14

PL4

6.19

PL5

6.19

15

 

 

 

 

PL1

6.14

PL4

6.19

PL5

6.19

16

 

 

 

 

 

 

 

 

 

 

17

 

 

 

 

 

 

 

 

 

 

18

 

 

ATEND

G4.2