pronto.final

This commit is contained in:
Gustavo Erlindo Dellajustina Demarchi
2026-06-16 19:28:47 +00:00
committed by GitHub
parent 4c2ce9de76
commit c5f79e89cb
6 changed files with 719 additions and 846 deletions
+312 -77
View File
@@ -1,135 +1,370 @@
# 📚 Projeto PZIM — Dicionário com Lista Encadeada em Pascal
# Dicionário Português-Inglês em Pascal
Este projeto implementa um sistema de dicionário utilizando **listas encadeadas duplamente ligadas** em Pascal.
Cada elemento da lista principal representa uma chave (categoria), e cada chave possui um sub-dicionário de palavras (português → inglês).
## Descrição
Este programa implementa um dicionário Português-Inglês utilizando listas encadeadas dinâmicas em Pascal.
A estrutura principal é composta por:
* Uma lista duplamente encadeada de chaves.
* Cada chave possui um dicionário próprio.
* Cada dicionário é uma lista simplesmente encadeada de verbetes.
Cada verbete contém:
* Palavra em português.
* Tradução em inglês.
Exemplo:
Chave: A
* Abacaxi = Pineapple
* Amor = Love
* Avião = Airplane
Chave: M
* Mesa = Table
* Morango = Strawberry
---
## 🧠 Estrutura de Dados
# Estruturas Utilizadas
### 📌 Lista principal (Tlista)
Cada nó representa uma chave:
## Tverbete
- `key` → nome da categoria
- `ant` → ponteiro para o anterior
- `prox` → ponteiro para o próximo
- `dicionario` → ponteiro para a lista de verbetes
Representa um verbete do dicionário.
### 📌 Dicionário (Tverbete)
Cada nó representa uma palavra:
Campos:
- `br` → palavra em português
- `ing` → tradução em inglês
- `prox` → próximo verbete
* br: palavra em português.
* ing: tradução em inglês.
* prox: próximo verbete da lista.
## Tlista
Representa uma chave do dicionário.
Campos:
* key: letra ou chave identificadora.
* dicionario: lista de verbetes pertencentes à chave.
* ant: chave anterior.
* prox: próxima chave.
---
## 🟢 Estado Atual do Projeto
# Funções
### ✔ Estrutura de dados
- Lista encadeada dupla implementada
- Sublistas de dicionário por chave
- Inserção ordenada nas listas
## ler
Lê uma string digitada pelo usuário.
Retorno:
* String informada pelo usuário.
---
## 🟡 Funcionalidades Implementadas
## ler_int
### 📌 Funções básicas
- Leitura de string (`ler`)
- Leitura de inteiro (`ler_int`)
- Função de continuar execução (`continuar`)
- Consulta de elementos na lista (`consultar`)
Lê um número inteiro digitado pelo usuário.
Retorno:
* Valor inteiro informado.
---
### 📌 Lista principal (Tlista)
- Criar lista
- Adicionar chave (inserção ordenada)
## buscar_verbete
Procura uma palavra dentro de um dicionário.
Parâmetros:
* D: dicionário onde será feita a busca.
* P: palavra procurada.
Retorno:
* Ponteiro para o verbete encontrado.
* Nil caso não exista.
Método utilizado:
Busca recursiva.
---
### 📌 Dicionário (Tverbete)
- Inserção de palavras por chave
- Inserção ordenada no sub-dicionário
- Associação de palavras a uma chave existente
## encontrar_lista
Localiza a chave responsável por armazenar determinada palavra.
Parâmetros:
* T_lista: lista principal.
* palavra: palavra a ser localizada.
Retorno:
* Ponteiro para a chave adequada.
* Nil caso não exista chave compatível.
---
## 🔴 Funcionalidades Faltantes
# Procedimentos
### 📌 Lista principal
- Remover nó da lista (`remover_lista`)
- Listagem completa das chaves
- Percorrer e exibir estrutura completa
## lista_iniciar
Inicializa a estrutura principal.
Ação:
* Define a lista principal como vazia.
---
### 📌 Dicionário
- Remover verbete (`remover_dicionario`)
- Buscar palavra diretamente no dicionário
- Listar palavras de uma chave
## dicionario_adicionar
Insere um novo verbete em ordem alfabética.
Parâmetros:
* dicionario
* br
* ing
Ação:
* Cria um novo verbete.
* Insere mantendo a ordenação alfabética.
---
### 📌 Integração
- Consulta geral (lista + dicionário)
- Sincronização robusta entre lista e sublistas
- Melhor tratamento de erros e validações
## dicionario_remover
Remove um verbete de um dicionário.
Parâmetros:
* dicionario
* palavra
* removido
Ação:
* Procura a palavra.
* Remove da lista.
* Retorna o ponteiro removido.
---
### 📌 Sistema / Menu
- Melhor tratamento de opção inválida
- Finalização controlada do programa
- Organização das chamadas do menu
## lista_adicionar
Insere uma nova chave.
Parâmetros:
* lista
Ação:
* Cria uma nova chave.
* Mantém as chaves ordenadas.
* Atualiza ponteiros anterior e próximo.
* Redistribui verbetes quando necessário.
---
## 🚨 Problemas Identificados
## redistribuir_verbetes
- Lógica de verificação de palavras pode ser simplificada
- Algumas inserções precisam de melhor controle de fluxo
- Falta padronização em validações
- Algumas funções ainda não implementadas
Redistribui verbetes após a criação de uma nova chave.
Parâmetros:
* lista
* chave
Ação:
* Localiza a nova chave.
* Analisa o dicionário da chave anterior.
* Separa os verbetes que agora pertencem à nova chave.
* Move esses verbetes para o novo dicionário.
Exemplo:
Antes:
Chave A
* Abacaxi
* Banana
* Morango
Após criar a chave M:
Chave A
* Abacaxi
* Banana
Chave M
* Morango
---
## 🧭 Prioridades de Desenvolvimento
## mover_verbetes_para_listas
Para evoluir o projeto corretamente:
Redistribui verbetes quando uma chave é removida.
1. 🔧 Corrigir e simplificar `verificar_palavra`
2. Implementar `remover_lista`
3. Implementar `remover_dicionario`
4. 🔍 Criar `consultar_geral`
5. 📋 Implementar listagem completa
6. 🧪 Testar inserção, busca e remoção
Parâmetros:
* lista
* origem
Ação:
* Percorre todos os verbetes da chave removida.
* Procura uma nova chave compatível.
* Reinsere os verbetes.
* Descarta os verbetes sem destino válido.
---
## 💡 Objetivo do Projeto
## adicionar_dicionario
O objetivo é praticar:
Adiciona uma nova palavra ao sistema.
- Estruturas de dados dinâmicas
- Listas encadeadas duplas
- Organização de dicionários em subestruturas
- Manipulação de ponteiros em Pascal
- Lógica de inserção e busca ordenada
Ação:
* Solicita palavra em português.
* Solicita tradução.
* Localiza a chave correta.
* Insere o verbete.
---
## 🛠 Tecnologias
## consultar_lista
- Linguagem: Pascal
- Biblioteca: CRT (entrada/saída básica)
- Estrutura: Listas encadeadas
Exibe todas as chaves cadastradas.
Ação:
* Percorre a lista principal.
* Mostra cada chave.
---
## 📌 Observação
## consultar_dicionario
Este projeto está em desenvolvimento e ainda possui funcionalidades incompletas, mas já demonstra uma estrutura funcional de dicionário hierárquico com listas encadeadas.
Busca uma palavra específica.
---
Ação:
* Procura a palavra em todas as chaves.
* Exibe a tradução caso encontrada.
---
## consultar_geral
Exibe todo o conteúdo do sistema.
Ação:
* Mostra todas as chaves.
* Mostra todos os verbetes de cada chave.
---
## remover_dicionario
Remove uma palavra do sistema.
Ação:
* Procura a palavra.
* Remove o verbete.
* Libera a memória utilizada.
---
## remover_lista
Remove uma chave inteira.
Ação:
* Remove a chave da lista principal.
* Redistribui seus verbetes.
* Libera a memória da chave removida.
---
## menu
Controla a interação com o usuário.
Opções:
1 - Adicionar chave
2 - Adicionar palavra
3 - Consultar chaves
4 - Consultar palavra
5 - Consultar geral
6 - Remover chave
7 - Remover palavra
0 - Sair
---
# Fluxo Geral do Programa
1. Inicializa a lista principal.
2. Exibe o menu.
3. Recebe a opção do usuário.
4. Executa a operação escolhida.
5. Retorna ao menu.
6. Encerra quando o usuário selecionar a opção 0.
---
# Conceitos Aplicados
* Ponteiros
* Alocação dinâmica
* Listas simplesmente encadeadas
* Listas duplamente encadeadas
* Recursão
* Manipulação de memória
* Ordenação alfabética
* Estruturas de dados dinâmicas
Lista Principal
[A] <-> [M] <-> [S]
[A]
|
v
Abacaxi -> Amor -> Avião
[M]
|
v
Mesa -> Morango
[S]
|
v
Sapato -> Sol