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

  1. #1
    Nouveau Candidat au Club
    Une boucle While qui n'est pas exécutée
    Bonsoir/Bonjour ,
    J'essaye de faire un programme qui va me calculer la position et la vitesse d'un objet ( Mécanique) en m'affichant les différentes position de l’objet ( x et y) dans un fichier. Bon ça c'est pas très important. Le problème c'est que ma boucle while dans main (void) n'est jamais exécuté et je ne sais pas pourquoi.
    Merci d'avance si quelqu'un arrive à trouver le problème, voilà mon code :

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
     
    #define g 9.81
    #define mu 1.12
    #define GM 2250.
     
     
    void nouvelle_position(double *xn, double *yn, double x,double y, double vx, double vy, double dt) 
    {
      *xn = x + vx*dt;
      *yn = y + vy*dt;
    }
     
    void acceleration_pesanteur( double *ax , double *ay)
     
    { 
     
       *ax= 0;
       *ay= -g;
     
    }          
     
     
    void nouvelle_vitesse(  double *vxn, double *vyn, double ax, double ay, double vx,double vy, double dt) 
    {
      *vxn = vx + ax*dt;
      *vyn = vy + ay*dt;
    }
     
     
     
    int main (void) 
    {
      double alpha;
      double x,y,x0,v0,vx,vy,t,dt,ax,ay;
      double x_new,y_new,vx_new,vy_new,axr,ayr; 
      char nom_fichier[100]="trajectoire.txt";
      FILE *fichier;
     
      /* Initialisation */
      x0 = -10.;
      x=x0;
      t= 0.;
      dt = 0.05;
      v0 = 15.;
     
     
      printf("angle alpha (en degres) ?\n");
      scanf("%lf",&alpha);
     
     
      alpha = alpha*M_PI/180.;
      vx = v0 * cos(alpha);
      vy = v0 * sin(alpha);
     
      printf("ordonnée y ? ");
      scanf("%lf",&y);
     
     
     
     fichier=fopen(nom_fichier,"w"); 
     
     if (fichier == NULL)
        {
        printf("Impossible d'ouvrir %s en mode écriture\n",nom_fichier);
        exit(1);
        }
     
        fprintf(fichier," %lf  %lf\n",x,y);
     
     
     
     while ( y_new > 0) 
      {    
            nouvelle_position(&x_new,&y_new,x,y,vx,vy,dt);
            x = x_new;
            y = y_new;
     
            printf ("%lf",y);
     
     
            acceleration_pesanteur(&ax , &ay);
     
            axr=ax;
            ayr=ay;
     
     
            nouvelle_vitesse(&vx_new ,&vy_new,vx,vy,axr,ayr,dt);
     
     
     
            fprintf (fichier," %lf  %lf\n ",x,y);
     
            t = t + dt ;
     
     
      }
     
     
     
              printf("temps final = %lf s\n",t);
     
     return 0;
    }

  2. #2
    Membre confirmé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     while ( y_new > 0)

    quelle est la valeur de y_new au moment de ce test ?

  3. #3
    Modérateur

    Si ta boucle while n'est pas exécutée, c'est que la condition n'est pas remplie pour qu'elle le soit.

    Ta variable y_news n'est à aucun moment initialisée. De plus, les seules affectations ne se font qu'à l'intérieur de la boucle. Donc la valeur de ta variable sera la valeur qui y avait auparavant dans la case mémoire qui sera attribuée pour stocker ta variable lors de l’exécution. Çà peut être tout et n'importe quoi comme valeur, mais très souvent ça sera 0.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  4. #4
    Nouveau Candidat au Club
    Citation Envoyé par Xelland Voir le message
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     while ( y_new > 0)

    quelle est la valeur de y_new au moment de ce test ?
    Effectivement je n'avais pas donné de valeur ! la ça fonctionne merci beaucoup

    Citation Envoyé par sevyc64 Voir le message
    Si ta boucle while n'est pas exécutée, c'est que la condition n'est pas remplie pour qu'elle le soit.

    Ta variable y_news n'est à aucun moment initialisée. De plus, les seules affectations ne se font qu'à l'intérieur de la boucle. Donc la valeur de ta variable sera la valeur qui y avait auparavant dans la case mémoire qui sera attribuée pour stocker ta variable lors de l’exécution. Çà peut être tout et n'importe quoi comme valeur, mais très souvent ça sera 0.
    Tous s'explique ! Merci beaucoup pour l'explication détaillé !

###raw>template_hook.ano_emploi###