Ayuda por favor

Necesito un programa en pascal de una sopa de letras que se pueda leer en un archivo, que pueda encontrar las palabras que quiera con su intentar, donde se inicia la primera letra y donde finaliza la ultima letra de la palabra que busque.
Le agradecería si me ayudara por favor, lo necesito antes del lunes 12 de abril.

1 Respuesta

Respuesta
1
Aquí tienes el código. Tienes que crear el archivo con el crucigrama para que funcione correctamente.
/* Aquí comienza el código
program sopa_de_letras;
uses crt;
const
max=99;
type
encontrar= record
palabra, palindromo: string[20];
Xi,Xf,Yi,Yf: 1..max;
encontrada: boolean;
end;
var
lista: array[0..max] of encontrar;
hori, vert, diag1, diag2,
diag3, diag4: array[1..99] of string[99];
f:text;
x, y, n: 0..max;
i, j, posX, posY:byte;
procedure hacerpalindromo(a: byte);
{transforma una palabra en su palindromo}
var i: byte;
begin
with lista[a] do
for i:= length(palabra) downto 1 do
palindromo:= palindromo + palabra;
end;
procedure leer_datos;
var i: byte;
begin
assign(f, 'SOP.DAT');
reset(f);
read(f, x);
readln(f, y);
for i:= 1 to x do readln(f,hori);
readln(f, n);
for i:=1 to n do
begin
readln(f, lista.palabra);
hacerpalindromo(i);
end;
close(f);
end;
function diagonal(a, b: byte; dire:char):string;
{devuelve la diagonal a paritir de la posicion (a,b) en la direccion dire}
var linea: string;
begin
linea:='';
while (a<=x) and (b<=y) and (a>=1) do
begin
linea:=linea+hori[a];
case dire of
'I': inc(a);
'D': dec(a);
end;
inc(b);
end;
diagonal:=linea;
end;
procedure vert_diag;
{haya las columnas, y las diagonales}
var
i, j: byte;
begin
for i:= 1 to y do
begin
for j:= 1 to x do
vert:= vert+hori[j];
if i<>1 then
begin
diag1[i-1]:=diagonal(1,i,'I');
diag4[i-1]:=diagonal(x,i,'D');
end;
end;
for i:= 1 to x do
begin
diag2:=diagonal(i,1,'I');
diag3:=diagonal(i,1,'D');
end;
end;
(******************PROCDIMIENTOS PARA HALLAR COORDENADAS*******************)
{cuando se encuentra una palabra o palindromo se hallan sus coordenadas
dependiendo de la fila columna o diagonal en que se haya encontrado}
procedure pahori;
begin
lista[j].encontrada:=true;
lista[j].Xi:=i;
lista[j].Yi:=posY;
lista[j].Xf:=lista[j].Xi;
lista[j].Yf:=lista[j].Yi+length(lista[j].palabra)-1;
end;
procedure padia2;
begin
lista[j].encontrada:=true;
lista[j].Xi:= posY+i-1;
lista[j].Yi:= posY;
lista[j].Xf:= lista[j].Xi+length(lista[j].palabra)-1;
lista[j].Yf:= lista[j].Yi+length(lista[j].palabra)-1;
end;
procedure padia3;
begin
lista[j].encontrada:=true;
lista[j].Xi:= i-posY+1;
lista[j].Yi:= posY;
lista[j].Xf:= lista[j].Xi-length(lista[j].palabra)+1;
lista[j].Yf:= lista[j].Yi+length(lista[j].palabra)-1;
end;
procedure pohori;
begin
lista[j].encontrada:=true;
lista[j].Xf:=i;
lista[j].Yf:=posY;
lista[j].Xi:= lista[j].Xf;
lista[j].Yi:= lista[j].Yf+length(lista[j].palabra)-1;
end;
procedure podia2;
begin
lista[j].encontrada:=true;
lista[j].Xf:= posY+i-1;
lista[j].Yf:= posY;
lista[j].Xi:= lista[j].Xf+length(lista[j].palabra)-1;
lista[j].Yi:= lista[j].Yf+length(lista[j].palabra)-1;
end;
procedure podia3;
begin
lista[j].encontrada:=true;
lista[j].Xf:= i-posY+1;
lista[j].Yf:= posY;
lista[j].Xi:= lista[j].Xf-length(lista[j].palabra)+1;
lista[j].Yi:= lista[j].Yf+length(lista[j].palabra)-1;
end;
procedure pavert;
begin
lista[j].encontrada:=true;
lista[j].Xi:=posX;
lista[j].Yi:=i;
lista[j].Xf:=lista[j].Xi+length(lista[j].palabra)-1;
lista[j].Yf:=lista[j].Yi;
end;
procedure padia1;
begin
lista[j].encontrada:=true;
lista[j].Xi:=posX;
lista[j].Yi:=posX+i;
lista[j].Xf:=lista[j].Xi+length(lista[j].palabra)-1;
lista[j].Yf:=lista[j].Yi+length(lista[j].palabra)-1;
end;
procedure padia4;
begin
lista[j].encontrada:=true;
lista[j].Xi:=x-posX+1;
lista[j].Yi:=posX+i;
lista[j].Xf:=lista[j].Xi-length(lista[j].palabra)+1;
lista[j].Yf:=lista[j].Yi+length(lista[j].palabra)-1;
end;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas