[ Foro de Pascal ]

Truco 21 cartas (Ayuda)

09-Nov-2023 16:51
Kevin Bravo
0 Respuestas

Hola buenas, estoy aprendiendo a programar a traves de un curso, pero estoy estancado en este ejercicio que trata de hacer el truco de las 21 cartas que es un algoritmo, tengo mi codigo, puedo generar el deck usando chr(random) , separo los grupos, pero no puedo despues ordenar el grupo seleccionado para que quede en medio y despues repartir las cartas de 1 en 1 para cada grupo, este es mi codigo, si alguien me puede ayudar, guiar se lo agradeceria mucho :)
program Trucocartas;
const
 MAX_TARJETAS_GRUPO = 7;
 MAX_GRUPOS = 3;
 MAX_TARJETAS = MAX_TARJETAS_GRUPO * MAX_GRUPOS;
 MIN_TARJETA_VALOR = 'A';
 MAX_TARJETA_VALOR = Chr(MAX_TARJETAS + Ord('A') - 1);

type
 tarjetas = MIN_TARJETA_VALOR..MAX_TARJETA_VALOR;
 grupo = array[1..MAX_TARJETAS_GRUPO] of tarjetas;
 mazo = array[1..MAX_TARJETAS] of tarjetas;

var
 grupo1, grupo2, grupo3: grupo;
 deck: mazo;
 i, j,x,a,d: Integer;
 carta: tarjetas;
 opcion: integer;

begin

 Randomize;

  writeln('Hola, soy un mago especialista en letras, adivinare la letra en la que estas pensando.');
 writeln('Haremos 3 secuencias. Empecemos...');
 writeln('Secuencia 1 :');
 // Llenar el mazo con todas las tarjetas posibles
 for i := 1 to MAX_TARJETAS do
   deck[i] := Chr(Ord('A') + i - 1);

 // Barajar el mazo
 for i := 1 to MAX_TARJETAS do begin
   j := Random(MAX_TARJETAS) + 1;
   carta := deck[i];
   deck[i] := deck[j];
   deck[j] := carta;
 end;

 // Distribuir las tarjetas en grupos sin repeticiones
 for i := 1 to MAX_TARJETAS_GRUPO do
 begin
   grupo1[i] := deck[i];
   grupo2[i] := deck[i + MAX_TARJETAS_GRUPO];
   grupo3[i] := deck[i + 2 * MAX_TARJETAS_GRUPO];
 end;

 writeln;

 // Mostrar los grupos

 for i := 1 to MAX_TARJETAS_GRUPO do
   writeln('    ',grupo1[i], '    ',grupo2[i], '    ',grupo3[i]);


 writeln;





 for x:=1 to MAX_GRUPOS do begin
 write('¿En que columna se encuentra tu letra? (1-2-3):');
 readln(opcion);

   case opcion of
    1:
      begin       //GRUPO 1

             for i:=1 to 7 do
   grupo1[i]:=deck[i];
   for i := 1 to 7 do
   Deck[i] := Deck[i + 14];
     for i := 1 to 7 do
   Deck[i + 7] := grupo1[i];



    for i:=1 to MAX_TARJETAS_GRUPO do begin
    writeln('   ',grupo1[i], '   ',grupo2[i], '   ',grupo3[i]);
      writeln;
    end;
     end;



    2:
    begin    // GRUPO 2
      for i:=1 to 7 do
   grupo2[i]:=deck[i];
   for i := 1 to 7 do
   Deck[i] := Deck[i + 14];
     for i := 1 to 7 do
   Deck[i + 7] := grupo2[i];


      FOR I:=1 TO MAX_TARJETAS_GRUPO do BEGIN
        deck[i]:=[i];
    writeln('   ',grupo1[i], '   ',grupo2[i], '   ',grupo3[i]);
      writeln;
    end;

    end;

    3:
    begin         //GRUPO 3
     for i:=1 to 7 do
   grupo2[i]:=deck[i];
   for i := 1 to 7 do
   Deck[i] := Deck[i + 14];
     for i := 1 to 7 do
   Deck[i + 7] := grupo2[i];

      for i:=1 to MAX_TARJETAS_GRUPO do begin
    writeln('   ',grupo1[i], '   ',grupo2[i], '   ',grupo3[i]);
      writeln;

      end;

       end;


   else begin
     writeln('ERROR: Debes escoger entre 1-2-3');
      writeln('¿En que columna se encuentra tu letra? (1-2-3):');
      readln(opcion);
 end;
     end;
end;
   WRITELN('Tu Letra es la:', deck[11]);
   readln;




end.        




(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.)