(sistema AWK)
20 de Novembro de 1998
1 Objectivos e Organização
Este trabalho prático tem como objectivos levar os alunos, através da resolução de problemas reais, a:
Quanto ao relatório a elaborar, para entregar
na altura da apresentação do trabalho, deve ser claro e sucinto
e, além do enunciado, deverá conter exemplos de utilização
com os respectivos resultados.
2 Enunciados
Questao 1 (Concurso de Professores)
Num determinado ficheiro existe a descrição de uma série de candidatos a ocupar vagas de docente numa universidade portuguesa. Sobre cada candidato, conhece-se o seu nome, o grau académico atingido (licenciado, doutorado, agregado), o número de anos efectivos de ensino (não incluindo os anos que esteve de licença sem serviçoo docente alocado) e o número total de anos de trabalho para essa instituição (como docente e/ou técnico / investigador).
Considerando esse ficheiro como tendo a seguinte estrutura:
nome! grau! anosEns! anosCasapretende-se um sistema de produção que, através de um conjunto de regras (que traduzem a legislação interna da instituição), proceda à classificação automática dos candidatos, indicando para cada um o cargo (assistente-estagiário, assistente, professor convidado, professor uxiliar, professor associado e professor catedrático) que lhe pode ser atribuido.
Escreva a base de regras em awk, atendendo
à seguinte legislação:
Adicionalmente a essa classificação, o seu
sistema em awk deve:
Questao 2 (Disciplinas)
Na folha de trabalhos práticos anterior (folha
1) foi-lhe pedido que, utilizando um grafo de dependências para modelar
as precedências entre as
unidades de ensino de cursos de formação
profissional, fosse capaz de sugerir uma possível sequência
de estudo dos módulos, e de
identificar todas as unidades das quais uma dada unidade
de ensino depende.
Para resolver tal problema, foi necessário começaar
por ler o nome das unidades de ensino e as precedências entre elas
para poder
construir em memória uma representação
do grafo.
Neste contexto, pretende-se agora usar o awk para
ler um ficheirode texto que foi escrito por alguém com o seguinte
formato
disciplina: disc1, disc2, discn(n >= 1 ) e gerar (produzir) um módulo em C com o código para inicializar a matriz de adjacências.
Para isso deve interpretar cada linha do ficheiro de entrada (com a estrutura acabada de mostrar), como indicando que as unidades de ensino disc1, disc2 e discn são precedências obrigatrias da unidade disciplina.
O código C a ser gerado deve ser uma sequência
de atribuições da constante true ás componentes
do array bidimensional (matriz) grafo cujos indices constituem
um ramo do grafo de dependências.Por exemplo, para a linha acima
ilustrada, seriam escritas as seguintes atribuições:
grafo[disc1][disciplina] = true;Porém para que tal funcione é necessário atribuir a cada um dos identificadores de unidades de ensino um número inteiro que possa ser indice do array em causa. Para isso, e ainda em relação ao exemplo anterior, seria necessário atribuir códigos (1, 2, 3, 4) ás quatro unidades de ensino referidas pela ordem com que aparecem (da esquerda para a direita), sendo então geradas no fim instruções C correspondentes à definição de tais constantes:
grafo[disc2][disciplina] = true;
grafo[discn][disciplina] = true
#define disciplina 1
#define disc1 2
#define disc2 3
#define discn 4
Note que se um identificador de unidade voltar a aparecer
não se poderá criar um código; nesse caso mantém-se
o código já atribuido, não se podendo escrever uma
nova linha de definição.
Questao 3 (Labirinto)
Neste caso, propoem-se um exercício semelhante em tudo ao enunciado anterior, mas considerando o problema do labirinto que foi proposta também na folha 1 de trabalhos práticos.
A estrutura do ficheiro de texto de entrada, onde estará
descrito o labirinto com a indicação das quadriculas (definidas
pelas suas coordenadas) que estão ligadas, será escolhida
pelos alunos.