Autor Tema: Juego del truco, dar 6 cartas y que no se repitan... programado en C  (Leído 7376 veces)

Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
Hola a todos.
Desconozco si en sus países se juega al truco (Argentina), pero para el caso es irrelevante, lo que necesito es generar 6 pares de números y que ninguno de los 6 pares se duplique, ejemplos:
1 – 7
3 – 3
0 – 5
-------- 
0 – 5 <-- duplicado (lo que no tiene que ocurrir)
1 – 4
3 – 8

Pensé en sumar cada pares de números e ir poniéndolos en un vector y antes de confirmarlo recorrer con un bucle para establecer que realmente el número a ingresar no esté ya en el  vector, lo que pasa que parece un poco largo porque después tendría que separar los 2 números para buscar el palo y la cara para repartir las cartas.-   
Bueno es todo, ¿tienen una manera más sencilla para lograr lo mismo?.-

El programa:
Código: [Seleccionar]
//Programa para jugar al truco

#include <stdio.h>
#include<stdlib.h> 
#include <time.h>

void darCartas(const char *palos[], const char *caras[]);

int main(void){
const char *palos[4] = {"Espadas", "Oro", "Basto", "Copa"};
const char *caras[10] = {"As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Sota",
"Caballo", "Rey"};
srand(time(NULL));


printf("\n Cartas para la maquina\n");
darCartas(palos, caras);

printf("\n\n Cartas para el humano\n");
darCartas(palos, caras);

printf("\n\n Pulse [Enter] para finalizar..."); getchar();
return 0;
}

void darCartas(const char *palos[], const char *caras[]){
int i, _palos, _caras;

for(i=0; i < 3; i++){
_palos = rand() % 4;
_caras = rand() % 10;
//printf("\n %d == cara = %d", _palos, _caras);
printf("\n %s de %s",  *(caras + _caras), *(palos + _palos));
}
}



Desde ya muchas gracias y Saludos.
Daniel
« Última modificación: 07 de Diciembre 2014, 11:51 por Ogramar »
Abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Re:Juego del truco, dar 6 cartas y que no se repitan...
« Respuesta #1 en: 06 de Diciembre 2014, 20:42 »
Hola Pino1952, he probado el código y el resultado que me da es por ejemplo


 Cartas para la maquina

 Caballo de Oro
 Tres de Copa
 Cuatro de Espadas

 Cartas para el humano

 Tres de Basto
 Siete de Copa
 Cuatro de Copa

 Pulse [Enter] para finalizar...

¿Dónde están los pares de cartas? Porque supongo que te refieres a que no haya pares de cartas duplicados pero no veo pares de cartas  :o

Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
Re:Juego del truco, dar 6 cartas y que no se repitan...
« Respuesta #2 en: 06 de Diciembre 2014, 22:49 »
Hola nosferacento.
Gracias por ocuparte, desconozco las veces que lo corriste para que te dé siempre el resultado esperado, no obstante (sin validación) podemos deducir que el resultado en algún momento va a ser incorrecto, por si no conoces el juego hay que repartir 6 cartas y lo que no puede ocurrir es que haya cartas duplicadas, por ejemplo no puede haber 2 dos del mismo palo , 2 siete del mismo palo etc,etc.-

Citar
Estas son las 40 cartas:
[1] [2] [3] [4] [5] [6] [7] [10] [11] [12] de Basto     
[1] [2] [3] [4] [5] [6] [7] [10] [11] [12] de Oro     
[1] [2] [3] [4] [5] [6] [7] [10] [11] [12] de Espada     
[1] [2] [3] [4] [5] [6] [7] [10] [11] [12] de Copa

Bueno el programa que dejo a continuación parece que funciona correctamente.-     
Código: [Seleccionar]
//Programa para jugar al truco

#include <stdio.h>
#include<stdlib.h> 
#include <time.h>

void darCartas(const char *palo[], const char *numero[]);

int main(void){
const char *palo[4] = {"Espadas", "Oro", "Basto", "Copa"};
const char *numero[10] = {"As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Sota",
"Caballo", "Rey"};
srand(time(NULL));

printf("\n Cartas para la maquina\n");
darCartas(palo, numero);

printf("\n\n Pulse [Enter] para finalizar..."); getchar();
return 0;
}

void darCartas(const char *palo[], const char *numero[]){
int contWhile=0, conFor=0, _palo=0, _numero=0, ok=0;
int sel[12] = {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, *ptrSel = sel;

while(contWhile < 12){
_palo = rand() % 4;
_numero = rand() % 10;
for(conFor=0; conFor < 12; conFor += 2){
if(*(ptrSel + conFor) == _numero){
if(*(ptrSel + conFor+1) == _palo){
ok = 1;
}
}
}

if(ok == 0){
*(ptrSel + contWhile) = _numero;
contWhile++;
*(ptrSel + contWhile) = _palo;
contWhile++;
}else{ok=0;}
}

printf("\n");
for(conFor=0; conFor < 12; conFor +=2){
printf(" %s de %s\n", *(numero + *(ptrSel + conFor)), *(palo + *(ptrSel + conFor+1)));
if(conFor == 4) printf("\n Cartas para el humano\n\n");
}
}

Saludos.
Daniel
Abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".