Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pino1952 en 05 de Diciembre 2014, 00:31

Título: Juego del truco, dar 6 cartas y que no se repitan... programado en C
Publicado por: Pino1952 en 05 de Diciembre 2014, 00:31
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
Título: Re:Juego del truco, dar 6 cartas y que no se repitan...
Publicado por: nosferacento 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
Título: Re:Juego del truco, dar 6 cartas y que no se repitan...
Publicado por: Pino1952 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