Gnuplot

Résolu/Fermé
nil - Modifié par crapoulou le 6/11/2016 à 22:18
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 4 déc. 2016 à 23:05
Bonjour,

Ce programme marche, mais lorsque que je fait gnuplot
le graphe ne s'affiche pas
il met 'bad data '
bien à vous

#include<iostream>
using namespace std;
int main(){
  double x=0.1,r=2;
  int p;
for (p=1;p<=100;p++){
  x=r*(1-x);
  cout<<"differentes valeurs de x" <<x<<endl;}
return 0;
}


1 réponse

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
Modifié par mamiemando le 4/12/2016 à 23:06
Bonjour,

Pour utiliser gnuplot, il faut stocker tes points dans un fichier de données (un fichier texte traditionnellement une extension ".dat").

Ensuite sois tu fais un script gnuplot (fichier ".gnu") qui définira ton fichier de données (e.g. toto.dat), tes axes et ton format de sortie (personnellement je préconise svg pour avoir un rendu vectoriel).

Dans le code suivant, le code cpp génère le fichier toto.dat et le fichier toto.gnu :

#include <iostream>
#include <fstream>

bool make_dat(const char *filename_wext, double ui, double r) {
  bool ret = true;
  std::string filename(filename_wext);

  filename += ".dat";
  std::ofstream ofs(filename);
  if (ofs) {
    for (unsigned i = 0; i < 100; i++) {
       ui = r * (1 - ui);
       ofs << i << '\t' << ui << std::endl;
    }
    ofs.close();
    std::cerr << filename << " written" << std::endl;
  } else {
    std::cerr << "Cannot write " << filename << std::endl;
    ret = false;
  }
  return ret;
}

bool make_gnu(const char *filename_wext) {
  bool ret = true;
  std::string filename(filename_wext);

   filename += ".gnu";
  std::ofstream ofs(filename);
  if (ofs) {
    ofs << "set terminal svg" << std::endl
        << "set output \"" << filename_wext << ".svg\"" << std::endl
        << "plot \"" << filename_wext << ".dat\" using 1:2 with lines" << std::endl;
    ofs.close();
    std::cerr << filename << " written" << std::endl;
  } else {
    std::cerr << "Cannot write " << filename << std::endl;
    ret = false;
  }
  return ret;
}

int main() {
  double ui = 0;
  double r = 2;
  const char *filename_wext = "toto";

  make_dat(filename_wext, ui, r);
  make_gnu(filename_wext);

  return 0;
}


Il ne reste plus qu'à le compiler et le lancer, puis appeler gnuplot.

(mando@velvet) (~) $ g++ toto.cpp && ./a.out && gnuplot toto.gnu
toto.dat written
toto.gnu written


Tu auras alors un fichier toto.svg, que tu peux afficher par exemple avec chrome/chromium.

Bonne chance
0