[ Foro de Pascal ]
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.
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.)