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

Mathématiques Discussion :

Compréhension de cet algorithme mathématique


Sujet :

Mathématiques

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Compréhension de cet algorithme mathématique
    Bonjour,

    Je serai curieux d'avoir une explication concernant l'algorithme mathématique (formule) ci dessous que j'ai trouvé sur internet à plusieurs endroits différents:
    avec Random1 et Random2 des constantes:

    Loop Until Random1 + Random2 = (Int(Random1 / 2) + Int(Random2 / 2)) * 2

    Pour moi cet algorithme, quelque soit le programme revient à écrire:

    Pour tout x ou y donné,
    la condition est vérifiée lorsque
    x+y = x+y
    la condition est immédiatement réalisée avant même la réalisation de la boucle.

    Merci d'avance ) à toute personne qui pourra m'éclairer au sujet de cette formule.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    avec Random1 et Random2 des constantes
    Si ce sont des constantes, on va avoir du mal à sortir de la boucle.

    la condition est immédiatement réalisée avant même la réalisation de la boucle.
    Non.

    Combien fait 7 divisé par 2 ?
    Sans doute as-tu répondu 3,5 ?
    Pourtant, ce n'est pas ce qu'on t'a appris à l'école primaire.
    En ce temps là, on t'a dit "7 divisé par 2 égale 3 reste 1".

    On distingue donc 2 divisions :
    • La division entière (car sur l'ensemble des nombres entiers) ou division euclidienne. Celle de l'école primaire.
    • La division réelle (car sur l'ensemble des nombres réels... pas parce qu'elle serait plus véridique ou plus utilisée)


    Dans ton message, j'imagine que l'oblique "/" code pour la division réelle.
    Et on refabrique une division entière en utilisant la fonction partie entière. Ici, int( ).
    Si x/2==int(x/2), alors la division tombe pile. x est un multiple de 2. On aurait pu dire "si x%2=0".
    Dans ton cas, c'est le même principe mais avec 2 variables.

    C'est d'ailleurs un bon détail pour évaluer le sérieux d'un langage de programmation.
    3 types:
    • Les langages clairs qui ont un opérateur pour chaque opération ( "/" pour la division réelle, "div" pour la division entière, "mod" pour le reste ou modulo, pas besoin de fonction partie entière).
    • Les langages bons car typés et implicites, qui appliquent la division réelle sur les variables réelles et la division entière sur les entiers.
      Dans ces cas là, on multiplie par 1,0 avant de diviser, si on veut une division réelle sur un entier.
    • Les mauvais langages, dont le concepteur n'a même pas vu qu'il y avait une question.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour la réponse rapide et précise. Les explications sur les types de divisions et la fonction int.

    L'extrait complet du code d'où a été extrait cette formule en Visual Basic:

    'First try to search alternate squares
    For n = 1 To 100
    Do
    Random1 = Int(Rnd() * 10) 'numbers between 0 and 9 >> prend un nombre au hasard entre 0 et 10 multiplié par 10 puis arrondi à l'entier le plus proche par la fonction Int
    Random2 = Int(Rnd() * 10) 'numbers between 0 and 9 >> prend un nombre au hasard entre 0 et 10 multiplié par 10 puis arrondi à l'entier le plus proche par la fonction Int

    >>> Loop Until Random1 + Random2 = (Int(Random1 / 2) + Int(Random2 / 2)) * 2 <<<< J'ai bien noté ici les explications sur la distinction entre types de division. Cependant, je ne vois pas l'utilité de cette boucle.
    En effet, Random 1 et Random 2 sont d'abord ramenés à des entiers.
    Puis dans l'autre membre (Int(Random1 / 2) + Int(Random2 / 2)) * 2, les deux divisions /2 sont également ramenées à des entiers.

    Algébriquement les deux membres sont égaux.

    TempRange = Range("Player1Corner").Offset(Random1, Random2).Address
    If IsEmpty(Range(TempRange).Value) Then
    ComputerPosition = TempRange

    Merci d'avance pour tout complément d'information.

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Parce que tu as loupé la disparition du reste !

    Fais un cas pratique pour t'en convaincre.

    • Cas 1 : 6 et 8
      6+8=14
      int(6/2)=3
      int(8/2)=4
      int(6/2)+int(8/2)=4+3=7
      7*2=14
      14=14
      Effectivement, lapalissade. On aurait mieux fait de rester couché.
    • Cas 2 : 7 et 9
      7+9=16
      int(7/2)=3
      int(9/2)=4
      int(7/2)+int(9/2)=3+4=7
      7*2=14
      14 n'est pas égal à 16 !
      On recommence le procédé.


    Il suffirait de choisir des nombres directement pairs.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    il existe dans certain langage une fonction pour savoir si le nombre est paire ou impaire par exemple la fonction ODD en pascal

    dans ton cas cette fonction vérifie que la somme des deux randon est paire en étant certain que les deux randon initiaux soit eux aussi paire
    en utilisant une astuce

    ((Paire /2) + (impaire/2)) *2 = Faux
    ((impaire/2) + (impaire/2)) *2 = Faux
    ((impaire/2) + (Paire/2)) *2 = Faux
    ((Paire/2) + (Paire/2)) *2 = vrai

    en lisant le code fournit on vois que les commentaire sont clairement trompeur

    Random1 = Int(Rnd() * 10)
    'numbers between 0 and 9 >> prend un nombre au hasard entre 0 et 10 multiplié par 10 puis arrondi à l'entier le plus proche par la fonction Int
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    Merci pour les deux réponses rapides et très instructives.

    En effet, en posant les cas concrets j'ai compris à quoi servait cet algo...à générer des nombres pairs.

    Tout en précisant que je suis novice en informatique, j'aurais deux remarques concernant l'algo 1 mentionné dans la réponse de Flodelarab.

    Ce code est en Visual BASIC extrait d'une Macro destinée à fonctionner sur Excel.

    Deux remarques/questions à propos de cet "algorithme"

    - Pourquoi ne pas utiliser directement des ENTIERS plutôt que d'alourdir la formule en testant successivement 100 fois et en calculant sur des REELS qui sont ensuite arrondis ou tronqués successivement pour ensuite déterminer s'ils sont PAIRS ou IMPAIRS en testant l'égalité de la formule ? impliquant de nombreuses opérations, qui, pour un profane, semblent superflues...

    - Deuxièmement, initialement conçu pour un tableur où les cellules sont donc repérées par leurs coordonnées (Ligne, colonne)...comme sur un damier, ou une matrice carrée (1,0,1,0) les cases paires ou impaires sont déjà répérées et connues d'avance par le tableur à l'ouverture de celui-ci. D'où mon interrogation qui persiste sur l'utilisation d'une telle "formule" pour tester les cas pairs ou impairs. (pair - pair) (impair - pair) (pair - impair) (impair - impair)...

    - Dernière remarque, sur l'utilisation du Modulo mentionné par Flodelarab:
    Mettons hypothétiquement qu'une formule génère directement les nombres pairs...pas besoin ici de tester le reste puisqu'il est connu = 0.

    Je ne sais pas si je suis trop clair, mais cet algorithme initialement écrit dans un langage ancien, supposé "basique" dans un temps où les capacités mémorielles n'étaient pas ce qu'elles sont aujourd'hui...semble ridiculement lourd pour générer une suite de nombres pairs entre 1 à 100.....mais je l'ai dis, je suis novice.

    Dernière précision car je mentionne un damier...ce bout de code permet justement de placer aléatoirement des pions sur un damier...encore une fois quid de l'utilisation d'une formule impliquant des nombres réels pour remplir un damier dont aucune coordonnée n'est un nombre réel. A moins que la difficulté réside dans la génération aléatoire de la position de ces pions...

    D'avance merci pour tout éclairage à ce sujet.

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Pourquoi ne pas utiliser directement des ENTIERS ?
    C'était ma conclusion.
    Ce n'est pas habile de boucler.
    Normalement, on choisit un entier k, on le multiplie par 2, et c'est fini.

    Deuxièmement, initialement conçu pour un tableur où les cellules sont donc repérées par leurs coordonnées (Ligne, colonne)...comme sur un damier,
    Ahhhh, mais ça, ce n'est pas du tout pareil.
    Ce n'est pas un problème de parité brute mais un problème de parités qui "se compensent".
    (1,1) est blanc car 1+1 pair.
    (1,2) est noir car 1+2=3 impair.
    (2,1) noir pour la même raison.
    (2,2) est blanc.
    Il faut donc que la somme des coordonnées de la case soit paire pour que la case soit blanche. Et impaire pour noire.
    Même sans connaître la case (135,22), tu sais qu'elle est noire car 157 est impair.


    Mettons hypothétiquement qu'une formule génère directement les nombres pairs...pas besoin ici de tester le reste puisqu'il est connu = 0.
    Même dans le cas du damier, faire une boucle est stupide.
    On choisit "x" de 1 à 8 pour un échiquier, et on tire une demi-ordonnée k entre 1 et 4.
    Et en fonction de la parité de x, le y se calcule par 2*k ou 2*k+1.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    Salut

    ce n'est pas aussi simple pour les case noire et blanche
    nous savons que pour la premier ligne par exemple tout les nombre paire serons noir
    par contre la seconde ce seras tout les nombre impaire et ainsi de suite

    voici une grille numérote

    1 2 3 4 5 6 7 8
    9 10 11 12 13 14 15 16
    17 18 19 20 21 22 23 24
    25 26 27 28 29 30 31 32
    33 34 35 36 37 38 39 40
    41 42 43 44 45 46 47 48
    49 50 51 52 53 54 55 56
    57 58 59 60 61 62 63 64

    tu remarque que les nombre des case rouge ne sont pas tous impaire ou paire selon le cas
    je peut faire de meme avec les coordonnée

    1:1 1:2 1:3 1:4 1:5 1:6 1:7 1:8
    2:1 2:2 2:3 2:4 2:5 2:6 2:7 2:8
    3:1 3:2 3:3 3:4 3:5 3:6 3:7 3:8
    4:1 4:2 4:3 4:4 4:5 4:6 4:7 4:8
    5:1 5:2 5:3 5:4 5:5 5:6 5:7 5:8
    6:1 6:2 6:3 6:4 6:5 6:6 6:7 6:8
    7:1 7:2 7:3 7:4 7:5 7:6 7:7 7:8
    8:1 8:2 8:3 8:4 8:5 8:6 8:7 8:8

    alors que son algo ne verifie que les (2,2);(4,4);(6,6);(8,8)
    honnêtement je ne vois aucune utilité pour la construction de la grille
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    voici une grille numérote
    Personne n'a évoqué de cette numérotation.

    tu remarque que les nombre des case rouge ne sont pas tous impaire ou paire selon le cas
    Quelle conclusion faut-il en tirer ?

    je peut faire de meme avec les coordonnée
    Tu as inversé abscisse et ordonnée.

    les nombre des case rouge ne sont pas tous impaire ou paire selon le cas
    Dans la deuxième grille, toutes les cases rouges ont pour coordonnées ( 2*k-1+abscisse%2 ; abscisse )
    Et seulement les cases rouges.
    On a donc bien caractérisé un damier.

    Je ne comprends pas où tu nous emmènes.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  10. #10
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    sauf que dans ton cas k est entre 1..4 et non 1..10
    et que cette formulation "2*k-1+abscisse%2 " n'a rien avoir avec celle d'origine "Random1 + Random2 = (Int(Random1 / 2) + Int(Random2 / 2)) * 2 "

    j'ai bien compris ta technique de recherche de case noir ou blanche et je suis d'accord elle fonctionne correctement

    voici l'explication numérique sur un damier de 8*8

    ( 2*1-1+1%2 ; 1 ) = ( 2 ; 1 )
    ( 2*2-1+1%2 ; 1 ) = ( 4; 1 )
    ( 2*3-1+1%2 ; 1 ) = ( 6; 1 )
    ( 2*4-1+1%2 ; 1 ) = ( 8; 1 )

    ( 2*1-1+2%2 ; 2 ) = ( 1 ;2 )
    ( 2*2-1+2%2 ; 2 ) = ( 3; 2 )
    ( 2*3-1+2%2 ; 2 ) = ( 5; 2 )
    ( 2*4-1+2%2 ; 2 ) = ( 7; 2 )
    ...
    ( 2*1-1+8%2 ; 8 ) = ( 2 ;8 )
    ( 2*2-1+8%2 ; 8 ) = ( 4; 8 )
    ( 2*3-1+8%2 ; 8 ) = ( 6; 8 )
    ( 2*4-1+8%2 ; 8 ) = ( 8; 8 )
    ma numerotation n'utilise pas de division ni de reste mais permet dans le même esprit la numérotation de case
    nb := =(x-1)*lgtableau+(y)
    et pour en revenir a ce que je disais c'est que je ne comprend pas l'utilité de son algo
    sauf a distribuer
    (2;2),(4;4),(6;6),(8;8),(10;10)
    il nous manque des elements pour comprendre ce que veut faire ce programme
    je vois qu'il est dans une boucle de 100 je suppose donc un tableau de 10*10

    comme c'est du random on peut supposer qu'il valorise des cellules de façon aléatoire
    tels que les cellule ne peuvent avoir que 6 valeurs possible soit 0,4,8,12,16,20 soit tout simplement des multiple de 4 sauf pour zéro biensur qui est la valeur par défaut

    pour que l'on puisse lui répondre correctement il faut qu'il nous en disent plus sur la fonctionnalité finale du programme

    mes deux cents
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tomdast87 Voir le message
    encore une fois quid de l'utilisation d'une formule impliquant des nombres réels pour remplir un damier dont aucune coordonnée n'est un nombre réel. A moins que la difficulté réside dans la génération aléatoire de la position de ces pions...

    D'avance merci pour tout éclairage à ce sujet.
    Peut-être parce que la fonction Rand donnait SEULEMENT un résultat en réel ??



    D'autre part le langage peut être ancien et "basique" (pas plus que les autres d'ailleurs), mais les "voies du cerveau sont impénétrables", et il est tout à fait possible - même avec des langages tout à fait modernes - de faire compliqué alors qu'on pourrait faire simple....

    C'est même la chose la plus répandue en informatique...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    c'est exact rand() renvois un réel entre 0 et 1 d'ou la multiplication par 10 et la troncature des décimal

    j'ai bien peur que la devise pourquoi faire simple quand on peut faire s'applique encore une fois à ce cas là
    a moins qu'il ne cherche a construire une carte de façon aléatoire avec des obstacle/gain déterminé par une certaine valeur

    c'est pour cela que je demande plus d'infos sur le programme
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci aux contributeurs pour leurs réponses intéressantes.

    Je n'ai pas fait figurer le programme complet ni la source car la formule qui m'a interpellé était celle mentionnée dans le message 1. J'essayais de comprendre, en décryptant car je m'intéresse au Basic.

    Il s'agit d'un programme en VB de bataille navale. Trouvable sur internet un peu partout qui s'appelle Battleships.

    l'extrait de cette formule vient de ce module (macro dans excel)
    ou il attribue des positions au hasard d'où l'utilisation de Random.

    Voici le module complet:
    Cela ne modifie pas la question initiale puisque ce jeu de bataille navale contient deux damiers liés entre eux.

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub ChooseRandomPosition()
    'First try to search alternate squares
        For n = 1 To 100
            Do
                Random1 = Int(Rnd() * 10) 'numbers between 0 and 9
                Random2 = Int(Rnd() * 10) 'numbers between 0 and 9
            Loop Until Random1 + Random2 = (Int(Random1 / 2) + Int(Random2 / 2)) * 2
            TempRange = Range("Player1Corner").Offset(Random1, Random2).Address
            If IsEmpty(Range(TempRange).Value) Then
                ComputerPosition = TempRange
                Exit Sub
            End If
        Next n
     
        Do
            Random1 = Int(Rnd() * 10) 'numbers between 0 and 9
            Random2 = Int(Rnd() * 10) 'numbers between 0 and 9
            TempRange = Range("Player1Corner").Offset(Random1, Random2).Address
        Loop Until IsEmpty(Range(TempRange).Value)
        ComputerPosition = TempRange
    End Sub

  14. #14
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    bingo !
    nous étions tous très loin du compte quoique

    bon je connais très mal le vba sous excel et il y a des fonction obscur que je ne comprend pas

    par exemple
    Range("Player1Corner").Offset(Random1, Random2).Address
    perso pour définir une position aléatoire je n'aurais cherché qu'un indice
    nous avons un grille de 10x10 donc il nous faut un nombre ente 1..100 pour ce faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       Pour tout les vaisseau à mettre en place 
          Place = Faux
          TansQue placa = Faux Faire  
            Random1 = Int(Rnd() * 99)+1
            CoordX = QUOTIENT(Random1;10)
            CoordY = MOD(Random1-1;10)+1
            On Verifie Que les places alentour sont disponibles pour le type de vaisseau que l'on veut placer
             si oui alors 
                 Place = vrai
         Fin TansQue
      Fin Pour
    mais bon je suis pas développeur de ce jeu et je ne maîtrise pas assez excel pour comprendre exactement la logique de ce bout de code
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  15. #15
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Compréhension de cet algorithme mathématique
    Bonjour,

    Introduire à partir des réels (x, y) les valeurs entières i = Int(x / 2) et j = Int(y / 2) revient à poser implicitement:

    (x/2) = i + u ; (y/2) = j + v avec (0 <= u < 1) et (0 <= v < 1) .

    L'égalité (x + y) = 2*(Int(x/2) + Int(y/2))
    devient dans ces conditions: 2*(i + u) + 2*(j + v) = 2*(i + j)
    soit finalement: u + v = 0 .

    Cette dernière équation, qui implique deux réels non-négatifs, n'admet qu'une solution unique:
    (u = 0 , v = 0) .

    L'égalité initiale concernant les réels (x, y) n'est donc vérifiée que dans le cas particulier des valeurs entières paires:
    (x = 2*i , y = 2*j) .

    Cela soulève évidemment, au niveau du programme, la probabilité de sortie d'une valeur entière à partir de l'appel d'un générateur de nombres pseudo-aléatoires.
    Les positions ainsi choisies se situeront à vue d'oeil aux noeuds d'une grille de pas égal à 2.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

Discussions similaires

  1. À quoi sert l'astérisque dans cet algorithme ?
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/05/2009, 18h17
  2. Réponses: 61
    Dernier message: 01/08/2008, 22h56
  3. Compréhension d'un algorithme sur le problème du sac à dos
    Par Treuze dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 18/12/2006, 15h26
  4. Que fait produit cet algorithme ?
    Par jeje00 dans le forum Algorithmes et structures de données
    Réponses: 28
    Dernier message: 03/04/2006, 17h41

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