mirror of
https://github.com/Gustavo-E-D-Demarchi/dicionario.git
synced 2026-07-27 16:25:46 -03:00
344 lines
6.9 KiB
ObjectPascal
344 lines
6.9 KiB
ObjectPascal
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 . |