Como se hace una sopa de numeros en c++

Iniciado por shaelb, 26 Mayo 2015, 01:58 AM

0 Miembros y 3 Visitantes están viendo este tema.

shaelb

quiero saber como hago para ir comparando los numeros que tengo que buscar en la sopa :D... y mostrar la pocicion desde donde inicia hasta donde termina

crack81

Especifica un poco mas tu problema porque es muy general y no quiero hacerte una recomendacion que no sea la que estas buscando
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

shaelb

mmm osea una matriz nxm con mumeros aleatorios el numero lo digita el usuario y este debe ser buscado dentro de la matriz. Los números solo aparecerán de forma horizontal y vertical. El sentido en el que pueden aparecer puede ser de izquierda a derecha, de derecha a izquierda, de arriba a abajo o de abajo a arriba y se debe mostrar la posicion donde inicia el numero y donde termina....pero no se como hacer eso u.u :(

daryo

buenas

0xFer

Puedes hacerlo utilizando arreglos, para crear un arreglo y asignarle números aleatorios seria así:
   
Código (cpp) [Seleccionar]
#define TAM 1O

int mxm[TAM][TAM]; //declaramos la matriz

for(int i = 0; i < TAM;i++){ //estos dos for sirven para reorrer la matriz

   for(int j = 0; j < TAM;j++){

       mxm[i][j] = rand() % 10; //asignamos numeros aleatorios a la matriz
           
}
}

   
necesitas la librería stdlib para los números aleatorios, luego seria cuestión de sacar los dígitos del numero que quieres buscar, por ejemplo si
quisieras buscar el numero 23, primero tendrías que buscar el 3 así

Código (cpp) [Seleccionar]

if( mxm[i][j] == 3){
//luego para buscarlo el 2 hacia la derecha sería asi
if( mxm[i][j+1] == 2 )
//hacia abajo
if( mxm[i-1][j] == 2 )
//etc

}



Eso podría ser una solución.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

shaelb

tengo este codigo pero las variables final e inicio no me muestran ningun valor cuando lo ejecuto...cual es el error  :(

Código (cpp) [Seleccionar]

#include <stdio.h>
#include<iostream>
#include <stdlib.h> //incluye srand() y rand()
#include <conio.h>
#include <time.h> //incluye time()

using namespace std;

int main ()
{
    rand()%10;//numeros Aleatorios en funcion del tiempo

//declarar
char r;
int filas, columnas, i, j, num, num1, num2, numv,inicioa, iniciob, finala, finalb,  parte[100],inicio,final, des;


r=='s';
    while (r='s')
{
cout<<"Ingrese numero de filas: "<<endl;
cin>>filas;
cout<<"Ingrese numero de columnas: "<<endl;
cin>>columnas;
      int srand(time(0));//numeros Aleatorios en funcion del tiempo// se inicializa el random para la seleccion aleatortia de numeros

int matriz[filas][columnas];

//ciclo para el llenado de la matriz
              for(int i=0;i<filas;i++)
              {
                   for( j=0;j<columnas;j++)
                    {
                        matriz[i][j]= rand()%10+0;//Agrega numero aleatorio a la posicion ij de la matri
                    }
              }

 
//mostrar matriz
cout<<"\n  SOPA DE LETRAS   \n"<<endl;
       {
            for(int i=0;i<filas;i++)
               {
                   for(j=0;j<columnas;j++)
                       {
                             cout<<"\t"<<matriz[i][j] ;
                       }
                       
                cout<<"\n\n";
               
                }
;
//numero
       cout<<"Numero que desaa buscar:"<<endl;
       cin>>numv;
        j=1;
        while ((j<=4))
{
   parte[j] = numv%10;
   numv = numv/10;
 
   j = j+1;
    }
    des==0;
    //encontrar numero
        for (int i=1 ;i<=filas; i++)
        {
        while(des=0)
        {
        for (int j=1; j<=columnas; j++)
                {
                if (matriz[i][j]==parte[i])
                {
                if(matriz[i][j+1]==parte[i+1])
                {
                if (matriz[i][j+2]==parte[i+2])
                {
                if (matriz[i][j+3]==parte[i+3])
                {
                inicioa==i;
                iniciob==j;
                finala==i;
                finalb==j+3;
                des==des+1;
  }
}
}
}

}
}
       
}
for (int i=filas ;i>=1; i--)
        {
        while(des=0)
        {
        for (int j=columnas; j>=1; j--)
                {
                if (matriz[i][j]==parte[i])
                {
                if(matriz[i][j-1]==parte[i+1])
                {
                if (matriz[i][j-2]==parte[i+2])
                {
                if (matriz[i][j-3]==parte[i+3])
                {
                inicioa==i;
                iniciob==j;
                finala==i;
                finalb==j-3;
                des==des+1;
  }
}
}
}

}
}
       
}
for (int j=1 ;j<=columnas; j++)
        {
        while(des=0)
        {
        for (int i=1; i<=filas; i++)
                {
                if (matriz[i][j]==parte[j])
                {
                if(matriz[i+1][j]==parte[j+1])
                {
                if (matriz[i+2][j]==parte[j+2])
                {
                if (matriz[i+3][j]==parte[j+3])
                {
                inicioa==i;
                iniciob==j;
                finala==i+3;
                finalb==j;
                des==des+1;
  }
}
}
}

}
}
       
       
}
for (int j=columnas ;j>=1; j--)
        {
        while(des=0)
        {
        for (int i=filas; i>=1; i--)
                {
                if (matriz[i][j]==parte[j])
                {
                if(matriz[i-1][j]==parte[j+1])
                {
                if (matriz[i-2][j]==parte[j+2])
                {
                if (matriz[i-3][j]==parte[j+3])
                {
                inicioa==i;
                iniciob==j;
                finala==i-3;
                finalb==j;
                des==des+1;
  }
}
}
}

}
}
       
}

   
               


cout<<"Pocicion inicial:", inicioa, iniciob, "\n";
cout<<"posicion final", finala, finalb ,"\n";
cout<<"Desea jugar otra ves?s/n";
cin>>r;
       }
     system("pause");   
   }
}

0xFer

para asignar valor a una variable:
Código (cpp) [Seleccionar]

int var = 2;


para comparar:

Código (cpp) [Seleccionar]

if( var == 2)


tú lo tienes invertido
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

shaelb


0xFer

Tienes un bucle infinito aquí:

Código (cpp) [Seleccionar]

while(des == 0){
    //Tienes mas code aquí
if (matriz[i][j+3]==parte[i+3])
    {
     inicioa=i;
     iniciob=j;
     finala=i;
     finalb=j+3;
     des=des+1;
}
}  


des solamente se incrementa cuando se cumple el condicional, o sea que si no se cumple nunca terminará de ejecutar



Esto está mal:
Código (cpp) [Seleccionar]

cout<<"Pocicion inicial:", inicioa, iniciob, "\n";


mejor haber puesto:

Código (cpp) [Seleccionar]

cout<<"Pocicion inicial: " << inicioa << iniciob << endl;


Lo siguiente no tiene sentido:
Código (cpp) [Seleccionar]

r='s';
    while (r=='s')
{
        } 


con poder while(true){  } es más que suficiente.


Ahora:

Código (cpp) [Seleccionar]

rand()%10;


lo pones al aire, no hay nadie que lo cache
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

shaelb

pero acaso no saldra del bucle si la condicion se cumple eso quiere decir que encontro el numero?