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
1
Anónimo
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;