Fundamentos de Programação

Conhecimentos de Base Recomendados

Sem conhecimentos base recomendados.

Métodos de Ensino

Nesta unidade curricular são utilizadas as seguintes metodologias de ensino:

1. Método expositivo: método explicativo onde fundamentos teóricos e conceitos são apresentados pelo docente e discutidos com a turma. Os conceitos e informações serão apresentados aos alunos através, por exemplo, de apresentações em slides ou discussões orais. Será utilizado nas aulas para a estruturação e esquematização da informação.

2. Método demonstrativo: baseia-se na exemplificação pelo docente de uma operação técnica ou prática que se deseja aprendida. Centra-se na forma como se executa uma dada operação, destacando as técnicas, as ferramentas e os equipamentos mais adequados. Será por exemplo utilizado em aulas práticas e laboratoriais.

3. Método interrogativo: processo que se fundamenta em interações verbais, sob a condução do docente, adotando o formato de questões e respostas. Permite obter maior dinâmica na aula e consolidar a aprendizagem. Será utilizado por exemplo para recordar elementos de aulas anteriores, e em revisões do conteúdo lecionado.

4. Métodos ativos: serão utilizadas técnicas pedagógicas em que o aluno é o centro do processo de aprendizagem, sendo um participante ativo e envolvido na sua própria formação. O docente assume o papel de facilitador, estimulando o pensamento crítico, a colaboração, a criatividade e a autonomia dos alunos. Serão aplicados nas aulas para alcançar um ambiente de aprendizagem dinâmico e mais duradouro.

Resultados de Aprendizagem

No final da unidade curricular o aluno deverá ficar habilitado a:

1. Identificar e classificar os diferentes tipos de linguagens de programação. Comparar e analisar as suas principais características. Justificar a necessidade de compiladores e ilustrar a sua utilização.

2. Definir algoritmo. Indicar e analisar as abordagens utilizadas para descrever algoritmos. Construir soluções recorrendo a algoritmos, fluxogramas e pseudo-código.

3. Analisar as principais características da linguagem C. Explicar o percurso de normalização desta linguagem. Discutir o ciclo de desenvolvimento e a estrutura de um programa em C.

4. Classificar os diferentes tipos de dados na linguagem C. Discutir os vários tipos e formatos das variáveis. Ilustrar a criação, inicialização e modificação de variáveis. Demonstrar e justificar a utilização de casting entre variáveis.

5. Explicar o controlo de fluxo condicional e incondicional. Identificar os diferentes tipos de estruturas de controlo condicional de tomada de decisão. Justificar a representação de valores lógicos. Ilustrar a aplicação e precedência de operadores lógicos e relacionais. Criar programas que demonstrem a utilização de testes e condições.

6. Identificar as diferentes estruturas disponíveis para controlo condicional interativo. Justificar a utilização de operadores e atribuições para otimização do código. Identificar cenários e utilizações de ciclos infinitos. Criar programas que demonstrem a utilização de ciclos.

7. Definir funções. Classificar os tipos de funções. Identificar as principais funções pré-definidas. Explicar a sintaxe de uma função. Demonstrar a utilização de múltiplos ficheiros. Criar programas que exemplifiquem o funcionamento e utilidade das funções.

8. Explicar o conceito de vetor. Classificar os tipos de vetores. Analisar como é efetuada a sua criação, acesso e manipulação. Demonstrar como podem ser criadas constantes. Definir String. Identificar como é realizada a sua criação, acesso e manipulação. Criar programas que façam uso de vetores e strings.

9. Definir ficheiros. Comparar ficheiros com streams. Classificar os tipos de ficheiros e de streams. Analisar as diferentes operações associadas aos ficheiros. Discutir os modos de abertura. Sumariar as soluções existentes para delimitar o fim de um ficheiro. Demonstrar a passagem de parâmetros através da linha de comando. Criar programas que leiam e escrevam em ficheiros.

10. Analisar o funcionamento do pré-processador. Explicar o conceito de diretivas. Classificar os diferentes tipos de diretivas. Ilustrar como obter os resultados produzidos pelo pré-processador. Criar programas que demonstrem a utilização dos vários tipos de diretivas.

Programa

1. Linguagens de programação. Tipos de linguagens. Linguagens de baixo nível. Linguagem assembly. Linguagens de alto nível. Linguagens estruturadas. Linguagens orientadas a objetos. Tipos de dados, estruturas de controlo (sequencial, seleção, repetição). Compiladores (gcc) e assembladores.

2. Introdução à algoritmia: fluxogramas e pseudo-código. Definições. Declaração de variáveis e atribuição de valores. Operadores aritméticos, relacionais e lógicos. Comando de desvio condicional. Comandos de repetição.

3. Linguagem de programação em C. Características. Etapas da normalização (K&R C, ANSI C, C18). Ciclo de desenvolvimento: código fonte, pré-processador, compilação, linkagem, execução. Estrutura de um programa em C: #include, main(), blocos, comentários (/* */, //).

4. Tipos de dados. Variáveis: definição, tipo, nomenclatura, declaração, atribuição, aritmética. Variáveis Inteiras: tipos (short, long, signed, unsigned), formato. Funções printf() e scanf(). Variáveis Reais: Norma IEEE 754, tipos, formato. Caracteres: tipos, formato. Casting: implícito, explicito.

5. Testes e Condições. Valores Lógicos. Operadores Relacionais (<, <=, >, >=, ==, !=). Operadores Lógicos (!, &&, ||). Precedência de Operadores. Controlo de fluxo condicional. Instrução if…else: indentação, blocos de instruções, instruções encadeadas. Instrução switch. Controlo de fluxo incondicional: break.

6. Ciclos. Otimização: operadores de incremento/decremento (++, –), atribuições compostas (+=, -=). Controlo de fluxo condicional iterativo: while, for, do…while. Ciclos Infinitos. Controlo de fluxo incondicional: continue.

7. Funções. Tipos de funções: pré-definidas (stdio.h, string.h), definidas pelo utilizador. Sintaxe: tipo de retorno, nome, parâmetros, corpo, return. Variáveis locais. Posição da função: protótipo. Múltiplos Ficheiros: header files (.h). Passagem de parâmetros por valor e por referência.

8. Vetores. Definição. Classificação: unidimensionais, multidimensionais. Declaração, inicialização e acesso aos elementos. Passagem de vetores para uma função. Constantes: #define, const. Strings: declaração, inicialização, leitura e escrita (printf, puts, scanf, gets). Funções para manipulação de strings.

9. Ficheiros. Definição. Tipos de streams: stdin, stdout, stderr. Tipos de ficheiros: binários, texto (EOL: n, nr). Operações: abertura, leitura, escrita, fecho. Modos de abertura: r, w, a, r+, w+, a+, b. Macro EOF e função end-of-file (feof()). Passagem de argumentos através da linha de comando (argc(), argv()).

10. Pré-processador. Diretivas. Expansão de Macros: #define, macros definidas por utilizadores (constantlike, function-like), macros pré-definidas, operadores (, #, ##). Inclusão de ficheiros: #include. Compilação condicional.

Docente(s) responsável(eis)

Métodos de Avaliação

Avaliação
  • - Parte teórico-prática com a realização de um exame ou duas provas escritas e uma parte prática com a realização de um trabalho final. - 100.0%

Estágio(s)

NAO

Bibliografia

Damas, L. (1999). Linguagem C (24th ed.). FCA.

Gustedt, J. (2019). Modern C. Manning Publications.

King, K. N. (2008). C Programming: A Modern Approach, 2nd Edition (2nd ed.). W. W. Norton & Company.

Perry, G., & Miller, D. (2013). C Programming Absolute Beginner’s Guide (3rd ed.). Que Publishing.

Rocha, A. (2006). Introdução à programação usando C. FCA.