Sopa de letras en Turbo C++
El problema que me planteas es un tanto tedioso de resolver pero,ya que se tiene que hacer una busqueda tanto por filas , columnas y combinacion de ambas para que se de una solucion.. te doy un pequeña solucion que es esta que hice:
1.- busca la palabra de izquierda a derecha (encaso de que este escrita haci)
2.-busca la palabra de derecha a izquierda(en caso de que este escrita al revez)
3.-busca la palabra de abajo hacia arriba
4.-busca la palabra de arriba hacia abajo
5.-TU TURNO DE PROGRAMAR CON LO YA HECHO TE TOCA HACER LA S DIAGONALES....SI TIENES DUDAS SOBRE COMO HACER ESTAS FALTANTES BUSCAME ,...EN MI DIRECCION DE CORREO ELECTRONICO
// Sopa.cpp por: GUSTAVO CORTES GOMEZ
// Siempre que encuentre la palabra la cambia de color (OK ¡¡¡¡ )
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <ctype.h>
#include <string.h>
void derecha(void);
void izquier(void);
void bajada(void);
void subida(void);
////////////// MIS VARIABLES GLOBALES /////////////////////
char sop[10][10]={'M','M','L','E','E','N','A','E','V','E',
'E','R','H','O','N','G','O','S','T','R',
'X','X','O','T','I','R','R','A','C','A',
'I','S','A','P','P','O','T','A','P','S',
'C','C','M','L','A','A','I','Z','O','T',
'O','A','A','U','A','N','U','L','P','U',
'S','O','M','B','R','E','R','O','M','P',
'C','N','E','A','R','R','I','I','O','O',
'W','O','J','E','N','O','C','P','Z','E',
'A','A','Z','A','A','L','N','Y','T','D'};
int a=0,b=0,suma=0,tot=0,acum=0,bsuma=0;
char can[20],vol[20],op;
////////////////////////////////////////////////////////////////
void main()
{
int f,c,i;
clrscr();
do
{
textbackground(BLACK);
textcolor(WHITE);//imprime mi sopa de letras
for(f=0;f<10;f++)
{
for(c=0;c<10;c++)
{
gotoxy((c+3)*2,(f+1)*2);cprintf("%c",sop[f][c]);
}
}
gotoxy(40,4);printf(" ");
gotoxy(33,7 );cprintf("HONGOS");
gotoxy(33,8 );cprintf("PLUMA");
gotoxy(33,9 );cprintf("SOMBRERO");
gotoxy(33,10);cprintf("TROMPO");
gotoxy(33,11);cprintf("LORENA");
gotoxy(33,12);cprintf("CONEJO");
gotoxy(33,13);cprintf("PATO");
gotoxy(35,15);cprintf("Cadena . ");
gotoxy(35,16);cprintf(" ");
gotoxy(35,16);cscanf("%s",&vol);
tot=strlen(vol);
for (i=0; i<tot; i++)
{
can[i] = toupper(vol[i]);
}
derecha();
textcolor(WHITE);
gotoxy(10,24);cprintf("Otra palabra ?(S/N) ");
gotoxy(10,25);scanf("%s",&op);
gotoxy(35,16);cprintf(" ");
gotoxy(10,25);cprintf(" ");
}while(op=='S'||op=='s');
}
void derecha(void)
{
int ci,cf,ff;
int pint;
a=0; textcolor(WHITE);
do//for(a=0;a<10;a++)
{
suma=0;
b=0;
do//for(b=0;b<10;b++)
{
if(sop[a][b]==can[suma])
{
suma=suma+1;
acum=acum+1;
if(acum==1){ci=b;}
}
else
{
acum=0;
}
if(acum==tot)
{ cf=b;ff=a;
break;
}
b++;
}while(b<10);
if(acum==tot)
{ cf=b;ff=a;
break;
}
a++;
}while(a<10);
////////////////////////////////////////////
if(acum==tot)
{
/* gotoxy(50,1);cprintf("columnaInici : %d",ci);
gotoxy(50,2);cprintf("columnaFinal : %d",cf);
gotoxy(50,3);cprintf("fila : %d",ff);*/
//gotoxy(40,2);cprintf("Si esta");
for(pint=ci;pint<=cf;pint++)
{
textcolor(RED);
gotoxy((pint+3)*2,(ff+1)*2);cprintf("%c",sop[ff][pint]);
}
}
else
{
izquier();
}
}
void izquier(void)
{
int ci,cf,ff;
int pint;
textcolor(WHITE);
a=0;
do
{
suma=0;
b=10;
do
{
if(sop[a][b]==can[suma])
{
suma=suma+1;
acum=acum+1;
if(acum==1){ci=b;}
}
else
{
acum=0; suma=0;
}
if(acum==tot)
{ cf=b;ff=a;
break;
}
b--;
}while(b>=0);
if(acum==tot)
{ cf=b;ff=a;
break;
}
a++;
}while(a<10);
////////////////////////////////////////////
if(acum==tot)
{
for(pint=ci;pint>=cf;pint--)
{
textcolor(GREEN);
gotoxy((pint+3)*2,(ff+1)*2);cprintf("%c",sop[ff][pint]);
}
//gotoxy(40,4);cprintf("Si esta");
}
else
{
bajada();
}
}
void bajada(void)
{
int ci,cf,ff;
int pint;
textcolor(WHITE);
a=0;
do
{
suma=0;
b=0;
do
{
if(sop[b][a]==can[suma])
{
suma=suma+1; acum=acum+1;
if(acum==1){ci=b;}
}
else
{
acum=0;
}
if(acum==tot)
{
cf=b;ff=a;
break;
}
b++;
}while(b<10);
if(acum==tot)
{ cf=b;ff=a;
break;
}
a++;
}while(a<10);
////////////////////////////////////////////
if(acum==tot)
{
for(pint=ci;pint<=cf;pint++)
{
textcolor(BLUE);
gotoxy((ff+3)*2,(pint+1)*2);cprintf("%c",sop[pint][ff]);
}
//gotoxy(40,3);printf("Si esta");
}
else
{
subida();
}
}
void subida(void)
{
int ci,cf,ff;
int pint;
textcolor(WHITE);
a=0;
do{
suma=0;
b=10;
do
{
if(sop[b][a]==can[suma])
{
suma=suma+1; acum=acum+1;
if(acum==1){ci=b;}
}
else
{
acum=0; suma=0;
}
if(acum==tot)
{ cf=b;ff=a;
break;
}
b--;
}while(b>=0);
if(acum==tot)
{ cf=b;ff=a;
break;
}
a++;
}while(a<10);
if(acum==tot)
{
for(pint=ci;pint>=cf;pint--)
{
textcolor(YELLOW);
gotoxy((ff+3)*2,(pint+1)*2);cprintf("%c",sop[pint][ff]);
}
// gotoxy(40,4);printf("Si esta");
}
else
{
gotoxy(40,4);printf("No se encuentra");
}
}