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


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con codigo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con codigo  (Leído 436 veces)
Ivan88

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Problema con codigo
« en: 13 Marzo 2020, 23:12 »

Se pide que se enumeren las casillas de un tablero de ajedrez de izquierda a derecha y de arriba hacia abajo.Luego se pide que se introduzca un numero de casilla por ejemplo la 45, y que el programa diga la posicion que ocupa , en este caso la (6,5)...Este es mi codigo pero no encuentro el fallo..Gracias de antemano.

using System;

namespace Ajedrez
{
    class Program
    {
        static void Main(string[] args)
        {
            int comparador = 0;
            int x;
            int[,] Matriz = new int[8, 8];
               
            Console.WriteLine("Introduce la casilla entre 1 y 64");
            x = Convert.ToInt32(Console.ReadLine());

       
           
                for (int i = 1; i == 8; ++i)
                {
                    for (int j = 1; j == 8; ++j)
                    {
                    comparador = comparador + 1;


                    if (x == comparador)
                    {
                        Console.WriteLine("La posición de la casilla " + x + "es [" + i + "," + j + "]");
                    }
                   

                       
                       
                    }
                   
                }
           
           
           
        }
    }
}


En línea

NEBIRE


Desconectado Desconectado

Mensajes: 2.328


Ver Perfil
Re: Problema con codigo
« Respuesta #1 en: 13 Marzo 2020, 23:55 »

Cuando consideras un array debes pensar si el array comienza en 0 o en 1...
Si tienes 64 casillas y:
A --- Comienza en 0, entonces el rango es: 0-63, 8 filas x 8 columnas 0-7, 0-7
B --- Comienza en 1, entonces el rango es: 1-64, 8 filas x 8 columnas 1-8, 1-8


No obstantes no es preciso hacer ningún bucle ni menos anidado, para localizar una casilla lineal que posición ocupa en el tablero. Es matemática belemental de un chaval de 12 años o menos...

La elección determina el cálculo...  La siguiente funciona correctamente con 'A':
(es muy fáci adaptarlo al caso 'B', pero lo dejo a tu esfuerzo  :silbar: :silbar: )...
Código:
fila = (x \ 8)
columna = (x modulo 8)

Ahora si te exigen un bucle sí o sí, implica que el bucle debe tener un valor... luego procede previamente a la petición de una entrada al usuario asignar en sendos bucles el valor:

Código:
bucle para fila desde ini a fin  // ini y fin, tu decides  sin son el par 0-7 ó 1-8
  bucle para columna desde ini a fin   //   ídem...
      matriz(fila, columna) = casilla  // ídem, si empieza en 1, asigna dicho valor a casilla antes del bucle
      // o precede la siguiente línea delante de la asignación.
      casilla +=1
  siguiente
siguiente

Ahora puedes solicitar la usuario el valor 'x'...

Y ahora intentas localizarlo en el array:
Código:
bucle para fila desde ini a fin  // ini y fin, tu decides  sin son el par 0-7 ó 1-8
  bucle para columna desde ini a fin   //   ídem...
      Si (matriz(fila, columna) = x)     // ídem, x debe tener las mismas consideraciones de rango: 0-63 ó 1-64
           mensaje: "La casilla" + x + "corresponde a la fila: " + fila + " y columna: " + columna
      fin si
  siguiente
siguiente

Como ves el segundo bucle es casi idéntico al primero, pero a diferencia del tuyo, aquí si se usa el array 'matriz' para ver si contiene el valor buscado, en vez de usar 'comparador', que al caso hubiera sido más útil llamarlo 'contador'...


En línea

EdePC
Colaborador
***
Desconectado Desconectado

Mensajes: 1.384



Ver Perfil
Re: Problema con codigo
« Respuesta #2 en: 14 Marzo 2020, 04:00 »

- Por cierto, tu error está en usar == en lugar de <, por que lo haces? Esa es la condición que permite ejecutar el bucle, el for seguirá iterando mientras dicha condición se cumpla. Tu for nunca funciona por que en primera instancia se compara un 0 con 8 ( i == 8 ), esto no se cumple y el for finaliza.

- Esto me funciona sin problemas:

Código
  1. using System;
  2.  
  3. namespace Ajedrez {
  4.  class Program {
  5.    static void Main(string[] args) {
  6.      int comparador = 0;
  7.      int x;
  8.      int[,] Matriz = new int[8, 8];
  9.  
  10.      Console.WriteLine("Introduce la casilla entre 1 y 64");
  11.      x = Convert.ToInt32(Console.ReadLine());
  12.  
  13.      for (int i = 0; i < 8; ++i) {
  14.        for (int j = 1; j < 8; ++j) {
  15.          comparador = comparador + 1;
  16.  
  17.          if (x == comparador) {
  18.            Console.WriteLine("La posición de la casilla " + x + " es [" + i + "," + j + "]");
  19.          }
  20.  
  21.        }
  22.      }
  23.      Console.ReadLine(); // Para que pause y no se cierre hasta dar Enter
  24.    }
  25.  }
  26. }
  27.  

- Ya Nebire te explicó detalladamente la lógica que podrías seguir con respecto a tus requerimientos iniciales.
En línea

Ivan88

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problema con codigo
« Respuesta #3 en: 15 Marzo 2020, 13:07 »

Muxas gracias...soy nuevo en esto y a veces x una tontería te puedes volver loco..ya lo he probado asi..un abrazo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con código
Programación Visual Basic
z3r0 Bug 7 1,188 Último mensaje 24 Noviembre 2005, 16:51
por NYlOn
¿Cuál es la diferencia entre código objeto, código máquina y código binario?
Programación General
Aikanáro Anário 9 22,247 Último mensaje 23 Diciembre 2010, 15:19
por pucheto
Extrayendo código fuente de una web (Problema con código generado por JS)
PHP
Littl3 4 5,506 Último mensaje 3 Marzo 2011, 04:13
por Nakp
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines