Bonjour,
Je suis en train d´ecrire un petit soft pour des raisons affectives. Dans une vie anterieure (en these) j´ai ecrit un petit programme c++ pour faire mes calculs, que je voudrais rendre utilisable par d´autre, grace a une jolie interface - presque finie - ecrite avec wxWidgets. Seulement voila, il faut faire tourner mon petit programme d´avant - bete mode console - puisque c´est lui qui devrait produire les resultats a afficher avec wxChart (la partie tracee est pas encore commencee, et pour cause : il n´y a rien a tracer). Je suis en train d´essayer quelques trucs, mais je rencontre un petit probleme delicat : ca plante...
Pour le moment, ce que j´ai fait, c´est creer dans mon objet freevol_frame un objet membre de type essai_saut, cad la classe que j´ai creer pour faire mes calculs. Evidemment, essai_saut c´est du c++ de base, avec des doubles, des int des tableaux de double, etc. Pour l´instant, j´ai modestement cree un bouton de type OK auquel j´ai lie comme event une fonction membre de freevol_frame, evidemment. Cette fonction membre doit initialiser l´objet essai_saut (valeurs des parametres). Pour le moment ca se fait dans le programme, sans recuperer de valeurs de l´utilisateur, mais ca plante deja... Je ne sais pas trop ce que je dois faire ? Si quelqu´un a des suggestions...
Ci-dessous des extraits du code :
---------------------------------------------------------------------
freevol_frame.h :
---------------------------------------------------------------------
Code : C++
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 #ifndef _FREEVOLFRAME_H_ #define _FREEVOLFRAME_H_ #include "freevol_model.h" #include <wx/listctrl.h> #include <wx/button.h> class wxFreeVolFrame: public wxFrame { DECLARE_EVENT_TABLE() //table des événements public: wxFreeVolFrame(wxWindow* parent, wxWindowID id = -1, const wxString& caption = _("FreeVol v0.1"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,long style = wxDEFAULT_FRAME_STYLE); ~wxFreeVolFrame(); bool Create(wxWindow* parent, wxWindowID id = -1, const wxString& caption = _("FreeVol v0.1"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE); protected: // l´objet du probleme : issu de la class essai_saut, qui peut faire les calculs essai_saut* essai; void CreateMenu(); void CreateControls(); void OnMnuQuit(wxCommandEvent& event); void OnButtonOKG(wxCommandEvent& event); private: // textctrl pour menu de la partie gauche de la fenetre principale + bouton OK wxTextCtrl* m_ctrl_ax; wxTextCtrl* m_ctrl_kr; wxTextCtrl* m_ctrl_ceq; wxTextCtrl* m_ctrl_V; wxTextCtrl* m_ctrl_epoc; wxTextCtrl* m_ctrl_E; wxTextCtrl* m_ctrl_T; wxTextCtrl* m_ctrl_cfi; wxButton* boutonOKG; // textctrl (temporaire) pour la partie droite wxTextCtrl* m_PtieDroite; wxMenu* m_MnuFile; wxMenu* m_MnuSteady; wxMenu* m_MnuHelp; wxString m_ax; wxString m_kr; wxString m_ceq; wxString m_V; wxString m_epoc; wxString m_E; wxString m_T; wxString m_cfi; }; #endif // _FREEVOLFRAME_H_
------------------------------------------------------------
La fonction qui plante dans freevol_frame.cpp : celle appelee par l´event du bouton OK (il n´y a que des initialisations, esentiellement, et le squelette de la fonction pour quand tout ira bien en commentaires):
------------------------------------------------------------
Code : C++
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 void wxFreeVolFrame::OnButtonOKG(wxCommandEvent& event) { essai = new essai_saut; //vérifie qu'il y a bien un parcours meca (drapeau) sinon, le signale et skip, /* cfinit= 1e-12 n= 0 sigmainit= 0 Et_int1= 0 pcision= 1e-3 k= 1.38e-23 */ essai->ax = 0.1; //récupère les valeurs des paramètres m_ax = m_ctrl_ax->GetValue(); m_kr = m_ctrl_kr->GetValue(); m_ceq = m_ctrl_ceq->GetValue(); m_V = m_ctrl_V->GetValue(); m_epoc = m_ctrl_epoc->GetValue(); m_E = m_ctrl_E->GetValue(); m_T = m_ctrl_T->GetValue(); m_cfi = m_ctrl_cfi->GetValue(); //convertit les valeurs en double //assigne les valeurs à l'objet modele et lance le calcul essai->ax = 0.1; essai->kr = 0.1; essai->cf_eq = 1e-12; essai->Cf_int1 = 1e-12; essai->invcfinit = essai->Cf_int1; essai->Ep0c = 2.81E8; essai->T = 683; essai->E = 10e9; essai->V = 160E-30; //affiche le résultat, change un drapeau pour permettre enregistrement du fichier résultat event.Skip(); }
---------------------------------------------------------
Le fichier freevol_model.h qui contient la classe essai_saut :
---------------------------------------------------------
Code : C++
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 #ifndef _FREEVOLMODEL_H_ #define _FREEVOLMODEL_H_ #include <math.h> #include <string.H> #include <stdio.h> #include <fstream> #include <iostream.h> #include <time.h> #include <stdlib.h> struct res_calcul { float sigma_int1, Cf_int1, Et_int1; int n; }; struct prmsauts { float prmepp[10]; float prmep[10]; int J; }; struct manip { float cont[1000]; float def[1000]; float temps[1000]; int tai; }; class essai_saut { public : int n, N, j, J, i, kontrole; double Ep0c, V, k, T, E, ax, kr, cf_eq, dt; double Cf[10000], sigma[10000], Eppe[10000], Et[10000], temps[10000]; double Ept, pcision; double prm[20], epsilon[10], epsilon_point[10],relax[10]; res_calcul Tempo ; double Cf_int1 , invcfinit; double ax_sur_kr; prmsauts param ; int Enregistre(int); int essai(); res_calcul calcul_modele(int ni, double sigma_int1, double Cf_int1, double Et_int1, double Ept, double pcision, double dmanip); double creani(double c, double epp); }; #endif // _FREEVOLMODEL_H_
------------------------------------------------
Voila, je sais pas si c´est tres clair... ?
Bien cordialement,
Hugo
Partager