mirror of
https://github.com/Gustavo-E-D-Demarchi/dicionario.git
synced 2026-07-27 16:25:46 -03:00
tak
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
dicionario
|
||||||
|
dicionario.o
|
||||||
|
dicionario2
|
||||||
|
dicionario2.o
|
||||||
|
GRTAGS
|
||||||
|
GPATH
|
||||||
|
GTAGS
|
||||||
|
.vscode/GTEMP.pas
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Avaliacao do pedido vs rascunho (dicionario.pas)
|
||||||
|
|
||||||
|
## Esboco da estrutura
|
||||||
|
- Lista principal (dupla): ant <-> prox, key, ponteiro para dicionario
|
||||||
|
- Dicionario (simples): portugues, ingles, prox
|
||||||
|
|
||||||
|
## Requisitos do enunciado
|
||||||
|
- Lista principal ordenada alfabeticamente e com encadeamento duplo
|
||||||
|
- Lista de verbetes ordenada alfabeticamente
|
||||||
|
- Prototipo com: incluir palavra-chave, incluir no dicionario, remover do dicionario, consultar, escrever todo dicionario
|
||||||
|
|
||||||
|
## O que o rascunho ja tem
|
||||||
|
- Tipos com os campos corretos (lista + verbete)
|
||||||
|
- Rascunho de insercao ordenada na lista principal
|
||||||
|
- Funcoes de leitura (ler/ler_int) e loop principal com menu
|
||||||
|
- Consulta basica de chave na lista
|
||||||
|
|
||||||
|
## O que falta / fora de curva
|
||||||
|
- Insercao ordenada correta no dicionario (verbete) e ajuste de prox
|
||||||
|
- Operacoes completas: remover (lista e dicionario), consultar dicionario, consultar geral
|
||||||
|
- Impressao de todo o dicionario
|
||||||
|
- Validacoes basicas (entrada vazia, chave inexistente)
|
||||||
|
|
||||||
|
## Problemas tecnicos atuais
|
||||||
|
- adicionar_dicionario recebe record, mas usa como ponteiro (nil/prox) e mistura tipos (Tlista vs verbete)
|
||||||
|
- falta "then" em um if do consultar
|
||||||
|
- menu tem erros de sintaxe (falta ';', condicao vazia no else if)
|
||||||
|
- menu chama procedimentos sem passar parametros exigidos
|
||||||
|
- funcoes remover/consultar_geral nao existem
|
||||||
|
- em adicionar_lista, o novo no nao inicializa dicionario
|
||||||
+251
-57
@@ -1,86 +1,280 @@
|
|||||||
program pzim;
|
program pzim;
|
||||||
|
uses crt;
|
||||||
|
|
||||||
type
|
type
|
||||||
Tverbete = ^E_Dicionario;
|
Tverbete = ^E_Dicionario;
|
||||||
E_Dicionario = record
|
E_Dicionario = record
|
||||||
portugues : string;
|
br : string; //portugues
|
||||||
ingles : string;
|
ing : string; // ingles
|
||||||
prox : Tverbete;
|
prox : Tverbete;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Tlista = ^E_lista;
|
Tlista = ^E_lista ;
|
||||||
E_lista = record ;
|
E_lista = record
|
||||||
ant : Tlista ; //anterior
|
ant : Tlista ; //anterior
|
||||||
key : string;
|
key : string;
|
||||||
dicionario : E_dicionario ;
|
dicionario : Tverbete ;
|
||||||
prox : Tlista ;
|
prox : Tlista ;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function ler : string ;
|
||||||
|
var
|
||||||
|
temp : string ;
|
||||||
|
begin
|
||||||
|
write (' digite a palavra :') ;
|
||||||
|
readln( temp ) ;
|
||||||
|
ler := temp ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ler_int : integer ;
|
||||||
|
var
|
||||||
|
temp : integer ;
|
||||||
|
begin
|
||||||
|
write (' digite um numero : ') ;
|
||||||
|
readln (temp) ;
|
||||||
|
ler_int := temp ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
function maior(a , b : string):boolean;
|
function maior(a , b : string):boolean;
|
||||||
begin
|
begin
|
||||||
maior := upcase(a) > upcase(b);
|
maior := upcase(a) > upcase(b);
|
||||||
end;
|
end;
|
||||||
|
}
|
||||||
procedure criar_lista(lista: Tlista );
|
{ JULGAMENTO: comparacao esta comentada; se a ordenacao precisar disso, tem que reativar }
|
||||||
|
procedure criar_lista ( var lista: Tlista );
|
||||||
begin
|
begin
|
||||||
lista:=nil;
|
lista := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure adicionar_lista(var lista : Tlista ; chave : string);
|
procedure adicionar_lista(var T_lista : Tlista );
|
||||||
var
|
var
|
||||||
aux , aux_Ant , aux_Prox : Tlista;
|
novo , anterior , atual : Tlista ;
|
||||||
temp_s : string;
|
chave : string ;
|
||||||
begin
|
begin
|
||||||
new(aux);
|
chave := ler();
|
||||||
if
|
|
||||||
//memoria cheia
|
new (novo);
|
||||||
|
if novo = nil then
|
||||||
|
writeln ('memoria cheia')
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
while aux^.prox <> nil do
|
if T_lista = nil then
|
||||||
aux := aux^.prox;
|
|
||||||
temp_s := aux^.key;
|
|
||||||
|
|
||||||
new (aux_Ant);
|
|
||||||
new (aux_Prox);
|
|
||||||
|
|
||||||
if maior(temp_s , chave)then
|
|
||||||
begin
|
begin
|
||||||
if aux^.ant <> nil then
|
novo^.key := chave ;
|
||||||
aux_Ant := aux^.ant ;
|
novo^.dicionario := nil;
|
||||||
if aux^.prox <> nil then
|
novo^.prox := T_lista;
|
||||||
aux_Prox := aux^.prox;
|
novo^.ant := nil ;
|
||||||
|
T_lista := novo ;
|
||||||
aux^.key := chave ;//
|
|
||||||
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
procedure portugues()
|
|
||||||
|
|
||||||
procedure adicionar_dicionario(dicionario : E_dicionario);
|
|
||||||
var
|
|
||||||
aux , aux2 : Tlista;
|
|
||||||
begin
|
|
||||||
new(aux);
|
|
||||||
if aux = nil then
|
|
||||||
begin
|
|
||||||
//memoria cheia
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
atual := T_lista ;
|
||||||
|
anterior := nil ;
|
||||||
|
|
||||||
|
while (atual <> nil) and (atual^.key < chave) do
|
||||||
|
begin
|
||||||
|
anterior := atual;
|
||||||
|
atual := atual^.prox;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// JULGAMENTO: comparacao eh case-sensitive; se quiser alfabetico "padrao", precisa normalizar
|
||||||
|
novo^.ant := anterior ;
|
||||||
|
novo^.prox := atual ;
|
||||||
|
novo^.key := chave ;
|
||||||
|
novo^.dicionario := nil;
|
||||||
|
if anterior <> nil then
|
||||||
|
anterior^.prox := novo
|
||||||
|
else
|
||||||
|
T_lista := novo ;
|
||||||
|
|
||||||
|
if atual <> nil then
|
||||||
|
atual^.ant := novo ;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure adicionar_dicionario(var dicionario : Tverbete);
|
||||||
|
var
|
||||||
|
aux, aux2, anterior : Tverbete;
|
||||||
|
chave_p , chave_i : string ;
|
||||||
|
//portugues /\ /\ inglês
|
||||||
|
begin
|
||||||
|
chave_p := ler() ;
|
||||||
|
chave_i := ler() ;
|
||||||
|
new(aux);
|
||||||
|
if aux = nil then
|
||||||
|
begin
|
||||||
|
writeln ('memoria cheia') ;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
aux^.br := chave_p ;
|
||||||
|
aux^.ing := chave_i ;
|
||||||
|
aux^.prox := nil ;
|
||||||
|
|
||||||
|
if (dicionario = nil) then
|
||||||
|
begin
|
||||||
|
dicionario := aux ;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
anterior := nil;
|
||||||
|
aux2 := dicionario ;
|
||||||
|
while (aux2 <> nil) and (aux2^.br < chave_p ) do
|
||||||
|
begin
|
||||||
|
anterior := aux2;
|
||||||
|
aux2 := aux2^.prox ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if anterior = nil then
|
||||||
|
begin
|
||||||
|
aux^.prox := dicionario;
|
||||||
|
dicionario := aux;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
aux^.prox := aux2;
|
||||||
|
anterior^.prox := aux;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function consultar ( T_lista : Tlista ; chave : string ) : Tlista ;
|
||||||
|
var
|
||||||
|
atual : Tlista ;
|
||||||
|
begin
|
||||||
|
atual := T_lista ;
|
||||||
|
|
||||||
|
while ( atual <> nil ) and ( atual^.key < chave ) do
|
||||||
|
atual := atual^.prox ;
|
||||||
|
|
||||||
|
if ( atual <> nil ) and ( atual ^.key = chave) then
|
||||||
|
consultar := atual
|
||||||
|
else
|
||||||
|
consultar := nil ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure consultar_lista ( T_lista : Tlista );
|
||||||
|
var
|
||||||
|
aux : tlista ;
|
||||||
|
op : string ;
|
||||||
|
begin
|
||||||
|
write ( ' vc quer consutar quer consultar qual palavra ? ') ;
|
||||||
|
op := ler ;
|
||||||
|
|
||||||
|
aux := consultar( T_lista , op );
|
||||||
|
|
||||||
|
if aux = nil then
|
||||||
|
writeln (' palavra nao encontrada ')
|
||||||
|
else
|
||||||
|
write (' palavra encontrada :' , aux^.key );
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure consultar_dicionario (T_lista : Tlista );
|
||||||
|
var
|
||||||
|
aux : Tlista ;
|
||||||
|
op : string ;
|
||||||
|
begin
|
||||||
|
// TODO: consultar palavra dentro do dicionario da chave
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure consultar_geral(T_lista : Tlista);
|
||||||
|
begin
|
||||||
|
// TODO: listar todo o dicionario
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure remover_lista(var T_lista : Tlista);
|
||||||
|
begin
|
||||||
|
// TODO: remover chave da lista principal
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure remover_dicionario(var T_lista : Tlista);
|
||||||
|
begin
|
||||||
|
// TODO: remover verbete do dicionario
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function continuar ( num : integer ) : boolean ;
|
||||||
|
var
|
||||||
|
op : string ;
|
||||||
|
begin
|
||||||
|
if num = 1 then
|
||||||
|
continuar := true
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
if (dicionario = nil) then
|
write ( 'quer continuar ? (S / N)' ) ;
|
||||||
begin
|
op := ler ;
|
||||||
aux^.
|
while ( op <> 'S' ) and ( op <> 'N') do
|
||||||
end;
|
begin
|
||||||
while aux^.prox <> nil do
|
writeln ('opcao invalida') ;
|
||||||
aux := aux^.prox
|
op := ler ;
|
||||||
if aux^.prox = nil then
|
end;
|
||||||
|
if op = 'S' then
|
||||||
|
continuar := true
|
||||||
|
else
|
||||||
|
continuar := false ;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
end;
|
|
||||||
|
|
||||||
|
procedure menu ( var T_lista : Tlista);
|
||||||
|
var
|
||||||
|
op : integer;
|
||||||
|
chave : string;
|
||||||
|
aux : Tlista;
|
||||||
|
begin
|
||||||
|
writeln (' 1 : adicionar_lista ') ;
|
||||||
|
writeln (' 2 : adicionar_dicionario ') ;
|
||||||
|
writeln (' 3 : consultar_lista ') ;
|
||||||
|
writeln (' 4 : consultar_dicionario ') ;
|
||||||
|
writeln (' 5 : consultar_geral ');
|
||||||
|
writeln (' 6 : remover_lista ');
|
||||||
|
writeln (' 7 : remover_dicionario ');
|
||||||
|
writeln (' 0 : sair ');
|
||||||
|
op := ler_int ;
|
||||||
|
case op of
|
||||||
|
1 : adicionar_lista (T_lista);
|
||||||
|
2 : begin
|
||||||
|
chave := ler();
|
||||||
|
aux := consultar(T_lista, chave);
|
||||||
|
if aux = nil then
|
||||||
|
writeln (' chave nao encontrada ')
|
||||||
|
else
|
||||||
|
adicionar_dicionario(aux^.dicionario);
|
||||||
|
end;
|
||||||
|
3 : consultar_lista (T_lista);
|
||||||
|
4 : consultar_dicionario (T_lista);
|
||||||
|
5 : consultar_geral (T_lista);
|
||||||
|
6 : remover_lista (T_lista);
|
||||||
|
7 : remover_dicionario (T_lista);
|
||||||
|
0 : exit;
|
||||||
|
else
|
||||||
|
writeln (' opcao invalida digite novamente : ');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
lista : Tlista ;
|
||||||
|
|
||||||
|
i : integer ;
|
||||||
begin
|
begin
|
||||||
end.
|
i := 1;
|
||||||
|
criar_lista (lista) ;
|
||||||
|
while ( continuar(i) ) do
|
||||||
|
begin
|
||||||
|
menu (lista);
|
||||||
|
i := 0;
|
||||||
|
end;
|
||||||
|
end.
|
||||||
+309
@@ -0,0 +1,309 @@
|
|||||||
|
program pzim;
|
||||||
|
uses crt;
|
||||||
|
|
||||||
|
const
|
||||||
|
DEBUG_ATIVO = true;
|
||||||
|
|
||||||
|
type
|
||||||
|
Tverbete = ^E_Dicionario;
|
||||||
|
E_Dicionario = record
|
||||||
|
br : string; // portugues
|
||||||
|
ing : string; // ingles
|
||||||
|
prox : Tverbete;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Tlista = ^E_lista ;
|
||||||
|
E_lista = record
|
||||||
|
ant : Tlista ; // anterior
|
||||||
|
key : string;
|
||||||
|
dicionario : Tverbete ;
|
||||||
|
prox : Tlista ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Debug(const msg : string);
|
||||||
|
begin
|
||||||
|
if DEBUG_ATIVO then
|
||||||
|
writeln('[debug] ', msg);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ler_prompt(const msg : string) : string ;
|
||||||
|
var
|
||||||
|
temp : string ;
|
||||||
|
begin
|
||||||
|
write (msg) ;
|
||||||
|
readln( temp ) ;
|
||||||
|
Debug('entrada = "' + temp + '"');
|
||||||
|
ler_prompt := temp ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function ler_int : integer ;
|
||||||
|
var
|
||||||
|
temp : integer ;
|
||||||
|
begin
|
||||||
|
write (' digite um numero : ') ;
|
||||||
|
readln (temp) ;
|
||||||
|
if DEBUG_ATIVO then
|
||||||
|
writeln('[debug] entrada numero = ', temp);
|
||||||
|
ler_int := temp ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CompareCI(const a, b : string) : integer;
|
||||||
|
var
|
||||||
|
aa, bb : string;
|
||||||
|
begin
|
||||||
|
aa := upcase(a);
|
||||||
|
bb := upcase(b);
|
||||||
|
if aa < bb then
|
||||||
|
CompareCI := -1
|
||||||
|
else if aa > bb then
|
||||||
|
CompareCI := 1
|
||||||
|
else
|
||||||
|
CompareCI := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure criar_lista ( var lista: Tlista );
|
||||||
|
begin
|
||||||
|
lista := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure adicionar_lista(var T_lista : Tlista );
|
||||||
|
var
|
||||||
|
novo , anterior , atual : Tlista ;
|
||||||
|
chave : string ;
|
||||||
|
begin
|
||||||
|
chave := ler_prompt(' digite a chave :');
|
||||||
|
Debug('adicionar_lista chave="' + chave + '"');
|
||||||
|
|
||||||
|
new (novo);
|
||||||
|
if novo = nil then
|
||||||
|
writeln ('memoria cheia')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if T_lista = nil then
|
||||||
|
begin
|
||||||
|
novo^.key := chave ;
|
||||||
|
novo^.dicionario := nil;
|
||||||
|
novo^.prox := T_lista;
|
||||||
|
novo^.ant := nil ;
|
||||||
|
T_lista := novo ;
|
||||||
|
Debug('adicionar_lista inseriu no inicio');
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
atual := T_lista ;
|
||||||
|
anterior := nil ;
|
||||||
|
|
||||||
|
while (atual <> nil) and (CompareCI(atual^.key, chave) < 0) do
|
||||||
|
begin
|
||||||
|
anterior := atual;
|
||||||
|
atual := atual^.prox;
|
||||||
|
end;
|
||||||
|
|
||||||
|
novo^.ant := anterior ;
|
||||||
|
novo^.prox := atual ;
|
||||||
|
novo^.key := chave ;
|
||||||
|
novo^.dicionario := nil;
|
||||||
|
if anterior <> nil then
|
||||||
|
anterior^.prox := novo
|
||||||
|
else
|
||||||
|
T_lista := novo ;
|
||||||
|
|
||||||
|
if atual <> nil then
|
||||||
|
atual^.ant := novo ;
|
||||||
|
Debug('adicionar_lista inseriu no meio/fim');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure adicionar_dicionario(var dicionario : Tverbete);
|
||||||
|
var
|
||||||
|
aux, aux2, anterior : Tverbete;
|
||||||
|
chave_p , chave_i : string ;
|
||||||
|
// portugues /\ /\ ingles
|
||||||
|
begin
|
||||||
|
chave_p := ler_prompt(' digite a palavra em portugues :');
|
||||||
|
chave_i := ler_prompt(' digite a traducao em ingles :');
|
||||||
|
Debug('adicionar_dicionario br="' + chave_p + '" ing="' + chave_i + '"');
|
||||||
|
new(aux);
|
||||||
|
if aux = nil then
|
||||||
|
begin
|
||||||
|
writeln ('memoria cheia') ;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
aux^.br := chave_p ;
|
||||||
|
aux^.ing := chave_i ;
|
||||||
|
aux^.prox := nil ;
|
||||||
|
|
||||||
|
if (dicionario = nil) then
|
||||||
|
begin
|
||||||
|
dicionario := aux ;
|
||||||
|
Debug('adicionar_dicionario inseriu no inicio');
|
||||||
|
end
|
||||||
|
else // se o dicionario ja tiver verbetes, tem que inserir ordenado
|
||||||
|
begin
|
||||||
|
anterior := nil;
|
||||||
|
aux2 := dicionario ;
|
||||||
|
while (aux2 <> nil) and (CompareCI(aux2^.br, chave_p) < 0) do
|
||||||
|
begin
|
||||||
|
anterior := aux2;
|
||||||
|
aux2 := aux2^.prox ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if anterior = nil then
|
||||||
|
begin
|
||||||
|
aux^.prox := dicionario;
|
||||||
|
dicionario := aux;
|
||||||
|
Debug('adicionar_dicionario inseriu no inicio (ordenado)');
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
aux^.prox := aux2;
|
||||||
|
anterior^.prox := aux;
|
||||||
|
Debug('adicionar_dicionario inseriu no meio/fim');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function consultar ( T_lista : Tlista ; chave : string ) : Tlista ;
|
||||||
|
var
|
||||||
|
atual : Tlista ;
|
||||||
|
begin
|
||||||
|
atual := T_lista ;
|
||||||
|
|
||||||
|
while ( atual <> nil ) and ( CompareCI(atual^.key, chave) < 0 ) do
|
||||||
|
atual := atual^.prox ;
|
||||||
|
|
||||||
|
if ( atual <> nil ) and ( CompareCI(atual^.key, chave) = 0 ) then
|
||||||
|
consultar := atual
|
||||||
|
else
|
||||||
|
consultar := nil ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure consultar_lista ( T_lista : Tlista );
|
||||||
|
var
|
||||||
|
aux : tlista ;
|
||||||
|
op : string ;
|
||||||
|
begin
|
||||||
|
op := ler_prompt(' qual chave deseja consultar ? ') ;
|
||||||
|
Debug('consultar_lista chave="' + op + '"');
|
||||||
|
|
||||||
|
aux := consultar( T_lista , op );
|
||||||
|
|
||||||
|
if aux = nil then
|
||||||
|
writeln (' palavra nao encontrada ')
|
||||||
|
else
|
||||||
|
write (' palavra encontrada :' , aux^.key );
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure consultar_dicionario (T_lista : Tlista );
|
||||||
|
var
|
||||||
|
aux : Tlista ;
|
||||||
|
op : string ;
|
||||||
|
begin
|
||||||
|
// TODO: consultar palavra dentro do dicionario da chave
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure consultar_geral(T_lista : Tlista);
|
||||||
|
begin
|
||||||
|
// TODO: listar todo o dicionario
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure remover_lista(var T_lista : Tlista);
|
||||||
|
begin
|
||||||
|
// TODO: remover chave da lista principal
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure remover_dicionario(var T_lista : Tlista);
|
||||||
|
begin
|
||||||
|
// TODO: remover verbete do dicionario
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function continuar ( num : integer ) : boolean ;
|
||||||
|
var
|
||||||
|
op : string ;
|
||||||
|
begin
|
||||||
|
if num = 1 then
|
||||||
|
continuar := true
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
write ( 'quer continuar ? (S / N) ' ) ;
|
||||||
|
readln(op);
|
||||||
|
while (op = '') or ((UpCase(op[1]) <> 'S') and (UpCase(op[1]) <> 'N')) do
|
||||||
|
begin
|
||||||
|
writeln ('opcao invalida') ;
|
||||||
|
write ( ' quer continuar ? (S / N) ' ) ;
|
||||||
|
readln(op);
|
||||||
|
end;
|
||||||
|
if UpCase(op[1]) = 'S' then
|
||||||
|
continuar := true
|
||||||
|
else
|
||||||
|
continuar := false ;
|
||||||
|
|
||||||
|
if DEBUG_ATIVO then
|
||||||
|
writeln('[debug] continuar = ', continuar);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure menu ( var T_lista : Tlista);
|
||||||
|
var
|
||||||
|
op : integer;
|
||||||
|
chave : string;
|
||||||
|
aux : Tlista;
|
||||||
|
begin
|
||||||
|
writeln (' 1 : adicionar_lista ') ;
|
||||||
|
writeln (' 2 : adicionar_dicionario ') ;
|
||||||
|
writeln (' 3 : consultar_lista ') ;
|
||||||
|
writeln (' 4 : consultar_dicionario ') ;
|
||||||
|
writeln (' 5 : consultar_geral ');
|
||||||
|
writeln (' 6 : remover_lista ');
|
||||||
|
writeln (' 7 : remover_dicionario ');
|
||||||
|
writeln (' 0 : sair ');
|
||||||
|
op := ler_int ;
|
||||||
|
if DEBUG_ATIVO then
|
||||||
|
writeln('[debug] menu opcao = ', op);
|
||||||
|
case op of
|
||||||
|
1 : adicionar_lista (T_lista);
|
||||||
|
2 : begin
|
||||||
|
chave := ler_prompt(' digite a chave :');
|
||||||
|
aux := consultar(T_lista, chave);
|
||||||
|
if aux = nil then
|
||||||
|
writeln (' chave nao encontrada ')
|
||||||
|
else
|
||||||
|
adicionar_dicionario(aux^.dicionario);
|
||||||
|
end;
|
||||||
|
3 : consultar_lista (T_lista);
|
||||||
|
4 : consultar_dicionario (T_lista);
|
||||||
|
5 : consultar_geral (T_lista);
|
||||||
|
6 : remover_lista (T_lista);
|
||||||
|
7 : remover_dicionario (T_lista);
|
||||||
|
else
|
||||||
|
writeln (' opcao invalida digite novamente : ');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
lista : Tlista ;
|
||||||
|
|
||||||
|
i : integer ;
|
||||||
|
begin
|
||||||
|
i := 1;
|
||||||
|
criar_lista (lista) ;
|
||||||
|
while ( continuar(i) ) do
|
||||||
|
begin
|
||||||
|
menu (lista);
|
||||||
|
i := 0;
|
||||||
|
end;
|
||||||
|
end.
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
+344
@@ -0,0 +1,344 @@
|
|||||||
|
program dicionario;
|
||||||
|
type
|
||||||
|
TponteiroDic = ^dic;
|
||||||
|
|
||||||
|
dic = record
|
||||||
|
verbete: string;
|
||||||
|
prox: Tponteirodic;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Tponteiro = ^no;
|
||||||
|
no = record
|
||||||
|
palavra: string;
|
||||||
|
dic: TponteiroDic;
|
||||||
|
prox: Tponteiro;
|
||||||
|
ant: Tponteiro;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Tlista = record
|
||||||
|
inicio: Tponteiro;
|
||||||
|
fim: Tponteiro;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var lista: Tlista;
|
||||||
|
op: integer;
|
||||||
|
palavra, verbete: string;
|
||||||
|
|
||||||
|
function verificaVazio(l: tlista): boolean;
|
||||||
|
begin
|
||||||
|
verificaVazio:= l.inicio = nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure inicializarLista(var l: tlista);
|
||||||
|
begin
|
||||||
|
l.inicio:= nil;
|
||||||
|
l.fim:= nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function verificaPalavra(l: tlista; p: string): boolean;
|
||||||
|
var aux: Tponteiro;
|
||||||
|
begin
|
||||||
|
aux:= l.inicio;
|
||||||
|
while (aux <> nil) and (aux^.palavra <> p) do
|
||||||
|
aux:= aux^.prox;
|
||||||
|
if aux = nil then
|
||||||
|
verificaPalavra:= false
|
||||||
|
else
|
||||||
|
verificaPalavra:= true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function verificaVerbete(l: tlista; p, v: string): boolean;
|
||||||
|
var aux: Tponteiro;
|
||||||
|
aux2: TponteiroDic;
|
||||||
|
begin
|
||||||
|
aux:= l.inicio;
|
||||||
|
while (aux <> nil) and (aux^.palavra <> p) do
|
||||||
|
aux:= aux^.prox;
|
||||||
|
if aux <> nil then
|
||||||
|
begin
|
||||||
|
aux2:= aux^.dic;
|
||||||
|
while (aux2 <> nil) and (aux2^.verbete <> v) do
|
||||||
|
aux2:= aux2^.prox;
|
||||||
|
if aux2 = nil then
|
||||||
|
verificaVerbete:= false
|
||||||
|
else
|
||||||
|
verificaVerbete:= true;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
verificaVerbete:= false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
procedure inserirPalavra(var l: Tlista; p: string);
|
||||||
|
var novo, temp, aux: Tponteiro;
|
||||||
|
begin
|
||||||
|
new(novo);
|
||||||
|
if novo <> nil then
|
||||||
|
begin
|
||||||
|
if not verificaPalavra(l, p) then
|
||||||
|
begin
|
||||||
|
novo^.prox:= nil;
|
||||||
|
novo^.ant:= nil;
|
||||||
|
novo^.dic:= nil;
|
||||||
|
novo^.palavra:= p;
|
||||||
|
if verificaVazio(l) then
|
||||||
|
begin
|
||||||
|
l.inicio:= novo;
|
||||||
|
l.fim:= novo;
|
||||||
|
end
|
||||||
|
else if p < l.inicio^.palavra then
|
||||||
|
begin
|
||||||
|
temp:= l.inicio;
|
||||||
|
l.inicio:= novo;
|
||||||
|
novo^.prox:= temp;
|
||||||
|
temp^.ant:= novo;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
aux:= l.inicio;
|
||||||
|
while (aux^.prox <> nil) and (aux^.prox^.palavra < p) do
|
||||||
|
aux:= aux^.prox;
|
||||||
|
if aux^.prox = nil then
|
||||||
|
begin
|
||||||
|
aux^.prox:= novo;
|
||||||
|
novo^.ant:= aux;
|
||||||
|
l.fim:= novo;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
temp:= aux^.prox;
|
||||||
|
aux^.prox:= novo;
|
||||||
|
novo^.prox:= temp;
|
||||||
|
novo^.ant:= aux;
|
||||||
|
temp^.ant:= novo;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
writeln('essa palavra já existe');
|
||||||
|
end
|
||||||
|
else
|
||||||
|
writeln('Memória cheia hahaha');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure inserirVerbete(var l: tLista; p, v: string);
|
||||||
|
var novo, temp, temp2: TponteiroDIc;
|
||||||
|
aux: Tponteiro;
|
||||||
|
begin
|
||||||
|
new(novo);
|
||||||
|
if novo <> nil then
|
||||||
|
begin
|
||||||
|
if not verificaVerbete(l, p, v) then
|
||||||
|
begin
|
||||||
|
aux:= l.inicio;
|
||||||
|
novo^.verbete:= v;
|
||||||
|
novo^.prox:= nil;
|
||||||
|
while (aux <> nil) and (aux^.palavra <> p) do
|
||||||
|
aux:= aux^.prox;
|
||||||
|
if aux^.palavra = p then
|
||||||
|
begin
|
||||||
|
if aux^.dic = nil then
|
||||||
|
aux^.dic:= novo
|
||||||
|
else if v < aux^.dic^.verbete then
|
||||||
|
begin
|
||||||
|
temp:= aux^.dic;
|
||||||
|
aux^.dic:= novo;
|
||||||
|
aux^.dic^.prox:= temp;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
temp:= aux^.dic;
|
||||||
|
while (temp^.prox <> nil) and (temp^.prox^.verbete < v) do
|
||||||
|
temp:= temp^.prox;
|
||||||
|
temp2:= temp^.prox;
|
||||||
|
temp^.prox:= novo;
|
||||||
|
novo^.prox:= temp2;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
writeln('Palavra não encontrada');
|
||||||
|
end
|
||||||
|
else
|
||||||
|
writeln('O verbete ja está na lista')
|
||||||
|
end
|
||||||
|
else
|
||||||
|
writeln('Memória cheia');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure removerVerbete(var l: Tlista; p: string; v: string);
|
||||||
|
var aux: Tponteiro;
|
||||||
|
temp, temp2: TponteiroDIc;
|
||||||
|
begin
|
||||||
|
if verificaVazio(l) then
|
||||||
|
writeln('Lista de palavras vazia')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
aux:= l.inicio;
|
||||||
|
while (aux <> nil) and (aux^.palavra <> p) do
|
||||||
|
aux:= aux^.prox;
|
||||||
|
if aux = nil then
|
||||||
|
writeln('Palavra não encontrada')
|
||||||
|
else if aux^.dic = nil then
|
||||||
|
writeln('A palavra não possui verbetes')
|
||||||
|
else if aux^.dic^.verbete = v then
|
||||||
|
begin
|
||||||
|
temp:= aux^.dic;
|
||||||
|
aux^.dic:= aux^.dic^.prox;
|
||||||
|
dispose(temp);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
temp:= aux^.dic;
|
||||||
|
while (temp^.prox <> nil) and (temp^.prox^.verbete <> v) do
|
||||||
|
temp:= temp^.prox;
|
||||||
|
if temp^.prox = nil then
|
||||||
|
writeln('O verbete não está na lista')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
temp2:= temp^.prox;
|
||||||
|
temp^.prox:= temp^.prox^.prox;
|
||||||
|
dispose(temp2);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure consultar(l: Tlista; p: string);
|
||||||
|
var aux: Tponteiro;
|
||||||
|
temp: TponteiroDic;
|
||||||
|
begin
|
||||||
|
if verificaVazio(l) then
|
||||||
|
writeln('Lista vazia')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
aux:= l.inicio;
|
||||||
|
while (aux <> nil) and (aux^.palavra <> p) do
|
||||||
|
aux:= aux^.prox;
|
||||||
|
if aux = nil then
|
||||||
|
writeln('Palavra não encontrada')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
temp:= aux^.dic;
|
||||||
|
if temp = nil then
|
||||||
|
writeln('A palavra não possui verbetes')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
write('Verbetes: ');
|
||||||
|
while (temp <> nil) do
|
||||||
|
begin
|
||||||
|
write(temp^.verbete, ' ');
|
||||||
|
temp:= temp^.prox;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure escreverTudo(l: tlista);
|
||||||
|
var aux: Tponteiro;
|
||||||
|
temp: TponteiroDic;
|
||||||
|
begin
|
||||||
|
if verificaVazio(l) then
|
||||||
|
writeln('Lista vazia')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
aux:= l.inicio;
|
||||||
|
while (aux <> nil) do
|
||||||
|
begin
|
||||||
|
write(aux^.palavra, ': ');
|
||||||
|
temp:= aux^.dic;
|
||||||
|
while (temp <> nil) do
|
||||||
|
begin
|
||||||
|
write(temp^.verbete);
|
||||||
|
if temp^.prox <> nil then
|
||||||
|
write(', ');
|
||||||
|
temp:= temp^.prox;
|
||||||
|
end;
|
||||||
|
writeln;
|
||||||
|
aux:= aux^.prox;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function formatarString(s: string): string;
|
||||||
|
var i: integer;
|
||||||
|
resultado: string;
|
||||||
|
begin
|
||||||
|
resultado:= '';
|
||||||
|
if length(s) > 0 then
|
||||||
|
begin
|
||||||
|
resultado:= upcase(s[1]);
|
||||||
|
for i:= 2 to length(s) do
|
||||||
|
begin
|
||||||
|
if (s[i] >= 'A') and (s[i] <= 'Z') then
|
||||||
|
resultado:= resultado + char(ord(s[i]) + 32)
|
||||||
|
else
|
||||||
|
resultado:= resultado + s[i];
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
formatarString:= resultado;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
inicializarLista(lista);
|
||||||
|
op:= 0;
|
||||||
|
while op <> 6 do
|
||||||
|
begin
|
||||||
|
writeln;
|
||||||
|
writeln('1 - Inserir palavra');
|
||||||
|
writeln('2 - Inserir verbete');
|
||||||
|
writeln('3 - Remover verbete');
|
||||||
|
writeln('4 - Consultar');
|
||||||
|
writeln('5 - Escrever tudo');
|
||||||
|
writeln('6 - Sair');
|
||||||
|
write('Opcao: ');
|
||||||
|
readln(op);
|
||||||
|
case op of
|
||||||
|
1: begin
|
||||||
|
writeln;
|
||||||
|
write('Palavra: ');
|
||||||
|
readln(palavra);
|
||||||
|
palavra:= formatarString(palavra);
|
||||||
|
inserirPalavra(lista, palavra);
|
||||||
|
end;
|
||||||
|
2: begin
|
||||||
|
writeln;
|
||||||
|
write('Palavra: ');
|
||||||
|
readln(palavra);
|
||||||
|
write('Verbete: ');
|
||||||
|
readln(verbete);
|
||||||
|
palavra:= formatarString(palavra);
|
||||||
|
verbete:= formatarString(verbete);
|
||||||
|
inserirVerbete(lista, palavra, verbete);
|
||||||
|
end;
|
||||||
|
3: begin
|
||||||
|
writeln;
|
||||||
|
write('Palavra: ');
|
||||||
|
readln(palavra);
|
||||||
|
write('Verbete: ');
|
||||||
|
readln(verbete);
|
||||||
|
palavra:= formatarString(palavra);
|
||||||
|
verbete:= formatarString(verbete);
|
||||||
|
removerVerbete(lista, palavra, verbete);
|
||||||
|
end;
|
||||||
|
4: begin
|
||||||
|
writeln;
|
||||||
|
write('Digite a palavra a ser consultada: ');
|
||||||
|
readln(palavra);
|
||||||
|
palavra:= formatarString(palavra);
|
||||||
|
writeln;
|
||||||
|
consultar(lista, palavra);
|
||||||
|
writeln;
|
||||||
|
end;
|
||||||
|
5: begin
|
||||||
|
writeln;
|
||||||
|
escreverTudo(lista);
|
||||||
|
writeln;
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
writeln('Opcao invalida');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end .
|
||||||
Reference in New Issue
Block a user