IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

tirage au sort d'un opérateur


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut tirage au sort d'un opérateur
    Bonjour,

    Je débute en PHP et j'essaie de faire un exercice. Il faut tirer au hasard 2 entiers et un opérateur + ou - pour donner le résultat du calcul.

    J'ai trouvé comment faire pour tirer au hasard mes entiers avec mt_rand.
    Mais j'ai beau farfouiller partout, je ne trouve pas comment tirer au hasard un opérateur car tout ce que je trouve concerne soit une chaîne de caractère soit un entier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $x = mt_rand (1,100);
    $y = mt_rand (1,100);
    $operateur= ???? ('+','-');
    ?>
    Merci pour votre aide.

    Kakou40

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    bah tirer un opérateur au hasard revient à faire un simple tirage numérique :
    tu définis que les entiers entre 1 et 50 correspondent à + et ceux entre 51 et 100 à -
    Dans tous les cas, l'opérateur retenu ne pourra être amené par une variable dans l'expression d'évaluation.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 847
    Points : 6 531
    Points
    6 531
    Par défaut
    Si tu n'as que deux choix tu peux utiliser le timestamp (nombre de secondes écoulées depuis le 1er janvier 1970) et regarder s'il est pair ou impair en testant le dernier bit avec un AND (1011 & 1 = 1, 1010 & 1 = 0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $operateur = time() & 1 ? '+' : '-';
    Si tu as plus de choix, tourne toi vers mt_rand, créer un tableau avec tes opérateurs et arrange toi pour que mt_rand te renvoie l'index d'un des éléments du tableau.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Juste une question sur la proposition de CosmoKnaci : si on utilise time(), je ne pense pas qu'il y ait un choix par hasard, si ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 847
    Points : 6 531
    Points
    6 531
    Par défaut
    Le hasard n'existe pas en informatique, donc on doit se rabattre sur ce qu'on appelle le pseudo-aléatoire. Pour le produire, et ce quel que soit l'algorithme, il faut introduire à un moment ou à un autre un paramètre sur laquelle on n'a pas dans une certaine mesure de contrôle: la graine. À partir de celle-ci l'algorithme va se charger de générer, avec plus ou moins de bonheur suivant la méthode, une série de nombres "se rapprochant du hasard" (si tant est que ça veuille dire quelque chose), l'idée étant que ces nombres ne doivent pas sembler être liés par une loi mathématique (bien que ce soit le cas) en évitant les grumeaux.
    Le point faible du pseudo-aléatoire est que pour une même graine, on obtient le même résultat. Un ordinateur est déterministe. Pour parer au problème, les stratégies consistent à se baser sur un ensemble de graines ou à trouver de meilleurs graines.

    Dans mon exemple (l'arrêt à l'aveugle d'un chronomètre), aucun algorithme n'est utilisé, c'est basé sur deux événements à priori imprédictibles: on n'ignore quand le programme est lancé et on ignore le nombre de secondes. On peut évidement tricher en lançant le programme à un moment précis et en prenant connaissance du nombre de secondes à l'avance.

    Bien sûr, c'est assez limité, mais ça convient pour un usage ponctuel. Par exemple, on ne peut pas boucler ce code en espérant obtenir une suite de résultats pseudo-aléatoire dans la mesure où la période de la boucle sera inférieur à la seconde, ni même l'utiliser plusieurs fois de suite pour obtenir d'autres paramètres. C'est à usage unique.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Dans mon exemple (l'arrêt à l'aveugle d'un chronomètre)
    Je pensais que time() n'a rien d'aléatoire mais retourne l'heure courante, sauf que effectivement, chaque seconde, la parité change ; c'est bien ça ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 847
    Points : 6 531
    Points
    6 531
    Par défaut
    Oui, c'est bien l'idée.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Merci CosmoKnackiHerta Facile et je dois pas être le premier...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci à tous pour vos réponses.

    En fait je voulais juste pouvoir créer un jeu de calcul qui tire au hasard chaque chiffre et un opérateur au milieu. J'ai trouvé comment faire avec la fonction tableau.

    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quelle fonction pour faire un tirage au sort de noms
    Par Sofie109 dans le forum VBA Access
    Réponses: 6
    Dernier message: 01/06/2007, 15h52
  2. Tirage au sort
    Par Titeuf82 dans le forum Ada
    Réponses: 5
    Dernier message: 17/04/2007, 12h05
  3. Tirage au sort d'un mot
    Par Dav-D dans le forum C
    Réponses: 39
    Dernier message: 04/01/2007, 18h04
  4. [VBA-E] Tirage au sort avec probabilité
    Par clarisse dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/05/2006, 12h01
  5. Tirage au sort
    Par clampin dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2005, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo