versão 1.0.9

This commit is contained in:
Gustavo Erlindo Dellajustina Demarchi
2026-06-07 14:33:44 -03:00
parent 681923d442
commit 4c2ce9de76
5 changed files with 521 additions and 260 deletions
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+506 -260
View File
@@ -1,305 +1,551 @@
program pzim; program pzim;
uses crt; uses crt;
type type
Tverbete = ^E_Dicionario; Tverbete = ^E_Dicionario;
E_Dicionario = record E_Dicionario = record
br : string; //portugues br : string;
ing : string; // ingles ing : string;
prox : Tverbete; prox : Tverbete;
end;
Tlista = ^E_lista ;
E_lista = record
ant : Tlista ; //anterior
key : string;
dicionario : Tverbete ;
prox : Tlista ;
end;
function verificar_palavra ( D : Tverbete ; P : string ) : boolean ;
var
sair : boolean ;
begin
if D = nil then
verificar_palavra := false
else
begin
if D^.br = P then
verificar_palavra := true
else if D^.prox <> nil then
sair := false
else
sair := true
if sair then
verificar_palavra := false
else
verificar_palavra := verificar_palavra( D^.prox , P );
end;
end; end;
function consultar ( T_lista : Tlista ; chave : string ) : Tlista ; Tlista = ^E_lista;
var E_lista = record
atual : Tlista ; ant : Tlista;
key : string;
dicionario : Tverbete;
prox : Tlista;
end;
function verificar_palavra ( D : Tverbete ; P : string ) : boolean ;
begin
if D = nil then
verificar_palavra := false
else
begin
if D^.br = P then
verificar_palavra := true
else
verificar_palavra := verificar_palavra( D^.prox , P );
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;
function encontrar_lista (
T_lista : Tlista ;
palavra : string
) : Tlista ;
var
aux : Tlista ;
melhor : Tlista ;
begin
aux := T_lista ;
melhor := nil ;
while aux <> nil do
begin
if UpCase( palavra[1] ) >=
UpCase( aux^.key[1] ) then
begin
melhor := aux ;
end;
aux := aux^.prox ;
end;
encontrar_lista := melhor ;
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 continuar : boolean ;
var
op : string ;
begin
write ( ' quer continuar ? (S / N) : ' ) ;
readln ( op ) ;
while ( op <> 'S' ) and ( op <> 's' ) and
( op <> 'N' ) and ( op <> 'n' ) do
begin
writeln ( ' opcao invalida ' ) ;
readln ( op ) ;
end;
if ( op = 'S' ) or ( op = 's' ) then
continuar := true
else
continuar := false ;
end;
procedure criar_lista ( var lista : Tlista ) ;
begin
lista := nil ;
end;
procedure adicionar_lista_direto (
var T_lista : Tlista ;
chave : string
) ;
var
novo , anterior , atual : Tlista ;
begin
new ( novo ) ;
novo^.key := chave ;
novo^.dicionario := nil ;
novo^.prox := nil ;
novo^.ant := nil ;
if T_lista = nil then
begin
T_lista := novo ;
end
else
begin begin
atual := T_lista ; atual := T_lista ;
anterior := nil ;
while ( atual <> nil ) and ( atual^.key < chave ) do while ( atual <> nil ) and ( atual^.key < chave ) do
begin
anterior := atual ;
atual := atual^.prox ; atual := atual^.prox ;
if ( atual <> nil ) and ( atual ^.key = chave) then
consultar := atual
else
consultar := nil ;
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 continuar : boolean ;
var
op : string ;
begin
write ( 'quer continuar ? (S / N)' ) ;
op := ler ;
while ( ( op <> 'S' ) or ( op <> 's' ) ) and ( ( op <> 'N') or ( op <> 'n') ) do
begin
writeln ('opcao invalida') ;
op := ler ;
end; end;
if op = 'S' then
continuar := true
else
continuar := false ;
end;
{ novo^.ant := anterior ;
function maior(a , b : string):boolean; novo^.prox := atual ;
begin
maior := upcase(a) > upcase(b);
end;
}
// Procedimentos \/ | /\ funçoes
procedure criar_lista ( var lista: Tlista ); if anterior <> nil then
begin anterior^.prox := novo
lista := nil;
end;
procedure adicionar_lista(var T_lista : Tlista );
var
novo , anterior , atual : Tlista ;
chave : string ;
begin
chave := ler ;
new (novo);
if novo = nil then
writeln ('memoria cheia')
else else
T_lista := novo ;
if atual <> nil then
atual^.ant := novo ;
end;
end;
procedure adicionar_lista ( var T_lista : Tlista ) ;
var
chave : string ;
begin
chave := ler ;
adicionar_lista_direto ( T_lista , chave ) ;
end;
procedure inserir_ordenado_dicionario (
var dicionario : Tverbete ;
novo : Tverbete
) ;
var
aux_atual , aux_ant : Tverbete ;
begin
aux_atual := dicionario ;
aux_ant := nil ;
while ( aux_atual <> nil ) and
( aux_atual^.br < novo^.br ) do
begin
aux_ant := aux_atual ;
aux_atual := aux_atual^.prox ;
end;
novo^.prox := aux_atual ;
if aux_ant = nil then
dicionario := novo
else
aux_ant^.prox := novo ;
end;
procedure redistribuir_verbetes (
var lista : Tlista
) ;
var
aux_l : Tlista ;
aux_d : Tverbete ;
todos , ultimo , prox_d : Tverbete ;
destino : Tlista ;
begin
todos := nil ;
ultimo := nil ;
aux_l := lista ;
while aux_l <> nil do
begin
aux_d := aux_l^.dicionario ;
aux_l^.dicionario := nil ;
while aux_d <> nil do
begin begin
if T_lista = nil then prox_d := aux_d^.prox ;
aux_d^.prox := nil ;
if todos = nil then
begin begin
todos := aux_d ;
novo^.ant := nil ; ultimo := aux_d ;
novo^.key := chave ;
novo^.dicionario := nil ;
novo^.prox := T_lista;
T_lista := novo ;
end end
else else
begin begin
ultimo^.prox := aux_d ;
atual := T_lista ; ultimo := aux_d ;
anterior := nil ;
while (atual <> nil) and (atual^.key < chave) 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 ;
end; end;
end;
end; aux_d := prox_d ;
end;
procedure adicionar_dicionario( var lista : Tlista );
var aux_l := aux_l^.prox ;
aux_l : Tlista ; end;
aux , aux_atual , aux_ant : Tverbete ;
chave , chave_p , chave_i , op : string ; aux_d := todos ;
//portugues /\ /\ inglês
existe : boolean ; while aux_d <> nil do
begin begin
writeln (' digite a chave que vc quer : ') ; prox_d := aux_d^.prox ;
chave := ler ;
aux_l := consultar (lista , chave );
if aux_l = nil then destino := encontrar_lista (
lista ,
aux_d^.br
) ;
aux_d^.prox := nil ;
if destino <> nil then
begin begin
writeln ('nao exite esta chave quer adicionar ? '); inserir_ordenado_dicionario (
destino^.dicionario ,
if continuar then aux_d
begin ) ;
adicionar_lista ( lista ); end;
aux_l := consultar (lista , chave) ;
end; aux_d := prox_d ;
end;
end;
procedure adicionar_dicionario ( var lista : Tlista ) ;
var
aux_l : Tlista ;
aux : Tverbete ;
chave_p , chave_i : string ;
existe : boolean ;
begin
writeln ( ' digite a palavra em portugues : ' ) ;
chave_p := ler ;
writeln ( ' digite a traducao em ingles : ' ) ;
chave_i := ler ;
aux_l := encontrar_lista ( lista , chave_p ) ;
if aux_l = nil then
begin
writeln ( ' nenhuma chave encontrada ' ) ;
end
else
begin
existe := verificar_palavra (
aux_l^.dicionario ,
chave_p
) ;
if existe then
begin
writeln ( ' palavra ja existe ' ) ;
end end
else else
begin begin
chave_p := ler ; new ( aux ) ;
chave_i := ler ;
new(aux); aux^.br := chave_p ;
aux^.ing := chave_i ;
aux^.prox := nil ;
if aux_l^.dicionario = nil then //adicionar o primeiro verbete inserir_ordenado_dicionario (
aux_l^.dicionario ,
aux
) ;
end;
end;
end;
procedure consultar_lista ( T_lista : Tlista ) ;
var
aux : Tlista ;
begin
aux := T_lista ;
if aux = nil then
begin
writeln ( ' lista vazia ' ) ;
end
else
begin
while aux <> nil do
begin
writeln ( ' chave : ' , aux^.key ) ;
aux := aux^.prox ;
end;
end;
end;
procedure consultar_dicionario ( T_lista : Tlista ) ;
var
aux_l : Tlista ;
aux_d : Tverbete ;
palavra : string ;
encontrou : boolean ;
begin
writeln ( ' digite a palavra : ' ) ;
palavra := ler ;
aux_l := T_lista ;
encontrou := false ;
while ( aux_l <> nil ) and ( not encontrou ) do
begin
aux_d := aux_l^.dicionario ;
while ( aux_d <> nil ) and ( not encontrou ) do
begin
if aux_d^.br = palavra then
begin
writeln ;
writeln ( ' chave : ' , aux_l^.key ) ;
writeln (
aux_d^.br ,
' = ' ,
aux_d^.ing
) ;
encontrou := true ;
end;
aux_d := aux_d^.prox ;
end;
aux_l := aux_l^.prox ;
end;
if not encontrou then
writeln ( ' palavra nao encontrada ' ) ;
end;
procedure consultar_geral ( T_lista : Tlista ) ;
var
aux_l : Tlista ;
aux_d : Tverbete ;
begin
aux_l := T_lista ;
if aux_l = nil then
begin
writeln ( ' lista vazia ' ) ;
end
else
begin
while aux_l <> nil do
begin
writeln ;
writeln ( ' chave : ' , aux_l^.key ) ;
aux_d := aux_l^.dicionario ;
if aux_d = nil then
begin
writeln ( ' dicionario vazio ' ) ;
end
else
begin
while aux_d <> nil do
begin begin
aux^.br := chave_p ; writeln (
aux^.ing := chave_i ; ' ',
aux^.prox := aux_l^.dicionario ; aux_d^.br ,
aux_l^.dicionario := aux ; ' = ' ,
end aux_d^.ing
) ;
else aux_d := aux_d^.prox ;
begin end;
existe := verificar_palavra( aux_l^.dicionario , chave_p); // verificar se a palavra ja existe no dicionario end;
if not existe then aux_l := aux_l^.prox ;
begin end;
aux_ant := nil ; end;
aux_atual := aux_l^.dicionario ; // apontar para o primeiro verbete do dicionario da chave end;
while (aux_atual <> nil) and ( aux_atual^.br < chave_p ) do procedure remover_dicionario (
begin T_lista : Tlista
aux_ant := aux_atual ; ) ;
aux_atual := aux_atual^.prox ; var
end; aux_l : Tlista ;
aux_d , ant_d : Tverbete ;
palavra : string ;
achou : boolean ;
begin
writeln ( ' digite a palavra : ' ) ;
palavra := ler ;
if aux_ant = nil then aux_l := T_lista ;
begin achou := false ;
aux^.br := chave_p;
aux^.ing := chave_i;
aux^.prox := aux_atual;
aux_l^.dicionario := aux;
end
else
begin
aux_ant^.prox := aux ;
aux^.br := chave_p ;
aux^.ing := chave_i ;
aux^.prox := aux_atual;
end;
end while ( aux_l <> nil ) and ( not achou ) do
begin
aux_d := aux_l^.dicionario ;
ant_d := nil ;
while ( aux_d <> nil ) and ( not achou ) do
begin
if aux_d^.br = palavra then
begin
if ant_d = nil then
aux_l^.dicionario := aux_d^.prox
else else
write (' esta palavra ja existe no dicionario ') ; ant_d^.prox := aux_d^.prox ;
dispose ( aux_d ) ;
achou := true ;
end
else
begin
ant_d := aux_d ;
aux_d := aux_d^.prox ;
end; end;
end; end;
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 );
aux_l := aux_l^.prox ;
end; end;
procedure consultar_dicionario (T_lista : Tlista ); if achou then
var writeln ( ' palavra removida ' )
aux : Tlista ; else
op : string ; writeln ( ' palavra nao encontrada ' ) ;
begin end;
end;
procedure menu ( var lista : Tlista ); procedure remover_lista (
var var lista : Tlista
op : integer ; ) ;
begin var
aux , ant : Tlista ;
writeln (' 1 : adicionar_lista ') ; chave : string ;
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(lista) ;
2 : adicionar_dicionario (lista) ;
3 : consultar_lista (lista) ;
4 : consultar_dicionario (lista) ;
5 : consultar_geral (lista , dicionario) ;
6 :
begin
remover_lista (lista) ;
adicionar_dicionario (lista) ;
end;
7 : remover_dicionario (dicionario) ;
0 : writeln (' vc saiu do sistema ') ;
end
else
write (' opcao invalida digite novamente : ') ;
end;
var
lista : Tlista ;
i : integer ;
begin begin
i := 1; writeln ( ' digite a chave : ' ) ;
criar_lista (lista) ; chave := ler ;
while ( i = 1 ) do
aux := lista ;
ant := nil ;
while ( aux <> nil ) and
( aux^.key <> chave ) do
begin begin
menu (lista); ant := aux ;
if not continuar then aux := aux^.prox ;
i := 0;
end; end;
end.
if aux = nil then
begin
writeln ( ' chave nao encontrada ' ) ;
end
else
begin
if ant = nil then
lista := aux^.prox
else
ant^.prox := aux^.prox ;
if aux^.prox <> nil then
aux^.prox^.ant := ant ;
dispose ( aux ) ;
redistribuir_verbetes ( lista ) ;
writeln ( ' chave removida ' ) ;
end;
end;
procedure menu ( var lista : Tlista ; var j : integer ) ;
var
op : integer ;
begin
writeln ;
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 ( lista ) ;
2 : adicionar_dicionario ( lista ) ;
3 : consultar_lista ( lista ) ;
4 : consultar_dicionario ( lista ) ;
5 : consultar_geral ( lista ) ;
6 : remover_lista ( lista ) ;
7 : remover_dicionario ( lista ) ;
0 : begin
writeln ( ' saindo... ' ) ;
j := 0;
end;
else
writeln ( ' opcao invalida ' ) ;
end;
end;
var
lista : Tlista ;
i : integer ;
begin
i := 1 ;
criar_lista ( lista ) ;
while i = 1 do
begin
menu ( lista , i ) ;
end;
end.
Executable
+15
View File
@@ -0,0 +1,15 @@
#!/bin/bash
echo "== Git Upload =="
git add .
echo ""
read -p "Mensagem do commit: " msg
git commit -m "$msg"
git push
echo ""
echo "Upload concluido."