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