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

Macros et VBA Excel Discussion :

Petit défis: Aquarium


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 513
    Par défaut Petit défis: Aquarium
    Bonjour,

    Je vous présente un exercice à l'origine crée pour Java, mais réalisable en n'importe quel langage.
    Voici l'annoncé:
    1. À l’origine prévu pour Java, cet exercice peut être fait avec n’importe quel langage orienté objet.
    2. Je ne garantis pas l’authenticité des informations piscicoles et aquicoles que vous pourrez trouver dans cet exercice…


    Thèmes

    Le thème principal de cet exercice est les objets.

    N’ayez pas peur ! L’énoncé est assez long, mais tentez l’exercice : tout ce blabla se code en peu de lignes.

    Comment ça marche ?
    Vous lisez l’énoncé et vous répondez à l’exercice.
    Si vous avez des questions, je m'efforcerai d'y repondre.

    Un peu d’enrobage…
    Monsieur Shingshan, aquariophile accompli, vous demande de faire un programme de simulation pour son prochain aquarium : il compte y mettre un certain nombre d’espèces de poissons rares et chères, et n’a pas envie qu’au bout de deux mois son précieux investissement se transforme en désert…

    Votre mission (et vous l’acceptez) : lui concevoir un programme qui fera la chose suivante :

    Citation : le cahier des charges

    Je devrai pouvoir mettre des poissons et des plantes dans mon aquarium virtuel, et faire passer le temps pour savoir si tout se passe bien.

    Traduit en geek / développeur , ça veut dire qu’il faudra un programme en deux phases :
    1. L’initialisation : les poissons et les algues sont ajoutés dans l’aquarium
    2. Le temps qui passe : on résous les actions d’un tour, et on fait un rapport de la situation.

    On est partis ? On y va !

    Partie 1 : Peuplons notre Javaquarium
    Exercice 1.1 : Remplissage de l’aquarium
    Il s’agit de la base du programme : avoir un aquarium rempli. L’aquarium contient des poissons et des algues, un nombre quelconque de chaque. L’algue ne fait rien : c’est une algue, elle se contente d’exister ou non. Le poisson, lui, a un nom (monsieur Shingshan aime ses poissons et leur donne un nom à chacun) et un sexe (mâle ou femelle). L’aquarium a une méthode une méthode pour ajouter un poisson (avec son nom et son sexe), et une autre méthode pour ajouter une algue. L’aquarium a une méthode pour faire passer le temps : à chaque nouveau tour, on fait toutes les actions (ce qui n’est pas très passionnant pour l’instant puisqu’il n’y en a aucune) et on affiche sur la console :

    Le nombre d’algues présentes
    La liste des poissons avec leur nom et leur sexe.
    Exercice 1.2 : un peu de diversité
    En fait, des poissons tous identiques, c’est pas très passionnant. Dans le magasin où se fournit monsieur Shingshan, on trouve des poissons carnivores et d’autres herbivores. Il y a six races de poissons : Poissons carnivores : Mérou, Thon, Poisson-clown. Poissons herbivores : Sole, Bar, Carpe. Chaque poisson peut donc manger (une méthode) : selon s’il est carnivore, il mange une algue (paramètre : une algue), ou un autre poisson (paramètre : un poisson quel qu’il soit).

    Partie 2 : Mange, tu ne sais pas qui te mangera
    Exercice 2.1 : Miam miam miam !
    Nos poissons sont des goinfres : à chaque tour, tous les poissons mangent, et ils mangent tout ce qu’ils ont commencé. En clair, ça veut dire que ce qui et mangé disparaît purement et simplement. Attention : un poisson ne peut pas se manger lui-même, et un poisson mangé ne peut rien faire. L’algue ou le poisson mangé est choisi au hasard.

    Astuce : Tirer un nombre aléatoire en VBA - Excel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function RandomIntegerBetween(ByVal Lft As Integer, ByVal Rgt As Integer) As Integer
        RandomIntegerBetween = CInt(Application.WorksheetFunction.RandBetween(Lft, Rgt))
    End Function
    Exercice 2.2 : un peu de douceur dans ce monde de brutes
    Tout ça est beaucoup trop brutal, introduisons la notion de points de vie (PV).

    Les poissons et les algues sont des êtres vivants. Tous les êtres vivants commencent avec 10 PV. Un être vivant qui arrive à 0 PV meurt.

    Chaque algue grandit à chaque tour : elle gagne 1 PV. Une algue mangée par un poisson perds 2 PV.

    A chaque tour qui passe, le poisson a de plus en plus faim : il perds 1 PV. Un poisson qui a suffisamment faim (5 PV ou moins) cherche à manger. Les herbivores n’ont pas trop de problème, mais les algues ne sont pas très nourrissantes : +3 PV. Les carnivores mangent de la bonne viande de poisson, qui fait gagner +5 PV. Un carnivore attaque chaque tour un poisson au hasard : il n’a qu’une seule chance. Hélas pour lui, il ne peut ni se manger lui-même, ni manger un poisson de son espèce. Se faire mordre fait très mal et fait perdre 4 PV.

    Partie 3 : Reproductions
    Exercice 3.1 : Le désastre du vieillissement
    Tous les êtres vivants naissent à l’âge de 0 tours. Les êtres vivants qui ont plus de 20 tours meurent de vieillesse.

    On peut acheter des poissons et des algues à un âge quelconque.

    Exercice 3.2 : Le miracle de la jeunesse
    Notre aquarium précédent est condamné à être désert au bout de 20 tours, ou alors il faut remettre sans arrêt des algues et des poissons. Pas très intéressant, non ? Nous avons des poissons mâles et femelles ? Faisons-les se reproduire !

    Un poisson qui n’a pas faim va aller voir un autre poisson (au hasard). Si ce poisson est de même race et de sexe opposé, les deux poissons se reproduisent et donnent naissance à un troisième poisson, de même race et de sexe aléatoire. Il n’a qu’un seul essai par tour.

    Concernant les algues, c’est plus simple : Une algue qui a 10 PV ou plus se sépare en deux pour donner naissance à une algue deux fois plus petite, donc avec deux fois moins de PV. Évidemment l’algue parente perds la moitié de ses PV dans le processus, mais garde son âge.

    Exercice 3.3 : Mais… la sexualité des poissons est horriblement compliquée !
    Eh bien oui, la sexualité des poisson est horriblement compliquée. Pourquoi ? Parce qu’ils ne sont pas simplement "mâle" ou "femelle" ! On distingue : Le poisson mono-sexué : Comme vous et moi, ces poissons naissent mâle ou femelle et n’en changent plus. Le poisson hermaphrodite avec l’âge : Ce poisson passe les 10 premiers tours de sa vie en tant que mâle et les 10 suivants en tant que femelle. Le poisson hermaphrodite opportuniste : Ce poisson va rencontrer un membre de son espèce. Si ce membre est de même sexe que lui, notre poisson change de sexe pour pouvoir se reproduire.

    Je rappelle que nous avons déjà des races herbivores et carnivores, ce qui nous donne le tableau suivant1 : 1: Pour ceux que ça intéresse, cette histoire de poisson hermaphrodites est parfaitement exacte… par contre je ne garantis pas le classement des races dans le tableau.
    Poisson Herbivore Carnivore
    Mono-sexué Carpe Thon
    Hermaphrodite avec l’âge Bar Mérou
    Hermaphrodite opportuniste Sole Poisson-clown
    Partie 4 : Rendons notre simulateur d’aquarium pratique
    Exercice 4.1 : Sauvez Willy !
    Monsieur Shingshan voudrait pouvoir sauvegarder l’état actuel de la simulation (par exemple au tour 35) dans un fichier (par exemple un .poisson) pour pouvoir la reprendre plus tard.

    Exercice 4.2 : Un fichier pour les enregistrer tous…
    Monsieur Shingshan voudrait que les rapport de ce qui s’est passé dans le tour s’enregistrent dans un fichier en plus d’être affichés sur la console.

    Exercice 4.3 : … et dans un fichier les charger
    Monsieur Shingshan est aquariophile mais pas programmeur, et n’a pas envie de re-compiler le programme à chaque fois qu’il veut changer les poissons et les algues introduits au début. De toutes façons, il ne sait pas ce qu’est "recompiler". Il veut bien lancer le programme en ligne de commande, mais il veut pouvoir écrire les poissons et les algues dans un fichier texte dont il passerait le nom au programme. Il fournit un exemple de fichier (les lignes qui commencent par // sont des commentaires et n’apparaitrons jamais dans le fichier).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 1- Algues
    // Format : [Nombre d'algues] algues [âge] ans (= tours)
    // Exemple :
    1 algues 10 ans
    10 algues 4 ans
     
    // 2- Poissons
    // Format : [nom], [race], [âge] ans (= tours)
    // Exemple :
    Lin, Morue, 10 ans
    Anaclet, Poisson-clown, 1 ans
    Évariste, Thon, 3 ans
    Exercice 4.4 : Tourne, la roue tourne…
    Monsieur Shingshan voudrait pouvoir ajouter des poissons et des algues à n’importe quel tour. Le tour d’insertion serait indiqué par des séparateurs comme celui-ci :

    Tout ce qu’il y a après (et avant le séparateur suivant) suit le format de l’exercice 4.1.

    Attention, cette question n’est pas si simple qu’elle en a l’air…

    Exercice 4.5 : Le petit neveu
    Monsieur Shingshan voudrait donner le simulateur à son petit-neveu, Ashini. Sauf que celui-ci, bien qu’aquariophile, n’est pas précautionneux : il ne faudrait pas qu’il puisse planter son PC avec le logiciel.

    Si vous avez programmé nickel, vous avez déjà réalisé cet exercice.

    Voilà, amusez-vous bien !

  2. #2
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 214
    Par défaut
    se code en peu de lignes.
    Heum... tu me permet de douter ?

    Mais bon, "peu" étant une valeur dite "pifométrique" peux tu nous préciser ce que vaut ce "peu" pour toi ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 513
    Par défaut
    Citation Envoyé par Nain porte koi Voir le message
    Heum... tu me permet de douter ?

    Mais bon, "peu" étant une valeur dite "pifométrique" peux tu nous préciser ce que vaut ce "peu" pour toi ?
    J'estime ma version entre 4000 et 5000 lignes, une fois que ce sera terminé (et je met beaucoup de garde-fous).
    Fesable en plus ou moins une semaine (analyse + conception + mise en oeuvre comprises).

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 513
    Par défaut
    Je posterai ma solution le mois prochain.

  5. #5
    Membre éclairé
    Homme Profil pro
    curieux
    Inscrit en
    Février 2025
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2025
    Messages : 39
    Par défaut
    Bonjour à tous,

    Exercice intéressant, si j'ai le temps je m'y pencherai aussi. J'aime bien l'approche très complexe sur la reproduction des poissons tout en faisant un aquarium contenant des carpes et des thons

    Juste une petite question en lisant la consigne. Lors de la phase de reproduction (si les conditions sont satisfaites), il est écrit que "Un poisson qui n’a pas faim va aller voir un autre poisson". Mais alors on arrive sur un problème non explicité : doit-on "tagger" les poissons "trouvés" (& reproductibles) pour qu'ils n'aillent pas eux-memes chercher d'autres compagnons ? Sinon on risque de faire des doubles reproductions sur le meme tour. De plus, l'autre poisson, si compatible, doit-il satisfaire lui aussi les critères de reproductibilité sur ses PVs ?

    Enfin, cette phase prend-elle place dans l'ordre de présentation du problème, ie. après le carnage de la partie 2, ou avant ? Ca risque d'avoir une grande influence sur l'évolution de l'aquarium.

    Si on fait des hypothèses (j'imagine qu'il y aura d'autres "problèmes") doit-on les présenter dans notre solution ?

    Dommage que l'héritage/abstraction soient limités en VBA… On voit que le problème à été pensé/posé pour de l'OOP.

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour à tous
    Merci de préciser la version Excel exigée
    J'ai lu quelque part que pour ce genre de programme et pour insérer des images animées il faut avoir au moins la version Excel 2016
    Merci Messieurs de clarifier ce point
    je continue à suivre cette intéressante discussion

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 513
    Par défaut
    Citation Envoyé par sabot'age Voir le message
    Lors de la phase de reproduction (si les conditions sont satisfaites), il est écrit que "Un poisson qui n’a pas faim va aller voir un autre poisson". Mais alors on arrive sur un problème non explicité : doit-on "tagger" les poissons "trouvés" (& reproductibles) pour qu'ils n'aillent pas eux-memes chercher d'autres compagnons ? Sinon on risque de faire des doubles reproductions sur le meme tour. De plus, l'autre poisson, si compatible, doit-il satisfaire lui aussi les critères de reproductibilité sur ses PVs ?
    Seul les règles de gestion mentionnées doivent être appliquées.
    Toute autre est hors sujet (il n'y a rien de plus a inventer que l'énoncée du sujet).
    Citation Envoyé par sabot'age Voir le message
    Enfin, cette phase prend-elle place dans l'ordre de présentation du problème, ie. après le carnage de la partie 2, ou avant ? Ca risque d'avoir une grande influence sur l'évolution de l'aquarium.
    Ce qui est important est les solutions mises en place pour exécuter les règles de gestions sur qui de droit.
    L'ordre de ces dernères n'a pas d'importance (ni la production d'un résultat réaliste).
    Citation Envoyé par sabot'age Voir le message
    Si on fait des hypothèses (j'imagine qu'il y aura d'autres "problèmes") doit-on les présenter dans notre solution ?
    Le mieux et encore de poser des question afin de lever les ambiguités.
    Citation Envoyé par sabot'age Voir le message
    Dommage que l'héritage/abstraction soient limités en VBA… On voit que le problème à été pensé/posé pour de l'OOP.
    Tu risques d'être surpris par les capacités objet de VBA.

Discussions similaires

  1. [Petite requête] Nombre de transactions par jour
    Par Braim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 10h53
  2. Réponses: 3
    Dernier message: 28/02/2003, 17h06
  3. Réponses: 3
    Dernier message: 16/12/2002, 16h12
  4. [TP]TP s'affiche en tout petit sous w2000
    Par spiroucarolo dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 21/10/2002, 16h36
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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