Gnuplot

Résolu
nil -  
mamiemando Messages postés 33749 Date d'inscription   Statut Modérateur Dernière intervention   -
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 33749 Date d'inscription   Statut Modérateur Dernière intervention   7 871
 
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