Bonjour,

J'ai un problème concernant la portée des variables. Je ne comprends pas pourquoi, dans mon programme, je ne peux pas afficher les variables physiques (y,v,a) en dehors du IF.

À l'extérieur du IF, les variables prennent toutes des valeurs nulles sauf la variable n. Voici un exemple de lignes affichees.

Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Exterieur : t[29]= 0.00000 delta t= 0.00000 y= 0.00000 v= 0.00000 a= 0.00000
Interieur : t[29]= 0.96012 delta t= 0.03510 y= 1.58867 v= 3.56652 a= 3.85883

Pourtant, les variables sont déclarées de façon globale au début.

Voici le 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
#include <iomanip>
#include <iostream>
#include <math.h>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
 
using namespace std;
 
int main()
 
{
// Paramètres physiques.
 
   const int MF=3037000;       // Masse totale de la fusée [kg].
   const int DMAS=5200;        // Débit massique [kg/s].
   const int VEJECT=2250;      // Vitesse d'éjection des gaz [m/s].
   double MT;                  // Masse de la Terre [kg].
   MT=5,98*pow(10,24);
   const long RT=6378000;      // Rayon de la Terre [m].
   double G;
   G=6,67*pow(10,-11);         // Constante de gravitation universelle [m^3/s^2*kg].
 
// Compteurs.
 
   int i=0;                    // Compteur.
   int n;                      // Numéro de l'élément échantillonné.
   int N=10000;                // Nombre d'éléments dans les tableaux.
 
// Variables physiques.
 
   double temps;              // Temps actuel [s].
   double t[N];               // Tableau des temps [s].
   double delta_t[N];         // Tableau des différences de temps [s].
   double y[N];               // Altitude de la fusée [m].
   double v[N];               // Vitesse de la fusée [m/s].
   double a[N];               // Accélération de la fusée [m/s^2].
 
// Création de la fenêtre.
 
   sf::RenderWindow App(sf::VideoMode(800, 600), "Lancement d'une fusee");
   sf::Font Arial;
   if (!Arial.LoadFromFile("arial.ttf"))
   return EXIT_FAILURE;
 
// Initialisation des variables.
 
   sf::Clock Clock;
   t[0] = 0;
   delta_t[0] = 0;
   y[0] = 0;
   v[0] = 0;
   a[0] = (DMAS*VEJECT)/(MF-DMAS*t[0])-((G*MT)/pow((RT+y[0]),2));
   n = 1;
 
// Début de la simulation.
 
   while (App.IsOpened())
   {
    sf::Event Event;
    while (App.GetEvent(Event))
    {
     if (Event.Type == sf::Event::Closed)
     App.Close();
    }
 
    App.Clear();
    temps = Clock.GetElapsedTime();  // Mesure du temps.
    if (i==9)  // Échantillonnage des données (1:10).
    {
     t[n] = temps;
     delta_t[n] = t[n] - t[n-1];
     y[n] = v[n-1]*delta_t[n-1] + y[n-1];
     v[n] = a[n-1]*delta_t[n-1] + v[n-1];
     a[n] = (DMAS*VEJECT)/(MF-DMAS*t[n])-((G*MT)/pow((RT+y[n]),2));
     cout << "Interieur : t["<< std::fixed << setprecision (5) << n<<"]= "<<t[n]<<"  delta t= "<<delta_t[n]<< "   y= " << y[n] <<"   v= "<<v[n]<<"   a= "<<a[n]<< endl<<endl;
     n++;
     i=0;
    }
 
    i=i++;
 
    // Test : Les valeurs affichées ici ne sont pas les mêmes que celles qui sont affichées dans le IF.
    cout << "Exterieur : t["<< std::fixed << setprecision (5) << n<<"]= "<<t[n]<<"  delta t= "<<delta_t[n]<< "   y= " << y[n] <<"   v= "<<v[n]<<"   a= "<<a[n]<< endl;
 
 // Réafficher la fenêtre entière.
 
    App.Display();
}
  return 0;
}
J'aimerais donc savoir, si possible, ce qui ne va pas dans ce programme.

Merci