IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Comment tracer une courbe chart avec valeurs dans fichier ?


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Comment tracer une courbe chart avec valeurs dans fichier ?
    Bonjour,
    je reviens encore avec mon fichier rempli de valeurs de mesures, et j'aimerai savoir comment on peut tracer une courbe dans un Chart avec ces valeurs inscrites dans mon fichier ?

  2. #2
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Salut,
    fait une petite recherche sur ce forum, il y as plein de sujet sur le remplissage de TChart

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    OK Merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour,
    j'ai regardé les sujets sur le remplissage de TChart, mais il y a des choses que je ne comprend pas, et mon problème est que je veux charger des valeurs qui sont dans un fichier dans le TChart.


  5. #5
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Ta première problématique est de lire les valeurs dans le fichier, ça tu sais maintenant le faire.
    La deuxième est de rentré tes valeurs dans le TChart, pour cela, il faut que tu créé un TSeries par courbe voulu dans ton TChart et que tu entre les valeur grâce à la fonction AddXY

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Oui je sais bien qu'il faut utiliser "AddXY", mais c'est quoi cette histoire de vecteurs que j'ai vu dans un post ?

  7. #7
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      int iX = 1,  iY = 100;
     
     
    Form1->Series1->AddXY(iX, iY, "Valeur1", clRed);
    pas plus compliqué que sa

    Cordialement Baxter

  8. #8
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Les vecteur c'est parce que les valeurs de la personne présentant le problème été stocké dans un vecteur, mais si tu les as stocké autre par, tu modifie en fonction de tes besoins

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bon, j'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                    SeriePH->ParentChart = ChartPH;
    		SeriePH->ParentChart->AllowPanning;  // Autorise le déplacement
     
    		SeriePH->ParentChart->AllowZoom; // Autorise le zoom 
     
    		SeriePH->AddXY((Colonnes(Fichier->Strings[5])) , Tab[0], "Valeur", clRed);
    Et j'ai l'erreur "Valeur de type void pas autorisée".
    En X je voudrai le numéro de la ligne du fichier, et en Y la colonne (ici première colonne) de cette même ligne.


  10. #10
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    AnsiString asTMP;
    for(int i=0; i< iNbrLigne; i++)
    {
               asTmp = "Valeur " + IntToStr(i);
               SeriePH->AddXY(i , Tab[0], "Valeur ", clRed);
    }

    quelque chose comme sa ?

    Cordialement Baxter

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Oui, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                   AnsiString asTMP;
     
    		for(int i=3; i< Fichier->Count; i++) {
     
    		   asTMP = "Valeur " + IntToStr(i);
    		   SeriePH->AddXY(i , Tab[0], "Valeur ", clRed);
     
    		}
    Ça fonctionne mais ça me donne un graphe avec le calcul de la moyenne des valeurs. Henderson m'avait passé cette fonction et je pense qu'il faut changer (ou plutôt rajouter) des choses pour afficher les valeurs du fichiers et pas la moyenne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    void __fastcall TFormClient::Colonnes(AnsiString Chaine)
    {
     
     
    	Chaine.Trim();
    	AnsiString Nombre;
    	int d = 0;
     
    	// Balayage pour TabMoy
    	int p = Chaine.Pos(" ");
     
    	while(p != NULL) {
     
    		Nombre = Chaine.SubString(1, p);
    		Tab[d] += Nombre.ToDouble();
    		d++;
    		Chaine = Chaine.SubString(p+1, Chaine.Length());
    		p = Chaine.Pos(" ");
     
    	}
    	Tab[d] += Chaine.ToDouble();
     
    }
    Pouvez vous aussi m'aider à commenter les lignes de cette fonction car je ne les comprend pas toutes ?

  12. #12
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    void __fastcall TFormClient::Colonnes(AnsiString Chaine)
    {
     
                 //enleve les espaces de trop
    	Chaine.Trim();
    	AnsiString Nombre;
    	int d = 0;
     
    	// Balayage pour TabMoy
                 //index du premier espace
    	int p = Chaine.Pos(" ");
     
                  //tan que on trouve des espaces
    	while(p != NULL) {
     
                              //extraction du premier nombre  (debut au premier espace)
    		Nombre = Chaine.SubString(1, p);
                              //stockage de la valeur
    		Tab[d] += Nombre.ToDouble();
    		d++;
                              //on enleve le nombre qu'on a deja extrait
    		Chaine = Chaine.SubString(p+1, Chaine.Length());
                              //on cherche le prochain espace
    		p = Chaine.Pos(" ");
     
    	}
                  //on stoke le dernier nombre
    	Tab[d] += Chaine.ToDouble();
     
    }

    voila je croie que c'est a peu pré sa

    Cordialement Baxter

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Ok merci Baxter.

    J'ai une autre question, mon programme fonctionne, mais j'ai fait deux fonctions :
    la première pour la moyenne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    void __fastcall TFormClient::ColonnesMoy(AnsiString Chaine)
    {
     
    	// Enlève les espaces de trop
    	Chaine.Trim();
    	AnsiString Nombre;
    	int d = 0;
     
    	// Index du premier espace
    	int p = Chaine.Pos(" ");
    	// Tant que l'on trouve des espaces
    	while(p != NULL) {
    		// Extraction du premier nombre  (début au premier espace)
    		Nombre = Chaine.SubString(1, p);
    		// Stockage de la valeur
    		TabMoy[d] += Nombre.ToDouble();
    		d++;
    		// On enlève le nombre qu'on a déjà extrait
    		Chaine = Chaine.SubString(p+1, Chaine.Length());
    		// On cherche le prochain espace
    		p = Chaine.Pos(" ");
     
    	}
    	// On stoke le dernier nombre
    	TabMoy[d] += Chaine.ToDouble();
     
    }
    Et la deuxième pour juste balayer les valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    void __fastcall TFormClient::ColonnesGraph(AnsiString Chaine)
    {
     
    	// Enlève les espaces de trop
    	Chaine.Trim();
    	AnsiString Nombre;
    	int d = 0;
     
    	// Index du premier espace
    	int p = Chaine.Pos(" ");
    	// Tant que l'on trouve des espaces
    	while(p != NULL) {
    		// Extraction du premier nombre  (début au premier espace)
    		Nombre = Chaine.SubString(1, p);
    		// Stockage de la valeur
    		TabGraph[d] = Nombre.ToDouble();
    		d++;
    		// On enlève le nombre qu'on a déjà extrait
    		Chaine = Chaine.SubString(p+1, Chaine.Length());
    		// On cherche le prochain espace
    		p = Chaine.Pos(" ");
     
    	}
        // On stoke le dernier nombre
    	TabGraph[d] = Chaine.ToDouble();
     
    }
    N'y a t'il pas un moyen pour optimiser ceci ? Mettre ces deux fonctions en une seule ?


  14. #14
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    ben moi perso la fonction moyenne jla comprend pas

    je ne vois nul part ou est fais la division

    et je pensais que tu voulais faire la moyenne de la premiere valeur de chaque ligne

    et en regardant sa, pour moi sa fais pas sa...

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    non mais oui car je la fait quand j'appui sur le bouton ouvrir le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    // Ligne par ligne
    		for(int i = 3; i < Fichier->Count ; i++) {
     
    			ColonnesMoy(Fichier->Strings[i]);
     
    		}
     
     
    		// Moyenne des colonnes
    		for(int i = 0; i < 4; i++) {
     
    			TabMoy[i] = TabMoy[i] / (Fichier->Count-3);
     
    		}
     
    		// Affichage des différentes moyennes
    		FormClient->EditPH->Text = FormatFloat("0.000",TabMoy[0]) ;
    		FormClient->EditConductivite->Text = FormatFloat("0.000",TabMoy[1]) ;
    		FormClient->EditTemperature->Text = FormatFloat("0.000",TabMoy[2]);
            FormClient->EditOxygene->Text = FormatFloat("0.000",TabMoy[3]);
    Je sais pas ce qui serait le plus propre à faire ?

  16. #16
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Il est vrai que la division devrait être fait dans la fonction puisque celle-ci s'appelle ColonnesMoy et que pour calculer une moyenne il faut une division, mais la manière dont la fonction est faite empêche cela.
    Sinon je te propose cette fonction qui te fait les deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    void __fastcall TFormClient::Colonnes(AnsiString Chaine)
    {
     
        // Enlève les espaces de trop
        Chaine.Trim();
        AnsiString Nombre;
        int d = 0;
     
        // Index du premier espace
        int p = Chaine.Pos(" ");
        // Tant que l'on trouve des espaces
        while(p != NULL) {
            // Extraction du premier nombre  (début au premier espace)
            Nombre = Chaine.SubString(1, p);
            // Stockage de la valeur
            TabMoy[d] += Nombre.ToDouble();
                    TabGraph[d] = Nombre.ToDouble();
            d++;
            // On enlève le nombre qu'on a déjà extrait
            Chaine = Chaine.SubString(p+1, Chaine.Length());
            // On cherche le prochain espace
            p = Chaine.Pos(" ");
     
        }
        // On stoke le dernier nombre
        TabMoy[d] += Chaine.ToDouble();
        TabGraph[d] = Chaine.ToDouble();
    }

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Je vous dit grand merci à tous pour vos conseils


    A très bientôt, bon weekend pour certains, et bon courage pour d'autres !


    A+


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment tracer une courbe sur linux en fortran 90
    Par supraconductivité dans le forum Linux
    Réponses: 2
    Dernier message: 05/02/2008, 12h01
  2. comment tracer une courbe avec gtk
    Par killer_instinct dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 01/10/2007, 22h53
  3. Réponses: 9
    Dernier message: 17/09/2007, 10h03
  4. Réponses: 7
    Dernier message: 01/04/2007, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo