Laboratório de Programação II 

 


Referência Cruzada

Descrição

O objetivo deste trabalho é criar uma referência cruzada das palavras existentes em um arquivo 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); // retorna 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 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{ // DEVE INCLUIR OCCORRENCIA.H
string s;
Palavra *prox;
Ocorrencia *ListaDeOcorrencias;
public:
// Construtores

// sets e gets para todos os atributos

// insere uma ocorrência na lista
int adicionaOcorrencia(int numeroParagrafo, int posicao);
};

class ListaOrdenadaDePalavras // DEVE INCLUIR Palavra.h
{
int qtdOcorrencias;
Palavra *primPalavra;

public:
// Construtores

// insere uma ocorrência na lista, mantendo a lista em ordem alfabética
int adicionaPalavra(string palavra, int numeroParagrafo);
void imprimeListaPalavras();
};

class LinhaTexto {
string Linha;
public:
// Construtores
void setTexto(string L); // Define a linha de texto a ser manipulada
// retorna a próxima palavra da linha, através do parâmetro L.
// Caso a linha tenha acabado, retorna 1, caso contrário, retorna 0
int getNextPal (string &P);
};




Programa Exemplo

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>

using namespace std;

#include "ArquivoTexto.h"
#include "LinhaTexto.h"
#include "ListaOrdenadaDePalavras.h"

int main()
{
int nLinha =0, fimArquivo, fimLinha;
string Palavra, L;

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
{
fimArquivo = Arquivo.getNextLine(L);
if (fimArquivo==1)
break;
nLinha++; // conta mais uma linha lida do arquivo
Linha.setTexto(L); // define o texto da linha
do // laço que passa em cada palavra de uma linha
{
// obtém a próxima palavra da linha
fimLinha = Linha.getNextPal(Palavra);
if (fimLinha==1)
break;
Lista.adicionaPalavra(Palavra, nLinha); // coloca a palavra na lista
} while (1);
} while (1);
// Imprime toda a lista de palavras e suas ocorrências
Lista.imprimeListaPalavras();
return 0;
}


Entrega e Apresentação

O trabalho, que poderá ser desenvolvido em duplas, deverá ser entregue no dia 02/05/2018, durante o horário da aula.

O trabalho será apresentado NA SALA DE AULA.

Todos os trabalhos já devem ter sido enviados pelo Moodle antes do horário da aula.
A entrega no Moodle deverá ser feita através da submissão de um arquivo .zip (não RAR, nem 7z ou qualquer outro formato), contendo o projeto completo do programa. O programa deverá ser nomeado da seguinte forma: nome_sobrenome.cpp. No caso de uma dupla, usar a forma: nome1sobrenome1_nome2sobrenome2.zip.

O programa deverá ser executado no sistema operacional Linux. Não serão aceitos trabalhos que não compilem corretamente no g++, sob hipótese nenhuma.

Durante a apresentação, todos os alunos devem estar presentes e aptos a responder quaisquer perguntas. Respostas insatisfatórias ou a ausência do aluno acarretarão em anulação da nota final.

Todos os trabalhos deverão ser entregues até o dia da apresentação, e apresentados na data marcada - não serão aceitos trabalhos fora do prazo.

Trabalhos copiados resultarão em nota zero para todos os alunos envolvidos.