/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

programa de sopa letras

 
      Índice del Foro elrincondelc.com -> Dev-C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
joni



Registrado: 01 Oct 2007
Mensajes: 3

MensajePublicado: 01/10/2007 4:50 pm
Título: programa de sopa letras

una consulta tengo este codigo de una sopa de letras pero cuando quiero ejecutarlo no me funciona, al compilarlo no me manda niun error pero al ejecutarlo la pantalla de ms dos desaparece

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ENTRADA "SOP.DAT"
#define SALIDA "SOP.RES"

FILE *FileIn,*FileOut;
int x,y;
char Tabla[105][105];
char Palabra[25];
int DirX[8]={1,-1,0,0,1,-1,-1,1};
int DirY[8]={0,0,1,-1,1,-1,1,-1};

void Buscar();

int main()
{
int i,j,n;
FileIn=fopen(ENTRADA,"r");
FileOut=fopen(SALIDA,"w");
if (FileIn==NULL || FileOut==NULL) exit(1);
fscanf(FileIn,"%d %d\n",&x,&y);
for (i=0; i<x; i++)
{
for (j=0; j<y; j++)
fscanf(FileIn,"%c",&Tabla[i][j]);
fgetc(FileIn);
}
fscanf(FileIn,"%d",&n);
for (i=0; i<n; i++)
{
fscanf(FileIn,"%s",&Palabra);
Buscar();
if (i!=n-1) fprintf(FileOut,"\n");
}
return 0;
}

void Buscar()
{
int i,j,d,a,b,p,letras;
int fin=0;
letras=strlen(Palabra);
for (i=0; i<x && !fin; i++)
{
for (j=0; j<y && !fin; j++)
for (d=0; d<8 && !fin; d++)
{
for (a=i,b=j,p=1;
Palabra[p-1]==Tabla[a][b] && p<=letras &&
a>=0 && a<x && b>=0 && b<y;
p++,a+=DirX[d],b+=DirY[d])
if (p==letras)
{
fprintf(FileOut,"%d %d %d %d",i+1,j+1,a+1,b+1);
fin=1;
}
}
}
if (fin==0) fprintf(FileOut,"???");
}
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 379
Ubicación: Cono Sur

MensajePublicado: 01/10/2007 6:09 pm
Título:

Hola

Cita:
... al compilarlo no me manda niun error...

Verifica que tu compilador no te tire ningún Warning.

Cita:
... la pantalla de ms dos desaparece...

Colócale un system("PAUSE"); antes del return 0 del main principal.

Un saludo
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3841
Ubicación: Mexico

MensajePublicado: 02/10/2007 9:27 am
Título:

Tambien tendrias que explicar mejor (en detalle) cual es la estructura de cada uno de los archivos y tambien que esperas realizar con cada uno de los bucles en tu programa.

Te pongo un ejemplo de lo que parece un error. Al procesar el archivo de entrada lees dos numeros de este, al parecer el numero de cadenas en el archivo y la longitud de cada una de estas.

A continuacion utilizas un bucle pero dentro de este lees los datos conf fscanf utilizando el indicador de tipo "%c", el problema es que a diferencia de los demas indicadores como "%d" o "%s" este ("%c") no ignora el espacio blanco y el resultado de esto es que el primer caracter almacenado en Tabla[0][0] es el caracter de nueva linea o '\n' situado al final de la primera linea:
Código:
fscanf(FileIn,"%d %d\n",&x,&y);
/* el '\n' se queda en el bufer ... */

for (i = 0; i < x; i++){
   for (j = 0; j < y; j++)
      /* ... y es procesado por la primera iteracion */
      fscanf(FileIn,"%c",&Tabla[i][j]);
   
   fgetc(FileIn);
}


Para evitar esto se debe descartar el resto de la primera linea antes de entrar en los bucles mediante un bucle while de esta forma:
Código:
int ch;

/* ... */

fscanf(FileIn,"%d %d\n",&x,&y);
while ((ch = fgetc(FileIn)) != EOF && ch != '\n')
   ; /* se descarta el resto de la primera linea */

for (i = 0; i < x; i++){
   for (j = 0; j < y; j++)
      fscanf(FileIn,"%c",&Tabla[i][j]);
   
   fgetc(FileIn);
}


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
      Índice del Foro elrincondelc.com -> Dev-C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com