Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation de GNUPLOT sous windows

Comment l'appeler dans un programme en C/C++ ?

Sujet résolu
    6 février 2008 à 0:23:53

    Bonjour, je suis entrain d'élaborer un programme en C++ sous windows. Les ordinateurs de la fac étant sous Linux (KDE), et mon ordinateur personnel sous XP. Le problème c'est que je dois utiliser le logiciel GNUplot pour une exploitation graphique. Or, pour Linux tout est simple et efficace (tiens tiens :-° ), mais je rencontre des difficultés sous windows pour appeler GNUplot à partir de mon programme.

    Je vous ai joint un exemple basique du genre de commande que j'utilise sous Linux pour effectuer un tracé de surface :

    1. #include<iostream>
    2.     #include<fstream>
    3.     #include<math.h>
    4.     #include<stdlib.h>
    5.     #define N 50
    6.     using namespace std;
    7.     int main()
    8.     {
    9.         int i,j; double x,y,dx,dy,z,pi;
    10.         pi=acos(-1.); dx=pi/N; dy=2*pi/N;
    11.         fstream lulu("surface.res",ios::out);
    12.         for(i=0; i<=N; i++)
    13.            {
    14.               x=i*dx;
    15.               for(j=0; j<=N; j++) {y=j*dy; z=sin(x)*cos(3*y); lulu << z << endl;}
    16.               lulu << endl;
    17.            }
    18.         lulu.close();
    19.         fstream lili("surface.gnu",ios::out);
    20.         lili << "set hidden3d" << endl;
    21.         lili << "set contour" << endl;
    22.         lili << "set noparametric" << endl;
    23.         lili << "set data style line" << endl;
    24.         lili << "splot ’surface.res’" << endl;
    25.         lili << "pause -1" << endl;
    26.         lili.close();
    27.         system("gnuplot surface.gnu"); // exécution du fichier de commandes Gnuplot
    28.         system("rm surface.res surface.gnu"); // effacement des fichiers surface.res et surface.gnu
    29.         return 0;
    30.      }



    voilà en fait je voudrais l'équivalent des 2 dernières lignes mais sous windows :euh:
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      6 février 2008 à 1:54:45

      Hello,
      Pourquoi utiliser le forum C pour un code en C++?
      l'instruction system("gnuplot surface.gnu"); est correcte même sous windows, mais pour fonctionner il faut soit que gnuplot soit dans un dossier de la variable path soit que l'execution du programme ce face dans le dossier ou ce situe le fichier gnuplot.exe et surface.gnu
      l'instruction system("rm surface.res surface.gnu"); est quand à elle nuxienne, rm pourrait être remplacer par un del mais je trouve cela inutile quand il existe des fonctions standard (et portable donc) de suprimer des fichiers.

      Amicalement, sloshy
      • Partager sur Facebook
      • Partager sur Twitter
        11 février 2008 à 18:17:24

        Bonjour, merci beaucoup de ta réponse.

        Je peux néanmoins apporter de nouveaux éléments de réponse

        Mon programme sous linux devrait ressembler plus à ça (ce n'est pour l'instant qu'une simple ébauche bien entendu):

        1. int main()
        2. {
        3. fstream lili("graphe.gnu",ios::out);
        4. lili << "set title 'Vision stereoscopique'" << endl;
        5. lili << "set xlabel 'x'" << endl;
        6. lili << "set ylabel 'y'" << endl;
        7. lili << "set zlabel 'z'" << endl;
        8. lili << "set size ratio 1" << endl;
        9. lili << "set hidden3d" << endl;
        10. //lili << "set contour" << endl;
        11. lili << "set noparametric" << endl;
        12. // lili << "set data style line" << endl;
        13. lili << "splot [30 :-30][30 :-30][30:-30]'carre.txt'" << endl;
        14. lili << "pause -1" << endl;
        15. lili.close();
        16. system("gnuplot graphe.gnu"); // execution du fichier de commandes Gnuplot
        17. //system("rm graphe.gnu"); // effacement du fichier graphe.gnu
        18. return 0;
        19. }



        Ce qui à la compilation donne un joli

        'gnuplot' n'est pas reconnu en tant que commande interne
        ou externe, un programme exécutable ou un fichier de commandes.
        Press ENTER to continue.


        Pourtant le gnuplot est bien dans le meme dossier que mon programme...

        Une idée quelqu'un?
        • Partager sur Facebook
        • Partager sur Twitter
          11 février 2008 à 18:25:00

          Salut
          Essaye en faisant :
          1. system("start gnuplot graphe.gnu ");

          (ça démarre le programme dans un autre fenetre)
          • Partager sur Facebook
          • Partager sur Twitter
            11 février 2008 à 19:30:00

            Ok merci ça avance!

            D'ailleurs est-ce que la commande start est elle aussi valable pour linux? (mon but étant de faire un code le plus transparent et trans-OS possible ;) )

            Dernière question : en fait les fichiers gnuplot ne sont pas direcctement présent dans le meme dossier que mon main.cpp

            C'est plutot : Mondossierprogramme/gnuplot/bin/wgnuplot.exe

            De plus savez vous si je dois utiliser pgnuplot.exe, wgnuplot.exe, gpsavediff.cmd dans mon programme (tous les trois sont presents dans le dossier bin)?
            • Partager sur Facebook
            • Partager sur Twitter
              11 février 2008 à 19:55:47


              Citation : Krillz

              D'ailleurs est-ce que la commande start est elle aussi valable pour linux? (mon but étant de faire un code le plus transparent et trans-OS possible ;) )

              Non elle est spécifique à windows mais tu peux faire un truc du genre
              1. # if windows
              2. tu défini pour windows
              3. #else
              4. idem pour linux


              Citation : Krillz

              C'est plutot : Mondossierprogramme/gnuplot/bin/wgnuplot.exe


              Pour start c'est :
              1. system("start \"C:\\Mondossierprogramme\\gnuplot\\bin\\wgnuplot.exe\" graphe.gnu");

              Citation : Pas de titre

              De plus savez vous si je dois utiliser pgnuplot.exe, wgnuplot.exe, gpsavediff.cmd dans mon programme (tous les trois sont presents dans le dossier bin)?


              Je ne connais pas gnuplot .
              • Partager sur Facebook
              • Partager sur Twitter
                12 février 2008 à 21:16:20

                Citation : nimaje


                Non elle est spécifique à windows mais tu peux faire un truc du genre

                1. # if windows
                2. tu défini pour windows
                3. #else
                4. idem pour linux




                C'est génial ça je te remercie!


                ps: il y a une faute de grammaire dans ta sig (pas très sérieux pour un 'intelloetalors' ^^ )
                • Partager sur Facebook
                • Partager sur Twitter
                  12 février 2008 à 21:28:34

                  Citation : Krillz


                  ps: il y a une faute de grammaire dans ta sig (pas très sérieux pour un 'intelloetalors' ^^ )


                  bon bah alors je vais mettre ca à la place : intello en science et alors ? :D
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 février 2008 à 15:40:52

                    [HS ON] Ah les intellos de nos jours, c'est plus ce qu'ils étaient! :p

                    PS : il y a un r à "corrigeR les contrôles "

                    C'est une faute de raisonnement les fautes de grammaire, très cher! :) [HS OFF]

                    Quoi qu'il en soit, merci pour ton aide nimaje
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Utilisation de GNUPLOT sous windows

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown