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

C Discussion :

Une boucle While qui n'est pas exécutée


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut 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 éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    quelle est la valeur de y_new au moment de ce test ?

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 075
    Points
    28 075
    Par défaut
    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
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Xelland Voir le message
    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é !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/06/2017, 17h38
  2. Une boucle While qui ne fonctionne pas
    Par seremei dans le forum Langage
    Réponses: 6
    Dernier message: 25/10/2012, 11h33
  3. Une partie du code n'est pas exécutée
    Par eddy37fr dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/03/2008, 19h11
  4. [VB6]Connexion a une BD mysql qui n'est pas en local
    Par aude_1603 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 02/03/2006, 09h05
  5. Acceder a une base SQL qui n'est pas sur le meme serveur
    Par skyo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/01/2006, 10h58

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