Fecha y hora actual: Jueves 16 Ago 2018 22:03
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Programando desde 0: 13- Un proyecto dificil: Master Mind.

Responder al Tema Ir a página Anterior1234567

Índice del Foro > Programación en general > Programando desde 0: 13- Un proyecto dificil: Master Mind.

Autor Mensaje
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1022

Mensaje Publicado: Miércoles 29 Mar 2017 19:21

Título del mensaje: Programando desde 0: 13- Un proyecto dificil: Master Mind.

Responder citando

Estimado compañero, he estado analizando tu código y he encontrado varios problemas. Esto, obviamente es normal, es parte del aprendizaje y es bueno que pase.

El código me ha resultado bastante complejo de seguir, así que como primera recomendación te pediré que uses los comentarios y expliques en cada bloque qué es lo que pretendes hacer. Eso nos facilita a todos para leerlo.

Lo segundo es que al publicarlo uses la etiqueta CODE para que el código quede indentado.

Lo tercero es que te acoples a la letra del ejercicio, ya que PIMERA_LETRA y ULTIMA_LETRA son constantes definidas ya para el ejercicio, y tú no solo no las usas sino que además te has matado creando un código que genere estos valores al azar.

Ahora vamos al caso, donde solo me centraré en el principio de tu código analizando línea por línea:

Código:
  1. randomize;
  2. ordpletra:=random(26-largodec);
  3. pletra:=char(ordpletra+65);
  4.  
  5. repeat
  6. orduletra:=random(26-ordpletra);
  7. uletra:=char(ordpletra+orduletra+65);
  8. until (orduletra>=largodec);


Creo que lo has complicado más de lo necesario. La constante largodec está asignada en 6, así que veamos la primera línea:

Código:
  1. ordpletra:=random(26-largodec);


Genera un valor entre 0 y 19 ya que en esencia estás haciendo random(20). Luego intentas asignar un caracter a pletra en la siguiente línea:

Código:
  1. pletra:=char(ordpletra+65);


Veamos los rangos de valores. Usaré paréntesis rectos para esto. Por ejemplo, si una variable puede tener un valor entre 1 y 5 inclusive escribiré [1,5]:

ordPLetra --> [0,19]
ordPLetra + 65 --> [65,84] --> Es lo que está entre paréntesis.
pLetra --> [A,T]

Básicamente, tus cálculos y elecciones al azar hacen que pLetra pueda ser cualquier letra entre A y T inclusive.

Ahora entramos en tu bloque REPEAT con esta primera línea:

Código:
  1. orduletra:=random(26-ordpletra);


Como ordPLetra oscila entre 0 y 19, la expresión 26-ordPLetra oscila entre 0 y 25. ¿Por qué? Porque el valor mínimo que ordPLetra puede tener es 0, en ese caso 26-0= 26 y por tanto random(26) oscila entre 0 y 25 inclusive. Resumiendo:

ordULetra --> [0,25]

Luego tienes esta línea:

Código:
  1. uletra:=char(ordpletra+orduletra+65);


Sumas todos los ordinales + 65 y obtienes un caracter. Pues bien, veámoslo:

ordPLetra --> [0,19]
ordULetra --> [0,25]
ordPLetra + ordULetra --> [0,44]

Dependiendo entonces de los valores de ambas variables, los cuales son al azar en los rangos indicados, al sumarlas puedes tener cualquier valor entre 0 y 44. Por tanto la expresión completa tiene este rango:

ordPLetra + ordULetra + 65 --> [65,109]

Todos estos cálculos tienen como resultado que uLetra pueda ser cualquier caracter entre A y m.

Como ves, pocas líneas y cálculos en esencia complejos. La condición de salida del REPEAT es:

Código:
  1. orduletra>=largodec


Pues bien, ordULetra oscila entre 0 y 25 por tanto el REPEAT terminará en cualquier momento y estarás trabajando con un letras que oscilan entre A y m, es decir que valen todos estos caracteres:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m

Incluye al espacio en blanco. Todo este problema se resuelve respetando la letra del ejercicio donde tienes ya definidas las constantes PRIMERA_LETRA y ULTIMA_LETRA. Te estás complicando sin sentido ya que el ejercicio en sí es bastante complejo como para que le agregues más dificultad.

El largo del código es 4, no 6, así que también usa la letra. Haz el ejercicio TAL CUAL se te plantea.

Aguardaré tus comentarios. Buen trabajo.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
ystudent
Usuario Iniciado


Registrado: 23 Feb 2017
Mensajes: 30

Mensaje Publicado: Lunes 03 Abr 2017 12:00

Título del mensaje: Programando desde 0: 13- Un proyecto dificil: Master Mind.

Responder citando

Hola Kyshuo

Pido disculpas por no seguir la letra del ejercio, no usar comentarios, ni indentar mi codigo. No volvera a suceder. He seguido las recomendaciones que me diste y el programa me ha funcionado correctamente. Ahora me queda, como propósito personal, lograr otro Mastermind en el que el codigo a adivinar sea totalmente aleatorio y me funcione. Me puedes echar una mano con eso? (Tengo un par de ideas/preguntas que me tienen bloqueado) Mientras, sigo avanzando en el curso que me parece muy bueno y me tiene super enganchado.

Gracias por compartir tus conocimientos y tiempo.

Saludos

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1022

Mensaje Publicado: Lunes 03 Abr 2017 17:57

Título del mensaje: Programando desde 0: 13- Un proyecto dificil: Master Mind.

Responder citando

No entendí mucho tu pregunta: La consigna establece que el código sea al azar:

Cita:
En esta proyecto deberán implementar en pascal, un programa que se comporte como el pensador, mientras que el usuario hará las veces del adivinador. El programa deberá generar un código al azar, que el usuario intentará adivinar en una cantidad de intentos inferior a MAXIMO_INTENTOS. Para cada intento del usuario, el programa despliega la cantidad de buenos y regulares que correspondan.


El código será generado dentro del rango establecido como primera letra y última letra. Si por ahí va tu duda dime cuáles son tus preguntas concretamente y te ayudaré con gusto.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
ystudent
Usuario Iniciado


Registrado: 23 Feb 2017
Mensajes: 30

Mensaje Publicado: Martes 04 Abr 2017 07:20

Título del mensaje: Programando desde 0: 13- Un proyecto dificil: Master Mind.

Responder citando

Sí, tienes razón. El ejercicio tiene una consigna clara e hice mi programa Mastermind cumpliéndola (después de que me corrigieras). Es decir, usé un codigo de 4 letras mayusculas generadas al azar, contenidas entre la primera letra A y la ultima H y sin caracteres repetidos. Así el programa me funcionó perfectamente.

La duda que tenía era para generar un código con letras primera y ultima generadas tambien al azar, que fue lo que intenté hacer (por error) en un principio, cuando me lancé a hacer el código sin leerme la consigna completa pero me he releido la correccion que me hiciste y he encontrado mi error así que no te robo más tiempo con este ejercicio.

Saludos y gracias!

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1022

Mensaje Publicado: Martes 04 Abr 2017 15:55

Título del mensaje: Programando desde 0: 13- Un proyecto dificil: Master Mind.

Responder citando

No hay problema. Si lo que tu quieres es progresar usando una idea propia es incluso mejor, ya que uno se entusiasma más con sus ideas. Si no me equivoco entonces quieres que PRIMERA LETRA y ULTIMA LETRA sean al azar.

Te comento algo antes. el proyecto MasterMind en realidad cuenta de tres partes, que te comento a continuación:

  1. La primera es la que acabas de hacer: el sistema genera un código de 4 letras al azar, que no se repitan, y luego el usuario intenta adivinar el código según las notas recibidas. La dificultad de este ejercicio radica más que nada en las notas.
  2. La segunda parte es idéntica solo que se admiten letras repetidas en el código, por ejemplo AABC. Aunque parezca tonto, eso hace que el cálculo de la nota, sobre todo de los regulares, se complique bastante.
  3. La tercera parte implementa el sistema adivinador, es decir, tú le pasas las notas al programa y este te tira códigos intentando adivinar, tomando en cuenta las notas que le pasaste. Esta parte por supuesto se complica bastante pero es algo que en este curso debes poder hacer.


La segunda parte podrías hacerlo con los conocimientos de estas lecciones, pero es recomendable que completes hasta la 19. Si llegado el caso te interesa me avisas y te paso la letra del proyecto, ya que no lo publiqué aquí, habiéndolo cambiado por el proyecto Base de Productos.

La tercera parte está pensada como proyecto final, pero no la publiqué aquí ya que me pareció más interesante usar el juego Buscaminas y el juego Iguales como proyectos, pero si te interesa conocer el algoritmo para que tu programa adivine cualquier código en base a las notas que le des también puedo pasártelo y por supuesto ayudarte a hacerlo.

Volviendo a tu propuesta de generar PRIMERA LETRA y ÚLTIMA LETRA al azar también podemos analizarlo.

Aguardo tus comentarios.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
ystudent
Usuario Iniciado


Registrado: 23 Feb 2017
Mensajes: 30

Mensaje Publicado: Jueves 06 Abr 2017 17:08

Título del mensaje: Programando desde 0: 13- Un proyecto dificil: Master Mind.

Responder citando

Hola!

Sí que me gustaria completar las 3 partes del mastermind asi que te agradeceré me mandes la letra del ejercicio completo cuando puedas. Ya he terminado la clase 19 (con alguna duda en el ejercicio 2 que ya te preguntaré en el foro de esa clase) asi que podria ir avanzando la segunda parte y luego veria como cumplir la tercera, con tu ayuda jeje.

Respecto a generar aleatoriamente las primera y ultima letra del codigo del pensador, me he vuelto a leer la explicacion que me diste y comprobarlo con mi codigo y de nuevo me han saltado dudas. Te las expondré en la siguiente publicación con mi código comentado y indentado.

Saludos y gracias por la ayuda!!!

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Wul



Registrado: 30 Jul 2018
Mensajes: 1

Mensaje Publicado: Lunes 30 Jul 2018 20:02

Título del mensaje: Programando desde 0: 13- Un proyecto dificil: Master Mind.

Responder citando

Buenas Kyshuo, llego algo tarde espero que me puedas ayudar. Con este programa y con el anterior me a pasado igual: cuando ingreso los datos se guardan si o si, incluso los finales de linea y la tecla de borrar!!! me e vuelto loco buscando el problema y resulta que por algún motivo se guarda TODO. Cuando hago la segunda ronda de los arreglos se guarda el fin de linea, si borro una letra se guarda la letra y el borrar Triste . Gracias con antelación.

Este proyecto lo tengo casi terminado solo faltan pequeños detalles que se me han pasado, pero esto me a amargado el día XD y como en un principio ya hace lo que debe pues voy a la siguiente lección mientras.

Ya que estoy y aunque no se si leerás esto, te quería agradecer por haber echo este curso de programación, hace unos dos años intenté aprenderlo pero lo fui dejando y solo llegue a la lección 10 esta vez quiero llegar hasta el final.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema Ir a página Anterior1234567
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El tema está bloqueado: no pueden editarse ni agregar mensajes.

Solicito programadores para mi proyecto

alexpin Bolsa de trabajo 0 Miércoles 23 May 2018 22:53 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Llamada a web service desde form

mrrobot2 Programación Web en general 1 Martes 14 Nov 2017 00:50 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Se requiere programador para Proyecto de Juego,...

Otilio Programación de juegos o videojuegos 5 Martes 03 Oct 2017 00:04 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Crear web desde 0

javitc Programación Web en general 9 Sábado 30 Sep 2017 21:23 Ver último mensaje
El tema está bloqueado: no pueden editarse ni agregar mensajes.

Busco personas para un proyecto de Facebook

Andres Gonzales Bolsa de trabajo 0 Domingo 19 Mar 2017 22:35 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,