[ Foro de Pascal ]

simular el juego tres en raya

03-May-2011 18:29
oscar gomez
3 Respuestas

Cordial saludo profesor Nacho, gracias por tu tiempo y tu gran ayuda.



realice un programa pascal que haye la probabilidad en el juego del tres en raya de que cualquiera de dos jugadores totalmente inexpertos gane el juego con tres oportunidades.

profesor me gustaria me pudieras orientar en qué debo tener encuenta para poder realizar el programa, pues no tengo muy claro cuando dice el enunciado "cualquiera de dos jugadores totalmente inexpertos" tiene que ver esto en algo a la hora de hacer el programa con respecto asi fuesen expertos???
que me aconsejas una matriz de 3x3 o un vector de 9 posiciones? cual seria la condicion para cumplir el objetivo de que se gane el juego con tres oportunidades????

por tu ayuda mil gracias.


03-May-2011 23:00
Nacho Cabanes (+30)

No entiendo a qué te refieres.

Supongo que con "totalmente inexpertos" se refieren a que muevan al azar, no de forma inteligente.

Pero no sé qué nivel esperan de ti:

- Como primera aproximación, puede ser un estudio de probabilidad básico: probabilidad = casos favorables / casos posibles.  Donde los casos posibles serían todos las formas posibles de colocar 3 fichas (combinaciones de 9 casillas tomadas de 3 en 3) y los casos favorables son 8: tres horizontales, tres verticales, dos diagonales.

- O quizá pretenden que generes todos los posibles tableros de forma ordenada, usando backtracking, pero eso requiere un nivel de programación un poco mayor (generar tableros cada vez más llenos, de forma recursiva y contar las soluciones favorables y las totales).

Así que sin saber cómo esperan que lo orientes, no puedo decirte mucho.


04-May-2011 12:35
oscar gomez

Gracias profesor nacho cabanes, la idea de este programa es el primer enfoque que mencionas: "Como primera aproximación, puede ser un estudio de probabilidad básico: probabilidad = casos favorables / casos posibles.  Donde los casos posibles serían todos las formas posibles de colocar 3 fichas (combinaciones de 9 casillas tomadas de 3 en 3) y los casos favorables son 8: tres horizontales, tres verticales, dos diagonales." siendo asi me gustaria una orientacion en pascal de como podria proyectar la solucion.

yo pienso que con un
        for i:=1 to numeroPruebas do
          favorable:=0;
          for j:=1 to 6 do
            repeat
             x:=random(10)+1;
            until (tresraya[x]=0);
             ...

bueno de ahii en adelante no se como puedo enfocar la solucion si atraves de un vector de 9 posiciones o una matriz de 3x3, que me aconsejas profesor? o coo lo enfocarias tu.mil gracias


24-May-2011 20:53
Antonio P.G.

Hola, Óscar.

Lo que te dijo el Profe no lo enfocaste del todo bien. A ver, un poquito de teoría de probabilidad:

Para calcular la probabilidad de que un suceso (ganar la partida) tenga éxito, de entre un conjunto de sucesos de un experimento, si todos los sucesos elementales son equiprobables, se puede utilizar la Regla de Laplace. Es decir: probabilidad de éxito = casos favorables/casos totales.

Para ello, debes calcular los casos totales y los favorables. Lo cierto es que usando combinatoria no se tarda nada, pero el objetivo de todas maneras es hacer el programa.

La idea del bucle está bien, pero hay que hacer más bucles. Primero, céntrate en cómo Expresar todas las combinaciones "fijando la primera ficha aquí, la segunda aquí...".

Por cierto, matriz o vector, puedes elegir. Yo creo que elegiría vector.

Además, te recomiendo que utilices un tipo de dato, para el array, enumerado (se llamaban así, ¿verdad?), por ejemplo, "estado" y cuyos valores fuesen "vacío" (no hay ficha en la casilla), "rojo" (ficha de uno de los jugadores) y "negro" (el color del otro jugador).

Luego, en el bucle, si se cumple la condición de que las fichas de UNO (en concreto) de los jugadores están alineadas, entonces añades a un contador (al de éxitos) un punto. Además, por cada situación tendrás que añadir un punto al contador de total. Al final de la parte de los bucles, divides el primero entre el segundo y obtienes una probabilidad.

Te pongo un ejemplo (no del todo correcto pero bastante intuitivo):

¿Cuál es la probabilidad de que los dígitos de la matrícula de un coche sumen 20?
............
for i:=0 to 9 do
 for j:=0 to 9 do
   for k:=0 to 9 do
     for m:=0 to 9 do begin
       Inc(casos_totales);
       if i+j+k+m = 20 then
         Inc(casos_favorables);
     end;
writeln ('Probabilidad = ',casos_favorables/casos_totales:0:4);
............

¿Ok? ¡Ciao!






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)