elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?  (Leído 15,798 veces)
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #10 en: 10 Marzo 2014, 01:29 am »

Hola María. Compatriota!!!, entiendo tu situación pues también soy de Vzla y es triste la situación que vivimos. Los poderosos explotando a los débiles  >:(, no importa el lado político en que se midan.

Leo, lo que quiero decir más específicamente es que el totalitarismo de derecha (Pinochet, Franco, Mussolini) y el de izquierda (Stalin, Fidel, Chávez) son lo mismo; al final sólo pisotear y explotar al pueblo. Robar a manos llenas, porque TODOS sin importar su lado político se hacen ricos y amasan enormes fortunas en el exterior, mientras el pueblo pasa trabajo. Aunque seas un profesional, igual no te alcanza para vivir. En Venezuela estamos mal, mal, mal .... la GN reprime y maltrata a la gente, a algunos los han lesionado, quemado, golpeado, secuestrado, perdido un ojo, y otros han perdido la vida. No hay comida. No se puede salir del país porque no hay Aerolíneas (el gobierno les debe una fortuna y suspendieron el servicio) y es un problema para otorgar los dólares o euros. Así que ni soñar con visitar un días las Canarias. Por cierto, ¿cómo es la situación allá? Espero que mejor que aquí, y si pensabas venir algún día a Vzla no lo hagas en este momento porque al saber que eres extranjero capaz y te acusan de agente de la CIA y te llevan preso.

Y agradezco la solidaridad de ustedes los Canarios, yo creo que la cultura Hispana, Canaria y Latinoamericana se parece mucho. Por cierto, ¿Canarios y Españoles peninsulares se llevan bien o mal entre sí?

Respecto al buscaminas pareces adivinar porque justamente tuve que buscar en google ya que se me había olvidado como se jugaba, jaja. Corrí tu programa y perfecto!!!, ahora sólo hace falta la parte dónde se desarrolla el juego en sí, o sea, se van descubriendo las minas. Por eso le pregunté a María si se puede usar getch() ya que en ese caso el juego sería más interactivo y nos podemos ir  desplazando por directamente por las casillas en lugar que estar preguntando coordenadas  :huh:


En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
xuhipoint

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #11 en: 10 Marzo 2014, 02:11 am »

hola yoe, querido compatriota, pues si la situación de Venezuela no esta facil, creo que estamos en el peor momento. Yo solo rezo porque todo termina bien y no sigan aumentando los números de muertos, que aunque no los conozca me duelen porque son mis hermanos. Y bueno referente al proyecto solo puedo utilizar iostream y string, tengo que crear una matriz dinamica, luego ingresar el numero de minas y las coordenadas donde estaran las mismas, cubrir mi matriz y luego destaparla segun la posicion del usuario, hasta el momento este es mi codigo pero no logro poner
Código
  1. #include <iostream>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. void imprimir (char **Matriz,int dim);
  7. void colocar_minas (char **Matriz,int dim);
  8.  
  9.  
  10. int main(void) {
  11.  
  12.  int dim,n;
  13.  char ch=35,sin_bomba=48;
  14.  
  15.  cout << "Introduzca la dimension de la matriz: ";
  16.  cin >> dim;
  17.  char **Matriz = new char *[dim];
  18.  for (int j = 0; j < dim; j++)
  19.    Matriz[j] = new char [dim];
  20.  for (int i = 0; i < dim; i++)
  21.    for (int j = 0; j < dim; j++)
  22.      Matriz[i][j]=sin_bomba;
  23.  
  24.  colocar_minas  (Matriz,dim);
  25.  
  26.  
  27. for (int i = 0; i < dim; i++)
  28.    for (int j = 0; j < dim; j++){
  29.      n = 1 ;
  30.      if (n<2 && Matriz[i][j]=='0')
  31.        Matriz[i][j]=ch;
  32.      else if (n==2 || n==3)
  33.        Matriz[i][j]='*';
  34.    }
  35.  
  36. }
  37.  
  38. void imprimir (char **Matriz,int dim) {
  39.  
  40.    for (int i = 0; i < dim; i++) {
  41.      cout << "\t\t" ;
  42.      for (int j = 0; j < dim; j++){
  43.        cout << ' '  << Matriz[i][j] << ' ' ;
  44.      }
  45.      cout << "\n\n";
  46.    }
  47.    cout << "\n\n";
  48. }
  49.  
  50.  
  51. void colocar_minas (char **Matriz,int dim){
  52.  int **cont,bomba=42;
  53.  cont = new int *[dim];
  54.  for (int j = 0; j < dim; j++)
  55.    cont[j] = new int [dim];
  56.  for (int i = 0; i < dim; i++)
  57.    for (int j = 0; j < dim; j++)
  58.      cont[i][j]=0;
  59.  int numero,fil,col,k,l,contador=0;
  60.  cout << "minas:";
  61.  cin >> numero;
  62.  for (int i = 0; i < numero; i++){
  63.  
  64.    do{
  65.      cout << "Introduzca fila ";
  66.      cin >> fil;
  67.    }while(fil<1 || fil>dim);
  68.    fil=fil-1;
  69.  
  70.    do{
  71.      cout << "Introduzca columna ";
  72.      cin >> col;
  73.    }while(col<1 || col>dim);
  74.    col=col-1;
  75.    Matriz[fil][col]=bomba;
  76.  
  77.    cout<<"\tM["<<fil+1<<","<<col+1<<"]="<<Matriz[fil][col]<< "\n\n";
  78.  }
  79.  imprimir (Matriz,dim);
  80.  
  81.  for ( fil = 0 ;fil < dim; fil++) {
  82.    for ( col = 0; col < dim; col++){
  83.    contador=0;
  84.      for ( k = -1; k < 2; k++) {
  85.        for ( l = -1; l < 2; l++){
  86.          if (fil+k < 0 || col+l < 0 || fil+k > dim-1 || col+l > dim-1)
  87.            continue;
  88.          else{
  89.            contador+=(Matriz[fil+k][col+l]-'0');
  90.          }
  91.        }
  92.      }
  93.      cont[fil][col]=contador;
  94.    }
  95.  }
  96.  
  97. }


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #12 en: 10 Marzo 2014, 04:51 am »

...........................................................
hasta el momento este es mi codigo pero no logro poner
.................................................

¿Qué no logras poner?.

Sabemos algo de C e incluso de C++ pero no somos pitonisos.............

¡¡¡¡ Saluditos! ..... !!!!


En línea

xuhipoint

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #13 en: 10 Marzo 2014, 13:13 pm »

Ya he modificado un poco el codigo, pero donde esta colocada la mina en vez de salir unos a su alrededor siguen saliendo asteriscos.
Código
  1. #include <iostream>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. void imprimir (char **Matriz,int dim);
  7. void colocar_minas (char **Matriz,int dim);
  8.  
  9.  
  10. int main(void) {
  11.  
  12.  int dim;
  13.  char ch=35;
  14.  
  15.  cout << "Introduzca la dimension de la matriz: ";
  16.  cin >> dim;
  17.  char **Matriz = new char *[dim];
  18.  for (int j = 0; j < dim; j++)
  19.    Matriz[j] = new char [dim];
  20.  for (int i = 0; i < dim; i++)
  21.    for (int j = 0; j < dim; j++)
  22.      Matriz[i][j]='0';
  23.  colocar_minas  (Matriz,dim);
  24.  imprimir (Matriz,dim);
  25.  
  26.  for (int i = 0; i < dim; i++)
  27.    for (int j = 0; j < dim; j++){
  28.  
  29.      if (Matriz[i][j]=='0')
  30.        Matriz[i][j]=ch;
  31.      if (Matriz[i][j]=='*' )
  32.        Matriz[i][j]=ch;
  33.    }
  34. imprimir (Matriz,dim);
  35.  
  36. }
  37.  
  38. void imprimir (char **Matriz,int dim) {
  39.    for (int i = 0; i < dim; i++) {
  40.      cout << "\t\t" ;
  41.      for (int j = 0; j < dim; j++){
  42.        cout << ' '  << Matriz[i][j] << ' ' ;
  43.      }
  44.      cout << "\n\n";
  45.    }
  46.    cout << "\n\n";
  47. }
  48.  
  49.  
  50. void colocar_minas (char **Matriz,int dim){
  51.  int **cont;
  52.  cont = new int *[dim];
  53.  for (int j = 0; j < dim; j++)
  54.    cont[j] = new int [dim];
  55.  for (int i = 0; i < dim; i++)
  56.    for (int j = 0; j < dim; j++)
  57.      cont[i][j]=0;
  58.  int numero,fil,col,k,l,contador=0;
  59.  cout << "Ingrese minas:";
  60.  cin >> numero;
  61.  for (int i = 0; i < numero; i++){
  62.  
  63.    do{
  64.      cout << "Introduzca fila: ";
  65.      cin >> fil;
  66.    }while(fil<1 || fil>dim);
  67.    fil=fil-1;
  68.  
  69.    do{
  70.      cout << "Introduzca columna: ";
  71.      cin >> col;
  72.    }while(col<1 || col>dim);
  73.    col=col-1;
  74.    Matriz[fil][col]='*';
  75.  
  76.    cout<<Matriz[fil][col]<< "\n\n";
  77.  }
  78.  imprimir (Matriz,dim);
  79.  
  80.  for ( fil = 0 ;fil < dim; fil++) {
  81.    for ( col = 0; col < dim; col++){
  82.    contador=0;
  83.      for ( k = -1; k < 2; k++) {
  84.        for ( l = -1; l < 2; l++){
  85.          if (fil+k < 0 || col+l < 0 || fil+k > dim-1 || col+l > dim-1)
  86.            continue;
  87.          else{
  88.            contador+=(Matriz[fil+k][col+l]-'0');
  89.          }
  90.        }
  91.      }
  92.      cont[fil][col]=contador;
  93.    }
  94.  }
  95.  for ( fil = 0 ;fil < dim; fil++)
  96.    for ( col = 0; col < dim; col++)
  97.      Matriz[fil][col]=cont[fil][col]+48;
  98.  
  99. }
  100.  
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #14 en: 10 Marzo 2014, 13:27 pm »

Código
  1.  Matriz[fil][col]='*';
  2.  
  3.  // ...
  4.  
  5.  for ( fil = 0 ;fil < dim; fil++)
  6.    for ( col = 0; col < dim; col++)
  7.      Matriz[fil][col]=cont[fil][col]+48;
  8.  

Ese bucle borra, literalmente, la posición de las minas. Deberías comprobar, antes de machacar el valor de Matriz, que la posición no contiene una mina.

Código
  1. cout << "\n\n";

Hay una constante definida en el espacio de nombres std que es endl. Tiene la ventaja de que es portable, ya que la STL en linux implementa su versión de endl y Windows hace lo propio.

Es más portable usar lo siguiente:

Código
  1. cout << endl << endl;

Más cosas...

Código
  1. for ( fil = 0 ;fil < dim; fil++) {
  2.    for ( col = 0; col < dim; col++){
  3.    contador=0;
  4.      for ( k = -1; k < 2; k++) {
  5.        for ( l = -1; l < 2; l++){
  6.          if (fil+k < 0 || col+l < 0 || fil+k > dim-1 || col+l > dim-1)
  7.            continue;
  8.          else{
  9.            contador+=(Matriz[fil+k][col+l]-'0');
  10.          }
  11.        }
  12.      }
  13.      cont[fil][col]=contador;
  14.    }
  15.  }

contador += ¿¿que??
A ver, si en Matriz las minas se representan con asteriscos... por qué no buscas asteriscos para contarlos?? la transformación que estás haciendo ahí no tiene ningún sentido. Dicho de otra forma:

Código:
'*'-'0' == '#'

¿Te suena el caracter '#' si solo pones una mina? Ya sabes de dónde sale.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #15 en: 10 Marzo 2014, 13:43 pm »

Se te fue un gazapo en el código:

Código
  1. do{
  2.      cout << "Introduzca columna: ";
  3.      cin >> col;
  4.    }while(col<1 || col>dim);
  5.    col=col-1;
  6.    Matriz[fil][col]='*'; /* <==AQUI */ /*ES ==>  */Matriz[fil][col]='1';
  7.  
  8.    cout<<Matriz[fil][col]<< "\n\n";
  9.  


¡¡¡¡ Saluditos! ..... !!!!



« Última modificación: 10 Marzo 2014, 13:52 pm por leosansan » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #16 en: 10 Marzo 2014, 13:58 pm »

Se te fue un gazapo en el código:

Código
  1. do{
  2.      cout << "Introduzca columna: ";
  3.      cin >> col;
  4.    }while(col<1 || col>dim);
  5.    col=col-1;
  6.    Matriz[fil][col]='*'; /* <==AQUI */ /*ES ==>  */Matriz[fil][col]='1';
  7.  
  8.    cout<<Matriz[fil][col]<< "\n\n";
  9.  


¡¡¡¡ Saluditos! ..... !!!!





Pero ese cambio tiene un problema... que luego cuando vaya a contar... cómo identifica la posición original de la mina??

Pongamos el caso:

Código:
1 1 0
0 0 0
0 0 0
0 0 0

Después de calcular las minas se tiene

Código:
1 1 1
1 1 1
0 0 0

Eso es incorrecto porque lo lógico es que la salida fuese

Código:
1 * 1
1 1 1
0 0 0

Si no marcas dónde están las minas mal vamos.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #17 en: 10 Marzo 2014, 14:11 pm »

Amigo eferion habrá que repasar el juego del buscaminas y, por favor, no tergiversar o copiar bien el código que cuelgo.

De acuerdo a mi código, un par de mensajes anteriores a este, una salida sería:


Citar
Introduzca la dimension de la matriz: 3

Introduzca numero de minas (numero):2

Colocando la mina : 1
Introduzca fila (1-numero): 1
Introduzca columna (1-numero): 1
        M[1,1]=1


Colocando la mina : 2
Introduzca fila (1-numero): 1
Introduzca columna (1-numero): 2
        M[1,2]=1

                 1  1  0

                 0  0  0

                 0  0  0

 

                 2  2  1

                 2  2  1

                 0  0  0


                
                2  *  1

                2  2  *

                █  *  *
*



Otro ejemplo:


 1  0  0  0  0

 1  0  0  0  0

 0  0  0  0  1

 0  0  0  0  0

 0  0  0  0  0



 2  2  0  0  0

 2  2  0  1  1

 1  1  0  1  1

 0  0  0  1  1

 0  0  0  0  0



 2  2  █  █  █

 *  2  *  *  *

 *  1  █  1  1

 *  *  *  *  1

 *  █  █  *  █




En la matriz del juego cada casilla se obtiene sumando las minas que tiene alrededor.

La primera matriz anterior es donde están colocadas las minas, la segunda matriz es la que resulta de sumar a cada casilla las ocho, como máximo, que le rodean y la tercera fue una improvisación de ocultar algunas de las casillas. Como ves las matrices tienen toda su lógica con arreglo a las reglas del juego.



¡¡¡¡ Saluditos! ..... !!!!



REEDITADIDO:

.................................................................
contador += ¿¿que??
A ver, si en Matriz las minas se representan con asteriscos... por qué no buscas asteriscos para contarlos?? la transformación que estás haciendo ahí no tiene ningún sentido. Dicho de otra forma:

Código:
'*'-'0' == '#'

¿Te suena el caracter '#' si solo pones una mina? Ya sabes de dónde sale.[/size]

* Los asteriscos no representan las minas sino los 1 de la matriz inicial. Los asteriscos son para ocultar información.

* El cuadrado que sale es porque en el juego parte del tablero no es seleccionable.

* contador+= él más los que tiene alrededor.

*  '#' no es '*'-'0' sino el caracter '35' que xuhipoint estimó coger, no sé por qué diablos lo hizo.


Observar la siguiente captura de un juego del buscaminas:


Se ve que en ciertas casillas salen números, las minas totales de él y los que le rodean, otras casillas están levantadas y serían el equivalente a los ateriscos, hay que seleccionar y que no te estalle una mina y, por último, hay otras casillas que son planas, las que no intervienen en el juego, no se puede picar en ellas, o sí se puede pero no aportan nada.

« Última modificación: 10 Marzo 2014, 15:01 pm por leosansan » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #18 en: 10 Marzo 2014, 15:06 pm »

Se ve que en ciertas casillas salen números, las minas totales de él y los que le rodean, ...

Dudo mucho que en el buscaminas puedas encontrar una casilla con el número 9 ( 8 que le rodean más la mina de la propia casilla )
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Matriz Dinamica en c++. Como rellenarla en coordenadas especificas?
« Respuesta #19 en: 10 Marzo 2014, 16:21 pm »

Dudo mucho que en el buscaminas puedas encontrar una casilla con el número 9 ( 8 que le rodean más la mina de la propia casilla )



Fíjate en los ejemplos, los números son más bien bajos.

Es un juego y si lo haces entrando a mano las minas "puede" darse el caso, aunque sería tonto ya que declaras a todas las que le rodean como minas. Por eso se eligen las minas más separadas, lo que da como resultado números  bajos para crear mayor incertidumbre.



¡¡¡¡ Saluditos! ..... !!!!



« Última modificación: 10 Marzo 2014, 16:26 pm por leosansan » En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con Clickear en coordenadas especificas VB6
Programación Visual Basic
revenge1252 1 2,972 Último mensaje 10 Julio 2010, 20:08 pm
por BlackZeroX
Memoria dinamica matriz
Programación C/C++
programacion_c 1 1,812 Último mensaje 25 Abril 2012, 00:23 am
por david_BS
[BATCH] ¿Cómo ubicar la ventana en coordenadas específicas?
Scripting
cyberalejo17 4 7,526 Último mensaje 27 Abril 2014, 05:08 am
por cyberalejo17
Coordenadas de Matriz en Console C++
Programación C/C++
BrendiisFox 1 2,248 Último mensaje 30 Julio 2015, 09:05 am
por joecarl
Como imprimir coordenadas de una matriz???
.NET (C#, VB.NET, ASP)
omar_tijoux 0 2,087 Último mensaje 26 Octubre 2016, 03:12 am
por omar_tijoux
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines