Programación General > Pascal
No Se Hacer El Programa
(1/1)
cholisimo:
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.
tonilope:
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:
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 dobegin 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:
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 jugadorfor(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;}
Navegación
Ir a la versión completa