Compteur/Gnuplot C++
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Compteur/Gnuplot C++



  1. #1
    invited915665d

    Compteur/Gnuplot C++


    ------

    Bonsoir tout le monde!
    Je suis nouveau sur ce site (et en informatique) donc je ne sais pas très bien comment ça fonctionne... Mais je vais essayer de faire de mon mieux =)

    Voilà, je suis en train d'écrire un programme en C++ (jusqu'ici rien d'extraordinaire) et je rencontre quelques problèmes...
    Ce programme a pour but de tracer une courbe avec gnuplot. Elle représente la répartition de valeurs générées aléatoirement (dans un intervalle) précédemment. J'utilise pour ça un compteur. Mais j'ai quelques problèmes... Le graphe crée ressemble à rien en fait. J'ai des valeurs allant jusqu'au million alors qu'elles vont au maximum jusqu'à 10... Une connaissance m'a dit qu'il y avait un problème d'initialisation.

    Dans mon programme, nD représente le nombre d'essai
    la moyenne est calculé avant
    u[i] est un tableau dynamique regroupant les valeurs générees.

    Voici la partie de mon programme qui pose problème

    Code:
    int taille=120;
    long compteurs [taille];
    for(int i=0; i<taille ; i++) compteurs [i]=0;
    int k;
    int mediane_tableau;
    double coef;
    
    mediane_tableau= taille/2;
    coef= mediane_tableau/moyenne;
    
        for(int i=0; i<nD ; i++)
        {
            double x1;
    
         x1=u[i];
    
        k=(int)(x1);
            compteurs[k]++;
        }
    //lancement de gnuplot
        {
            ofstream fichier_data_2("courbe",ios::out);
            for(int i=0; i<nD ; i++)
            {double valeur=(i-(taille/2))/100.0;
    
                fichier_data_2 <<(valeur+moyenne)<< " "<< 100*compteurs[i]/nD <<endl;
                cout<<"["<<(valeur+moyenne)<< "]="<< 100*compteurs[i]/nD <<"\t";
            }
            fichier_data_2.close();
    
            ofstream gnu_commandes("affichage",ios::out);
            gnu_commandes << "set style data lines \n ";
            gnu_commandes  << "plot  \"courbe\" using 1:2 \n ";
            gnu_commandes.close();
            system("\"C:\\Program Files (x86)\\CodeBlocks\\gp442win32\\gnuplot\\binary\\gnuplot.exe\"");
        }
    }
    Si quelqu'un pense savoir où est le problème, je suis preneur de toute suggestion!

    dsl les smiley c'est ut = : out
    Merci!!!

    -----
    Dernière modification par Jack ; 02/06/2012 à 10h45. Motif: Ajout balises code

  2. #2
    polo974

    Re : Compteur/Gnuplot C++

    Citation Envoyé par Nip Voir le message
    Bonsoir tout le monde!
    Je suis nouveau sur ce site (et en informatique) donc je ne sais pas très bien comment ça fonctionne... Mais je vais essayer de faire de mon mieux =)

    Voilà, je suis en train d'écrire un programme en C++ (jusqu'ici rien d'extraordinaire) et je rencontre quelques problèmes...
    Ce programme a pour but de tracer une courbe avec gnuplot. Elle représente la répartition de valeurs générées aléatoirement (dans un intervalle) précédemment. J'utilise pour ça un compteur. Mais j'ai quelques problèmes... Le graphe crée ressemble à rien en fait. J'ai des valeurs allant jusqu'au million alors qu'elles vont au maximum jusqu'à 10... Une connaissance m'a dit qu'il y avait un problème d'initialisation.

    Dans mon programme, nD représente le nombre d'essai
    la moyenne est calculé avant
    u[i] est un tableau dynamique regroupant les valeurs générees.

    Voici la partie de mon programme qui pose problème

    Code:
    int taille=120;
    long compteurs [taille];
    for(int i=0; i<taille ; i++) compteurs [i]=0;
    int k;
    int mediane_tableau;
    double coef;
    
    mediane_tableau= taille/2;
    coef= mediane_tableau/moyenne;
    
        for(int i=0; i<nD ; i++)
        {
            double x1;
    
         x1=u[i];
    
        k=(int)(x1);
            compteurs[k]++;
        }
    //lancement de gnuplot
        {
            ofstream fichier_data_2("courbe",ios::out);
            for(int i=0; i<nD ; i++)
            {double valeur=(i-(taille/2))/100.0;
    
                fichier_data_2 <<(valeur+moyenne)<< " "<< 100*compteurs[i]/nD <<endl;
                cout<<"["<<(valeur+moyenne)<< "]="<< 100*compteurs[i]/nD <<"\t";
            }
            fichier_data_2.close();
    
            ofstream gnu_commandes("affichage",ios::out);
            gnu_commandes << "set style data lines \n ";
            gnu_commandes  << "plot  \"courbe\" using 1:2 \n ";
            gnu_commandes.close();
            system("\"C:\\Program Files (x86)\\CodeBlocks\\gp442win32\\gnuplot\\binary\\gnuplot.exe\"");
        }
    }
    Si quelqu'un pense savoir où est le problème, je suis preneur de toute suggestion!

    dsl les smiley c'est ut = : out
    Merci!!!
    du bon usage de la balise code... (le # dans le menu avancé)

    sinon, ça:
    Code:
        for(int i=0; i<nD ; i++)     {         double x1;       x1=u[i];     k=(int)(x1);         compteurs[k]++;     }
    c'est quoi nD
    c'est quoi u

    est-tu sûr que k < taille ( et >= 0 )?
    sinon, tu exploses tes autres données...

    pour le reste, je n'ai pas regardé plus loin...
    Jusqu'ici tout va bien...

  3. #3
    Jack
    Modérateur

    Re : Compteur/Gnuplot C++

    c'est quoi nD
    c'est quoi u
    C'est expliqué dans le message #1

    Pour les balises code, c'était bien précisé ici:
    http://forums.futura-sciences.com/pr...eau-forum.html

    Merci à polo pour le rappel.

    A+
    Dernière modification par Jack ; 02/06/2012 à 10h44.

  4. #4
    polo974

    Re : Compteur/Gnuplot C++

    Ah ben oui, mais je me suis concentré sur le code, bref, il faut vérifier que la valeur un fois castée (donc k) ne fait pas sortir du tableau.

    En relisant le tout, il semble que coef ne soit pas utilisé, donc peut être un oubli de mise à l'échelle des éléments de u:

    genre: k = (u[i] - umin) * taille / (umax-umin)
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    invited915665d

    Re : Compteur/Gnuplot C++

    Code:
    int taille=120;
    long compteurs [taille];
    for(int i=0; i<taille ; i++) compteurs [i]=0;
    int k;
    int mediane_tableau;
    double coef;
    
    mediane_tableau= taille/2;
    coef= mediane_tableau/moyenne;
    
        for(int i=0; i<nD ; i++)
        {
            double x1;
    
         x1= (u[i] -myvalarray.min()) * taille / (myvalarray.max()-myvalarray.min());
    
        k=(int)(x1);
            compteurs[k]++;}
    
    //lancement de gnuplot
        {
            ofstream fichier_data_2("courbe",ios::out);
            for(int i=0; i<nD ; i++)
            {double valeur=(i-(taille/2))/100.0;
    
                fichier_data_2 <<(valeur+moyenne)<< " "<< 100*compteurs[i]/nD <<endl;
                cout<<"["<<(valeur+moyenne)<< "]="<< 100*compteurs[i]/nD <<"\t";
            }
            fichier_data_2.close();
    
            ofstream gnu_commandes("affichage",ios::out);
            gnu_commandes << "set style data lines \n ";
            gnu_commandes  << "plot  \"courbe\" using 1:2 \n ";
            gnu_commandes.close();
            system("\"C:\\Program Files (x86)\\CodeBlocks\\gp442win32\\gnuplot\\binary\\gnuplot.exe\"");
        }
    }
    Voici les modifications apportées suite à tes conseils. Mais malheureusement le programme me donne toujours des valeurs étranges... Néanmoins, je suis sûre de mes valeurs dans mon tableau u ainsi que mes valarray.max et min

  7. #6
    invited915665d

    Re : Compteur/Gnuplot C++

    Code:
    int taille=120;
    long compteurs [taille];
    for(int i=0; i<taille ; i++) compteurs [i]=0;
    int k;
    int mediane_tableau;
    double coef;
    
    mediane_tableau= taille/2;
    coef= mediane_tableau/moyenne;
    
        for(int i=0; i<nD ; i++)
        {
            double x1;
    
         x1= u[i]*coef;
        k=(int)(x1);
    
                cout<<k<<" ";
                compteurs[k]++;}
    
    //lancement de gnuplot
        {
            ofstream fichier_data_2("courbe",ios::out);
            for(int i=0; i<nD ; i++)
            {double valeur=(i-(taille/2))/100.0;
    
                fichier_data_2 <<(valeur+moyenne)<< " "<< 100*compteurs[i]/nD <<endl;
                cout<<"["<<(valeur+moyenne)<< "]="<< 100*compteurs[i]/nD <<"\t";
            }
            fichier_data_2.close();
    
            ofstream gnu_commandes("affichage",ios::out);
            gnu_commandes << "set style data lines \n ";
            gnu_commandes  << "plot  \"courbe\" using 1:2 \n ";
            gnu_commandes.close();
            system("\"C:\\Program Files (x86)\\CodeBlocks\\gp442win32\\gnuplot\\binary\\gnuplot.exe\"");
        }
    }
    dsl voilà la dernier version.
    Mais valeurs de k sont bien en dessous de taille.

  8. #7
    invited915665d

    Re : Compteur/Gnuplot C++

    C'est bon j'ai réussi à avoir des valeurs convenable pour mon compteurs. Le problème venait de:
    Code:
     for(int i=0; i<nD ; i++)
    il fallait que je mette taille au lieu de nD...

    Merci pour votre aide.

  9. #8
    polo974

    Re : Compteur/Gnuplot C++

    Dans le premier message, il est dit:
    Dans mon programme, nD représente le nombre d'essai
    la moyenne est calculé avant
    u[i] est un tableau dynamique regroupant les valeurs générees.
    on peut donc penser que u est un tableau d nD éléments.

    donc si la taille du tableau ne fait que 10, tu vas déborder avec les i allant de 0 à 119...

    si au contraire, elle fait 1000, tu ne va pas considérer tous les éléments...

    il faut revoir l'algo avant d'essayer de modifier le code.
    Jusqu'ici tout va bien...

Discussions similaires

  1. gnuplot
    Par invite24318894 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 05/06/2011, 14h30
  2. gnuplot
    Par invite9fccc3a0 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 27/04/2010, 16h04
  3. Gnuplot
    Par zarkis dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 12/05/2009, 15h28
  4. Gnuplot
    Par invited78e0bbb dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 04/06/2008, 08h58
  5. GNUplot
    Par invite4e187e47 dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 08/07/2007, 18h09