Bonjour,
J'avais évoqué auparavant n ma difficulté pour créer une fonction qui puisse lire à partir d'un fichier ".txt" une matrice trinagulaire supérieure et la stocker dans une variable matrice que j'ai définie préalablement.
N'étant pas expert en c++, j'ai codé en faisant abstraction de la gestion dynamique de la mémoire ce qui me joue des tours maintenant.
Je vous rapelle mon code qui marche dans certains cas et qui est le suivant :
Ce code marche bien sur des matrices de types suivant :
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 Code : #include "essai.h" #include <iostream> #include <fstream> #include <iomanip> using namespace std; using namespace std; int main() { // Ouverture du fichier ifstream fichierEntree("c:\\test1.txt", ios::in); // Test d'ouverture du fichier if (!fichierEntree) { cerr << "Problème d'ouverture de fichier" << endl; exit(1); } char* ligne; int i = 0; char * err = NULL; //double z; ligne = new char[10]; fichierEntree.getline(ligne, 4); int conv1 = strtoul(ligne,0,10); ArrayLengthSpecifier dimension(conv1); cout << conv1 << endl; SymmetricMatrix covariance(dimension); int longueur; do { i = i + 1; longueur = 9 * i + 1; ligne = new char [longueur];//format "0.00E+00" //donc 8 caractères; 9i=8i+ (i-1) espaces + élt nul terminal fichierEntree.getline(ligne,longueur); cout << ligne << endl; for (int j=1;j<=i;j++) { char temp[9]; for (int k=0;k<=7;k++) { temp[8]=0; if (j==1) temp[k] = ligne[k]; else temp[k] = ligne[9* (j - 1) + k ];//attention dimension de 0 à n-1 } const char* caractere=temp; cout << caractere << endl; covariance(i,j) = 2 * strtod(caractere, &err); cout << covariance(i,j) << endl; cout << covariance(j,i) << endl; } delete[] ligne; } while (!fichierEntree.eof()); fichierEntree.close(); }
Code :
Par contre dès qu'il s'agit d'une matrice qui contient un nombre négatif (par exemple) :3
1.23E-02
1.24E-02 1.26E-02
1.27E-02 1.23E-04 1.23E-03
Code :
Ma définition qui fixe la dimension de temp à 9, devient fausse puisque celle-ci avec le signe moins deviens égale à 10.3
1.23E-02
-1.24E-02 1.26E-02
1.27E-02 1.23E-04 1.23E-03
Aurriez vous une idée qui puisse contourner le problème??.
J'ai pensé à imbriquer une instruction if à l'intérieure de ma boucle qui test si le premier caractère est "-" et à ce moment fait une réallocation de temp pour porter sa dimension à 10. Mais je ne sais pas comment coder ça en c++. Auriez vous une idée à me proposer, je suis vraiment bloquer la dessus ??
Merci de votre aide
Partager