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++ Discussion :

Comment inverser les cases d'un tableau


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de FryHandiz
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2016
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 26
    Par d�faut Comment inverser les cases d'un tableau
    Bonjour,

    Je reviens pour une question assez stupide mais... �tant donn� que je suis d�butante, je gal�re un peu !
    Alors, je vais vous expliquer ce que je souhaiterais faire.

    J'ai une suite de lettres, une lettre est "cod�e" par deux bits. Donc je me retrouve avec 4 lettres dans chaque octet.
    Donc j'ai mon octet 0 (ATCG), mon octet 1 (CTTA) et mon octet 2 (AATT)
    ATCG CTTA AATT
    Je souhaite obtenir ma suite de lettre mais invers�e.
    TTAA ATTC GCTA

    Premier souci :
    Vu que je suis une quiche, pour le moment, j'ai juste r�ussi � inverser mes octets et obtenir �a :
    AATT CTTA ATCG
    Mais �a ne marche que pour des multiples de 4.
    Par exemple avec �a :
    ATCGCTTAAAT
    J'obtiens �a :
    AATACTTAATC
    Mon G disparait et me laisse place � un A.

    Voici ma boucle for :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    size_t longueur_tab = (longueur/4 + (longueur%4 !=0)), temp = 0;
        for (size_t i = 0 ; i < (longueur_tab/2) ; i++){
        	temp = tab[i];
            tab[i] = tab[longueur_tab - i -1];
            tab[longueur_tab - i - 1] = temp;
    	}
    longueur : est la taille de ma s�quence de A,T,C,G

    Donc je suppose qu'en fait, �a va me prendre mes lettres par groupe de 4 comme �a :
    ATC GCTT AAAT et pas comme �a ATCG CTTA AAT
    Que puis-je faire du coup...?


    Deuxi�me souci :
    Comment obtenir : TAA ATTC GCTA
    Si je ne dis pas de sottise, je crois que je dois manipuler les bits en utilisant <<
    Mais je ne vois pas trop comment faire �a, du moins, la logique utilis�e.
    Mais �a, on n'y est pas encore
    Si jamais vous avez des liens vers ce genre de choses qui semblent assez rudimentaires, je prends.

    Et merci d'avance pour votre aide !

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Le plus s�r, c'est d'isoler chaque composant avec les op�rateurs bitwise, puis les remettre dans l'ordre inverse:
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unsigned char inverseParDeux(unsigned char entree)
    {
    	unsigned char duo0 = (entree >> 0) & 0x03;
    	unsigned char duo1 = (entree >> 2) & 0x03;
    	unsigned char duo2 = (entree >> 4) & 0x03;
    	unsigned char duo3 = (entree >> 6) & 0x03;
     
    	unsigned char sortie = (duo0 << 6) | (duo1 << 4) | (duo2 << 2) | (duo3 << 0);
    	return sortie;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti Avatar de FryHandiz
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2016
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 26
    Par d�faut
    Me frappez pas mais j'ai quelques questions
    Enfin, pour commencer d�j� une. Que fait & 0x03 ? '

  4. #4
    Membre averti Avatar de FryHandiz
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2016
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 26
    Par d�faut
    Et je viens de me rendre compte que ce que j'ai fait ne marche pas si mes lettres ne sont pas un multiple de 4... TT

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    & c'est l'op�rateur binaire ET bitwise, et 0x03 �a veut dire que seuls les deux bits de poids faible sont � 1. Donc, �a met tous les autres bits � z�ro.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti Avatar de FryHandiz
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2016
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 26
    Par d�faut
    Mmmh d'accord. Bon, finalement j'ai �dit� mon premier poste car je bloque un peu d�j� dans ma premi�re �tape >.<

  7. #7
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Hello,

    pour inverser les bits d'un octet, parcours-les du dernier au premier
    � vue de nez, ceci devrait marcher
    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
    #include <climits>
    #define GET_BIT(o,x) ((o) & (1<<(x)))
    #define INNER_CLEAR_BIT(o,x) (o & ~(1<<x))
    #define INNER_SET_BIT(o,x) (o | (1<<x))
    #define SET_BIT(o,x,b) o = (b) ? INNER_SET_BIT(o,x) : INNER_CLEAR_BIT(o,x)
     
    unsigned char reverse(unsigned char c)
    {
    	char r = 0;
    	for ( unsigned int i = 0; i < CHAR_BIT; ++i )
    	{
    		SET_BIT(r, i, GET_BIT(c, CHAR_BIT - i - 1));
    	}
    	return r;
    }
    Et si tu veux remplacer l'unsigned char par n'importe quel autre type, suffit d'adapter avec un sizeof
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

Discussions similaires

  1. Inverser les bits d'un entier (mirroir)
    Par Raikyn dans le forum D�buter
    R�ponses: 8
    Dernier message: 04/03/2012, 14h08
  2. R�ponses: 3
    Dernier message: 12/01/2011, 11h51
  3. R�ponses: 19
    Dernier message: 17/01/2008, 23h43
  4. comment restaurer les bits du registre ISR au niveau du PIC
    Par amaradelll dans le forum Composants
    R�ponses: 1
    Dernier message: 23/02/2007, 18h33
  5. R�ponses: 7
    Dernier message: 14/02/2006, 16h55

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