Treinar a divisão de programas em módulos. Rever o conceito
de função. Treinar processamento de cadeias de caracteres e
entradas/saídas. Utilização dos argumentos de comando de
linha.
- Coloque as funções que for desenvolvendo em módulos
apropriados (quando for caso disso). Sugerem-se os
módulos cadeias.c, para
funções de processamento de cadeias de caracteres, ficheiros.c, para funções de
manipulação de ficheiros, e leituras.c,
para funções de leitura de valores introduzidos pelo
utilizador.
- Repare que estes módulos vão ser utilizados ao longo de
vários programas. Assim, só devem ser neles incluidas
as funções suficientemente genéricas para ser
plausível a sua reutilização no futuro (ainda que
longínquo).
- As funções de cada módulo devem ser facilmente
identificáveis através de prefixos. Sugerem-se os
prefixos CAD, F e LEI.
- Por "espaços em branco" entendem-se espaços,
tabuladores, fins-de-linha, etc., i.e., todos os
caracteres para os quais a função isspace() devolve valor lógico
verdadeiro.
- Crie um ficheiro de cabeçalho tipos.h,
não correspondendo a nenhum módulo em particular, que
contenha a definição de um tipo lógico como se segue:
typedef enum {Falso,
Verdadeiro} Logico;
Deve incluir este ficheiro em todos
os módulos que necessitem de variáveis lógicas.
- Escreva uma função size_t
CADapara(char destino[], char origem[]) que copie a
cadeia origem para a cadeia destino
eliminando todos os espaços em branco iniciais e finais
(mas não os intermédios). Deve devolver o comprimento
da cadeia resultante.
- Escreva uma função size_t
CADlimpa(char destino[], char origem[]) que copie a
cadeia origem para a cadeia destino
eliminando todos os espaços em branco iniciais e finais,
e que substitua todas as sequências de espaços em
branco intermédias num único espaço. Deve devolver o
comprimento da cadeia resultante.
- Escreva uma função size_t
CADpalavra(char palavra[], char cadeia[], long n)
que copie a palavra n da cadeia cadeia
para a cadeia palavra. Consideram-se palavras
sequências contíguas de caracteres que não sejam
espaços em branco. A primeira palavra é a palavra 0
(zero). Deve devolver o comprimento da palavra copiada,
ou zero se não existe a palavra requerida.
- Escreva uma função long
CADposicao(char cadeia[], char procura[], Logico ignora)
que procure a cadeia procura na cadeia cadeia.
A procura deve ignorar ou não as diferenças entre
maiúsculas e minúsculas consoante o valor de ignora.
A função deve devolver a posição da cadeia encontrada
ou -1 caso ela não exista. Considere que uma cadeia
vazia existe sempre noutra na posição 0 (zero).
- Escreva um programa que, dado o nome
dum ficheiro como argumento de comando de linha, conte o
número de caracteres, palavras e linhas nesse ficheiro.
Utilize uma função void
Fconta(FILE *entrada, long *nc, long *np, long *nl).
O programa deve ler do teclado caso não seja
especificado nenhum ficheiro de entrada.
- Escreva um programa que, dado o nome
dum ficheiro como argumento de comando de linha, o
escreva no ecrã tendo o cuidado de transformar as
sequências de espaços em branco num único espaço, mas
mantendo todos os fins de linha. Sequências de espaços
em branco no início e no final das linhas devem ser
eliminadas. Devem-se também converter todas as letras
para maiúsculas. O programa deve ler do teclado caso
não seja especificado nenhum ficheiro de entrada. Pode
admitir que as linhas no ficheiro de entrada não excedem
os 1000 caracteres.
- Escreva um programa que concatene dois
ficheiros de texto (nomes dados como argumentos de
linha). O resultado deve ser escrito no ecrã. O primeiro
dos ficheiros será aquele que contiver maior número de
palavras.