PUCRS
Faculdade de Informática
Programação de Software Básico - 4613S-04
Referência Cruzada
Descrição (em construção)
O objetivo deste trabalho é
criar uma referência cruzada das palavras existentes em um
arquoivo texto. O programa deve contar quantas vezes cada palavra, com
mais de 3 letras ocorre no texto, desconsiderando o fato das letras
serem maiúsculas ou minúsculas. O programa deve ignorar símbolos de pontuação.
Ao final do processamento o
programa deverá gerar um arquivo com a lista de palavras do texto ordenadas em ordem alfabética e apresentando as posições onde a palavra ocorreu no texto.
Por 'posições'
entende-se o número do parágrafo e a
posição da palavra dentro do parágrafo,
considerando que o parágrafo é uma string
única.
Requisitos da Implementação
A implementação, deverá respeitar os seguintes aspectos:
- O programa deve rodar com arquivos editados no LINUX
- O arquivo a ser processado deve ser informado na linha de comando que executa o programa
- Cada parárafo do texto é finalizado por um ENTER.
- A estrutura que armazena as palavras deve ser uma lista encadeada de objetos.
- A lista encadeada de palavras deve ser mantida em ordem alfabética;
- Não devem ser usadas variáveis globais
- O programa deve conter obrigatóriamente as classes ArquivoTexto, LinhaTexto, ListaOrdenadaDePalavras, ListaOcorrencias, Palavra, Ocorrencia, conforme as descrições abaixo.
Classes Obrigatórias
class ArquivoTexto{
public:
// Construtores
int openText(string Nome); // abre o arquivo que contém o texto
int getNextLine(string &L);
// informa a próxima linha do arquivo, através do
parâmetro L. Caso o arquivo tenha acabado,
// retorna 1, caso contrário, retorna
0
void closeText();
};
class LinhaTexto {
string Linha;
public:
// Construtores
void setTexto(string L); // Define a linah de texto a ser manipulada
int getNextPal (string &P);
// informa a próxima palavra da linha, através do
parâmetro L. Caso a linha tenha acabado,
// retorna 1, caso contrário, retorna
0
};
class Ocorrencia{
int numero; // numero do parágrafo onde ocorreu a palavra.
int posicao // posição da palavra dentro do parágrafo
Ocorrencia *prox;
public:
// Construtores ......
// sets e gets para todos os atributos
};
class Palavra{
string s;
Palavra *prox;
Ocorrencia *ListaDeOcorrencias;
public:
// Construtores
// sets e gets para todos os atributos
int adicionaOcorrencia(int
numeroParagrafo, int posicao); // insere uma ocorrência na lista
};
class ListaOrdenadaDePalavras
{
int qtdOcorrencias;
Palavra *primPalavra;
public:
// Construtores
int
adicionaPalavra(string palavra, int numeroParagrafo, int
posicao); // insere uma ocorrência na lista, mantendo a lista
//em ordem alfabética
void imprimeListaPalavras();
};
Programa Exemplo
// ************************************************************
//
// Aquivo exemplo para o trabalho de REFERÊNCIA CRUZADA
// ATENÇÃO: Para compilar este arquivo é necessário
// criar as seguintes classes:
//
// ************************************************************
#include <iostream>
using namespace std;
#include "ArquivoTexto.h"
#include "LinhaTexto.h"
#include "ListaPalavras.h"
int main()
{
int nLinha = 0, pos;
string Palavra, linhadetexto;
ListaOrdenadaDePalavras Lista(); // objeto que gerencia a lista
ArquivoTexto Arquivo(); // objeto que gerencia o arquivo
LinhaTexto Linha(); // objeto que gerencia uma linha
Arquivo.openText("AveMaria.txt");
do // laço que passa em cada linha do arquivo
{
fim = Arquivo.getNextLine(linhadetexto);
if (fim==1)
{
Arquivo.closeText();
break;
}
nLinha++; // conta mais uma linha lida do arquivo
Linha.setTexto(linhadetexto); // define o texto da linha
do // laço que passa em cada palavra de uma linha
{
fimLinha =
Linha.getNextPal(Palavra); // obtém a próxima palavra da
linha
if (fimLinha==1)
break;
pos = linhadetexto.find(Palavra); // Encontra a palavra na string através do método FIND.
// coloca a palavra na lista.
Lista.adicionaPalavra(Palavra, nLinha, pos);
} while (1);
} while (1);
Lista.imprimeListaPalavras();
}
Data de Entrega
O trabalho, que poderá
ser desenvolvido em duplas, deverá ser entregue no dia 21/10/2008, durante o horário da aula.