# Dicionário Português-Inglês em Pascal ## 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 --- # Estruturas Utilizadas ## Tverbete Representa um verbete do dicionário. Campos: * 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. --- # Funções ## ler Lê uma string digitada pelo usuário. Retorno: * String informada pelo usuário. --- ## ler_int Lê um número inteiro digitado pelo usuário. Retorno: * Valor inteiro informado. --- ## 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. --- ## 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. --- # Procedimentos ## lista_iniciar Inicializa a estrutura principal. Ação: * Define a lista principal como vazia. --- ## 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. --- ## 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. --- ## 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. --- ## redistribuir_verbetes 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 --- ## mover_verbetes_para_listas Redistribui verbetes quando uma chave é removida. 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. --- ## adicionar_dicionario Adiciona uma nova palavra ao sistema. Ação: * Solicita palavra em português. * Solicita tradução. * Localiza a chave correta. * Insere o verbete. --- ## consultar_lista Exibe todas as chaves cadastradas. Ação: * Percorre a lista principal. * Mostra cada chave. --- ## consultar_dicionario 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