Ver Mensaje Individual
  #4 (permalink)  
Antiguo 29/09/2009, 05:47
juanda89
 
Fecha de Ingreso: septiembre-2009
Mensajes: 4
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con arreglo.

Bno tengo otro problemita si alguien tiene la paciencia de mirarlo serio de gran ayuda, básicamente el programa carga una sopa de letras y las palabras a buscar desde 2 archivos de texto. ya casi todo esta hecho, excepto porque el programa debe encontrar las palabras y decir las coordenadas de la primero y ultima letra de cada palabra, sin embargo cuando utilizo el metodo srtsrt y comparo lo que tengo en el arreglo palabras con las lineas de la sopa de letras algunas las encuentra pero otras no, lo cual es un error xq si estan y si todo las palabras que quiero buscar no desde el arreglo palabras sino que las escribo como se suponen deben estar escritas si las encuentra, por lo que creo que es un problema al leer el archivo y ponerlo en los arreglos creo que anhade caracteres que no se ven. Gracias!!!

//Funciones de busqueda
void buscarHorizontal();
void buscarVertical();
void buscarD1();
void buscarD2();
int posicion(char *cadena, char *subcadena);



FILE * archivo;
FILE * lista;
char cadena[1024];
char sopa[500][500];
char *palabras[400];
char *palabrasI[400];
int n = 1024;
char *LineasH[500];
char *LineasV[500];
char *LineasD1[500];
char *LineasD2[500];
int filas;
int columnas;
int diagonales;
int numeroPalabras;
char cont;

int main(){



//Abre los archivos donde esta la informacion de la sopa de letras y las palabras
archivo = fopen("./sopa.txt", "r+");
lista = fopen("./lista.txt", "r+");

//Verifica que los archivos se puedan abrir correctamente
if (archivo == NULL || lista == NULL)
{
printf("No se pudo abrir el archivo\n");
system("pause");
return 0;
}


//del archivo saca el numero de filas y columnas de la sopa de letras

char *ccc = fgets(cadena, n, archivo);
char ccc2[1024];
///elimina los espacios de la primera linea
int kk = 0;
for(int t=0; t< strlen(cadena)-1; t++)
{
char hj = cadena[t];

if(hj != ' ')
{
ccc2[kk]=hj;
kk++;
}


}


// mira el numero de columnas y filas de la sopa de letras

char *t1;
t1 = strtok(ccc2,"x");
filas = atoi (t1);
t1 = strtok(NULL, "x") ;
columnas = atoi (t1);


//imprime el titulo
printf(" Sopa de Letras \n\n");


//Le muestra al usuario la sopa de Letras en mayusculas, y ademas llena la matriz "sopa" con los caracteres correspondientes
int contador = 0;
while(fgets(cadena, n, archivo) != NULL)
{
for(int i = 0; i<columnas; i++)
{
char l = cadena[i];
sopa[contador][i] = l;

}

// En el arreglo LineasH coloca las filas de la sopa de letras
LineasH[contador] = new char[strlen(cadena)+1];
strcpy(LineasH[contador],cadena);




contador++;
char *cc = strupr(cadena);
printf(" %s",cc);
}




// En el arreglo LineasV coloca las columnas de la sopa de letras

int numero = 0;
char pal[filas];
for(int f=0 ; f<columnas;f++)
{
for(int ff=0; ff< filas; ff++)
{
char karacter = sopa[ff][f];
pal[ff]=karacter;
}

pal[filas] = '\0';

LineasV[f] = new char[filas +1];
strcpy(LineasV[f],pal);

numero++;
}


// En el arreglo LineasD1 coloca las lineas diagonales en direccion \ de la sopa de letras

int boolean = 0;
numero = 0;
int kkontador = 0;
char pala[n];
for(int f=0 ; f<columnas-1;f++)
{
int col = f;
for(int ff=0; boolean==0; ff++)
{
char karacter = sopa[ff][col];
if (karacter == 0)
boolean =1;

else
{
pala[ff]=karacter;
col ++;
numero =ff;
}

}

pala[numero+1] = '\0';
boolean = 0;

LineasD1[f] = new char[n];
strcpy(LineasD1[f],pala);
kkontador++;

}


boolean = 0;
numero = 0;


for(int f=0 ; f<filas-1;f++)
{
int col = f;
for(int ff=0; boolean==0; ff++)
{
char karacter = sopa[col][ff];

if (karacter == 0)
boolean =1;

else
{
pala[ff]=karacter;
col ++;
numero =ff;
}

}

pala[numero+1] = '\0';
boolean = 0;
LineasD1[kkontador] = new char[n];
strcpy(LineasD1[kkontador],pala);
kkontador++;


}

diagonales =kkontador;

// En el arreglo LineasD2 coloca las lineas diagonales en direccion / de la sopa de letras

boolean = 0;
numero = 0;
kkontador = 0;
int pos = 0;
pala[n];
for(int f=columnas-1 ; f>0;f--)
{
int col = f;
for(int ff=0; boolean==0; ff++)
{
char karacter = sopa[ff][col];

if (karacter == 0)
{
boolean =1;

}

else
{
pala[ff]=karacter;
col --;
numero =ff;


}

}

pala[numero+1] = '\0';
boolean = 0;


LineasD2[pos] = new char[n];
strcpy(LineasD2[pos],pala);
kkontador++;
pos++;

}

boolean = 0;
numero =0;

for(int f=0 ; f<filas;f++)
{

int fil = f;
for(int ff=columnas-1; boolean==0; ff--)
{
char karacter = sopa[fil][ff];

if(sopa[fil][ff] == 0)
{
boolean =1;

}

else
{

pala[numero]=karacter;
fil++;
numero++;

}
}
pala[numero] = '\0';
boolean =0;
numero = 0;
LineasD2[pos] = new char[n];
strcpy(LineasD2[pos],pala);
pos++;
}




//-------------------------------------------------------------------------------------------

//Muestra al usuario las palabras que se deben encontrar y guarda las palabras en un arreglo

printf("\n\n\n\n Lista de Palabras: \n\n");

//inicializa la variable numeroPalabras con el numero de las palabras a buscar
fgets(cadena, n, lista);
numeroPalabras = atoi (cadena);

//Muestra las palabras en mayusculas y las guarda en un arreglo llamado palabras
int kon = 0;
while(fgets(cadena, n, lista) != NULL)
{


palabras[kon] = new char[n];
strcpy(palabras[kon],cadena);

char *cc = strupr(cadena);
printf(" - %s",cc);
kon++;
}



//agrega a la lista de palabras las inversas de las mismas sin mostrarlas al usuario


for(int u = 0; u<numeroPalabras; u++)
{
char *palabra;
palabra = new char[n];
strcpy(palabra,palabras[u]);


char *pf = palabra;
char *pi = palabra;
char aux;

// Buscar final de cadena
while(*pf) pf++;

pf--;
// invertir cadena
while(pi < pf)
{
aux = *pi;
*pi = *pf;
*pf = aux;
pi++;
pf--;
}
// guarda las palabras al reves
palabras[kon] = new char[n];
strcpy(palabras[kon],palabra);

kon++;
}



for (int s=0 ; s<2*numeroPalabras ; s++)
{
printf("%s",palabras[s]);

}




// pregunta si desea que la sopa de letras sea resuelta

printf(" \n Desea ver el el resultado? (s/n) ");
fflush(stdin);
scanf("%c", &cont);

if(cont == 's')
{
buscarHorizontal();
printf("si");

}

if(cont == 'n')
{
fclose(archivo);
fclose(lista);
return 0;
}


fclose(archivo);
fclose(lista);
system("pause");
return 0;

}