[ Foro de Pascal ]

TRUCO 21 CARTAS PASCAL

15-Jan-2024 22:52
OSHIRO JOEL Orbezo Rosas
1 Respuestas

Alguien me puede ayudar con lo siguiente.
Se pide implementar un programa en Pascal que haga exactamente lo que se acaba de describir. En vez de utilizar cartas se utilizarán letras mayúsculas desde la A hasta la U (21 letras).
El programa ordenará las letras al azar, tal como si barajara un mazo, y luego las mostrará en tres grupos (columnas): Como puedes observar, se muestra
inicialmente el mensaje Haremos 3
secuencias. Empecemos…
Luego se muestra la secuencia actual, en este caso Secuencia 1, las cartas
ordenadas al azar y se queda a la espera de que el usuario ingrese el número del
grupo en que está la letra que está mirando.
Imagina que estás interesado/a en la letra A, que está al final del grupo 3, así que ingresamos 3 y presionamos ENTER. El programa juntará las letras nuevamente siguiendo el método explicado anteriormente y las volverá a mostrar al usuario:
Si prestas atención, podrás ver cómo se han repartido de forma intercalada las letras
respecto al arreglo anterior, habiendo ubicado la tercera columna en el segundo
lugar y la segunda en el tercero. Nuevamente se pide que el usuario indique
la columna en que está su letra, que en este caso es la número 2. Ingresamos el 2 y
presionamos ENTER:El programa realiza nuevamente el procedimiento que hemos explicado anteriormente y vuelve a mostrar nuevamente las letras al usuario.
Por última vez se debe ingresar el número de columna en que está la letra elegida.
Como ves, la letra A está en la columna 3, así que ingresamos el número 3 y
presionamos ENTER.El programa le indicará al usuario cuál es la
letra que había elegido.


17-Jan-2024 01:06
OSHIRO JOEL Orbezo Rosas

YA LO RESOLVI :V

program cartas21;

const MAX_TARJETAS_GRUPO = 7; //Tarjetas por grupo o cantidad en una columna
     MAX_GRUPOS = 3;         //Cantidad de grupos o cantidad de columnas
     MAX_TARJETAS = MAX_TARJETAS_GRUPO*MAX_GRUPOS;   //Total de Tarjetas
     MIN_TARJETA_VALOR = 'A';                        //Tarjeta Inicial
     MAX_TARJETA_VALOR = chr(MAX_TARJETAS+ord('A')-1); //Tarjeta final: U

type tarjetas= MIN_TARJETA_VALOR..MAX_TARJETA_VALOR; //desde A hasta U
    grupo= array[1..MAX_TARJETAS_GRUPO] of tarjetas;     //tipo char
    mazo= array[1..MAX_TARJETAS] of tarjetas; //tipo char

var  grupo1, grupo2, grupo3: grupo; //grupo = columnas
    deck: mazo;      //letras sin repetir

    //DECLARACION DE VARIABLES ADICIONALES
     m,cont, i, j, x, y, opcion, form, form2,form3 : integer;
    rep : boolean;
    carta : tarjetas;//servira para el barajeo
    adiv, inter, aux : grupo;//aca se guardara el primer grupo que escoje.

begin
 writeln('HAREMOS 3 SECUENCIAS. EMPECEMOS......');

 //RELLENAMOS LAS 21 CARTAS CON VALOR DE A.....U, sin repeticion.
 for i := 1 to MAX_TARJETAS do begin
     deck[i] := chr(ord('A')+i-1);
 end;

 //BARAJEAMOS LAS CARTAS
 for i:= 1 to MAX_TARJETAS do begin
      j:= random(MAX_TARJETAS) + 1;
      carta := deck[i];
      deck[i] := deck[j];
      deck[j] := carta;
 end;

 // DISTRIBUIMOS LAS TARJETAS 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;

 //PREGUNTAMOS
 for cont:= 1 to MAX_GRUPOS do begin
    m := 1;
    writeln('SECUENCIA ', cont,' : ' );
    writeln();
    //MOSTRAMOS LOS NUEVOS GRUPOS
    for x := 1 to MAX_TARJETAS_GRUPO do begin
        writeln('    ',grupo1[x], '    ',grupo2[x], '    ',grupo3[x]);
    end;
    writeln();

    write('¿ EN QUE COLUMNA SE ENNCUENTRA TU LETRA(1 - 2 - 3) ?: ');
    readln(opcion);

    writeln();


    //PONEMOS LAS DISTINTAS SITUACIONES
    case opcion of
    1: begin
          //PROCESO 1: DELEGAR VALORES
             for y:= 1 to 7 do begin
                 adiv[y] := grupo1[y];
             end;

          //PROCESO 2: JUNTAR LAS TARJETAS EN UN SOLO ARREGLO
          for j:= 1 to MAX_TARJETAS_GRUPO do begin
             //relevamos sus valores en un solo monton
             deck[j] := grupo2[j];
             deck[j+7] := grupo1[j];
             deck[j+14] := grupo3[j];
          end;

          //PROCESO 3: CREACION DE NUEVOS GRUPOS
          for j:=1 to MAX_TARJETAS_GRUPO do begin
             form := 3*j - 2;
             form2 := 3*(j) - 1;
             form3 := 3*j;
             //hacemos nuevos grupos
             grupo1[j] := deck[form];
             grupo2[j] := deck[form2];
             grupo3[j] := deck[form3];
          end;

          if cont = 2 then begin
             //PROCESO 4: INTERSECCION DE VALORES NUEVOS CON ANTIGUOS
            //INTERSECYAMOS LOS VALORES
            for x:= 1 to 7 do begin
                for y:= 1 to MAX_TARJETAS_GRUPO do begin
                    if adiv[x] = inter[y] then begin
                       aux[m] := inter[y];
                       m := m+1;
                    end;
                end;
            end;
          end else begin
            for y:= 1 to 7 do begin
                inter[y] := adiv[y];
            end;
          end;

          if cont = 3 then begin
             for x:= 1 to 7 do begin
                for y:= 1 to MAX_TARJETAS_GRUPO do begin
                    if adiv[x] = inter[y] then begin
                       aux[m] := inter[y];
                       m := m+1;
                    end else rep := true;
                end;
            end;
          end;

       end;
    2: begin
          //PROCESO 1: DELEGAR VALORES
          for y:= 1 to 7 do begin
              adiv[y] := grupo2[y];
          end;

          //PROCESO 2: JUNTAR LAS TARJETAS EN UN SOLO ARREGLO
          for j:= 1 to MAX_TARJETAS_GRUPO do begin
             //relevamos sus valores en un solo monton
             deck[j] := grupo1[j];
             deck[j+7] := grupo2[j];
             deck[j+14] := grupo3[j];
          end;

          //PROCESO 3: CREACION DE NUEVOS GRUPOS
          for j:=1 to MAX_TARJETAS_GRUPO do begin
             form := 3*j - 2;
             form2 := 3*(j) - 1;
             form3 := 3*j;
             //hacemos nuevos grupos
             grupo1[j] := deck[form];
             grupo2[j] := deck[form2];
             grupo3[j] := deck[form3];
          end;

           if cont = 2 then begin
             //PROCESO 4: INTERSECCION DE VALORES NUEVOS CON ANTIGUOS
            //INTERSECYAMOS LOS VALORES
            for x:= 1 to 7 do begin
                for y:= 1 to MAX_TARJETAS_GRUPO do begin
                    if adiv[x] = inter[y] then begin
                       aux[m] := inter[y];
                       m := m+1;
                    end;
                end;
            end;
          end else begin
            for y:= 1 to 7 do begin
                inter[y] := adiv[y];
            end;
          end;

          if cont = 3 then begin
             for x:= 1 to 7 do begin
                for y:= 1 to MAX_TARJETAS_GRUPO do begin
                    if adiv[x] = inter[y] then begin
                       aux[m] := inter[y];
                       m := m+1;
                    end else rep := true;
                end;
            end;
          end;

       end;
    3: begin
            //PROCESO 1: DELEGAR VALORES
          for y:= 1 to 7 do begin
              adiv[y] := grupo3[y];
          end;

          //PROCESO 2: JUNTAR LAS TARJETAS EN UN SOLO ARREGLO
          for j:= 1 to MAX_TARJETAS_GRUPO do begin
             //relevamos sus valores en un solo monton
             deck[j] := grupo1[j];
             deck[j+7] := grupo3[j];
             deck[j+14] := grupo2[j];
          end;

          //PROCESO 3: CREACION DE NUEVOS GRUPOS
          for j:=1 to MAX_TARJETAS_GRUPO do begin
             form := 3*j - 2;
             form2 := 3*(j) - 1;
             form3 := 3*j;
             //hacemos nuevos grupos
             grupo1[j] := deck[form];
             grupo2[j] := deck[form2];
             grupo3[j] := deck[form3];
          end;

           if cont = 2 then begin
             //PROCESO 4: INTERSECCION DE VALORES NUEVOS CON ANTIGUOS
            //INTERSECYAMOS LOS VALORES
            for x:= 1 to 7 do begin
                for y:= 1 to MAX_TARJETAS_GRUPO do begin
                    if adiv[x] = inter[y] then begin
                       aux[m] := inter[y];
                       m := m+1;
                    end;
                end;
            end;
          end else begin
            for y:= 1 to 7 do begin
                inter[y] := adiv[y];
            end;
          end;
          if cont = 3 then begin
             for x:= 1 to 7 do begin
                for y:= 1 to MAX_TARJETAS_GRUPO do begin
                    if adiv[x] = inter[y] then begin
                       aux[m] := inter[y];
                       m := m+1;
                    end else rep := true;
                end;
            end;
          end;

       end;
    end;
    writeln;
    if cont>1 then begin
       for x:=1 to 7 do begin
           inter[x] := aux[x];
      end;
    end;
    writeln();
 end;
    if rep then begin
       writeln('ERRO.. TU CARTA NO SE ENCUENTRA EN ESA COLUMNA..');
    end else begin
       writeln('OBVIAMENTE ELEGISTE LA LETRA: ', aux[1]);
    end;


 writeln;
 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.)