Domingo 17 de Noviembre de 2024, 18:49
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Pascal
»
No Se Hacer El Programa
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: No Se Hacer El Programa (Leído 1728 veces)
cholisimo
Nuevo Miembro
Mensajes: 3
No Se Hacer El Programa
«
en:
Jueves 22 de Junio de 2006, 22:07 »
0
Hola a todos, estado dandole vueltas y mas vueltas a este programa pero todabia sigo sin saber como hacerlo alguien me puede ayudar, el enunciado dice lo siguiente:
Realizar un programa que reparta cuatro cartas a cuatro jugadores con algun m‚todo aleatorio (pseudoaleatorio). Se utilizaran conjuntos para garantizar que la misma carta no se reparte m s de una vez. Se debe tener en cuenta que jugamos con una baraja en la que hay 4 palos (oros,copas,espadas y bastos) y 10 cartas en cada palo (de la 1 a la 10).La salida del programa seria el conjunto de 4 cartas que le ha tocado a cada uno de los 4 jugadores.
Me hariais un gran favor. Gracias.
Tweet
tonilope
Miembro activo
Mensajes: 51
Re: No Se Hacer El Programa
«
Respuesta #1 en:
Viernes 23 de Junio de 2006, 00:49 »
0
Te voy a dar unas pistillas:
1) En total hay 40 cartas (4 palos x 10 cartas/palo = 40 cartas)
2) La función Random(x) te devuelve un número aleatorio entre 0 y x. (Al principio del programa hay que llamar a la función Randomize para que "reinicie" la secuencia de números aleatorios).
3) Cada vez que llames a Random(39), te devolverá un numerito entre 0-39. Mirarás en un array booleano (0-1) llamado cartas[] (por ejemplo) si la carta elegida ya ha sido repartida. Si todavía no había salido, pones a 1 el registro del array. Si la carta elegida ya está repartida, tendrás que volver a llamar a la función .
4) Una vez obtenido el numerito, tienes que averiguar a qué carta corresponde. Para ello utilizas la operación MÓDULO (resto de la divisón entera) y la DIVISIÓN ENTERA.
Ejemplo:
Supongamos que has obtenido el número 23 de forma aleatoria. Compruebas que cartas[23] sea igual a 0. Si es así, pones cartas[23]=1 y haces 23
Mod
10 =
3
Eso te dice que se trata de un
4
(ten en cuenta que 0=AS, 1=2, 2=3, etc...)
Para averiguar el palo haces 23
Div
10 =
2
Luego el palo es
2
=ESPADAS (0=OROS 1=COPAS, etc...). La carta es el
4 de espadas
.
Salu2
y suerte que es muy sencillo.
Enko
Miembro de PLATA
Mensajes: 1562
Nacionalidad:
Re: No Se Hacer El Programa
«
Respuesta #2 en:
Viernes 23 de Junio de 2006, 01:13 »
0
Vamos por pasos:
Primero debes tener un tipo especial de datos para el mazo y los naipes
Código: Text
TPalo = (espada, basto, oro, copa);
TNaipe = record
Palo: byte;
Num: byte;
end;
TBaraja = array[1..40] of TNaipe;
Segundo: Debes tener una funcion que te cree una baraja ordenada.
Código: Text
procedure InitBaraja;
var i,j: Integer;
begin
for j:=0 to 3 do
for i:=1 to 10 do
begin
{es i+i*j para que sea 4 veces de 0 a 10, 0..10, 10..20, 20....}
Baraja[i+i*j].Palo := Ord(j); {es Ord(0)=espada, Ord(1)=basto, etc... revisa TPalo}
Baraja[i+i*j].Num := i; {seria del 1 al 10 4 veces por el for j}
end;
Lo que hace lo anterior, es basicamente con una forma rebuscada crear un mazo de
naipes de 4 palos (0,1,2,3) con 4 veces del 1 al 10. (Es decir, una baraja)
Si no te gusta el c'odigo anterior, puedes hacer:
Código: Text
for i:=1 to 10 do
begin
Baraja[i].Palo := espada;
Baraja[i].Num := i;
end;
for i:=11 to 20 do
Baraja[i].Palo := basto;
baraja[i].Num := i;
end;
etc.....
pero supong oque el primer codigo tiene que funcionar, no lo prob'e, si no funciona, usa el segundo y completalo.....
Tercero; tienes que hacer un algoritmo capaz de mezclar el maso
Código: Text
procedure Mezclar;
var
temp: TNaipe;
i: Integer;
rand: Integer;
begin
For i:=1 to 40 do
begin
Rand := RAndom(40)+1;
temp := Baraja[i];
Baraja[i] := Baraja[Rand;
Baraja[Rand] := tem;
end;
Lo que hace lo anterior es simplemente intercambiar todos los anipes del mazo con un naipe de posicion aleatorioa.
tonilope
Miembro activo
Mensajes: 51
Re: No Se Hacer El Programa
«
Respuesta #3 en:
Domingo 25 de Junio de 2006, 18:46 »
0
Aquí te dejo una posible implementación en C. Espero que te sirva de guía.
Código: Text
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char **argv)
{
int conta_jugador, conta_carta, aux, repartidas[40], cartas[4][4];
char palos[4][20], figuras[3][20];
sprintf(palos[0], "Oros");
sprintf(palos[1], "Copas");
sprintf(palos[2], "Espadas");
sprintf(palos[3], "Bastos");
sprintf(figuras[0], "Sota");
sprintf(figuras[1], "Caballo");
sprintf(figuras[2], "Rey");
srand(time(NULL));
for(aux=0; aux<40; aux++)
repartidas[aux]=0;
//Repartimos las cartas "de una en una" (como se haría normalmente)
for(conta_carta=0; conta_carta<4; conta_carta++)
{
for(conta_jugador=0; conta_jugador<4; conta_jugador++)
{
do{
aux=rand()%40;
}while(repartidas[aux]);
repartidas[aux]=1;
cartas[conta_jugador][conta_carta]=aux;
}
}
//Mostramos por pantalla las cartas de cada jugador
for(conta_jugador=0; conta_jugador<4; conta_jugador++)
{
printf("\n\nJugador %d:", conta_jugador+1);
for(conta_carta=0; conta_carta<4; conta_carta++)
{
aux=cartas[conta_jugador][conta_carta]%10;
if(aux<7)
printf("\n%d de %s", aux+1, palos[cartas[conta_jugador][conta_carta]/10]);
else
printf("\n%s de %s", figuras[aux-7], palos[cartas[conta_jugador][conta_carta]/10]);
}
}
return 0;
}
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Pascal
»
No Se Hacer El Programa