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:
- 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
obrigatoriamente as classes ArquivoTexto,
Ocorrencia, Palavra, ListaOrdenadaDePalavras, LinhaTexto, conforme as descrições a seguir.
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.