Page 1 sur 1

Problème programmation de base

Publié : dim. mars 29, 2009 8:57 am
par magicvinni
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

Publié : lun. mars 30, 2009 8:05 am
par parisse
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.

Publié : mar. mars 31, 2009 12:23 pm
par magicvinni
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 ?

Publié : mar. mars 31, 2009 1:19 pm
par parisse
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)

Publié : mar. mars 31, 2009 1:33 pm
par magicvinni
Merci, impeccable.

Vincent

Publié : mar. mars 31, 2009 7:16 pm
par magicvinni
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]

Publié : mar. mars 31, 2009 7:56 pm
par parisse
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?

Publié : mar. mars 31, 2009 8:06 pm
par magicvinni
Non 32 bit (J'ai le même phénomène avec mes 2 ordi, mais ils sont tous 2 sous Win XP.....)

Publié : mer. avr. 01, 2009 7:24 am
par parisse
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.