-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtarea2.pas
115 lines (105 loc) · 3.01 KB
/
tarea2.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
{ InCo - Programación 1 }
{ Laboratorio 2019 }
{ esqueleto de archivo tarea2.pas a ser entregado}
function esPrefijo (pal1,pal2 : TipoPalabra) : boolean;
var i:integer;
begin
i := 1;
if (pal1.largo) > (pal2.largo) then
esPrefijo := false
else if (pal1.largo = 0) then
esPrefijo := true
else
while (i <= pal1.largo) and (pal1.info[i] = pal2.info[i]) do
begin
i := i+1;
esPrefijo := i > pal1.largo
end
end;
function igualPalabra (pal1,pal2 : TipoPalabra) : boolean;
var i:integer;
begin
i := 1;
if (pal1.largo <> pal2.largo) then
igualPalabra := false
else
while (i <= pal1.largo) and (pal1.info[i] = pal2.info[i]) do
begin
i := i+1;
igualPalabra := i > pal1.largo;
end
end;
procedure palabraADistancia
( palabra : TipoPalabra;
vocabulario : TipoVocabulario;
distancia : TipoDistancia;
var resultado : PosiblePalabra);
var i:integer;
begin
i := 1;
while (i <= MaxVocabulario) and (not(distanciaPalabra(palabra,vocabulario[i]) <= distancia)) do
i := i+1;
if (i <= MaxVocabulario) then
begin
resultado.hayPalabra := true;
resultado.palabra := vocabulario[i];
end
else
resultado.hayPalabra := false;
end;
procedure masCercana
( vocabulario : TipoVocabulario;
palabra : TipoPalabra;
var resultado : TipoPalabra;
var distancia : TipoDistancia);
var i:integer;
begin
distancia := distanciaPalabra(palabra,Vocabulario[1]);
for i:= 1 to Maxvocabulario do
begin
if (distanciaPalabra(palabra,Vocabulario[i]) < distancia) then
begin
distancia := distanciaPalabra(palabra,Vocabulario[i]);
resultado := Vocabulario[i]
end
end
end;
function pertenecePalabra (palabra : TipoPalabra; vocabulario : TipoVocabulario): boolean;
var i:integer;
begin
i := 1;
while (i <= MaxVocabulario) and (distanciaPalabra(palabra,vocabulario[i]) <> 0) do
i := i+1;
pertenecePalabra := i <= MaxVocabulario;
end;
function completarPalabra (prefijo : TipoPalabra; vocabulario : TipoVocabulario) : ListaPalabras;
var i:integer;
lisaux1,lisaux2,lisaux3:ListaPalabras;
begin
lisaux3 := nil;
for i := 1 to MaxVocabulario do
if (esPrefijo(prefijo,vocabulario[i])) then
begin
new(lisaux1);
lisaux1^.info := Vocabulario[i];
lisaux1^.sig := nil;
if (lisaux3 = nil) then
begin
lisaux3 := lisaux1;
end
else
begin
lisaux2 := lisaux3;
while(lisaux2^.sig <> nil) do
lisaux2 := lisaux2^.sig;
lisaux2^.sig := lisaux1;
end;
end;
completarPalabra := lisaux3;
end;
function estanTodas( lista : ListaPalabras; vocabulario : TipoVocabulario) : boolean;
begin
while (lista <> nil) and (pertenecePalabra(lista^.info,vocabulario)) do
lista := lista^.sig;
estanTodas := lista = nil;
end;