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 :

Petite programmation VB


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    mimi2810
    Invité(e)
    Par défaut Petite programmation VB
    Bonjour,

    Je bloque sur une syntaxe de programmation en VB excel de l'énoncé suivant :
    "Une puce se déplace sur un axe gradué : à chaque saut, elle se déplace d'une unité de manière aléatoire et équiprobable vers la droite ou vers la gauche. Elle part de l'origine et effectue une marche de 30 sauts. Etudiez les paramètres de la série statistique constituée par les différentes positions d'arrivée de la puce lors de 100 marches"

    Dans un premier temps j'avais fait la programmation suivante :
    Variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p= position
    n=nombremarche
    Traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For n=1 to 100
    p=int(Rnd*(n*-30)) and p=int(Rnd*(n*30))
    If p>0
    p=int(Rnd*(n*30)) 
    Else p=int(Rnd*(n*-30))
    End if
    Cells(n,1)=p
    Next
    Cependant, les réponses ne me conviennent pas et je ne pense pas avoir répondu au problème.

    J'aurais besoin de votre aide..... Merci d'avance.
    Dernière modification par Didier Gonard ; 30/10/2010 à 15h33. Motif: Ajout des balises codes : Sélection du code + # dans la barre d'outils de la fenêtre de rédaction des messages

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    c'est ton raisonnement lui-même qui ne va pas.
    elle se déplace d'une unité de manière aléatoire et équiprobable vers la droite ou vers la gauche
    signifie qu'elle peut aller soit vers la droite, soit vers la gauche, et ce en faisant des sauts de même importance.
    Il te faut donc calculer aléatoirement si elle va à gauche ou si elle va à droite
    A chaque saut : tu dois donc ajouter (si vers la droite) ou enlever (si vers la gauche) un nombre d'unités égal à la valeur equiprobable du saut. Ce rajout positif ou négatif est à faire sur la dernière position résultant des sauts précédents.
    Je te propose cet exemple qui devrait te parler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim n As Integer, saut As Integer, p As Integer, pos as integer
      saut = 25 ' on fixe ici une valeur du saut "équiprobable"
      pos = 0
      For n = 1 To 30  ' 30 sauts
        p = Int((2 * Rnd) + 1) ' tirage sur 2 possibilités (pour droite ou gauche)
        If p = 2 Then p = -1 ' si 2 ===>> ont dit que vers auche ===>> négatif
        ' et puisque p sera selon le cas 1 ou - 1
        pos = pos + (p * saut)
       MsgBox pos
      next

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Bonjour,

    Pour répondre complètement à la question il faut mettre la valeur des sauts à 1.

    Enfin la question concerne :les paramètres de la série statistique constituée par les différentes positions d'arrivée de la puce lors de 100 marches, il reste une étude statistique à faire.

    PPz

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    J'abonde dans le sens de PPz78. Il faut calculer une série de 100 marches, chaque marche étant constituée de 30 sauts. Ensuite il faut étudier ces 100 résultats. Par exemple faire un test de normalité et, s'il est positif, calculer la moyenne et l'écart-type.

    Cordialement,

    PGZ

  5. #5
    mimi2810
    Invité(e)
    Par défaut
    Ben... désolée.... je débute en VB, et je ne comprends pas vos explications... n'y aurait-il pas une manière plus simple d'aborder le problème ?
    Merci encore

    Quel est la fonction qui permet à une variable de n'avoir que des nombres pairs?
    Dernière modification par AlainTech ; 31/10/2010 à 22h42. Motif: Fusion de 2 messages

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Re,

    Citation Envoyé par mimi2810 Voir le message
    Quel est la fonction qui permet à une variable de n'avoir que des nombres pairs?
    La multiplication par 2 d'un entier.

    Pour revenir à ton pb, on peut supposer que la répartition des positions en fin de marches est normale. Et centrée car il n'y a pas de raison que la puce saute plus à gauche qu'à droite.

    Voici un code qui à chaque exécution calcule 100 marches, fait ensuite la moyenne des résultats et calcule une estimation de l'écart type. Le compte rendu est fait en feuille 1.
    Code : 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
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Sub subMonExo()
    Const NbMarches As Integer = 100
    Const NbSauts As Integer = 30
    Const ValSaut As Single = 1
    Dim sglMoy As Single
    Dim sglET As Single
     
    'Créer la série de résultats en colonne D de la feuille 1
    Call subCreeSeriePuce(NbMarches, NbSauts, ValSaut)
     
    'On suppose que la série est répartie suivant une loi normale sinon, il faudrait tester
     
    'calcul de sla moyenne et écrat type de l'échantillon
    Call subCalculMoyEtET(NbMarches, sglMoy, sglET)
     
    'afficher les résultats
    With ThisWorkbook.Worksheets(1)
        .Range("A1") = "Nb Marches"
        .Range("B1") = NbMarches
        .Range("A2") = "Nb sauts"
        .Range("B2") = NbSauts
        .Range("A3") = "Hypothèse"
        .Range("B3") = "répartition normale centrée"
        .Range("A4") = "Moy échantillon"
        .Range("B4") = sglMoy
        .Range("A5") = "estimation ET"
        .Range("B5") = sglET
    End With
     
    End Sub
     
    Function fctPuceMarche(ByVal NbSauts As Integer, ByVal ValSaut As Single) As Single
    Dim i As Integer, s As Single
     
    fctPuceMarche = 0
    For i = 1 To NbSauts
        s = 2 * Rnd - 1
        fctPuceMarche = fctPuceMarche + Sgn(s) * ValSaut
    Next i
     
    End Function
     
     
    Sub subCreeSeriePuce(ByVal NbMarches As Integer, ByVal NbSauts As Integer, ByVal ValSaut As Single)
    Dim i As Integer
    Dim SglTabSerie(1 To 100, 1 To 1) As Single
     
    For i = 1 To NbMarches
        SglTabSerie(i, 1) = fctPuceMarche(NbSauts, ValSaut)
    Next i
     
    ThisWorkbook.Worksheets(1).Range("D1:D100").Value = SglTabSerie
     
    Erase SglTabSerie
     
    End Sub
     
    Sub subCalculMoyEtET(ByVal NbMarches As Integer, ByRef sglMoy As Single, ByRef sglET As Single)
    'Calcul de la moyenne de l'échantillon
    'calcul de l'écart type ( on suppose alors que la répartition est normale et que la valeur moyenne théorique est = 0, pour des raisons de symétrie)
    Dim vTab As Variant
    Dim i As Integer
     
    vTab = ThisWorkbook.Worksheets(1).Range("D1:D100").Value
     
    For i = 1 To NbMarches
        sglMoy = sglMoy + vTab(i, 1)
        sglET = sglET + (vTab(i, 1) - 0) ^ 2
    Next i
    sglMoy = sglMoy / NbMarches
    sglET = (sglET / NbMarches) ^ 0.5
     
    vTab = Null
     
    End Sub
    La procédure à exécuter est subMonExo.

    Cordialement,

    PGZ

Discussions similaires

  1. petit programme
    Par vmitz73 dans le forum C++
    Réponses: 4
    Dernier message: 07/12/2005, 11h05
  2. [LG] Recherche de petits programmes Pascal
    Par Sid ali dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 14h03
  3. aide petit programme pour débutant
    Par kartp0rqx dans le forum C
    Réponses: 16
    Dernier message: 14/10/2005, 19h31
  4. Faisabilité d'un petit programme FTP...
    Par ptit_seb dans le forum Windows
    Réponses: 2
    Dernier message: 15/09/2005, 21h10
  5. [SRC] Petit programme avec BD
    Par Nico62 dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/01/2005, 20h07

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