Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : décodage [ Algorithme / Compression, Split & Cryptage ] (youssefmahdia)

jeudi 24 avril 2008 à 16:20:25 | décodage

youssefmahdia

salut les amis,
j'ai un problème,
en fait, je génére aléatoirement une séquence des 0 et des 1.
j'obtiens une séquence de la forme 11010011001010110101010101010101011110110101010101
enfin, des choses comme ça.
après, je veux déterminer à partir de cette séquence une séquence de symbole définie comme suit:

si 0 , le symbole associé est 0
si 11, le symbole associé est 1
si 101 , le symbole associé est 2
si 1001, le symbole associé est 3
donc, par exemple, si je prends la séquence suivante des 0 et 1:    1101011101001010100110110
je dois obtenir          10210302001010.
il s'agit donc d'un traiement par morceau de la séquence des 0 et 1,
j'arrive pas à la faire.
merci pour vos aides.
salut

jeudi 24 avril 2008 à 17:07:15 | Re : décodage

jfrancois

Bonjour,

C'est pas très compliqué ! Voilà un exemple de réalisation :

#include <stdio.h>
#include <string.h>


// ---------------
// Coder la chaîne
// ---------------
const char* Coder
(
    const char* pszEntree // E:chaîne à traiter
   ,char*       pszSortie // S:chaîne traitée
)                         // S:chaîne traitée
{
   const char* pcEntree = pszEntree;
   char*       pcSortie = pszSortie;
   while (*pcEntree)
   {
      if (*pcEntree == '0')
      {
         // --- Ici entrée = '0' --> '0' en sortie
         *pcSortie++ = '0';
         ++pcEntree; // on saute le '0'
         continue;   // on passe à l'entrée suivante
      }

      // --- Ici entrée = '1', tester ce qui suit
      if (*(pcEntree + 1) == '1')
      {
         // --- Ici entrée = '11' --> '1' en sortie
         *pcSortie++ = '1';
         pcEntree += 2; // on saute le '11'
         continue;      // on passe à l'entrée suivante
      }

      // --- Ici entrée = '10', tester ce qui suit
      if (*(pcEntree + 2) == '1')
      {
         // --- Ici entrée = '101' --> '2' en sortie
         *pcSortie++ = '2';
         pcEntree += 3; // on saute le '101'
         continue;      // on passe à l'entrée suivante
      }

      // --- Ici entrée = '100', tester ce qui suit
      if (*(pcEntree + 3) == '1')
      {
         // --- Ici entrée = '1001' --> '3' en sortie
         *pcSortie++ = '3';
         pcEntree += 4; // on saute le '1001'
         continue;      // on passe à l'entrée suivante
      }

      // --- Ici entrée = 1000, rien à faire
      ++pcEntree; // on passe à l'entrée suivante
   }
   *pcSortie = 0; // terminateur
   return pszSortie;
}


// -------------------
// Fonction principale
// -------------------
int main()
{
   const char* szChaine = "1101011101001010100110110";
   char szResultat[32];

   printf("%s --> %s\n",szChaine,Coder(szChaine,szResultat));
   return 0;
}

Ce qui donne :

1101011101001010100110110 --> 10210302001010

Jean-François


jeudi 24 avril 2008 à 17:30:05 | Re : décodage

youssefmahdia

salut monsieur,
merci pour toute cette explication,
mais, monsieur, la suite des 0 et 1 n'est pas une chaine de caractère, elle est obtenue en générant aléatoirement une séquence des 0 et 1.
en fait, ceci se fait à l'aide des lignes de code suivantes


#define dim 100     //par exemple
int tab[dim];
 for(i=0;i<dim;i++)
tab[i]=rand()%2;

ainsi, je vais obtenir un tableau des entiers mais dont chaque case contient 0 ou 1.
mon problème c'est ce que je viens de poser.
comment traduire  cette séquence d'entiers (0 et 1)  en une autre séquence (0 et 1 et 2 et 3 ) en respectant l'aasociation suivante

0--------->0
1---------->11
2----------->101
3----------->1001.

je vous remercie monsieur une autre fois.
salut


jeudi 24 avril 2008 à 17:51:26 | Re : décodage

jfrancois

Voilà avec des entiers en entrée et en sortie :

#include <stdio.h>
#include <string.h>


// ------------------------------
// Séquencer un tableau d'entiers
// (qui sont des booléens)
// ------------------------------
// {0}       --> 0
// {1,1}     --> 1
// {1,0,1}   --> 2
// {1,0,0,1} --> 3
// ------------------------------
int Sequencer
(
    const int* paiEntree // E:tableau d'entiers
   ,int        iLongueur // E:nombre d'entiers en entrée
   ,int*       paiSortie // S:tableau d'entiers
)                        // S:longueur de la sortie
{
   int iSortie = 0;
   for (int iEntree=0 ; iEntree<iLongueur ; ++iEntree)
   {
      if (paiEntree[iEntree] == 0)
      {
         // --- Ici entrée = 0 --> 0 en sortie
         paiSortie[iSortie++] = 0;
         continue; // on passe à l'entrée suivante
      }

      // --- Ici entrée = 1, tester ce qui suit
      if (paiEntree[iEntree + 1] == 1)
      {
         // --- Ici entrée = 11 --> 1 en sortie
         paiSortie[iSortie++] = 1;
         iEntree += 1; // on saute le 11
         continue;     // on passe à l'entrée suivante
      }

      // --- Ici entrée = 10, tester ce qui suit
      if (paiEntree[iEntree + 2] == 1)
      {
         // --- Ici entrée = 101 --> 2 en sortie
         paiSortie[iSortie++] = 2;
         iEntree += 2; // on saute le 101
         continue;     // on passe à l'entrée suivante
      }

      // --- Ici entrée = 100, tester ce qui suit
      if (paiEntree[iEntree + 3] == 1)
      {
         // --- Ici entrée = 1001 --> 3 en sortie
         paiSortie[iSortie++] = 3;
         iEntree += 3; // on saute le 1001
         continue;     // on passe à l'entrée suivante
      }

      // --- Ici entrée = 1000, rien à faire
      ++iEntree; // on passe à l'entrée suivante
   }
   return iSortie;
}


// -------------------
// Fonction principale
// -------------------
int main(void)
{
   const int aiEntree[] = {1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1,0};
   int aiSortie[32];

   int iLongueurEntree = sizeof(aiEntree) / sizeof(int);
   for (int i=0 ; i<iLongueurEntree ; ++i) printf("%d",aiEntree[i]);
   printf(" --> ");

   int iLongeurSortie = Sequencer(aiEntree,iLongueurEntree,aiSortie);
   for (i=0 ; i<iLongeurSortie ; ++i) printf("%d",aiSortie[i]);
   printf("\n");

   return 0;
}


Jean-François


jeudi 24 avril 2008 à 18:03:08 | Re : décodage

youssefmahdia

merci monsieur,
mais je vous ai dit que la séquence est alétoire, elle n'est plus constante, on aurait pu donner la séquence suivante:
111001110101101101010101011101
ou celle ci
1111111111111111111111111111111
ou celle ci 001010101010101101100011001101111111111111110000000000001010111011001101110110
donc, la séquence des 0 et 1 est aléatoire mais on connait seulement sa taille (dimension du tableau contenant les 0 et 1).
je veux que votre programme associe à chaque séquence (aléatoirement donnée: on me connait pas d'avance) une suite des 0,1,2,3 appropriée.
j'espère que vous avez compris maintenant la problème.
désolé pour le dérangement.
merci beaucoup

jeudi 24 avril 2008 à 18:13:21 | Re : décodage

jfrancois

Ca n'a rien à voir avec le séquençage à réaliser !

C'est à vous de renseigner le tableau d'entier dans la fonction main() avec ce que vous voulez traiter. Je n'y ai mis que les données de l'exemple cité. En ajoutant la génération aléatoire, la fonction principale devient :

int main(void)
{
   #define dim 100 // par exemple
   int tabEntree[dim],tabSortie[dim];
   for (int i=0 ; i<dim ; ++i) tabEntree[i] = rand() % 2;

   for (i=0 ; i<dim ; ++i) printf("%d",tabEntree[i]);
   printf(" --> ");

   int iLongeurSortie = Sequencer(tabEntree,dim,tabSortie);
   for (i=0 ; i<iLongeurSortie ; ++i) printf("%d",tabSortie[i]);
   printf("\n");

   return 0;
}


Jean-François


jeudi 24 avril 2008 à 18:25:19 | Re : décodage

youssefmahdia

merci beaucoup monsieur.
je vous remercie indéfiniment.
une autre fois merci.
cordialement youssef



Cette discussion est classé dans : séquence, associé, symbole, décodage


Répondre à ce message

Sujets en rapport avec ce message

Symbole de PI [ par boun85 ] J'aimerai savoir comment faire pour afficher le symbole de PI à l'écran?Merci d'avance dernoière chance [ par skone007 ] J'ai demandé à de multiple programmeur et aucun n'as reussie tous on abandoner ou par un harsard il ce sont deconnercter alors AIDER MOI <im Compil ATL [ par hm1964 ] Je m'arrache les cheveux avec le pblm suivant :je cherche à compiler le programme VMRPip9 (exemple directshow) et j'ai un souci avec le link : il ne t comment faire de la transparence en c++ [ par ero_senin ] salut à ts, voici mon probléme j'aimerai superposer 2 fénêtre l'une avec une vidéo et l'autre avec des symbole . mon probléme est au nivo de la superp symbole externe non résolu 'symbole' référencé dans la section 'fonction' [ par bibifinal ] Bonjour tout le mondecomme le nom l'indique j'ai un probleme avec casymbole externe non résolu 'symbole' référencé dans la section 'fonction'quand j'a decoupage par delimitation [ par sheorogath ] bjr a tous,je voudrai savoir si un fonction equivalente a StringTokenizer de java existye en cppa savoir que cette fonction permet de decomposer une c Je ne sais plus bien caster des pointeurs 'universels' [ par LiBe444 ] Bonjour, dans l'en tête tads.h, j'utilise une fonction en préprocession de la forme   #define VAL(a)(a.type==EK_ENTIER ? *(int*)a.valeur : (a.type==E Comment retrouver le programme associé avec l'extension d'un fichier [ par Alcantornet ] Bonjour, J'aimerais savoir comment retrouver le chemin de l'éxecutable associés avec une extension. J'aimerais une fonction du style GetAssocExe(".t Charger une icône en fonction du pack associé [ par MasterShadows ] Salut à toutes et à tous,j'expose mon problème, je suis en train de travailler sur une nouvelle version de mon packer mais voilà mon problème; suivant Timer...? [ par dbiare ] Bonjour Je veux déclencher un timer sous Visual C++6. Je vais dans l’onglet Resource View de l’espace de travail, click droit sur xxxResources et séle


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.