battage/ melange d'un jeu de cartes (résolu)

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Simon Tentillier
Messages : 6
Enregistré le : 04 Mai 2010, 15:25

battage/ melange d'un jeu de cartes (résolu)

Messagepar Simon Tentillier » 02 Fév 2012, 17:39

Bonjour, j'ai donc un jeu de cartes ranger de l'ordre que l'on numérote de cette manière 1 2 3 4 .....52 , 1 étant la carte la plus faible et 52 la plus forte.

Le but est de mélanger ce jeu selon différentes méthodes.
J'ai 2 questions :

[b]1. [/b]J'ai fait un premier code qui réalise un certain type de mélange que je veux, le voici :
[code]
jeu=1:52
t=50
for (i in 1:t){
nouv_place=sample(1:52, size = 1)
nouv_place
val_carte=jeu[1]
for (j in 1:nouv_place-1)
{jeu[j]=jeu[j+1]}
jeu[nouv_place]=val_carte
}
[/code]

Ce que j'aimerai en faire une fonction, mais quand je fais :

[code]top_random=function(t,jeu){
for (i in 1:t){
nouv_place=sample(1:52, size = 1)
nouv_place
val_carte=jeu[1]
for (j in 1:nouv_place-1)
{jeu[j]=jeu[j+1]}
jeu[nouv_place]=val_carte
}}
t=50
jeu=1:52
top_random(t,jeu)[/code]

La suite "jeu" n'ai pas modifié et resté inchangé ??! Je ne comprends pas.

[b]2.[/b] J'aimerai réaliser un autre type de mélange et la je sèche sur l'algorithme.
pour résumer ce que je veux faire : on part avec 1 2 3 4 5 6 7 8 un premier mélange nous donne 5 1 6 2 7 3 8 4. Séparer le tas en deux, et insérer une sur deux en gros.

Voilà le code auquel je suis arrivé pour le moment :
[code]
N=8
jeu=1:N
for (i in 1:N/2){
val=jeu[N/2+i]
x=jeu
for (j in i:(N/2))
{jeu[j+1]=x[j]}
if (i ==1){
jeu[i]=val}
if (i!=1){jeu[i+1]=val}
}
[/code]

Je suis preneur de toute idée.

Merci de votre attention

Simon Tentillier
Messages : 6
Enregistré le : 04 Mai 2010, 15:25

Messagepar Simon Tentillier » 02 Fév 2012, 21:03

Comme quoi il faut parfois se prendre la tête et savoir prendre du recule !!
J'ai réussi à faire mon mélange 12345678 -> 51627384.
Je vous mais le code cela sera peut-être utile à une personne.

[code]N=52
jeu=1:N
jeu
t=7
for (i in 1:t){
tas1=jeu[1:(N/2)]
tas2=jeu[(N/2+1):N]
k=1
for (j in 1:(N/2))
{jeu[k]=tas2[j]
k=k+2}
m=2
for( l in 1:(N/2)){
jeu[m]=tas1[l]
m=m+2}
Sys.sleep(1)
plot(jeu)
}
[/code]


en revanche, j'ai toujours du mal pour en faire des fonctions ! Si quelqu'un a une idée ou une piste de réflexion. Je suis preneur

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Messagepar Eric Casellas » 03 Fév 2012, 08:37

Bonjour,

Ton probleme avec ta fonction c'est que les affectations restent dans l'espace de la fonction et ne modifie pas la variable dans l'espace global

Un petit exemple pour comprendre ce qu'il se passe avec les fonctions :

Code : Tout sélectionner

> a <- 10
> f <- function (X) {a <- X}
> f(20)
> a
[1] 10
> a <- 10
> g <- function (X) {a <<- X}
> g(20)
> a
[1] 10
> a <- 10
> h <- function (X) {return(X)}
> a <- h(20)
> a
[1] 20


Dans la mesure du possible c'est mieux d'eviter la solution de g et de plutôt faire quelque chose comme h
Eric

Simon Tentillier
Messages : 6
Enregistré le : 04 Mai 2010, 15:25

Messagepar Simon Tentillier » 03 Fév 2012, 09:51

Merci de cette explication nette et précise.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité