Ir ao conteúdo

Posts recomendados

Postado

Implemente em C um programa que leia um arquivo texto (no formato .txt) e imprima, em ordem
alfabética, as palavras e a suas frequências no texto. A leitura do arquivo deverá desprezar espaços
em branco e sinais de pontuação, que serão considerados separadores de palavras. Além disso, a
leitura deverá converter todas as letras maiúsculas em minúsculas.
A pesquisa e inserção das palavras do texto deverão ser implementadas As palavras e suas
frequências deverão ser inseridas em uma estrutura de dados chamada Árvore Rubro Negra, cujo
código deverá ser implementado considerando as funções básicas de inserção, busca e
caminhamento. O código pode ser encontrado em livros e sites na internet.

Entrada
A entrada de dados será um arquivo de texto contendo um texto qualquer sem a ocorrência de
caracteres acentuados devendo usar a codificação ASCII. Seu algoritmo receberá como parâmetro
o nome do arquivo texto a ser lido.
Exemplos de execução:
./tp3 entrada.txt
./tp3 entrada1.txt
./tp3 entrada2.txt

Saída
Deverá ser impresso na tela um relatório contendo as palavras seguidas da frequência de ocorrência
no texto.

  • Amei 1
Postado

@Jhzer Verne     não entendi essa "arvore"   ,  ao que me parece seja apenas uma struct ou typedef struct , com esse nome ,  e voce pode usar o comando fscanf ,  para ler cada palavra do arquivo ,  converter todas as letras para minusculas e contar a qtd de vezes de cada palavra no arquivo ,  e depois que voce fizer um codigo sobre esse exercicio ,  poste ele aqui , para vermos vomo esta e em que podemos ajudar  ......

  • Curtir 1
Postado

@Jhzer Verne     creio que sim !  ,     vou fazer aqui como teste ,  porém não podemos dar codigos prontos ,  conforme as Regras do furum ,  entao voce precisa mesmo postar um codigo sobre esse exercicio .  e ajudaremos se precisar de alguma correção .

Postado
21 horas atrás, Jhzer Verne disse:

A leitura do arquivo deverá desprezar espaços
em branco e sinais de pontuação, que serão considerados separadores de palavras. Além disso, a
leitura deverá converter todas as letras maiúsculas em minúsculas

 

Você já tem a definição de palavra aí no enunciado mesmo. Sem considerar a árvore não entendo o propósito do exercício, porque quando o instrutor fala em árvores o aluno já deve ter estudado há tempos vetores e estruturas por exemplo. E quando fala em árvores RB é um outro estágio, bem depois. Afinal tem as árvores binárias, as B-trees, as AVL, Trie... Tudo antes.

 

Só que aí o enunciado sugere que o cara procure na internet o código para as tais árvores :D Folclórico.

 

Na verdade nunca fiz um curso de C na vida, mas acho que não ia querer fazer esse aí. :( 

 

De volta ao programa

 

2 horas atrás, Jhzer Verne disse:

Você sabe resolver sem utilizar a árvore?


Apenas abra o arquivo e leia as coisas, letra a letra, o simples. Ao identificar cada palavra é claro que vai precisar de uma estrutura para gravar, com as mesmas simples coisas que iria colocar na árvore: a palavra e um contador.

 

Sem nada muito elaborado, basta um vetor de estruturas com as palavras e o contador. 

 

E se você insere as palavras pela popular e conhecida ordem alfabética então é trivial ver se a palavra já apareceu antes. Olhe uma por uma. Se fossem milhares ou milhões se usaria busca binária. 

 

É lógico que vai inserir as palavras uma a uma então qual será o algoritmo mais simples de sort? Insertion sort claro. Vai estar inserindo afinal. E é muito mais fácil colocar o vetor já ordenado.

 

Escreva em torno dos dados.

 

E não escreva nada a toa. 

Como são os dados? 

typedef struct
{
    unsigned N; // quantas vezes apareceu
    char* pal; // a palavra

}   Dado;

 

Não serviria? Uma palavra, um contador. Sem sinal, é claro. Pra que serviria um valor negativo de palavras?

 

E o que fazer com elas? Uma lista, uma pilha, uma RB tree? uma árvore binária? Pode ser, mas um simples vetor também serve.

 

Um vetor de que? De Dado é claro.

 

typedef struct
{
    unsigned N; // quantas palavras
    Dado*    D;

}   Dados;

 

Pois é: Dados é um vetor, e dentro dele tem um certo número de palavras.

 

Lê o arquivo, coloca aí dentro na ordem e mostra. Esse é o trabalho.

 

Depois pode colocar na árvore. E seu professor tem razão: tem esse código da árvore em muitos lugares, como na Wikipedia ou no GFG... E é chato pra caramba de programar isso (a árvore).

 

image.png.cd8bbad030659e94ef729df1fa207df2.png

No alto da lista, em https://www.geeksforgeeks.org/c-program-red-black-tree-insertion/ por exemplo.

 

 




 

 

 

image.png

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...