1º Trabalho Prático de
Programação II
1. Organização e calendário
- O trabalho deverá ser começado a realizar imediatamente
após disponibilização do enunciado.
- O relatorio final, com uma página A4 no máximo, as
listagens (com as páginas numeradas), bem como uma
disquete com o programa (que será depois devolvida),
deverão ser entregues até às 17:30 horas do dia 11 de
Abril de 1997 na recepção da entrada principal do ISCTE
para colocação no cacifo do Eng. Manuel Menezes de
Sequeira, ou entregues, até à mesma data e hora, ao
referido docente.
- O relatório consistirá numa breve explicação do
funcionamento (interno) do programa e justificações
para as opções tomadas.
- O código deverá ser devidamente organizado e comentado:
- O programa deverá ser dividido em funções com
utilidades bem definidas. Cada função não
deverá exceder 70 linhas de comprimento.
- O programa deverá possuir o seguinte cabeçalho:
/*
* Programa: formata.c
*
* Descricao: ...
*
* Notas:
*
* Autores:
* Nome e numero dos autores, ISCTE.
*/
- Cada função deverá possuir o seguinte
cabeçalho (E e S significam entrada e saída
respectivamente):
/*
* Funcao: prega()
*
* Accao: ...
*
* Parametros:
* tabua (E/S) - tabua a pregar.
* prego (E) - prego a pregar.
*
* Devolve: ...
*/
- Devem ser comentadas todas as zonas do programa
de mais difícil compreensão. Podem ser
utilizados os seguintes estilos de comentário:
/* Comentario de uma linha... */
/*
* Ou de varias linhas, acerca de um conjunto de
* instrucoes:
*/
int i;
double x;
i = 10; /* inicialização de i */
- Devem ser evitadas as variáveis globais.
2. Descrição
O objectivo do trabalho é a realização de um programa de
formatação de ficheiros de texto. A formatação será feita de
acordo com directivas contidas nos ficheiros de texto. O programa
deve aceitar dois argumentos de linha de programa opcionais. Por
exemplo, se o programa se chamar formata.exe,
as seguintes formas de chamada devem ser possíveis:
- formata
- Formata texto lido a partir do teclado (até ao Ctr-Z, em MS-DOS, que assinala
um "pseudo fim do ficheiro"). O texto formatado
deve ser escrito no ecrã.
- formata nome_entrada
- Formata texto contido no ficheiro nome_entrada. O texto formatado
deve ser escrito no ecrã.
- formata nome_entrada nome_saida
- Formata o texto contido no ficheiro nome_entrada e coloca o texto
formatado no ficheiro nome_saida.
2.1 Directivas de formatação
O texto será formatado de acordo com determinadas directivas
de formatação encontradas no início das linhas. As directivas
começam sempre pelo caracter '.'.
Qualquer linha começada por '.'
deverá ser interpretada como uma linha contendo apenas
directivas. Se uma linha contiver directivas inválidas deverá
ser ignorada. Caracteres expúrios numa directiva devem ser
ignorados.
Deverão ser usadas as seguintes directivas de formatação:
- .E - Justificar o texto
à esquerda.
- .D - Justificar o texto
à direita.
- .C - centrar o texto nas
linhas. Se não for possível colocar igual número de
espaços à esquerda e à direita, a margem esquerda deve
ficar maior.
- .Ln ou .L n - a largura
desejada para as linhas passa a ser n. O
caracter de fim-de-linha não conta no cálculo da
largura das linhas. O valor máximo para n é de
100. O mínimo é 1.
2.2 Texto de entrada
A interpretação do texto de entrada será feita como se
segue:
- Qualquer sequência de espaços e tabuladores deve ser
interpretada como um único espaço separador de
palavras.
- Cada fim-de-linha na entrada (salvo os que se encontrarem
em linhas com directivas) assinala o final dum parágrafo
de texto. As únicas excepções são:
- Sequências de fins-de-linha, espaços e
tabuladores no início do ficheiro de entrada
devem ser ignorados.
- Sequências de fins-de-linha, espaços e
tabuladores (contendo pelo menos um fim-de-linha)
que não estejam no início do ficheiro de
entrada devem ser interpretados como assinalando
o final de um único parágrafo.
- As directivas de formatação, como é óbvio, não
deverão constar no ficheiro de resultado.
- Não se deverá impor nenhum limite quer ao tamanho das
palavras quer ao comprimento das linhas (gerando um
parágrafo) constantes no ficheiro de entrada.
- A largura inicial desejada para as linhas deverá ser de
70 caracteres.
- A justificação inicial deverá ser à esquerda.
2.3 Texto de saída
- Cada parágrafo deve ser terminado por um duplo
fim-de-linha. Assim, ficará uma linha em branco entre
cada um deles.
- Palavras maiores que a largura de linha desejada devem
ser escritas inteiras numa linha separada.
2.4 Exemplos
Apresenta-se de seguida um exemplo simples:
.L20 número de colunas passa de 70 a 20
.C justificação ao centro
Isto é um texto que vai ficar centrado com 20 colunas.
Ainda centrado.
.E justificação à esquerda
Um novo parágrafo justificado à esquerda.
.L30 número de colunas passa a 30
Continuação do parágrafo anterior mas agora com 30 caracteres por linha.
Novo parágrafo.
.D justificação à direita
Agora a justificação é à direita.
O resultado da formatação deverá ser (as linhas com traços
verticais não constam da saída, servindo apenas para os
leitores deste documento contarem as colunas com maior
facilidade):
||||||||||||||||||||
Isto é um texto que
vai ficar centrado
com 20 colunas.
||||||||||||||||||||
||||||||||||||||||||
Ainda centrado.
||||||||||||||||||||
||||||||||||||||||||
Um novo parágrafo
justificado à
esquerda.
||||||||||||||||||||||||||||||
Continuação do parágrafo
anterior mas agora com 30
caracteres por linha.
||||||||||||||||||||||||||||||
Novo parágrafo.
||||||||||||||||||||||||||||||
Agora a justificação é à
direita.
Um exemplo mais completo pode ser encontrado em (recomenda-se
vivamente que se teste o programa com estes ficheiros):
Nota
Todos os casos que não sejam cobertos por este enunciado
deverão ser resolvidos com bom senso.