Je suis en train d'écrire un programme C++ qui résout une EDP et enregistre la solution dans un tableau 2D. Ensuite, il fait quelque chose avec les résultats de cette EDP. Cependant, résoudre l'EDP avec précision nécessite beaucoup de calculs. Ainsi, la partie résolution doit être exécutée une seule fois, mais les résultats doivent être enregistrés, de sorte que je puisse y revenir plus tard.
Par conséquent, j'ai écrit deux codes différents:
-
résout l'EDP et enregistre les résultats dans la matrice A. La matrice A est enregistrée dans un fichier binaire.
-
lit les valeurs dans le fichier binaire et effectue des calculs avec les résultats.
Cependant, lorsque je lis le fichier binaire dans le deuxième code, il contient seulement un tableau vide et ne contient pas les valeurs que j'ai enregistrées ici dans l'autre code.
Si je le lis dans le code 1, il fonctionne comme désiré.
Qu'est-ce que je fais de mal? Est-il même possible de lire les valeurs d'un fichier binaire dans une autre application? Dois-je aborder ce problème complètement différemment?
J'ai enregistré les deux codes dans un projet différent, dois-je les relier d'une certaine manière? Ou les deux codes doivent-ils être dans le même projet?
J'ai passé quelques jours à chercher une solution sur le web, mais je ne trouve que des questions et des réponses sur la manière d'ouvrir et d'enregistrer des fichiers binaires dans le même code (par exemple ceci et cela). Est-ce que cela signifie que ce que j'essaie de faire n'est pas possible ou n'ai-je pas trouvé les bonnes sources?
Je suis un complet débutant en C++ et serais très heureux de toute aide ou direction.
Merci d'avance!
Voici le code 1:
#include <iostream>
using namespace std;
#include <math.h>
#include <getopt.h>
#include <fstream>
#include <string>
// Retourne un pointeur sur un tableau nouvellement créé de taille [ligne : colonne].
double **Create2D(int row, int col)
{
double **p = new double* [row];
for (int j = 0; j < row; j ++)
p[j] = new double[col];
return p;
}
// Supprime un tableau pointé par 'p' ayant 'row' nombre de lignes
void Delete2D(double **p, int row)
{
for (int j = 0; j < row; j ++)
delete [] p[j];
delete [] p;
}
double PDE (double A_old, double A_old2, double dt, double s_int, double m, double ds, double R, double d){
double A_next;
A_next = A_old + dt*(s_int - 1)*m*A_old + (dt/ds)*((s_int-1)*(R*s_int-d)*(A_old2-A_old));
return A_next;
}
// Début de la fonction principale
int main(int argc, char *argv[]) {
// Définir des valeurs par défaut pour l'entrée
double t(1), m(0.5) , R (1.3) , d (0.8) ;
// Solution en résolvant l'EDP pour le PGF
double dt = 0.0003;
const int tsteps = t/dt +1;
const double ads = 0.01;
const double ds = 0.01;
const int ssteps = 1/ds +1;
// Démarrer la section active
double **A = Create2D(ssteps, tsteps);
// Condition initiale 1: f(s,0) = 1
int i = 0;
for (;i
`Voici le code 2:
#include <iostream>
using namespace std;
#include <math.h>
#include <getopt.h>
#include <fstream>
#include <string>
double **Create2D(int row, int col)
{
double **p = new double* [row];
for (int j = 0; j < row; j ++)
p[j] = new double[col];
return p;
}
// Début de la fonction principale
int main(int argc, char *argv[]) {
// Utiliser la sortie de la fonction PDE
double dt = 0.0003;
const int tsteps = t/dt +1;
const double ds = 0.01;
const int ssteps = 1/ds +1;
double **A = Create2D(ssteps, tsteps);
ifstream in("valuesA", ios::in | ios::binary);
in.read((char *) &A, sizeof A);
// voir combien d'octets ont été lus
cout << in.gcount() << "octets lus\n";
in.close();
return 0;
} // fin main`