Aula 2


1. Objectivos

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.


2. Notas

  1. 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.
  2. 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).
  3. As funções de cada módulo devem ser facilmente identificáveis através de prefixos. Sugerem-se os prefixos CAD, F e LEI.
  4. 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.
  5. 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.

3. Exercícios

  1. 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.
  2. 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.
  3. 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.
  4. 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).
  5. 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.
  6. 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.
  7. 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.

Página concebida e mantida por Eng. Manuel Menezes de Sequeira (última actualização 2006/07/07)
Copyright © 1996-2001 ISCTE