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:


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.