Planeamento

Aulas Laboratoriais

Introdução à utilização da linguagem C.

Introdução à utilização da linguagem C: compilação e execução de exemplos simples.

Introdução à programação em C

Codificação em C de exemplos em python e diretamente.

Programação em C: carateres

Programação em C: construção de exemplos simples com carateres.

Vectores e strings

Construção de exemplos com vectores e cadeias de carateres.

Matrizes e vectores de estruturas

Matrizes a duas dimensões.
Estruturas, vectores de estruturas e estruturas de vectores.

Depurador de código: debugger

Utilização do debugger: gdb.
Exemplos de aplicação.

Ordenação elementar

Algoritmos de ordenação.

Ordenação por selection, insertion, bubble, quick, merge.

Gestão de memória

Gestão de memória em C: malloc, realloc, free.
Ferramenta valgrind.

Listas simplesmente ligadas

Listas simplesmente ligadas.

Reserva e libertação dos elementos da lista.
Inserções na lista: início, fim e em posição.

Hash tables

Hash-tables: encadeamento externo, linear probing, double-hashing.

Árvores

Árvores: binárias e AVL.

Ordenação eficiente

Algoritmos de ordenação:  heap, counting e radix (LSD e MSD).
Filas com prioridade.

Aulas Teóricas

Apresentação

Apresentação; Breve introdução à linguagem C e ao Linux. Exemplos.

Introdução à linguagem C

Linguagem C: tipos, operadores e estruturas de controlo. Exemplos.

Input e output em C

Introdução à programação em C: Input/Output. Exemplos.

Vectores e Strings

Introdução à programação em C: tabelas unidimensionais, bidimensionais e strings. Exemplos.

Funções

Introdução à programação em C: Funções. 

Elementos da linguagem C

Linguagem C: sintaxe, tipos, estrutura.

Estruturas

Linguagem C: estruturas de dados. Exemplos.

Introdução aos algoritmos

Introdução aos algoritmos: crescimento de funções, notação assimptótica.

Algoritmos de ordenação elementares

Algoritmos de ordenação elementares: bubble, selection e insertion.

Algoritmos de ordenação eficientes

Algoritmos de ordenação eficientes: quick e merge sort.

Algoritmos de ordenação eficientes

Algoritmos de ordenação eficientes: heap sort.

Algoritmos de ordenação eficientes

Algoritmos de ordenação eficientes: radix sort (LSB e MSB).

Ponteiros

Linguagem C: introdução aos ponteiros.

Ponteiros

Linguagem C: ponteiros e tabelas. Exercícios.

Reserva dinâmica de memória

Reserva dinâmica de memória: malloc e free.

Ponteiros para estruturas

Linguagem C: ponteiros para estruturas.

Estruturas auto-referenciadas

Linguagem C: estruturas auto-referenciadas.

Tipos de dados abstractos

Tipos de dados abstractos (ADTs).

Tabelas de dispersão

Tabelas de dispersão (hash tables).

Árvores binárias

Árvores binárias.

Árvores equilibradas

Árvores equilibradas: AVL (Adelson-Velsky and Landis).