18/10/2019, 08:33:07 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Homenaje a aladan
 
 
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: 8 damas en Dev-c++  (Leído 2206 veces)
0 Usuarios y 1 Visitante están viendo este tema.
marsi
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Femenino
México México

Mensajes: 120


Ver Perfil
« : 18/06/2012, 07:20:27 pm »

hola, tengo un ejercicio que me dan en seudocodigo y lo tengo que pasar a c++:

proc libre(ren, dama, resultado)
!Buscar una posicion libre para la dama descrita
!devolver resultado=VERDADERO si se encontro.
mientras (ren<8)
comienza
  resultado=VERDADERO
!Avanzar la dama una casilla dentro de su columna
!para continuar a partir de la posicion previa
ren=ren+1
repite
si la diagonal hacia abajo esta amenazada o bien la diagonal hacia arriba  esta amenazada o bien el renglon actual esta amenazado
entonces resultado=FALSO
hasta (terminar de analizar todas las columnas anteriores o resultado=FALSO)
!se encontro una posicion libre
si resultado=VERDADERO
entonces regresa
termina
regresa

Lo que yo e echo apenas es lo siguiente:
#include <cstdlib>
#include <iostream>
#include <conio>


using namespace std;

int main(int argc, char *argv[])
{
    class ajedrez{
protected:
int a[8][8];     
public:
int error;     
ajedrez();
void limpiar();
void dibujar();
void insertar(int posx, int posy);
};

mi pregunta es que despues de esto puedo emplear ciclo for pero como puedo decir que la dama esta amenazada.
En línea
argentinator
Consultar la FIRMAPEDIA __________________________________________________________________________________________________________________
Administrador
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7.275

Vean mis posts activos en mi página personal


Ver Perfil WWW
« Respuesta #1 : 18/06/2012, 10:53:54 pm »

La manera más bruta de determinar si la reina está amenazada consiste en recorrer las diagonales filas y columas que contienen a la reina, y ver si hay alguna casilla ocupada por otra reina, ya que las reinas atacan todas de igual modo, a través de diagonales, filas y columnas.

Sin embargo, a fin de lograr que el algoritmo sea eficiente, cada vez que se introduce una nueva reina al tablero, hay que rellenar la matriz con información, recorriendo todas las casillas de digagonales, fila y columna que pasan por la reina, y "marcar" con un valor que indique "CASILLA ATACADA".

Cuando una nueva reina debe colocarse en el tablero, simplemente se revisa si la casilla en la que se desea colocarla está atacada, o aún no, lo cual es una sencilla verificación del valor que la matriz tiene sólo en esa posición.

______________

Si lo que nos dan de entrada es un tablero ocupado por reinas, se busca dichas reinas una por una, y se van marcando las casillas que ataca cada una, etc.

______________-

Una técnica que puede ayudar a la eficiencia del algoritmo sería guardar un registro aparte con información concreta sobre las filas, columnas y diagonales.
Entonces bastaría con saber la posición de cada reina y marcar una fila entera como "ATACADA", y así con lo demás. Esto ahorraría mucho tiempo de ejecución.

En línea

marsi
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Femenino
México México

Mensajes: 120


Ver Perfil
« Respuesta #2 : 19/06/2012, 11:06:23 pm »

hola, pues  realmente no se que  tengo que hacer exactamente porque solo me dan el pseudocódigo y lo tengo que hacer en c++, lo que sigue es lo que me dan:

proc libre(ren, dama, resultado)
!Buscar una posicion libre para la dama descrita
!devolver resultado=VERDADERO si se encontro.
mientras (ren<8)
comienza
  resultado=VERDADERO
!Avanzar la dama una casilla dentro de su columna
!para continuar a partir de la posicion previa
ren=ren+1
repite
si la diagonal hacia abajo esta amenazada o bien la diagonal hacia arriba  esta amenazada o bien el renglon actual esta amenazado
entonces resultado=FALSO
hasta (terminar de analizar todas las columnas anteriores o resultado=FALSO)
!se encontro una posición libre
si resultado=VERDADERO
entonces regresa
termina
regresa
Este es el modulo que coloca las damas en una posición dada. Todavia falta realizar un pequeño análisis adicional, para registrar adecuadamente las posiciones ya amenazadas:
Proc coloca (ren, dama)
Colocar la dama en la casilla ren de su columna y tomar nota de que esa posición del tablero ya quedo amenazada.
Tomar nota de que las diagonales que bajan y suben cruzando esa casilla quedan también amenazadas.
Regresa
Por su parte, este es el pseudocódigo del modulo para hacer retroceder una dama
proc atrás (ren, dama, última)
mostrar el registro de la posición de la dama actual
dama=dama-1   !abandonar la dama actual pues ya no es posible seguir avanzando la primera dama entonces  última=VERDADERO
regresa
Y no se como hacerlo solo tengo lo que escribí anteriormente
En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC XHTML 1.0 válido! CSS válido!