Problème programmation de base

Utilisation de Xcas

Modérateur : xcasadmin

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Problème programmation de base

Message par magicvinni » dim. mars 29, 2009 8:57 am

Bonjour,

J'ai fait ce bout de code :

Code : Tout sélectionner

gagne:=0;
dernier:=7;
suite:=1;
for(k:=1;k<10000;k++){
  tirage:=rand(6)+1;
  if (tirage==dernier){
    suite++;
  } else {
    suite:=1;
    dernier:=tirage;
  }
  if (suite==5){
    suite:=1;
    gagne++;
    dernier:=7;
    t:=(k/gagne);
  }
} 
evalf(t);
Et il me dit :
Compatibilite de la syntaxexcas
Erreur grammaticale ligne 19 a evalf

En ait je suis obligé de mettre un ; après l'accolade de ma boucle for, c'est normal ?

Merci de vos lumières

Vincent

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » lun. mars 30, 2009 8:05 am

bonjour,

apparamment le probleme n'apparait qu'en mode interactif, pas à l'intérieur d'une fonction. Du coup, comme je n'ai pas trop envie de faire des modifs dans l'interpréteur, j'ai trop peur d'introduire des bugs, je préfère laisser comme ça.

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Message par magicvinni » mar. mars 31, 2009 12:23 pm

Merci de la réponse, je continue dans mes questions de débutant.... :

Code : Tout sélectionner

gagne:=0;
dernier:=7;
suite:=1;
ListeT:=[];
for (k:=1;k<100000;k++){
  tirage:=rand(6)+1;
  if (tirage==dernier){
    suite++;
  } else {
    suite:=1;
    dernier:=tirage;
  }
  if (suite==5){
    suite:=1;
    gagne++;
    dernier:=7;
    t:=(k/gagne);
    append(ListeT,evalf(t));
  }
};
ListeT;
Je voudrais dans la liste ListeT aire apparaitre la série de valeurs de t....et j'ai toujours le retour [] .....Je n e comprends pas

Merci,

Vincent

P.S : Comment ensuite dessiner la ligne brisée que représente ma simulation ?

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » mar. mars 31, 2009 1:19 pm

C'est parce que le resultat de append n'a pas ete stocke (append ne modifie pas ses arguments), il faut donc ecrire
ListeT:=append(ListeT,evalf(t));

Pour tracer une ligne brisee avec en ordonnee les valeurs de ListeT (et en abscisse 0, 1, etc.) vous pouvez utiliser plotlist(ListeT)

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Message par magicvinni » mar. mars 31, 2009 1:33 pm

Merci, impeccable.

Vincent

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Message par magicvinni » mar. mars 31, 2009 7:16 pm

Suite de mes aventures.....

J'ai donc effectué l'algo précédent, le but est de trouver le nombre moyen de lancers de dés à faire pour avoir 5 fois de suite le même résultat...

Et là, si je fais le graphe
Image
et ce qui me parait bizarre c'est cette régularité dans le graphe....

alors que sous python par exemple, je ne retrouve pas cette régularité.
Image

Du coup je me demande si la fonction rand est si aléatoire que ça .....[/img]

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » mar. mars 31, 2009 7:56 pm

en effet, il y a un truc bizarre. Pourtant j'utilise la fonction rand() de la libc, puis je ramène à 0..1 et multiplication par 6. A moins que ca ne soit du a du 64 versus 32 bits. Vous etes en 64 bits?

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Message par magicvinni » mar. mars 31, 2009 8:06 pm

Non 32 bit (J'ai le même phénomène avec mes 2 ordi, mais ils sont tous 2 sous Win XP.....)

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » mer. avr. 01, 2009 7:24 am

Ok, ce n'est pas un pb 32/64 bits, mais c'est moi qui gerait mal rand en multi-threading. En relisant la doc de la libc, je viens de voir que rand_r me permet de generer des nombres aleatoires en multi-threading, et apres modif, le graphe ne presente plus de regularite.
Le source a ete mis a jour, les versions linux suivront et pour win et mac j'espere avoir le temps de m'en occuper cette semaine.

Répondre