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 conceito são apresentados pelo professor e discutidos com a turma, seguido de exemplos demonstrativos;

2 – Método experimental: método activo onde o aluno desenvolve o conhecimento através da resolução problemas e o desenvolvimento de projectos laboratoriais individuais ou em dinâmica de grupo.

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.