[C++] Mutation

Soyez le premier à donner votre avis sur cette source.

Vue 3 242 fois - Téléchargée 616 fois

Description

Bonjour à vous.

Je vous propose un petit programme qui calcule le géne gagnant sur une série donnée.
Le but étant de démontrer que chacun gène N à N chance d'être choisis comme gagnant.
Bien sûr, c'est une version simplifiée du réel car cela ne représente que les gènes,
mais on peut remarquer qu'en ~20 générations, 99 gènes "disparaissent" et 1 seul reste.

Voilà j'espère avoir été clair !

Coder en C++11.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
Par contre, je ne comprend pas ton résonnement pour "win".

Je n'avais pas bien regardé, et effectivement, tu mets un "i = max" ce qui te fait sortir de la boucle. Néanmoins, c'est un peu bizarre (pas faux du tout, évidemment), généralement, on fait cela avec une boucle while, et on change rarement la condition de fin d'une boucle for (ce ne sont que des conventions, mais quand on est habitué, ça fait bizarre :p).

Sinon, si ton but est de simplement quitter la fonction dès la réponse connue, pourquoi ne pas faire directement:
bool verifWin() const
{
  assert(!m_individuID.empty());
  auto tmp = m_individuID[0];
  auto max = m_individuID.size();

  for (int i = 1; i < max; ++i)
  {
    if (m_individuID[i] == tmp)
      m_individuWinner = m_individuID[i];
    else
      return false;
  }

  return true;
}


Voir même:
bool verifWin() const
{
  assert(!m_individuID.empty());
  auto tmp = *m_individuID.begin();

  for (auto individu : m_individuID)
    if (individu != tmp)
      return false;

  m_individuWinner = tmp;
  return true;
}
Messages postés
11
Date d'inscription
lundi 24 octobre 2011
Statut
Membre
Dernière intervention
6 novembre 2017

Je te remercie pour ton commentaire.
J'ai tout changé ce que tu m'as dit, et c'est bien plus sympa comme ça ! Par contre, je ne comprend pas ton résonnement pour "win". Si le gène est différent du gène d'avant, alors il n'y a pas de vainqueur, tout simplement. C'est peut être aussi moi qui ai mal comprit.
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
Bonjour.

Quelques questions/remarques:
- Pourquoi ne pas utiliser un std::vector pour m_individuID ? (avec un resize si on connaît déjà la taille). Ça éviterait un reliquat du C et ça corrigerait indirectement un bug dans ton code (il faut faire un delete[] et non un delete).
- Plutôt qu'un u32_t personnalisé pourquoi ne pas directement utiliser le standard uint32_t, qui est dans le header <cstdint> ?
- Vu que tu es en C++11, pourquoi utiliser le vieux srand/rand plutôt qu'un random_generator du nouveau header <random> ?
- La valeur de "win" dans la boucle for de ta méthode verifWin() me parait suspicieuse. En effet, tu changes la valeur de win de telle manière à ce que cela revienne strictement à ne vérifier que si le dernier éléments de ta liste vérifie ton prédicat. Est-ce vraiment ce que tu veux faire ? Si oui, alors tu peux ne tester que le dernier élément, non ?
- Certaines méthodes ne devraient-elles pas être dans un mode de visibilité différent de public ? D'après ton exemple, exposer seulement "setIndividu" et "processMutation" semble suffisant.
- Je rajouterais dans ton code, un peu plus d'assert (via <cassert>), notamment pour s'assurer que certains cas n'arriveront jamais (je pense par exemple à "tmp = m_individuID[0]", qui se base fortement sur le prédicat que "!m_individuID.empty()", et qui mériterait bien un petit assert :p).
- Pour paufiner un peu, je rajouterais aussi dans la description que c'est du C++11 et non du C++03 classique. Le C++11 n'est pas encore le mode par défaut de la plupart des compilateurs (malheureusement).

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.