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
Especifica un poco mas tu problema porque es muy general y no quiero hacerte una recomendacion que no sea la que estas buscando
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 :(
um con un array bidimensional
Puedes hacerlo utilizando arreglos, para crear un arreglo y asignarle números aleatorios seria así:
#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í
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.
tengo este codigo pero las variables final e inicio no me muestran ningun valor cuando lo ejecuto...cual es el error :(
#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");
}
}
para asignar valor a una variable:
int var = 2;
para comparar:
if( var == 2)
tú lo tienes invertido
ya lo corregi pero sigue igual u.u :(
Tienes un bucle infinito aquí:
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:
cout<<"Pocicion inicial:", inicioa, iniciob, "\n";
mejor haber puesto:
cout<<"Pocicion inicial: " << inicioa << iniciob << endl;
Lo siguiente no tiene sentido:
r='s';
while (r=='s')
{
}
con poder while(true){ } es más que suficiente.
Ahora:
rand()%10;
lo pones al aire, no hay nadie que lo cache
pero acaso no saldra del bucle si la condicion se cumple eso quiere decir que encontro el numero?
Cita de: 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?
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