UTNianos

Versión completa: [APORTE] Informática I.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Bat como hiciste para que te ande?Feer


Mati:


void barajar(Carta *mazo){

int i, j; // Estas variables las uso para el swap es como cuando ordenas un vector.
Carta buffer; // Este vendria a ser el que contiene el que va a rotar (como cuando ordenas vector)

for(i = 0; i <= 51; i++){ // Aca voy pasando las cartas una por una..
j = rand()%52; // A la primera del maso le busco una nueva posicion a asignar dentro de la baraja.

//swap
buffer = *(mazo+i); //Guardo la primera para no perderla jaja
*(mazo+i) = *(mazo+j); //La carta que esta en la posicion del random que me tiro la guardo en donde esta mi primera carta
*(mazo+j) = *(mazo+i); // Y la que estaba primera la llevo a la que le saque carta..
} //Lo hago con las 52 cartas y queda barajeada la cosa...
}




Ahí te lo comente fijate, funciona como un algoritmo de busqueda pero en vez de buscar la mayor o la menor buscas la de posicion que te tira el random.
Encontré un error gracias a compilación del post de brunodiaz (suena raro decir "compilación de post" Jajaja). Se repiten en una ejecución una misma carta, 6 de treboles me repitió a mí. Para evitar este inconveniente una forma de resolverlo es poniéndole un nro. como parámetro a srand. O bien time(NULL) (como vos pusiste) ó getpid(). Pruebo con getpid() a ver que pasa (línea 20)...



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

typedef struct carta {
const char *numero;
const char *palo;
} Carta;

void cargar(Carta *mazo, char *mazo_fila[], char *mazo_columna[]);
void barajar(Carta *mazo);
void repartir(Carta *mazo);

int main(void){

char *mazo_fila[]={"picas","corazones","diamantes","treboles"};
char*mazo_columna[]={"uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","jack","reina","rey"};
Carta mazo[4][13];

srand(getpid());

printf("Reparto de cartas: \n");
cargar((Carta*)mazo,mazo_fila,mazo_columna);
barajar((Carta*)mazo);
repartir((Carta*)mazo);
getchar();
return(0);
}

void cargar(Carta *mazo, char *mazo_fila[], char *mazo_columna[]){

int i;

for(i = 0; i <= 51; i++){
(mazo+i)->numero = *(mazo_columna + (i%13));
(mazo+i)->palo = *(mazo_fila + (i/13));
}
}

void barajar(Carta *mazo){

int i, j;
Carta buffer;

for(i = 0; i <= 51; i++){
j = rand()%52;

//swap
buffer = *(mazo+i);
*(mazo+i) = *(mazo+j);
*(mazo+j) = *(mazo+i);
}
}

void repartir(Carta *mazo){

int i,j;

for(i = 0, j = 0; i < 52; j++, i+=2)
printf("%d.\tJugador 1: %s %s\t\tJugador 2: %s %s\n",j,mazo[i].numero,mazo[i].palo,mazo[i+1].numero,mazo[i+1].palo);
}




(13-05-2012 16:49)Feer escribió: [ -> ]Ahí te lo comente fijate, funciona como un algoritmo de busqueda pero en vez de buscar la mayor o la menor buscas la de posicion que te tira el random.

Gracias. Ahora lo entendí. Igual es al pedo barajar. Rand ya cumple con esa función. Es como que estás haciendo rand al cuadrado (?) JAJA


A mí tampoco me compila...
Jajaja, es para barajar=P
Es para hacerlo genérico(?)

Off-topic:
Así como Voltaire dijo: "La vida es un juego de azar", yo digo: "La vida es como la función rand();"
Al pasar el argumento a las funciones arajar, etc, castee a (Carta *)
Gracias=D
Ah, lo que yo había dicho que repetía cartas ya sé a que se debe.
Hay un "error" (lo puse entre comillas porque no es tan grave) en el swapping.

Tiene que ser:

buffer=*(mazo+i);
*(mazo+i)=*(mazo+j);
*(mazo+j)=buffer;
Si lo vi lo del swapp pero buen...
La cosa que anda jajajajajajajaja


Exitos con el exámen che!
(24-05-2012 13:55)Feer escribió: [ -> ]Si lo vi lo del swapp pero buen...
La cosa que anda jajajajajajajaja


Exitos con el exámen che!

Joya, cambiando esa boludez no repetiría las cartas Jerejerejereje(?)
Páginas: 1 2
URLs de referencia