Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: shaelb en 26 Mayo 2015, 01:58 am



Título: Como se hace una sopa de numeros en c++
Publicado por: shaelb en 26 Mayo 2015, 01:58 am
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


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: crack81 en 26 Mayo 2015, 02:00 am
Especifica un poco mas tu problema porque es muy general y no quiero hacerte una recomendacion que no sea la que estas buscando


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: shaelb en 26 Mayo 2015, 02:05 am
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 :(


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: daryo en 26 Mayo 2015, 02:10 am
um con un array bidimensional



Título: Re: Como se hace una sopa de numeros en c++
Publicado por: 0xFer en 26 Mayo 2015, 03:22 am
Puedes hacerlo utilizando arreglos, para crear un arreglo y asignarle números aleatorios seria así:
   
Código
  1. #define TAM 1O
  2.  
  3. int mxm[TAM][TAM]; //declaramos la matriz
  4.  
  5. for(int i = 0; i < TAM;i++){ //estos dos for sirven para reorrer la matriz
  6.  
  7.    for(int j = 0; j < TAM;j++){
  8.  
  9.        mxm[i][j] = rand() % 10; //asignamos numeros aleatorios a la matriz
  10.  
  11. }
  12. }
  13.  
   
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
  1. if( mxm[i][j] == 3){
  2. //luego para buscarlo el 2 hacia la derecha sería asi
  3. if( mxm[i][j+1] == 2 )
  4. //hacia abajo
  5. if( mxm[i-1][j] == 2 )
  6. //etc
  7.  
  8. }
  9.  
  10.  

Eso podría ser una solución.
 


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: shaelb en 26 Mayo 2015, 03:59 am
tengo este codigo pero las variables final e inicio no me muestran ningun valor cuando lo ejecuto...cual es el error  :(

Código
  1. #include <stdio.h>
  2. #include<iostream>
  3. #include <stdlib.h> //incluye srand() y rand()
  4. #include <conio.h>
  5. #include <time.h> //incluye time()
  6.  
  7. using namespace std;
  8.  
  9. int main ()
  10. {
  11.    rand()%10;//numeros Aleatorios en funcion del tiempo
  12.  
  13. //declarar
  14. char r;
  15. int filas, columnas, i, j, num, num1, num2, numv,inicioa, iniciob, finala, finalb,  parte[100],inicio,final, des;
  16.  
  17.  
  18. r=='s';
  19.    while (r='s')
  20. {
  21. cout<<"Ingrese numero de filas: "<<endl;
  22. cin>>filas;
  23. cout<<"Ingrese numero de columnas: "<<endl;
  24. cin>>columnas;
  25.     int srand(time(0));//numeros Aleatorios en funcion del tiempo// se inicializa el random para la seleccion aleatortia de numeros
  26.  
  27. int matriz[filas][columnas];
  28.  
  29. //ciclo para el llenado de la matriz
  30.              for(int i=0;i<filas;i++)
  31.              {
  32.                   for( j=0;j<columnas;j++)
  33.                    {
  34.                        matriz[i][j]= rand()%10+0;//Agrega numero aleatorio a la posicion ij de la matri
  35.                    }
  36.              }
  37.  
  38.  
  39. //mostrar matriz
  40. cout<<"\n  SOPA DE LETRAS   \n"<<endl;
  41.       {
  42.            for(int i=0;i<filas;i++)
  43.               {
  44.                   for(j=0;j<columnas;j++)
  45.                       {
  46.                             cout<<"\t"<<matriz[i][j] ;
  47.                       }
  48.  
  49.                cout<<"\n\n";
  50.  
  51.                }
  52. ;
  53. //numero
  54.       cout<<"Numero que desaa buscar:"<<endl;
  55.       cin>>numv;
  56.       j=1;
  57.        while ((j<=4))
  58. {
  59.   parte[j] = numv%10;
  60.   numv = numv/10;
  61.  
  62.   j = j+1;
  63.    }
  64.    des==0;
  65.    //encontrar numero
  66.        for (int i=1 ;i<=filas; i++)
  67.        {
  68.         while(des=0)
  69.         {
  70.         for (int j=1; j<=columnas; j++)
  71.                {
  72.                 if (matriz[i][j]==parte[i])
  73.                 {
  74.                 if(matriz[i][j+1]==parte[i+1])
  75.                 {
  76.                 if (matriz[i][j+2]==parte[i+2])
  77.                 {
  78.                 if (matriz[i][j+3]==parte[i+3])
  79.                 {
  80.                 inicioa==i;
  81.                 iniciob==j;
  82.                 finala==i;
  83.                 finalb==j+3;
  84.                 des==des+1;
  85.  }
  86. }
  87. }
  88. }
  89.  
  90. }
  91. }
  92.  
  93. }
  94. for (int i=filas ;i>=1; i--)
  95.        {
  96.         while(des=0)
  97.         {
  98.         for (int j=columnas; j>=1; j--)
  99.                {
  100.                 if (matriz[i][j]==parte[i])
  101.                 {
  102.                 if(matriz[i][j-1]==parte[i+1])
  103.                 {
  104.                 if (matriz[i][j-2]==parte[i+2])
  105.                 {
  106.                 if (matriz[i][j-3]==parte[i+3])
  107.                 {
  108.                 inicioa==i;
  109.                 iniciob==j;
  110.                 finala==i;
  111.                 finalb==j-3;
  112.                 des==des+1;
  113.  }
  114. }
  115. }
  116. }
  117.  
  118. }
  119. }
  120.  
  121. }
  122. for (int j=1 ;j<=columnas; j++)
  123.        {
  124.         while(des=0)
  125.         {
  126.         for (int i=1; i<=filas; i++)
  127.                {
  128.                 if (matriz[i][j]==parte[j])
  129.                 {
  130.                 if(matriz[i+1][j]==parte[j+1])
  131.                 {
  132.                 if (matriz[i+2][j]==parte[j+2])
  133.                 {
  134.                 if (matriz[i+3][j]==parte[j+3])
  135.                 {
  136.                 inicioa==i;
  137.                 iniciob==j;
  138.                 finala==i+3;
  139.                 finalb==j;
  140.                 des==des+1;
  141.  }
  142. }
  143. }
  144. }
  145.  
  146. }
  147. }
  148.  
  149.  
  150. }
  151. for (int j=columnas ;j>=1; j--)
  152.        {
  153.         while(des=0)
  154.         {
  155.         for (int i=filas; i>=1; i--)
  156.                {
  157.                 if (matriz[i][j]==parte[j])
  158.                 {
  159.                 if(matriz[i-1][j]==parte[j+1])
  160.                 {
  161.                 if (matriz[i-2][j]==parte[j+2])
  162.                 {
  163.                 if (matriz[i-3][j]==parte[j+3])
  164.                 {
  165.                 inicioa==i;
  166.                 iniciob==j;
  167.                 finala==i-3;
  168.                 finalb==j;
  169.                 des==des+1;
  170.  }
  171. }
  172. }
  173. }
  174.  
  175. }
  176. }
  177.  
  178. }
  179.  
  180.  
  181.  
  182.  
  183.  
  184. cout<<"Pocicion inicial:", inicioa, iniciob, "\n";
  185. cout<<"posicion final", finala, finalb ,"\n";
  186. cout<<"Desea jugar otra ves?s/n";
  187. cin>>r;
  188.       }
  189.     system("pause");  
  190.   }
  191. }


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: 0xFer en 26 Mayo 2015, 04:16 am
para asignar valor a una variable:
Código
  1. int var = 2;
  2.  

para comparar:

Código
  1. if( var == 2)
  2.  

tú lo tienes invertido


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: shaelb en 26 Mayo 2015, 04:22 am
ya lo corregi pero sigue igual u.u  :(


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: 0xFer en 26 Mayo 2015, 04:33 am
Tienes un bucle infinito aquí:

Código
  1. while(des == 0){
  2.    //Tienes mas code aquí
  3. if (matriz[i][j+3]==parte[i+3])
  4.    {
  5.     inicioa=i;
  6.     iniciob=j;
  7.     finala=i;
  8.     finalb=j+3;
  9.     des=des+1;
  10. }
  11. }  
  12.  

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
  1. cout<<"Pocicion inicial:", inicioa, iniciob, "\n";
  2.  

mejor haber puesto:

Código
  1. cout<<"Pocicion inicial: " << inicioa << iniciob << endl;
  2.  

Lo siguiente no tiene sentido:
Código
  1. r='s';
  2.    while (r=='s')
  3. {
  4.        }  
  5.  

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


Ahora:

Código
  1. rand()%10;
  2.  

lo pones al aire, no hay nadie que lo cache


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: shaelb en 26 Mayo 2015, 04:58 am
pero acaso no saldra del bucle si la condicion se cumple eso quiere decir que encontro el numero?


Título: Re: Como se hace una sopa de numeros en c++
Publicado por: 0xFer en 26 Mayo 2015, 05:04 am
pero acaso no saldra del bucle si la condicion se cumple eso quiere decir que encontro el numero?

Es que si no encuentra el número nunca sale y el programa se queda colgado.

Al menos que sepas de ante mano que el número que estas buscando si está en la sopa

Si te sigue el error muestra de nuevo tu código modificado a ver si puedo encontrar el problema