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 :

Probl�me de choix entre vectors ou liste


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2013
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par d�faut Probl�me de choix entre vectors ou liste
    Bonjour,

    Avant de commencer, j'esp�re que je suis dans la bonne section.
    Je me diriges vers vous, car je ne trouves pas de solutions � mon probl�me pour mon projet. Ma partie consiste � commander une radio_DSP et un afficheur alpha.
    Pour la radio, je dois envoyer une fr�quence ou changer le volume. Cette radio se branche sur USB, mais elle est reconnue comme port COM 4 (port com virtuel). Pour cela, j'utilise la classe de la liaison s�rie rscomm (OuvreRs, FermeRS etc...) Pour envoyer une fr�quence simple j'y suis arriv�. J'ai cr�e une classe Radio_DSP qui h�rite de la classe rscomm. Dans la classe Radio_DSP j'ai cr�e une fonction fr�quence: La voici:

    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
    int Radio_DSP::frequence(unsigned char msg[]) {
    char m[]="f";  // déclaration d'un tableau avec f dedans
    char r[]="\r"; // déclaration d'un tableau avec le retour chariot
    char chaine[255]; // déclaration d'un tableau
    int rep;
     
        strcpy(chaine,msg); // met dans le tableau chaine, le tableau msg
        strcat(chaine,r); // met au bout du tableau chaine, ce qui a dans le tableau r
        EmetBytes(m,strlen(m)); // envoie le tableau m
            while(rep!=13) // tant que rep <> 13 alors
                {
                    rep=LisRs();  // lire ce que la radio nous envoie
                }
                Sleep(100); // dormir 100 ms
        EmetBytes(chaine,strlen(chaine));// envoi le tableau chaine
    }
    Voici comment je l'utilise via le programme principal quand j'appuis sur un bouton:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    {
    char s[]="101900";
    int rep;
            radio->frequence(s);
    }
    Mais cela est trop basique car le prof r�p�te qu'il faut que le code soit r�utilisable. Du coup il m'as impos� d'utiliser des vectors ou listes.
    Voici le diagramme de classe que je dois faire:

    En effet, je dois mettre dans une liste ou un vector le nom et la fr�quence de la station, et je dois chercher cette station, via la fonction chercherfr�quence() et enfin utiliser la fr�quence trouv�e dans la fonction fr�quence().
    Mon probl�me c'est que je ne vois pas comment cr�er et utiliser le vector ou la liste dans deux fonctions diff�rentes malgr�s avoir lu le cour sur la STL.. Et je ne vois pas quoi mettre dans la fonction cherchefrequence()

    Pouvez vous m'aider ?

    Merci d'avance pour vos r�ponses

    Cordialement

  2. #2
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut


    En C++Builder, il existe le type String, AnsiString, UnicodeString ... char[] c'est un peu vieillo ! est-ce une volont� du prof d'utiliser des types de base ?

    De plus, tu parles de std::vector ou std:list de la STL, mais en C++Builder, il existe le TStringList pour stocker des chaines que l'on peut rapider affecter par Assign � une TStrings Items d'un TComboBox ou TListBox

    il existe aussi les __property tu pourrais ainsi faire dans la classe TRadio une propri�t� CurrentFrequency en read write qui permet de changer de station CurrentStation permettrait de lire la station associ� � la fr�quence mais pourquoi pas aussi d'en changer en g�rant une liste de PreSet ou une sorte de RDS avec une propri�t�
    PreSetCount avec un accesseur read int GetPreSetCount()} et une propri�t� tableau PreSets[int Index] avec un accesseur read TStationRadio GetPreSet(int Index)TStationRadio contient une String et une TFrequency
    TFrequency g�re une frequence en format chaine mais pourquoi pas en format Num�rique (entier et flottant), cela serait id�al pour associer un TTrackBar allant de 875 � 1080



    Enfin, finalement, le seul code int�ressant � traduire qui produit la liste est je suppose LisRs et pas de bol, c'est le seul que tu n'as pas fourni !

    frequence() est une fonction int sans return ???
    Aide via F1 - FAQ - Guide du d�veloppeur Delphi devant un probl�me - Pensez-y !
    Attention Troll M�chant !
    "Quand un homme a faim, mieux vaut lui apprendre � p�cher que de lui donner un poisson" Confucius
    Mieux vaut se taire et para�tre idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la m�diocrit� !

    L'exp�rience, c'est le nom que chacun donne � ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2013
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par d�faut
    Merci d'avoir r�pondu � mon post, et d�sol� de n'avoir pas mis les balises pour le code..

    Ce n'est pas une volont� du prof, mais pour ma part j'ai toujours travaill� avec cette variable, donc je l'ai mise!

    Je prends note des informations que tu m'as donn�.

    Pour ce qui est de la fonction LisRs(), qui est dans la boucle Tantque, c'est en faite, quand on envoie � la radio le caract�re F, la radio nous envoie Tune\r. Et donc le LisRs() est utiliser pour attendre le \r qui est dans le tampon et d�s que j'ai re�u le \r, je peux lui envoyer la fr�quence souhait�e.

    Voici le code de LisRs:

    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
    #define MAX 500  // 500*2ms=1s de time out environ
    int Trscomm::LisRs()
    {
    	DWORD lus;
    	BYTE car;
        int rep;
     
    	if(hCom!=INVALID_HANDLE_VALUE)
        {
            int n=0;
            while ( NbCarDispo()==0 && n<MAX)
                {
                Sleep(2);
                n++; //attendre  TIME OUT
                }
            if (n<MAX)
                {
        		if (ReadFile(hCom,&car,1,&lus,NULL)==TRUE)
    	    		rep = car;
        		else
    	    		{
    		    	rep= -2;  // erreur ReadFile
    			    }
                }
            else    rep=-5;   // erreur timeOut
        }
    	else	rep= -1;   // erreur port non ouvert
        return rep;
    }
    Je n'es pas pens� de mettre de return dans ma fonction fr�quence() C'est un oublie de ma part.

    J'esp�re que j'ai apport� plus de pr�cisions � mon probl�me.

    Merci d'avance pour vos r�ponses

    Cordialement

  4. #4
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut
    Citation Envoy� par Wedge156 Voir le message
    J'esp�re que j'ai apport� plus de pr�cisions � mon probl�me.
    En fait, pas vraiment, je n'avais pas compris que c'est lisRS au sens RS232 !
    Je ne vois pas o� ton prof souhaite l'utilisation de liste, tu envoies une fr�quence, la radio r�pond ...

    Je pense d�j� que tu devrais s�parer la gestion du protocol ... les \r ...
    Je ferais un objet li� � la communication qui se charge du ReadFile et des boucles d'attente, cet objet sera utilis� par Radio

    Demain, tu souhaites changer le protocole, utilise IP au lieu de COM, tu ne changes pas l'objet Radio mais je juste l'objet interne !
    C'est un pas vers la r�utilisabilit�

    Tu devrais retourner le voir, dis lui que tu ne comprends pas sa demande, il a a pour �a !
    Il est difficile de r�soudre ton probl�me, c'est trop vaste !
    Surtout si tu n'as pas compris sa demande, tu ne peux pas nous l'expliquer et donc on ne peut pas y r�pondre
    Aide via F1 - FAQ - Guide du d�veloppeur Delphi devant un probl�me - Pensez-y !
    Attention Troll M�chant !
    "Quand un homme a faim, mieux vaut lui apprendre � p�cher que de lui donner un poisson" Confucius
    Mieux vaut se taire et para�tre idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la m�diocrit� !

    L'exp�rience, c'est le nom que chacun donne � ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre confirm�
    Inscrit en
    Ao�t 2010
    Messages
    123
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2010
    Messages : 123
    Par d�faut
    Pour le choix entre list ou vector (performances modifications/acc�s), �a n'a pas vraiment d'importance pour ton projet (il me semble)... tu pourrais faire un truc de ce genre (si j'ai bien compris):

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Radio {
       ...
    public:
       Radio(UnicodeString name, float frequency);
       UnicodeString GetName() const;
       float GetFrequency() const;
       ...
    };
     
    std::vector<Radio> radios;
    radios.push_back(Radio("Rmc", 101.5));
    radios.push_back(Radio("Virgin", 102.0));
    ...

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    On peut aussi d�river de TComboBox ce qui permet de visualiser les stations de radio.

    La classe :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class jRadio : public TComboBox
    {
    private :
    double Frequency[256];
    public :
     
        __fastcall jRadio(TComponent *AOwner, TWinControl *AParent);
        __fastcall ~jRadio();
     
        void __fastcall Add(AnsiString ACaption, AnsiString AFrequency);
        void __fastcall Add(AnsiString ACaption, double AFrequency);
     
        void __fastcall AOnClick(TObject *Sender);
    };
    Les m�thodes :

    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
    32
    33
    34
    __fastcall jRadio::jRadio(TComponent *AOwner, TWinControl *AParent)
        : TComboBox(AOwner)
    {
    Parent = AParent;
    OnClick = AOnClick;
    }
    //---------------------
    __fastcall jRadio::~jRadio()
    {
    }
    //---------------------
    void __fastcall jRadio::Add(AnsiString ACaption, AnsiString AFrequency)
    {
    Add(ACaption, AFrequency.ToDouble() );
    }
    //---------------------
    void __fastcall jRadio::Add(AnsiString ACaption, double AFrequency)
    {
    Sorted = false; // << pour traiter le dernier entré
    Items->Add(ACaption);
    int i = Items->Count-1;
    Frequency[ i ] = AFrequency;
    Items->Objects[ i ]= (TObject*)&Frequency[ i ];
    Sorted = true; // << on peut trier
    }
    //---------------------
    void __fastcall jRadio::AOnClick(TObject *Sender)
    {
    if(ItemIndex < 0) return;
    double d = *(double*)Items->Objects[ItemIndex];
    Form1->Panel1->Caption =  FloatToStr(d) + " MHz";
    // Todo : d ==> Afficheur 7 segments
    //        d ==> TUNER USB
    }
    Son usage (juste pour montrer quelque chose):

    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
    // TPanel *Panel1 sur la fiche Form1
    jRadio *Radios;
     
    //--------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    // fréquence passée par double
    Radios = new jRadio(this, this);
    Radios->SetBounds(10, 30, 150, 21);
    Radios->Add("Caroline", 90.5);
    Radios->Add("Baby Rock", 91.3);
    Radios->Add("Hot Metal", 92.7);
    Radios->Add("Nostalgie", 93.2);
    Radios->Add("Nrg", 100.4);
    Radios->Add("Fr Culture", 102.6);
    Radios->Add("Europe 1", 97.8);
     
    // fréquence passée par texte
    Radios->Add("Fr Info", "105,5");
    Radios->Add("RMC", "99,1");
    }
    D�velopp� avec BCB3 Pro et Windows XP

    A plus !

Discussions similaires

  1. choix entre tableau dynamique et liste chain�e
    Par siempre dans le forum D�buter
    R�ponses: 3
    Dernier message: 16/02/2010, 12h27
  2. probl�me de synchronisation entre 2 listes (s:select) !
    Par adilensa dans le forum Struts 2
    R�ponses: 3
    Dernier message: 16/05/2009, 20h22
  3. Probl�me de choix entre des API SNMP
    Par 01211983 dans le forum API standards et tierces
    R�ponses: 0
    Dernier message: 29/03/2009, 13h10
  4. R�ponses: 1
    Dernier message: 08/05/2008, 23h00
  5. difference entre vector, deque, list et tableau
    Par salseropom dans le forum SL & STL
    R�ponses: 8
    Dernier message: 03/01/2005, 13h35

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