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
-
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:
//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
-
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
-
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.-
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.-
//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