Fecha y hora actual: Viernes 20 Sep 2019 20:40
Í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 Anterior1234567Siguiente

Í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: 1044

Mensaje Publicado: Sábado 29 Jun 2013 19:48

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

Excelente trabajo, como siempre. Esta era una tarea para el curso de programación 1 en la universidad y la pasaste super bien. Justamente ha sido pensada para utilizar todo lo dado hasta el momento y así sacar jugo a todos los aspectos del lenguaje (Dados hasta ahora).

Respecto a tus preguntas:

El uso de RANDOM está bien, sin embargo para RANDOMIZE basta conque la primera instrucción luego del BEGIN principal sea RANDOMIZE y luego te olvidas de él, usas RANDOM cuando quieras. Igualmente en un programa que consume tan pocos recursos no es notoria la mejora.

Sobre las variables, pues siempre que puedas reutilizar una variable mejor ya que cuantas más variables declares más RAM estás consumiendo, recuerda que cada variable declarada, dependiendo de su tipo, ocupa espacio en la RAM cuando el programa se ejecuta. Ahora bien, a veces reutilizar mucho una variable puede hacer el código más confuso y entonces ahí uno se plantea qué es mejor, eficiencia o código claro... Igualmente siempre se puede tener un código claro si los comentarios explican bien lo que se hace en cada momento.

EXCELENTE... espero que te hayas divertido con esto y que te sientas bien al ver tu programa funcionando.

Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
matias.SANZ
Usuario Iniciado


Registrado: 05 Jun 2013
Mensajes: 35

Mensaje Publicado: Domingo 30 Jun 2013 12:36

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

Bueno la verdad es que me he divertido mucho haciendolo y mientras que lo hacía también intentaba diseñarlo de la manera más clara pero tambien más eficiente. A mí particularmente, me gustan los programas que consumen los menores recursos posibles, es mi pequeña obsesion Llorón Pero es cierto, como apuntas, que si haces un codigo demasiado confuso, luego si tienes que modificarlo o dejarselo a otro pues sería un problema. De todas formas, sigo adelante y muchas gracias por tu apoyo.

saludos

Volver arriba
Ver perfil del usuario Enviar mensaje privado
xRoki
Usuario Inquieto


Registrado: 22 Ago 2013
Mensajes: 71

Mensaje Publicado: Domingo 01 Sep 2013 19:02

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

xD no e querido copiarme de los demas asi q esto es lo que echo solo xd , pero ayudame , en random me da los mismos numeros siempre .. osea siempre me da EBDF .... y ese no es el sentido xd osea el setido es salg auno diferente cad partida no?

Código:
program  master_mind;

type

A= array[1..4] of char;
b= array[1..4] of integer;

const
PRIMER_LETRA='A';
ULTIMA_LETRA='H';
largo_codigo=4;
max_intento=10;

var
Buenas,regulares: integer;
intentos, i , j : integer;
adivinador, z : a;
pensado : a;
numero: b;
c ,d ,k: boolean;
q,w,r,t ,v: integer;
q1,w1,r1,t1: char;

begin
writeln('Bienvenido al juego');
writeln('   Buena Suerte    ');

intentos:=0 ;

for v:= 1 to 4  do
z[v]:='H';

v:=1;



  repeat
  q:=random(ord(z[v]));
  until (q>64) and (q<72);

  repeat
  w:=random(ord(z[v+1]));
  until (w>64) and (w<72);

  repeat
  r:=random(ord(z[v+2]));
  until  (r>64) and (r<72);

  repeat
  t:=random(ord(z[v+3]));
 until  (t>64) and (t<72);


 q1:= Chr(q);
 w1:= chr(w);
 r1:= chr(r);
 t1:= chr(t);

 pensado[1]:= q1;
 pensado[2]:= w1;
 pensado[3]:= r1;
 pensado[4]:= t1;





repeat

intentos:=intentos+1;



repeat
write(intentos,') ');
readln(adivinador);
for i:=1 to 4 do
numero[i]:=ord(adivinador[i]);



c:= (numero[1]>64) and (numero[2]>64) and (numero[3]>64) and (numero[4]>64) and (numero[1]<73) and (numero[2]<73) and (numero[3]<73) and (numero[4]<73);

for j:= 1 to 3 do
begin

if (k=false) then
d:= numero[j]<>numero[j+1];



if (d=true) and (k=false) or (c=false) and (k=false) then
begin
writeln('ERROR');
k:=true;
end;



end;



until (c=true) and (d=true) ;
k:= false;
c:= false;
d:=false;

until (pensado=adivinador) or (intentos=10); ;

if (adivinador=pensado) then
writeln('Correcto ha acertado');

if intentos=10 then
begin
writeln('se alcanzo el numero maximo de intento');
writeln('El c¢digo era: ',adivinador);
end;

writeln('Fin del juego');
end.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
xRoki
Usuario Inquieto


Registrado: 22 Ago 2013
Mensajes: 71

Mensaje Publicado: Domingo 01 Sep 2013 19:07

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

ahh ya resolvi , solo era necesario usar randomize antes xDDD jjajajajaja ahora .. voy a crear a .. lo de regular y bueno xD a ver como lo hago bye y muchisismas gracias

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


Registrado: 07 Ene 2011
Mensajes: 1044

Mensaje Publicado: Domingo 01 Sep 2013 19:39

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

Ok... buen trabajo, esperaré tus cometnarios.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
xRoki
Usuario Inquieto


Registrado: 22 Ago 2013
Mensajes: 71

Mensaje Publicado: Lunes 02 Sep 2013 20:39

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

TERMINEE :DDDDD PROFEE GRAXX MIREE JAJA XD

Código:
program  master_mind;

type

A= array[1..5] of char;
b= array[1..5] of integer;

const
PRIMER_LETRA='A';
ULTIMA_LETRA='H';
largo_codigo=4;
max_intento=10;

var
Buenas,regulares, g,h: integer;
intentos, i , j ,k ,s : integer;
adivinador, z : a;
pensado : a;
numero: b;
c ,d ,p: boolean;
q,w,r,t ,v: integer;
q1,w1,r1,t1: char;

begin

randomize;

writeln('Bienvenido al juego');
writeln('   Buena Suerte    ');

intentos:=0 ;

for v:= 1 to 4  do
z[v]:='H';

v:=1;



  repeat
  q:=random(ord(z[v]));
  until (q>64) and (q<72) ;

  repeat
  w:=random(ord(z[v+1]));
  until (w>64) and (w<72) and (w<>q);

  repeat
  r:=random(ord(z[v+2]));
  until  (r>64) and (r<72) and (r<>q) and (r<>w);

  repeat
  t:=random(ord(z[v+3]));
 until  (t>64) and (t<72) and (t<>q) and (t<>w) and (t<>r);


 q1:= Chr(q);
 w1:= chr(w);
 r1:= chr(r);
 t1:= chr(t);

 pensado[1]:= q1;
 pensado[2]:= w1;
 pensado[3]:= r1;
 pensado[4]:= t1;

  repeat

intentos:=intentos+1;



repeat
writeln;
write(intentos,') ');
readln(adivinador);
for i:=1 to 5 do
numero[i]:=ord(adivinador[i]);

c:=true;
p:= numero[5]=0 ;
for j:= 1 to 4 do
begin


if c=true then
c:= (numero[j]>64) and (numero[j]<73);


end;
d:=true;

for k:= 1 to 3 do
  for s:= 2 to 4 do
  begin
  if (k=1) and (d=true) then
d:= adivinador[k]<>adivinador[s];

  if (k=2) and (s<4) and (d=true) then
d:= adivinador[k]<>adivinador[s+1];

if (k=3) and (s<3) and (d=true) then
d:= adivinador[k]<>adivinador[s+2];



end;
  if (d=false) or (c=false) or (p=false) then
writeln('ERROR');



until (c=true) and (d=true) and (p=true) ;

c:= false;
d:=false;

  for g:=1 to 4 do
    for h:= 1 to 4 do
     begin

     if (adivinador[g]=pensado[g]) and (h=1) then
     buenas:= buenas+1;

     if (adivinador[g]=pensado[h]) and (adivinador[g]<>pensado[g]) then
     regulares:= regulares+1;


     end;
     write('B ',buenas,' R ' ,regulares);
     Buenas:=0;
     regulares:=0;

until (pensado=adivinador) or (intentos=max_intento);


if (adivinador=pensado) then
begin
writeln;
writeln('Correcto ha acertado');
end;

if intentos=max_intento then
begin
writeln;
writeln('    se alcanzo el numero maximo de intentos');
writeln('El c¢digo era: ',pensado);
end;

writeln('Fin del juego');
readln;
readln;
end.



:DDDDDDD verifiquelo plz xD

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Dartoes



Registrado: 14 Nov 2013
Mensajes: 6

Mensaje Publicado: Jueves 14 Nov 2013 15:10

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

Muy buenas, llevo un tiempo apuntado al curso y hasta ahora no he tenido grandes problemas.
Me ha gustado mucho esta lección. El proyecto es difícil pero se aprende muchísimo con él. Lo mas complicado ha sido la comprobación de errores, el hecho que no se duplicasen los carecteres de los códigos. Me he complicado un poco al final, sobretodo en la parte de comprobación del código del usuario pero en principio el programa hace lo que debería. Os dejo el código:
Código:
PROGRAM   MMind;

CONST
   MAX_LETRA= 72;
   MIN_LETRA= 65;
   N= 4;
   max_intentos= 10;

TYPE
   arr= array[1..N] of char;
   arr2= array[1..N] of char;
   arrc= array[1..N] of char;

VAR
   arreglo1: arr;
   arreglo2: arr2;
   arregloc: arrc;
   i, j, h, g, numero, acierto: integer;
   colocado, nintentos, contador, error:integer;

BEGIN
// 1) PARTE QUE GENERA LA CLAVE ALEATORIA Y COMPROBACION DE ERROR.

   randomize;
   i:= 1;
   acierto:= 0;
   colocado:= 0;
   nintentos:= 0;

   REPEAT

      REPEAT
         numero:= random(MAX_LETRA+1);

         if (numero >= MIN_LETRA)  then
            begin
               arreglo1[i]:= chr(numero);
               i:=i+1;
            end;

      UNTIL (i=N+1);

   // 1b) COMPRUEBO QUE NINGUN CARACTER SE REPITA

      for i:= 1 to N do                  //IGUALO EL ARREGLO OBTENIDO AL ARREGLOC PARA COMPARARLOS
      arregloc[i]:= arreglo1[i];

      contador:= 0;

      for i:=1 to N do
         for j:=1 to N do
            if (i=j) or (arreglo1[i] <> arregloc[j]) then
               contador:= contador +1;
      i:=1;

   UNTIL contador= sqr(N);


// 2) INICIO DEL PROGRAMA DE CARA AL USUARIO.

   writeln ('<<<<<<<=MiStErMiNd=>>>>>>>');
   writeln;
   writeln ('Instrucciones: ');
   writeln ('1) Este es un juego de descifrar claves. Escribe una clave de 4 LETRAS');
   writeln ('   comprendidas entre la A  y la H');
   writeln ('2) Pulsa ENTER, el programa respondera con dos numeros: el 1º te dira');
   writeln ('   cuantas letras de las que has escrito estan bien colocadas y el 2º');
   writeln ('   cuantas del resto de letras estan presentes, pero descolocadas.');
   writeln ('3) Si buscas bien por este codigo veras escondido el resultado, no abuses...');
   writeln ('----------------------------------------------------------------------------');
   writeln;
   writeln ('Tienes ',MAX_INTENTOS,' intentos, SUERTE!!!');
   writeln ('-----------------------------');
   write   ('   ');

   for i:=1 to N do
      write ('*');

   writeln;

// 3) INICIO DE LA INTRODUCCION DE NUMEROS PARA ADIVINAR.

   REPEAT
      colocado:= 0;
      acierto:= 0;
      nintentos:= nintentos+1;
      write (nintentos,')',' ');

      for j:=1 to N do
         read (arreglo2[j]);

      readln;
      writeln;
      j:=1;
      error:= 0;

// 4) INICIO DE LA COMPROBACION DE ERRORES (DEL USUARIO).

      REPEAT
         for i:=1 to N do
            arregloc[i]:= arreglo2[i];

         for h:= 1 to N do
            for g:=1 to N do
               if (g<>h) and (arregloc[g] = arreglo2[h]) then
                  error:= error+1;

         while (ord(arreglo2[j]) < MIN_LETRA) or (ord(arreglo2[j]) > MAX_LETRA) or (error <> 0)  do
            begin
               writeln ('No es correcto, intenta otro codigo: ');
               writeln;
               write (nintentos,') ');

               for j:=1 to N do
                  read (arreglo2[j]);

               readln;
               writeln;

               for j:= 1 to N do
                  arregloc[j]:= arreglo2[j];

               j:=1;
               error:= 0;

               for h:=1 to N do
                  for g:=1 to N do
                     if (g<>h) and (arregloc[g] = arreglo2[h]) then
                        error:= error+1;
            end;
         j:= j+1;

      UNTIL (j= N+1);


// 5) INICIO DEL JUEGO EN SI.. COMPROBACION DE CODIGOS.

      for i:=1 to N do
         for j:= 1 to N do
            begin
               if (i=j) and (arreglo1[i] = arreglo2[j]) then
                  colocado:= colocado+1
               else
                  if arreglo1[i] = arreglo2[j] then
                     acierto:= acierto+1;
            End;

      writeln;
      writeln (colocado,'   ',acierto);
      writeln;

   UNTIL (colocado = N) or (NINTENTOS = MAX_INTENTOS);

// 6) RESULTADO FINAL.

   if colocado= N then
      writeln ('GANAS! :)')
   else
      if MAX_INTENTOS = NINTENTOS then
         begin
            writeln ('PIERDES! :(');
            write ('La clave era: ');

            for i:= 1 to N do
               write (arreglo1[i]);

         end;
   readln;
END.



La parte de comprobar si hay caracteres repetidos la hice igualando el arreglo que teníamos dado como código, con otro arreglo de control (arregloc) para compararlos entre sí. Tengo dudas de si esta forma sería correcta, o si genera un código demasiado enrevesado, que es lo que a mi me parece. Aunque puede que sea porque es el programa mas complejo que he hecho hasta ahora jeje.

Kyshuo quiero agradecerte el gran trabajo que haces, el curso es genial y se aprende muchísimo. Las lecciones se entienden a la perfección y los ejercicios ayudan mucho a coger soltura con el código y a ejercitar el coco.
Muchas gracias, eres un CRACK con todas las letras Aplauso

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


Registrado: 07 Ene 2011
Mensajes: 1044

Mensaje Publicado: Jueves 14 Nov 2013 16:15

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

Un trabajo excelente, de verdad. En principio no habría una forma más correcta de hacerlo. Podría hacerse análisis para determinar la manera más eficiente, pero no es la idea a esta altura del curso, donde quiero que aprendan a programar con lo que hemos visto y que se las apañen como puedan.

Al principio a uno le quedan códigos algo entreverados pero no importa, la idea es que salga y aprendan a usar las estructuras y herramientas dadas, cosa que has logrado muy bien. Te habrás dado cuenta que al sufrir con este proyecto has desarrollado una gran soltura con el lenguaje y asimilas el funcionamiento de lo dado en las lecciones anteriores.

Ya habrá tiempo más adelante para preocuparse por lamejor o peor manera de lograr algo.

Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Jueves 14 Nov 2013 18:15

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

Felicitaciones compañero Dartoes, estupendo trabajo!!

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
Dartoes



Registrado: 14 Nov 2013
Mensajes: 6

Mensaje Publicado: Viernes 15 Nov 2013 13:57

Título del mensaje: Re: Programando desde 0: 13- Un proyecto dificil: Master Min

Responder citando

Muchas gracias compañeros! La verdad es que el ejercicio es muy bueno para terminar de entender las estructuras de arreglos, repeticion y condiciones dadas hasta aqui, y eso lo nota uno mismo con una gran satisfaccion cuando consigues usarlas para hacer lo que se quiere.
Un saludo y nos vemos en proximas lecciones.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
daalpri
Usuario Inquieto


Registrado: 28 Dic 2014
Mensajes: 105

Mensaje Publicado: Domingo 08 Feb 2015 01:07

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

Responder citando

POR FIN!!
Lo termine, en las pruebas que he hecho parece que funciona correctamente
Código:

PROGRAM master_mind;

CONST
   maximo_intentos=10;
   largo_codigo=6;
   primera_letra='A';
   ultima_letra='H';
   
TYPE
   codigo=array[1..largo_codigo] of char;
   
VAR
   propuesta:codigo; //el valor introducido por el usuario.
   incognita:codigo; //el codigo al azar para adivinar.
   car:char; //para leer los caracteres.
   B,R:integer; //los valores de BUENOS y MALOS.
   i,j:integer; //los usaremos de contadores.
   maximo_caracteres:integer; //para saber el numero de caracteres posibles entre "primera_letra" y "ultima letra".
   intento_actual:integer;
   dato_valido:boolean;

BEGIN
   randomize;
         
   maximo_caracteres:=ord(ultima_letra)-ord(primera_letra);
      
   {Creamos el codigo aleatorio}
   repeat
      for i:=1 to largo_codigo do
         begin
         car:=chr(random(maximo_caracteres+1)+ord(primera_letra));
         incognita[i]:=car;
         end;
   {Y a continuacion revisamos que no coincidan dos caracteres y en caso de que coincidan
   cambiamos el codigo hasta tener un codigo valido}
      i:=1;
      repeat
         j:=1;
         repeat
            if (incognita[i]=incognita[j]) and (i<>j) then
               dato_valido:=false
            else
               dato_valido:=true;
            j:=j+1;
         until (j=largo_codigo+1) or (not dato_valido);
         i:=i+1;
      until (i=largo_codigo+1) or (not dato_valido);
   until dato_valido;
   
   {Ahora comenzamos a pedir los intentos de adivinar el codigo y comprobaremos que la entrada
   cumple las condiciones}
   intento_actual:=1;
   
   REPEAT
      {Leemos la propuesta completa}
      repeat
         repeat
            write(intento_actual,') ');
            i:=1;
            repeat
               read(car);
               propuesta[i]:=car;
               i:=i+1
            until EOLN;
         readln;
         if i=largo_codigo+1 then
            dato_valido:=true
         else
            begin
            dato_valido:=false;
            writeln('ERROR');
            end;
      until dato_valido;
      {Comprobamos que cumple los requisitos para se valida, es decir, que los caracteres estan comprendidos
      entre "primera_letra" y "ultima_letra" y no se repiten}
         i:=1;
         repeat
            if (ord(propuesta[i])>=ord(primera_letra)) and (ord(propuesta[i])<=ord(ultima_letra)) then
               dato_valido:=true
            else
               dato_valido:=false;
            i:=i+1;
         until (i=largo_codigo+1) or (not dato_valido);
      
         i:=1;
         while (dato_valido=true) and (i<=largo_codigo) do
            begin
            j:=1;
            repeat
               if (propuesta[i]=propuesta[j]) and (i<>j) then
                  dato_valido:=false
               else
                  dato_valido:=true;
               j:=j+1;
            until (j=largo_codigo+1) or (not dato_valido);
            i:=i+1;
            end;
   
         if dato_valido=false then
            writeln('ERROR');
      until dato_valido;
   
   {Calculamos el numero de "buenos" y "regulares" que hay en la propuesta del usuario y los mostramos}
      B:=0; //ponemos estas dos variables a cero para que no almacenen datos de intentos anteriores.
      R:=0;

      for i:=1 to largo_codigo do
         for j:=1 to largo_codigo do
            begin
            if propuesta[i]=incognita[j] then
               if i=j then
                  B:=B+1
               else
                  R:=R+1;
            end;
      writeln(B,'  ',R);
   
      intento_actual:=intento_actual+1
   
   UNTIL (intento_actual=maximo_intentos+1) or (B=largo_codigo);
   
   {Y mostramos el resultado dependiendo de si acerto o consumio todos sus intentos}
   if B=largo_codigo then
      writeln('Correcto. Ha acertado')
   else
      begin
      writeln('Se alcanzo el numero maximo de intentos');
      write('El codigo era ');
      for i:=1 to largo_codigo do
         write(incognita[i]);
      writeln;
      end;
   writeln('Fin del juego');

END.

Grandisimo curso, es genial llegar hasta aqui, por lo que leo todos o casi todos sois estudiantes y yo que soy un simple electricista veo que tambien soy capaz.
Muchas gracias por tu trabajo profe.

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


Registrado: 07 Ene 2011
Mensajes: 1044

Mensaje Publicado: Domingo 08 Feb 2015 16:42

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

Responder citando

Pues muchas gracias. Me alegra que esto te haya servido y que realmente se aprenda.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
daalpri
Usuario Inquieto


Registrado: 28 Dic 2014
Mensajes: 105

Mensaje Publicado: Domingo 08 Feb 2015 22:48

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

Responder citando

No solo me sirve, cada vez me engancha mas.
Gracias a ti por este excelente trabajo

Volver arriba
Ver perfil del usuario Enviar mensaje privado
JoxeDuKe12
Colaborador


Registrado: 12 Abr 2007
Mensajes: 576
Ubicación: Medellín - Colombia

Mensaje Publicado: Martes 10 Feb 2015 05:54

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

Responder citando

Gorro hola

Yo lo había realizado antes en visual 6,

http://www.foro.lospillaos.es/codigo-mastermind-en-visual-basic-60-vt6479.html


la idea es pasarlo a javascript, saludos

Gorro


La mejor en musica online y juegos Flash
http://quedese.100webspace.net/
Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
ystudent
Usuario Iniciado


Registrado: 23 Feb 2017
Mensajes: 30

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

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

Responder citando

Hola!

Tengo un problema con mi programa de mastermind, en la parte de verificar si el codigo cumple los requisitos de validez. Si introduzco un codigo invalido me da el mensaje de error y me pide que introduzca el codigo correspondiente a ese intento que es lo que pide el ejercicio, pero en mi programa se repide hasta 7 veces aunque despues de un codigo incorrecto introduzca uno correcto. Lo he revisado paso a paso y cuando miro las variables, todas funcionan bien pero cuando ejecuto el programa sigo teniendo el problema. Ya he intentado varias maneras de hacer la verificacion, y siempre me pasa lo mismo. Alguien podria revisarmelo por fa, que es que no veo que estoy haciendo mal. El resto del programa funciona correctamente.

Saludos, aqui les dejo mi programa

program Mastermind;
const
largodec=6;
totalintentos=15;
type
codigo=array[1..largodec] of char;
var
propuesta,respuesta:codigo;
letra,pletra,uletra:char;
ordpletra,orduletra,ordresp,i,j,intentos,buenos,regulares:integer;
error:boolean;
begin
randomize;
ordpletra:=random(26-largodec);
pletra:=char(ordpletra+65);
repeat
orduletra:=random(26-ordpletra);
uletra:=char(ordpletra+orduletra+65);
until (orduletra>=largodec);
writeln('Bienvenido al juego MASTERMIND!':60);
writeln('Consiste en adivinar un codigo con las siguientes condiciones:');
writeln('1) El codigo tiene una cantidad fija de caracteres: ',largodec,'.');
writeln('2) Los caracteres válidos son las letras mayúsculas comprendidas entre Primera letra y Ultima letra. ');
writeln('3) No puede contener caracteres repetidos. ');
writeln;
writeln(' Primera letra: ',pletra,'. Ultima letra: ',uletra);
readln;
ordresp:=random(ord(uletra)-ord(pletra));
respuesta[1]:=char(ordpletra+ordresp+65);
for i:=2 to largodec do
begin
repeat
ordresp:=random(ord(uletra)-ord(pletra));
respuesta[i]:=char(ordresp+ordpletra+65);
for j:=1 to (i-1) do
begin
if respuesta[i]=respuesta[j] then respuesta[i]:='0';
end;
until respuesta[i]<>'0';
end;
writeln ('Adivine el codigo correcto. Tiene ',totalintentos,' intentos');
intentos:=1;
while (propuesta<>respuesta) and (intentos<=totalintentos) do
begin
repeat {en este bloque hago la comprobacion de validez de la propuesta}
error:=false;
write(' ',intentos,' --> ');
for i:=1 to largodec do
begin
read(propuesta[i]);
if ord(propuesta[i])=13 then read(propuesta[i]);
end;
writeln;
i:=1;
repeat
if (propuesta[i]<pletra) or (propuesta[i]>uletra) then error:=true else i:=i+1;
until (i>largodec) or (error);
i:=1;
while (i<=largodec) and (not error) do
begin
j:=1;
repeat
if (i<>j) and (propuesta[i]=propuesta[j]) then error:=true else j:=j+1;
until (j>largodec) or (error);
if not error then i:=i+1;
end;
if error=true then writeln('propuesta inválida, intente nuevamente:');
writeln;
until not error;
if not error then
begin
if propuesta=respuesta then writeln('Felicidades, ha acertado!') else
begin
buenos:=0;
regulares:=0;
for i:=1 to largodec do
begin
if propuesta[i]=respuesta[i] then buenos:=buenos+1
else begin
for j:=1 to largodec do
begin
if propuesta[j]=respuesta[i] then
regulares:=regulares+1;
end;
end;
end;
writeln('Buenos: ', buenos,' Regulares: ',regulares);
writeln;
intentos:=intentos+1;
end;
if (propuesta<>respuesta) and (intentos>totalintentos) then writeln ('Ha agotado el numero de intentos sin acertar. El codigo correcto era: ',respuesta);
readln;
end;
end;
end.

Otra forma que utilice para comprobar la validez de la propuesta y que me dio el mismo problema fue:

repeat
a:=0;
write(intentos,' --> ');
for i:= 1 to largodec do
begin
read(propuesta[i]);
if ord(propuesta[i])=13 then read(propuesta[i]);
end;
writeln;
for i:=1 to largodec do
begin
if (propuesta[i]<pletra) or (propuesta[i]>uletra) then a:=a+1;
end;
for i:=2 to largodec do
begin
for j:=1 to i-1 do
if propuesta[i]=propuesta[j] then a:=a+1;
end;
if a>0 then writeln('propuesta invalida, intente nuevamente: ');
readln;
until a=0;

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

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Os presento mi proyecto de Renting Web

Renting Web Muestra tus trabajos Web 1 Miércoles 18 Sep 2019 12:30 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Buenas desde el sur del sur =)

Maugarni Preséntate a la comunidad 1 Jueves 22 Ago 2019 14:09 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Hola desde bcn

Dav2k6 Preséntate a la comunidad 2 Miércoles 26 Jun 2019 19:22 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Existen problemas al descargar musica desde you...

SusanaP Tu PC 2 Martes 26 Mar 2019 19:22 Ver último mensaje
El foro no contiene ningún mensaje nuevo

hola!! los saludo desde argentina

mery Preséntate a la comunidad 2 Jueves 13 Dic 2018 17:28 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,