Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Compteur/Gnuplot C++

  1. Nip

    Date d'inscription
    juin 2012
    Messages
    4

    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
     


    • Publicité



  2. polo974

    Date d'inscription
    février 2007
    Messages
    6 136

    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...
    Le mieux est l'ennemi du bien, et c'est bien mieux comme ça...
     

  3. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    12 231

    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:
    Règles participatives pour ce nouveau forum

    Merci à polo pour le rappel.

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

  4. polo974

    Date d'inscription
    février 2007
    Messages
    6 136

    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)
    Le mieux est l'ennemi du bien, et c'est bien mieux comme ça...
     

  5. Nip

    Date d'inscription
    juin 2012
    Messages
    4

    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
     


    • Publicité



  6. Nip

    Date d'inscription
    juin 2012
    Messages
    4

    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.
     

  7. Nip

    Date d'inscription
    juin 2012
    Messages
    4

    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.
     

  8. polo974

    Date d'inscription
    février 2007
    Messages
    6 136

    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.
    Le mieux est l'ennemi du bien, et c'est bien mieux comme ça...
     


    • Publicité





 

Discussions similaires

  1. gnuplot
    Par mejdoubi dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 05/06/2011, 14h30
  2. gnuplot
    Par jazz99 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 flostein dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 04/06/2008, 08h58
  5. GNUplot
    Par JBBond dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 08/07/2007, 18h09