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

  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 001
    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 001
    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 001
    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 001
    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 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    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 !

  7. #7
    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
    Bonsoir,

    Je tiens déjà à vous remercier de vos réponses, car elles me sont très utiles!

    @ShaiLeTroll Le lisRs pour la RS232, cette fonction sert à lire les caractères reçus dans le tampon de réception via la liaison RS232. Et les caractères lus peut être reutiliés après. Je sais pas si tu vois ce que je veux dire.. Je ne comprends pas comment changer de protocole et de passer du protocole COM à IP

    @PocoYote Oui c'est bien sa que j'avais besoin, je comprends mieux comment utiliser les vectors! Merci beaucoup!

    @henderson Merci pour ta proposition, elle me sera très utile. Je vais essayer aussi!

    Je vous tiendrai au courant de mon avancement.

    Merci d'avance pour vos réponses!

    Cordialement.

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Salut,
    Citation Envoyé par henderson Voir le message
    Salut !

    On peut aussi dériver de TComboBox ce qui permet de visualiser les stations de radio.
    Hummm... oui, mais non...

    TComboBox est un composant graphique, ce qui fait qu'il intervient dans la partie visuelle.

    Du coup, il est en effet tout à fait possible de dériver de TComboBox pour l'affichage, car cela pourrait rendre d'énormes services lorsqu'il s'agira... d'afficher et de sélectionner les différentes fréquences.

    Par contre, pour tout ce qui a trait à la partie métier ou à la partie controleur, ce serait vraiment une très mauvaise idée

    Essentiellement parce que cela risque de t'obliger à transmettre ton objet dérivé à un tas d'endroits où seul le contenu serait intéressant, en augmentant fortement le couplage qu'il peut y avoir entre les différents éléments, et en forçant l'utilisateur à accéder au données de l'objet dérivé alors que la seule chose qui devrait nous intéresser dans cet objet est... l"index de l'élément sélectionné (plus quelques événements liés au changement d'index).

    L'idéal me semble donc d'avoir une structure qui représente les données manipulables par la partie métier et par le "contrôleur", quitte à avoir aussi un objet dérivé de TComboBox, mais dont l'utilisation serait exclusivement réservé à la vue
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 001
    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 001
    Par défaut
    Citation Envoyé par Wedge156 Voir le message
    ... Je ne comprends pas comment changer de protocole et de passer du protocole COM à IP
    c'est purement théorique, c'est pour te forcer l'imagination pour séparer la partie protocol du reste, c'est en ce posant ce genre de question que l'on peut voir ce qui peut être réutilisable et isoler dans une classe

    Citation Envoyé par Wedge156 Voir le message
    @PocoYote Oui c'est bien sa que j'avais besoin, je comprends mieux comment utiliser les vectors! Merci beaucoup!
    Semble ma réponse concernant __property PreSets[] et TStrings ne t'a pas inspiré contrairement au code PocoYote mais c'est que j'ai tenté de t'expliquer, pas suffisamment clair

    Sinon pense à la comme l'article Comment créer et utiliser un tableau avec std::vector ?

    Citation Envoyé par Wedge156 Voir le message
    @henderson Merci pour ta proposition, elle me sera très utile. Je vais essayer aussi!
    Citation Envoyé par koala01 Voir le message
    Par contre, pour tout ce qui a trait à la partie métier ou à la partie controleur, ce serait vraiment une très mauvaise idée
    Entièrement d'accord avec koala01, surtout ne suis pas ce MAUVAIS exemple, pas de séparation entre le métier et l'IHM c'est surement la plus grande erreur à commettre !
    A ne surtout pas reproduire ! A l'école on apprend en générant le Modèle-Vue-Controleur un héritage de TComboBox est à l'encontre de ces principes !

    Là c'est zéro-réutilisabilité, on voudrait afficher les radio dans une TListBox ou un TTrackBar, il faudrait tout recoder à chaque fois, très maladroit !


    @henderson, quel est l’intérêt de fournir un code complet (et faux) à Wedge156 qui est étudiant, ce n'est pas lui rendre service, il faut lui laisser chercher, il apprendra bien plus !

    Surtout que le tableau Frequency ne reste pas en phase avec l'utilisation de Sorted, il faudrait utiliser le retour de Add pour avoir le bon indice et non Count !
    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

  10. #10
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Pour la liste et les tableaux, il y a d'autres possibilités surtout si on passe par __property .

    Par exemple chez moi (sans rien montrer... jTuner *Tuner, doté d'une TList, ne fait que dériver de TComponent):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tuner->Add("Shaka Ponk", 100.0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tuner->Frequency[ "Shaka Ponk" ] = 101.6;
    Panel1->Caption = Tuner->Frequency[ "Shaka Ponk" ];
    Ici ce qui vaut pour le tableau des fréquences vaut aussi pour celui des noms de stations (via leur fréquence).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Panel2->Caption = Tuner->Caption[ 101.6 ];
    Bien entendu, en terme d'écriture, c'est une astuce qui ne repose que sur un mécanisme développé dans les setter et getter des propriétés, histoire de faire abstraction de l'index !

    Testé sur BCB3 Pro et Windows XP !

    A plus !

  11. #11
    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
    Bonsoir,

    Merci à vous pour les conseils!

    Mais en relisant l'article "Comment créer et utiliser un tableau avec std::vector ? "
    Je n'ai pas compris comment utiliser les fréquences que l'on met dans les vectors.

    En effet avec la proposition de PocoYote j'ai fait cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     std::vector<Radio> radios;
        radios.push_back(Radio("Horizon", 88400));
        radios.push_back(Radio("Funradio", 101900));
    Mais par la suite comment les utiliser?
    Je veux dire avec ma fonction fréquence(), je dois envoyer la fréquence à la radio, mais dois-je prendre le nom ? par exemple "virgin"? ou je peux prendre la fréquence directement.

    Sachant que dans mon projet je dois me mettre dans la peau de l'utilisateur, et je dois faciliter mon application pour ce dernier.

    Je veux dire par là, l'utilisateur peut connaitre le nom de la station mais pas la fréquence.. Je sais pas si vous voyez ce que je veux dire..


    Je ne demande pas que vous me fassiez le boulot ^_^, car mon projet m'intérresse, mais je veux simplement mieux comprendre les vectors à travers vos exemples!

    Merci d'avance pour vos réponses!

    Cordialement

  12. #12
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 123
    Par défaut
    Question : pourquoi ne pas ajouter la fonction >void SendDSP()< directement à la classe Radio ?

    Un vector est un tableau. Si l'utilisateur connait seulement le nom de la radio, il faut parcourir le tableau pour trouver la fréquence (= pour trouver l'objet radio).
    Tu pourrais créer une classe Radios qui stocke la liste des radios et facilite l'accès aux Radio(s)...

    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
    class Radios
    {
       ...
    public:
       Radios();
     
       ...
       void Add(const Radio&); //ajoute une radio à la liste
       void SetDSPVolume(int value);
     
       ...
       const Radio* GetFirst() const; //retourne la première radio
       const Radio* GetNext(const Radio& current) const; //retourne la radio suivante 
       const Radio* GetPrevious(const Radio& current) const; //retourne la radio précédente
       const Radio* GetByName(UnicodeString name) const; //retourne la radio suivant le nom
       const Radio* GetByFrequency(int frequency) const; //retourne la radio suivant la fréquence
    };
    Voilà quelques idées. Bon courage

  13. #13
    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
    Bonjour,

    Je n'arrives pas à coincider mes sources avec vos exemples que vous m'avez fournie...

    Voici le source de Tradio.cpp

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <windows.h>
    #include <system.hpp>
    #include "Tradio.h"
     
    int Tradio::frequence(unsigned char msg[]) {
      // Bouml preserved body begin 0001FB8C
    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
      // Bouml preserved body end 0001FB8C
    }
    int Tradio::volume(unsigned char vol[]) {
      // Bouml preserved body begin 0001FC0C
      char v[]="p";
      char n[]="0\r";
      char o[]=" dB\r";
      char chaine[255];
      int rep;
        strcpy(chaine,vol);
        strcat(chaine,o);
        EmetBytes(v,strlen(v));
            while(rep!=13)
                {
                    rep=LisRs();
                }
            Sleep(100);
        EmetBytes(n,strlen(n));
        EmetBytes(chaine,strlen(chaine));
      // Bouml preserved body end 0001FC0C
    }
     Tradio::Tradio():Trscomm(38400,'n',8,1) {
      // Bouml preserved body begin 0001FA8C
     
     
      // Bouml preserved body end 0001FA8C
    }
    Tradio::~Tradio() {
      // Bouml preserved body begin 0001FB0C
      // Bouml preserved body end 0001FB0C
    }
    Le source de Tradio.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef _TRADIO_H
    #define _TRADIO_H
    #include "Trscomm.h"
    class Tradio :public Trscomm  {
     
      public:
        int frequence(unsigned char msg[]);
        int volume(unsigned char vol[]);
         Tradio();
        ~Tradio();
    };
    Le source dans le TForm:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    int test;
    radio = new Tradio;
    test=radio->OuvreRs(4); //Ouvre la voie serie
    if(test==0) // si test=0 alors
        {
            Label1->Caption="Connection établie"; // Marquer dans le label...
            CWButton1->Value=true;
        }
    else // sinon
        {
            Label1->Caption="Erreur de connection";
            CWButton1->Value=false;
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    radio->FermeRs(); // Ferme la voie serie
    delete radio;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
    {
    char b[25];
    int vol;
        vol=0+ScrollBar1->Position*1;
        itoa(vol,b,10);
        radio->volume(b);
        Label2->Caption=b;
    }
    void __fastcall TForm1::CWButton2Click(TObject *Sender)
    {
    char m[]="f";
    char s[]="101900\r";
    int rep;
        radio->EmetBytes(m,strlen(m));
            while(rep!=13)
                {
                    rep=radio->LisRs();
                }
                Sleep(100);
            radio->EmetBytes(s,strlen(s));    
    }
    Tradio est Radio_DSP sur le diagramme.

    Quand je mets dans le .h l'exemple de PocoYote, Builder me dit qu'il y a des déclarations multiples de Radio, donc je ne vois pas comment je peux faire, sachant que pour l'instant tout fonctionne, je veux dire par là, le code de CWButton2 est opérationnel mais d'après le prof c'est trop basique.

    Si vous avez des pistes pour moi ce serai sympa ^^

    Merci d'avance pour vos réponses!

    Cordialement

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