No final desta primeira aula prática, os alunos devem ter ficado a perceber:
as especificidades de um SO Multi-utilizador, como o linux, e a noção
dos processos de "login" e "logout" de um utilizador no seu espaço privativo
(noção de "home directory"), protegido com um "username" e uma "password";
os comandos básicos do linux para movimentação na árvore de directorias e
manipulação de ficheiros:
mkdir, cd, pwd, ls, cp, mv, rm, ...;
a forma de invocar o editor vi e a sua filosofia básica de funcionamento:
modo de comandos (reaje imediatamente a cada letra, eventualmente antecedida de um
número repetidor) e modo de inserção (acrescenta caracteres ao texto até se teclar ESC);
os comandos básicos do vi: i, I, a, A, o, O, d, D, y, c, C; e os
delimitadores de certas operações w, W, t, f, ...;
a forma de invocar o compilador de C, gcc, para compilar e ligar um programa
produzindo um executável com um nome diferente de "a.out".
Introdução ao compilador de C da GNU "gcc" (cont.)
Introdução ao utilitário "make" e ao conceito de "makefile"
Resumo:
No final desta aula prática, os alunos devem ter ficado a saber:
os comandos básicos do linux para criação de um novo utilizador e definição de privilégios para acesso aos ficheiros:
adduser, passwd, chmod, e ainda os comandos para saber que processos estão a correr e quem são os utilizadores que estão a trabalhar: ps, who, ...;
os comandos básicos do vi para apagar (d), alterar (c) e copiar para o buffer (y) até uma marca: fim da palavra, fim da linha, determinado caracter, etc.; e o comando para inserir o conteúdo do buffer (colar do inglês "paste") antes ou depois da posição actual do cursor (p, P);
a forma de invocar o compilador de C, gcc, para compilar e ligar um programa separadamente,
produzindo um ficheiro objecto ".o" intermédio;
a forma de criar uma makefile com várias entradas: para compilar e ligar separadamente, para gerar o relatório, para apagar todos os ficheiros intermédios, etc.;
a forma de usar o utilitário make para reconstruir a primeira entrada da makefile, ou uma outra entrada explícita, e ainda a forma de o invocar com um ficheiro que tenha um nome distinto de "makefile".
Para aprender todos estes novos conceitos foi analisado ao pormenor, modificado, compilado e testado um programa em C --exemplo1: leitura de uma sequência de naturais, contagem dos pares e eliminação dos repetidos consecutivos-- tendo sido criada uma função auxiliar para verificar se um número é par.
Para além de se ter analisado de novo a makefile criada na aula anterior (para compilar o primeiro exemplo, gerar a respectiva documentação e limpar os ficheiros intermédios) com o objectivo de clarificar a estrutura e conteúdo desse tipo de ficheiros de dependências e reconstrução e o funcionamento do "make" para que os alunos fossem capazes de usar à vontade esse utilitário do linux,
no final desta aula prática, os alunos devem ter ficado a saber:
o que é uma "script" e o que são os ficheiros "escondidos" de configuração (personalização) da "shell", tais como .bashrc e .bash_profile;
o que são as variáveis de ambiente e como se pode ver o seu valor actual (echo)
como se altera/acrescenta a variável de ambiente PATH e como se criam alias;
o que é o compilador LaTeX e como se usa;
o que é um documento marcado (anotado) em LaTeX e quais são as classes de documentos mais vulgares (article, report, book, letter), bem como os pacotes que geralmente se devem importar (babel/portuges e inputenc/latin1);
quais são os comandos básicos do LaTeX e quais as suas formas correntes: \cmd{..txt..} ou \begin{cmd}..txt..\end{cmd}.
No final desta aula prática, os alunos devem ter ficado a saber:
Definir novos tipos em C usando a declaração typedef
Definir e usar (ler, escrever, atribuir) tipos enumerados
Usar a instrução condicional switch
Usar arrays indexados por caracteres (para contar ocorrências)
Para aprender todos estes novos conceitos foram resolvidos e codificados em C os
seguintes problemas:
Exemplo: leitura do dia da semana na forma de um número entre 1 e 7 e tratamento interno na
forma de uma valor enumerado de dom a sab;
Exemplo 9:
ler uma string até ao fim-de-linha e contar o número de vezes que nela ocorre cada caracter, mostrando no fim o número de ocorrências das letras.
No final desta aula prática, os alunos devem ter ficado a saber:
Manipular de formas diversas Strings, pensando-as como arrays de caracteres com um Terminador especial
Para aprender todos estes novos conceitos foram resolvidos e codificados em C os
seguintes problemas:
Exemplos 10 (variantes a, b, c):
ler duas strings até ao fim-de-linha e procurar todas as ocorrências da segunda dentro da primeira,
permitindo "wild-cards" na segunda.
Exemplos 11:
ler uma string e contar o número de palavras nela existentes, face a um conjunto de "separadores"
pré-definidos.
Algoritmos de processamento de strings: "pattern matching" e "splitting"
Passagem de argumentos na invocação de programas
Programação em C (cont.)
Resumo:
No final desta aula prática, os alunos devem ter ficado a saber:
Manipular Strings, pensando-as como apontador ("pointer") para caracter
Manipulação dos parâmetros passados ao invocar um programa
Para aprender todos estes novos conceitos foram resolvidos e codificados em C os
seguintes problemas:
Exemplos 10 (variantes d):
ler duas strings até ao fim-de-linha e procurar todas as ocorrências da segunda dentro da primeira,
permitindo o "wild-card *" em qualquer posição da segunda; NOTA: apenas foi esboçado o algoritmo (e terminado o programa em casa).
Exemplos 12:
receber uma string e um "separador" como argumentos da função "main()" e fazer o splitting dessa string, escrevendo as sub-componentes (versão 1) e guardando-as numa tabela ("array de strings") (versão 2).
Algoritmos de processamento de strings: "splitting" por caracter e por formato variável
Passagem de argumentos na invocação de programas
Programação em C (cont.)
Resumo:
No final desta aula prática, os alunos devem ter ficado a saber:
Manipular Strings e Tabelas ("arrays de strings"), pensando-as como "arrays" de caracteres e como apontador ("pointer") para caracter
Ordenar palavras
Manipular os parâmetros passados ao invocar um programa (revisão)
Utilizar o comando *scanf em diferentes variantes para decompor uma String em partes fixas e variáveis
Para aprender todos estes novos conceitos foram resolvidos e codificados em C os
seguintes problemas:
Exemplos 12:
receber uma string e um "separador", como argumentos da função "main()", e fazer o splitting dessa string, guardando as
sub-strings numa tabela ("array de strings") de modo a poder escrevê-las ordenadas alfabeticamente (versão 2).
Exemplos 13:
ler um comando de linha, dentro de um conjunto limitado de hipóteses e com formato (sintaxe) rígida, reconhecer o comando e separar os seus argumentos, usando a função sscanf.